[Советник] Forex Setka Trader Mod и [EA]-Setka📌

От ApMSoft, 24 августа, 2012 в Лаборатория ProfitFX

#13816
42 минуты назад, Rigal сказал:

Так вот.

Я ее, конечно, прицепил, но проку вам от нее мало - потому, что она цепляет еще десяток библиотек по цепочке.

 

На сегодняшний день, если я внесу некое изменение в эту библиотеку (из недавних - пересчет TickValue  из открытых позиций), я могу просто ткнуть кнопу скомпилировать в десятке советников. То есть, каждая следующая сборка каждого советника получит эти изменения.

 

А теперь давайте представим, что я изолировал открытый код, скажем, челленджера, и выложил его.

Теперь оно все является изолированным набором - в который, к слову, мне еще придется попотеть, чтобы подтянуть все зависимости, некоторые из них в прошлом декабре написаны.

Теперь мне нужно следить, чтобы версии лежали отдельным полным набором кода.

Чтобы правки, которые я вношу в код одного советника, багфиксы и прочее - вносились бы в код другого.

Если я что-то допишу новое, оно больше не будет появляться в каждом моем советнике автоматически - мне нужно явно это все протаскивать и следить за этим.

Да, есть такая проблема, если использовать ООП.

Вы где то выкладывали открытый код своего советника? С библиотеками и тд. Интересно посмотреть как все построено.

Очень нравится ваш подход, особенно радует то что если 1 раз попотеть, то в будущем новые роботы можно собирать как конструкторы, и все будет грамотно и быстро.

Я пока в основном использую функции с https://www.mql5.com/ru/forum/131859 , никак не найду время что бы сделать на их основе несколько библиотек. Поэтому был бы очень благодарен, если дадите пример как все реализовано в боевом варианте. 

 

48 минут назад, Rigal сказал:

Мне придется ввести структуру веток в моем репозитории github, выработать процесс интеграции кода и все такое.

Вы пробовали использовать mql5 storage? Довольно удобно с ним работать в редакторе. Так же там можно создать публичный проект и поделится ним (на счет этого могу ошибаться, не проверял)

#13817
41 минуту назад, pavlus777 сказал:

Вам не кажется, что эта ветка не очень продуктивна ? 

И лучше потратить силы и время на другие советники, а сетку оставить сеточникам ?

Не нужно Сетку ТЛП мешать с другими (Слово удалено системой) мартинами, имхо. Если на других площадках делают мартин боты с целью поиметь из хомячков партнерки, и даже не прогоняли свои граали в тестере, это не значит что от Сетки стоит ожидать такое же. Уже несколько лет многие форумчаны в этой ветке пытаются поиметь рынок, правда иногда бывает наоборот. Но свет в конце туннеля есть (наверное).

#13818
7 минут назад, ademen сказал:

Вы пробовали использовать mql5 storage? Довольно удобно с ним работать в редакторе. Так же там можно создать публичный проект и поделится ним

ну лучше git сложно придумать.

Он может показаться сложноватым тем, кто с ним не работает каждый день,  но это не я :)

И там хорошо реализована система peer review и прочее.

 

Но опять же, я не спешу никого звать в мой код.

А что касается кода от @Qj- это хороший код квалифицированного программиста на С++ (из которого метаки, судя по всему, построили свой компилятор,  выпилив определенное количество функционала).

У плюсов есть некоторая замороченность на теплейтах, которыми изобилует исходный код сетки.

Оно здорово сокращает усилия по разработке, но сильно снижает читаемость кода.

И поскольку для меня плюсы закончились в 2006м и индустриального опыта у меня на плюсах особо не было,  я с удовольствием поучусь на его коде тут. Может, и у себя что перепилю под новую для меня парадигму.

А в остальном код неплох: разделен, изолирован,  даже настройки все проверяются и пробрасываются сквозь весь код контекстом.

Я, сказать честно, верификацией осмысленности настроек в коде занимаюсь куда более кустарно.

#13819

Вот, ещё 9 месяцев назад, когда я состоял в команде Секты, нами был выявлен этот баг.

Лот 0,01 проходит красиво.

 

Лот 0,02

Bag-1.jpg.6ccc6a9e5e9add59bf19f9a9f1e168fe.jpg

 

Лот 0,05

Bag-2.jpg.a1b05368a8238d7e82449c5dbd5cb576.jpg

 

Хорошо проверяется на этот баг Реинвестом. Всё есть в архиве. Даже GBPCAD на безиндикаторном моде не проходит.

Bag.zip24 скач.

Изменено 5 октября, 2020 пользователем Старик

#13820
2 часа назад, Старик сказал:

Я не думаю, что в реале погрешность выставления ТР меньше 10+- пунктов 5-ти знак...

В боте ж не случайно настройки 4-х знак - большая точность в мартинах в реальности недостижима.

Это имхо, очень зря. Иногда сильно мешает то что тп не меньше 10 пипсов (1 пункта).

Это получается некая "защита от дурака", или вы хотите сказать что погрешность будет всегда минимум +/-10 пипсов?

Вы уже несколько раз писали что точности сильной не будет, правда раньше писали что нужно сделать тестирования максимально наближенным к реальности.

Если слушаться вас что "большая точность в мартинах в реальности недостижима." - получается зря я выкинул деньги на тдс2. можно было и без плавающего спреда, или вообще на котировках от метаквот?

Изменено 3 октября, 2020 пользователем ademen

#13821

Вы прям насыпали сейчас, уважаемый, я даже растерялся...

А причем здесь люфты сетки?

Ну хорошо, давайте отлюфтим один из уровней на пару пипсов в заданном направлении - при этом у одной сетки тейк все равно окажется на те же несколько пятизначных пункта дальше, чем у другой.

Смотрите, вот минлот:

image.thumb.png.dc3933c6e5dca2ebe924738607fe1328.png

А вот 1 лот:

image.thumb.png.190f5d72ce4e2b0dc85b0e0da8347245.png

 

Вы как-то зациклились на том,  что сетка работает неточно на реале.

А я вам совсем не о точности.

 

Я вам о том, что тейк оказывается дальше проектного значения. Дальше, чем он оказался бы при том же люфте и тех же проскальзываниях, но другим лотом.

Таким образом, на том же самом сете, сетка одним лотом - раскроется, а другим - нет. Потому, что лот округлился точнее и тейк оказался дальше.

И вот эта нераскрытая сетка отрастет еще на десять колен и дойдет до стопа - в то время, как у вашего менее опытного коллеги, торгующего минлотом - закроется, даже если все открывалось там же, с теми же проскальзываниями в точности до пяти знаков.

 

#13822

Ну и чтобы снять вопрос о люфтах и прочем - вот те же построения при шаге сетки 50 четырехзначных пунктов - уж коли вы говорите, что сетку с шагом в пять вы строить точно все равно не сможете, давайте уйдем в вашу систему измерений, где четырехзначный пипс туда-сюда не делает погоды.

Я точно также, как и в предыдущем примере, сдвинул третье колено на пару 4-хзначных пипсов из структуры, чтобы сразу вычеркнуть вопрос с "люфтами"

 

Минлот:

image.thumb.png.293b6fdeb3f3b9b0eec32be59c7224bd.png

 

Лот 1

image.thumb.png.28e66d00a722a70a92a51e808d3832ae.png

У этой сетки разницы следующие:

На первом колене: 33 пункта в пользу более точного лота

На втором колене: 39 пунктов

На третьем, сдвинутом: 5 пунктов (за счет сдвига)

На четвертом: 23 пункта

На пятом: 37 пунктов

На шестом: 31 пункт

 

В красных случаях проигрывает сетка более крупным лотом.

Тоже все в пределах допусков и посадок, или уже есть о чем поговорить?

 

Меня, если честно, обескураживает, что вы, с одной стороны, "первого мартина писали в 2008м", а с другой - ввязались в спор о вот такой очевидной вещи и продолжаете отстаивать заведомо проигрышную позицию вместо того, чтобы один раз взять в руки калькулятор.

Изменено 3 октября, 2020 пользователем Rigal

#13823

Для сравнения две таблички опять, шаг 50 пипсов

Верхняя - точно та же математика, что в предыдущих публикациях, то есть в точности то, что сейчас делает советник, минлотом.

В нижнюю я добавил новый параметр, ТестЛот, выставил его в 0.01 и изменил логику точно так, как я изменил ее в выложенных ранее исходниках 1.43. Сетка строится лотом один.

image.thumb.png.89e27ea1c22b43dc1a792b24b51c5759.png

 

Я точно так же сохранил "люфт" третьего колена на 2 пипса в обоих случаях.

 

Сразу пропадают все люфты тейка, как можно видеть.

То есть при таком построении сетки ее геометрия будет идеально соответствовать протестированной - при прочих равных, разумеется.

Вот для сравнения, скажем, "тест" лотом 0.03,  который плохо множится на множитель 1.4 - и торговля лотом 0.18, который делится на 0.03.

image.thumb.png.ca185fa485985a255c4093a9abdc60a0.png

Снова без отклонений.

 

Все это, конечно, не нужно тем, кто тестирует тем же лотом, каким и торгует.

Но любому, кто хочет повысить лот в сетах минлотом в ветке - прибавит уверенности однозначно.

 

#13824

если кому хочется понять математику этих табличек, я с легкостью распишу, я их реально за пять минут в Numbers накидал

#13825
4 минуты назад, Rigal сказал:

если кому хочется понять математику этих табличек, я с легкостью распишу, я их реально за пять минут в Numbers накидал

 

6 минут назад, Rigal сказал:

изменил логику точно так, как я изменил ее в выложенных ранее исходниках 1.43. Сетка строится лотом один.

Если есть время/желания объясните по какому принципу строится сетка с вашим алгоритмом. Читал ваши обсуждения с Стариком выше, но так и не увидел полную картину. Думаю многим будет полезно, если вы объясните что к чему. Конечный итог - сетка не "ломается" при увеличении лота, супер =b

Но хотелось бы понять как это достигнуто. Буду благодарен если сделаете небольшой вывод недавней дискуссии. Тем более там зачищено много, новые читатели могут не все понять.

#13826
8 часов назад, ademen сказал:
10 часов назад, Старик сказал:

Я не думаю, что в реале погрешность выставления ТР меньше 10+- пунктов 5-ти знак...

В боте ж не случайно настройки 4-х знак - большая точность в мартинах в реальности недостижима.

Это имхо, очень зря. Иногда сильно мешает то что тп не меньше 10 пипсов (1 пункта).

Это получается некая "защита от дурака", или вы хотите сказать что погрешность будет всегда минимум +/-10 пипсов?

Вы уже несколько раз писали что точности сильной не будет, правда раньше писали что нужно сделать тестирования максимально наближенным к реальности.

Если слушаться вас что "большая точность в мартинах в реальности недостижима." - получается зря я выкинул деньги на тдс2. можно было и без плавающего спреда, или вообще на котировках от метаквот?

Вам бы всё таки как-то структурировать вопросы...

Можно нумеровать или разделять строками. 

Ну реально не понятно же о чём вы думаете сейчас, что именно имеете в виду и о чем вопрос...

Попробую ответить в общем и, надеюсь, это перекроет то, о чём вы спрашивали без детализации о чем вы конкретно.

 

Исторически был 4-х знак и пипсы (pips) - потом распространился 5-ти знак и стали указывать в пунктах (points).

1 пипс = 10 пунктов.  Это чтобы вы правильно понимали о чем я пишу и порядки цифр.

 

В мт4 без TDS2 невозможна ни разработка сетов, ни адекватное тестирование.  Остальное неприемлемо неточно.

Также отмечу, что совершенно верно действуют парни, оптящие 2-3 года в середине периода в TDS2 + бэк и форвард.

Если вы хоть чем-то из этого занимаетесь в мт4 с целью заработать, то покупка TDS2 оправдана.

 

 

И надо очень четко отличать тестирование и реальные торги, потому что в тестировании все идеально, а в реале люфты.

И в реале торги идут близко к сету, но не в точности, лишь "по мотивам" сета - точнее на хорошем счете и менее похоже на счете качеством похуже. 

Плюс еще и торги разнятся в реале из-за чуть разного потока котировок в разных ДЦ - в каждом ДЦ на разных счетах поток котировок чуть разнится, разнится скорость и точность исполнения приказов бота и разнится построение сеток и математика реальных сеток.

Форекс внебиржевый рынок, единого потока цен/котировок нет, совсем одинаковых торгов нет и не будет.

По этим же причинам не всегда удается повторить в тестах (на котирах Дукаса) ваши торги на котирах Робо, например.

 

Это не плохо и это не хорошо - это то, чем торги в реале в разных ДЦ на разных счетах отличаются и отличались бы в прошлом от идеальных по исполнению тестов (на котировках какого-то из счетов ДЦ Дукаскопи или как там его).

И мартинами некоторые вещи можно легко/хорошо сделать только в тестере и сложно в реале - особенно "скальпинг".

И наоборот, то, на что практически пофиг и хорошо работает в реальных торгах, может показывать стопы в тестере.

 

У нас созданы чудесные аналитические инструменты, которые позволят весьма наглядно видеть насколько торги в реале в среднем и на пиках отличаются от идеальных в тестере (обычно на котирах другого ДЦ).

1) Импортируете в Модель сет и смотрите настройки сета, как сетка должна строиться "без помех" и математику сетки.

2) Потом загружаете в Анализатор статистики сеток Отчет тестера стратегий и смотрите как, по мнению тестера, должны были бы строиться сетки этого сета - причем в прошлом и на котировках мало кем используемого ДЦ.

3) потом загружаете в Анализатор статистики сеток Отчет MyFxBook (или отчет из Истории счета вашего/чужого терминала) реальных торгов тем же сетом и смотрите насколько сетки в реальных торгах в реальном ДЦ отличаются от Модели и тестера!...

 

И через какое-то время вас накрывает - и вы начинаете понимать почему 4-х знака в настройках достаточно и насколько ж реально забавная идея пытаться скальпить микросетками в условиях реальных торгов...

Изменено 4 октября, 2020 пользователем Старик

#13827
В 02.10.2020 в 08:49, Rigal сказал:

А квалификация некоторых участников может быть заметно выше, чем у участников команды - и в этой мысли нет ничего крамольного.

Одна из первых вещей, которой научается успешный руководитель - это умение признать, что вокруг есть куча людей, которые разбираются в чем-то гораздо лучше него самого.

Коллега, когда мы начинали этот проект с Qj, он в тот момент был почти в 3 раза младше меня.

С крохотным допущением он годился мне во внуки...:)

И он тогда был даже еще без диплома программистского колледжа.

Пенсионер и еще недоучившийся студент, никогда не писавший в mql и знающий о форекс из рекламы в Яндекс...

Нормальная команда! :d

 

Но для меня была абсолютно приемлема мысль, что начинающий программист имеет лучшую память, обучаемость, точно не менее меня работоспособен, честолюбив и заинтересован в получении опыта создания серьезного продукта - и может выписать код не хуже, а может и намного лучше, чем я.

И весь период нашего сотрудничества с ним в более чем 2 года я обращался к этому совершенно молодому человеку на Вы, постоянно выражая уважительное отношение к этому реально очень достойному молодому мужчине.

 

Поэтому, если у тебя сложилось впечатление, что мы боимся потерять короны, то нет.

Короны надежно лежат в пыльных коробках в шкафах.   По крайней мере я свою корону постоянно не ношу.:d

Но это коллективная работа: в которой надо учитывать и мнение и настроение работающей команды - и бывают технологические паузы разного характера.

Но на первом месте остается дело и как лучше для него.  Просто не всё бывает удается сделать так быстро и оптимально, как мне хотелось бы и было бы лучше для дела.

 

P.S.  А у тебя есть опыт многолетних проектов с втрое младше тебя людьми/студентами с делегированием людям всех необходимых компетенций и полномочий - и получения де-факто коммерческого продукта на выходе?!

Изменено 4 октября, 2020 пользователем Старик

#13828
4 часа назад, Старик сказал:

А у тебя есть опыт многолетних проектов с втрое младше тебя людьми/студентами с делегированием людям всех необходимых

Я этим профессионально занимаюсь, да. Много лет, на полный рабочий день, за деньги.

#13829
5 часов назад, Старик сказал:

через какое-то время вас накрывает

В этой публикации много эмоционального текста, я не смог вычленить, что вы хотели сказать?

что на реале торгуется иначе мы, вроде все понимаем и уже раз двадцать вы об этом упомянули.

а тейк у одной сетки будет ближе, чем у другой даже на реале.

#13830
9 часов назад, ademen сказал:

 

Если есть время/желания объясните по какому принципу строится сетка с вашим алгоритмом. Читал ваши обсуждения с Стариком выше, но так и не увидел полную картину. Думаю многим будет полезно, если вы объясните что к чему. Конечный итог - сетка не "ломается" при увеличении лота, супер =b

Но хотелось бы понять как это достигнуто. Буду благодарен если сделаете небольшой вывод недавней дискуссии. Тем более там зачищено много, новые читатели могут не все понять.

Математика:

Безубыток позиции по цене (без учета прочих издержек) рассчитывается как сумма произведений цены на обьем, деленная на сумму объемов: (Price1 * Lot1 + Price2 * Lot2 + ... + PriceN * LotN) / (Lot1 + Lot2 + ... + LotN)

 

В первой колонке Lot before rounding = MinLot * Power(Multiplier, Step)

Мое изменение затрагивает только эту колонку:

if(TestLot > 0) {

    Lot before rounding = Round(TestLot * Power(Multiplier, Step), 2) * MinLot / TestLot

} else {

    Lot before rounding = MinLot * Power(Multiplier, Step)

}

 

Это все изменение, которое я предложил.

Это по поводу вот этого изменения мы копья ломаем в этом топике две недели.

 

Остальная математика в таблице:

Lot = Round(Lot before rounding, 2)

Lots total - сумма лотов на текущем шаге (знаменатель формулы расчета безубытка)

Price volume - сумма произведений лотов на цену на текущем шаге (числитель формулы расчета безубытка)

Breakeven = PriceVolume / LotsTotal

TP = Breakeven + TakeProfit

 

Все.

И не слушайте никого, кто рассказывает о том, как сложно считать сетки.

Да, учет свопов и комиссий меняет эту механику, поскольку нужно пересчитывать недистанционные издержки в дистанцию, для этого нужно знать стоимость пункта. 

Это как раз тот нюанс, который в этом советнике не обрабатывается надежно в тестере и на реале - обсуждение деталей того, как это можно реализовать, похоронено десятью страницами ранее.

К слову, реализация этого расчета у меня интегрирована в библиотеку TradeStats, которой я поделился в другом топике.

Но здесь, похоже, не приживется - там заметно больше логики, чем вот в этом фрагменте вверху... судя по текущей динамике, это года три работы и еще страниц двести текста в топике, мне кажется :)

Изменено 4 октября, 2020 пользователем Rigal

#13831
5 часов назад, Старик сказал:

если у тебя сложилось впечатление, что мы боимся потерять короны, то нет.

Старик, мне ваши короны не интересны.

 

Но я потратил полчаса на то, чтобы сделать изменение, и уже часов шесть на расплескивание воды в этом топике.

И вы тоже уже потратили заметное количество времени на все новые и новые опусы здесь.

 

нельзя ли эту неиссякаемую энергию в мирное русло? 

Я полагаю, перенести готовые изменения в существующий код должно занять меньше времени, чем у меня заняло из сделать в незнакомом коде. И поскольку вам они не нужны, судя по всему, вам нужно только собрать версию и выдать ее мне, публично, или в личке.

 

Давайте уже это сделаем - и я сэкономлю еще несколько страниц ненужного никому текста в этом топике?

#13832
В 03.10.2020 в 16:43, ademen сказал:

Да, есть такая проблема, если использовать ООП.

Вы где то выкладывали открытый код своего советника? С библиотеками и тд. Интересно посмотреть как все построено.

Очень нравится ваш подход, особенно радует то что если 1 раз попотеть, то в будущем новые роботы можно собирать как конструкторы, и все будет грамотно и быстро.

Я пока в основном использую функции с https://www.mql5.com/ru/forum/131859 , никак не найду время что бы сделать на их основе несколько библиотек. Поэтому был бы очень благодарен, если дадите пример как все реализовано в боевом варианте. 

Помнишь, Эндрю, ты спрашивал, почему я не использую библиотек и не пишу оные в MQL(4-5), хотя иногда и очень хочется? В своё время умные (даже чересчур) люди объявили Ctrl-C + Ctrl-V плохим паттерном программирования и выписали как лекарство ООП окаянное. С тех пор "делиться исходным кодом" в том понимании, в котором это делали раньше, стало очень трудно, иногда практически невозможно. Коллега @Rigal наверное имел в виду, что то все его проекты, как старые, так и новые - часть некоего "метапроекта" в силу используемой парадигмы . Скорее всего код какого-нибудь советника по объему составляет лишь меньшую часть от всей совокупности используемого кода. Если прибавить к этому неизбежный регулярный рефакторинг, как побочный эффект того же ООП, то ситуация становится совсем грустной. 

Поэтому если уж и просить чем-то поделиться, то делать это в отношении конкретного алгоритма, а не программы целиком. Это намного продуктивнее, ИМХО. Будут готовые процедуры, обёртку из классов уже сделаешь сам, если захочешь-таки штурмовать ООП.

Изменено 4 октября, 2020 пользователем lsv107

#13833
3 часа назад, lsv107 сказал:

Помнишь, Эндрю, ты спрашивал, почему я не использую библиотек и не пишу оные в MQL(4-5), хотя иногда и очень хочется? В своё время умные (даже чересчур) люди объявили Ctrl-C + Ctrl-V плохим паттерном программирования и выписали как лекарство ООП окаянное. С тех пор "делиться исходным кодом" в том понимании, в котором это делали раньше, стало очень трудно, иногда практически невозможно. Коллега @Rigal наверное имел в виду, что то все его проекты, как старые, так и новые - часть некоего "метапроекта" в силу используемой парадигмы . Скорее всего код какого-нибудь советника по объему составляет лишь меньшую часть от всей совокупности используемого кода. Если прибавить к этому неизбежный регулярный рефакторинг, как побочный эффект того же ООП, то ситуация становится совсем грустной. 

Поэтому если уж и просить чем-то поделиться, то делать это в отношении конкретного алгоритма, а не программы целиком. Это намного продуктивнее, ИМХО. Будут готовые процедуры, обёртку из классов уже сделаешь сам, если захочешь-таки штурмовать ООП.

В точку. Я только что в ветке изучения MQL выложил изолированную часть проекта.

Так вот, советник в этом проекте - полный dummy, вот его код:

//+------------------------------------------------------------------+
//|                                         UltronStrategyTester.mq4 |
//|                      Copyright 2020, Igor Ryabchikov (aka Rigal) |
//|                     /profile/109537-rigal/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Igor Ryabchikov (aka Rigal)"
#property link      "/profile/109537-rigal/"
#define VERSION "1.00"
#property version  VERSION
#property strict

#define GUID "93a3f05094424c60b9a9179e332cdf14"

#include "StrategyTester.mqh"
#include <TradingStrategies/UltronTradingStrategy.mqh>

int OnInit() {
   expertFileName  = __FILE__;
   tradingStrategy = new UltronTradingStrategy();
   return(TesterInit("UltronStrategyTester"));
}

 

У меня, конечно,  есть сотня советников, которые совсем другие - к вот этой концепции максимального переиспользования я пришел только когда решил собирать корзинку - в которой, по понятным причинам, требуется определенный уровень унификации.

Но и в них, в этих других советниках уже очень давно используются крупные куски объектами

Такие, как учет позиции, расчеты безубытков, шаг, лот, торговые утилиты, умеющие закрывать разрозненные наборы по встречным ордерам.

Каждый раз все это писать - я бы на эту сотню советников пятилетку потратил :)

#13834
4 часа назад, lsv107 сказал:

Помнишь, Эндрю, ты спрашивал, почему я не использую библиотек и не пишу оные в MQL(4-5), хотя иногда и очень хочется? В своё время умные (даже чересчур) люди объявили Ctrl-C + Ctrl-V плохим паттерном программирования и выписали как лекарство ООП окаянное. С тех пор "делиться исходным кодом" в том понимании, в котором это делали раньше, стало очень трудно, иногда практически невозможно. Коллега @Rigal наверное имел в виду, что то все его проекты, как старые, так и новые - часть некоего "метапроекта" в силу используемой парадигмы . Скорее всего код какого-нибудь советника по объему составляет лишь меньшую часть от всей совокупности используемого кода. Если прибавить к этому неизбежный регулярный рефакторинг, как побочный эффект того же ООП, то ситуация становится совсем грустной. 

Поэтому если уж и просить чем-то поделиться, то делать это в отношении конкретного алгоритма, а не программы целиком. Это намного продуктивнее, ИМХО. Будут готовые процедуры, обёртку из классов уже сделаешь сам, если захочешь-таки штурмовать ООП.

Изменено 4 часа назад пользователем lsv107

Юрий, я думаю где то есть золотая середина. У метаквотам, имхо, ее удалось найти на mql5, когда ты можешь открыть ордер написав только направления и объём. По мт4 тоже нужно иметь универсальную функцию для открытия и модификации ордеров, где будут проверяться все возможные фокусы брокеров. Правда хорошо написанную функцию и скопировать можно, но опять же надо закладки делать, что бы не потеряться в тысячи строк.  

1 час назад, Rigal сказал:

В точку. Я только что в ветке изучения MQL выложил изолированную часть проекта.

Так вот, советник в этом проекте - полный dummy, вот его код:

Мне кажется что у коллеги @Rigalкод больше похожий на модульный, когда есть возможность заменить / поправить любой модуль не нарушая логику других, "разделяй и властвуй".

#13835
8 минут назад, Vanek88 сказал:

приглашаю Вас в свой телеграм чат

Чарли, а не охренел ли ты, беспределец укушатый?!

я тебе поприглашаю!...

#13836
20 часов назад, Rigal сказал:

вам нужно только собрать версию и выдать ее мне, публично, или в личке.

Сделали копи-пасте.

Так как контрольных тестов от вас не было, то и мы не перепроверялись.

Что не так - пишите.

Может и приживется технологическая плюшка для любителей "скачал-поставил-не парюсь".:)

 

P.S.  Данные моды (rm) для тестов коллеги @Rigal.   Для торгов версии бота, выкладывавшиеся ранее.

(EA) - Setka v1.43.295.10.rm-ADX-IMP.ex438 скач. (EA) - Setka v1.43.295.10.rm-ADX-IMP-opt.ex427 скач.

Изменено 5 октября, 2020 пользователем Старик

#13837
3 часа назад, Старик сказал:

Сделали копи-пасте.

Так как контрольных тестов от вас не было, то и мы не перепроверялись.

Что не так - пишите.

Может и приживется технологическая плюшка для любителей "скачал-поставил-не парюсь".:)

 

P.S.  Данные моды (rm) для тестов коллеги @Rigal.   Для торгов версии бота, выкладывавшиеся ранее.

(EA) - Setka v1.43.295.10.rm-ADX-IMP.ex4 906 \u043a\u0411 · 4 загрузки (EA) - Setka v1.43.295.10.rm-ADX-IMP-opt.ex4 377 \u043a\u0411 · 4 загрузки

Спасибо, Старик, но это не все.

 

Я обнаружил, что я внес изменения в режим расчета от первого ордера, но не внес идентичные изменения в режим от последнего ордера.

Не мог бы ты закинуть в calc_lot.mqh вот этот фрагмент, заменить соответствующий метод?

В остальном я проверил, работает так, как я ожидаю.

Заодно убедился, что вот эти правки выдают ожидаемый результат на той версии, которая есть у меня в исходнике.

	static double get_by_last_order ( setting_t *settings,
									  layer_order_setting *settings_ptr,
									  int lvl,
									  enum_gap_control_type control_type,
									  double price,
									  double first_lot ) {
		double result = settings.test_min_lot > DBL_EPSILON ? settings.test_min_lot : first_lot;

		switch ( control_type ) {
			case no_gap:
			case op_stop:
				for ( int i = 1; i < lvl; i++ ) {
					result *= get_factor ( settings, i + 1 );
				}

				break;

			case inc_lot: {
				int count = 0;
				double open_prices[];

				list<order *> *orders = layer_order::get ( settings_ptr );
				ArrayResize ( open_prices, orders.count );
				LIST_FOREACH ( orders, order *, item, {
					count += 1;
					open_prices[count - 1] = item.open_price;
				} );

				if ( count == 0 ) {
					break;
				}

				for ( int i = 1; i < count; i++ ) {
					result = get_for_gap_control ( settings, settings_ptr.order_type, i + 1, result, open_prices[i - 1], open_prices[i] );
				}

				result = get_for_gap_control ( settings, settings_ptr.order_type, count + 1, result, open_prices[count - 1], price );
				break;
			}
		}
      if(settings.test_min_lot > DBL_EPSILON)
         result = first_lot / settings.test_min_lot * NormalizeDouble(result, settings.lot_exp);

		return result;
	}

 

Тестами по-прежнему покрывать не стал, ибо это тебе лишняя работа по включению тестов в сборку.

#13838
10 часов назад, ademen сказал:

Юрий, я думаю где то есть золотая середина. У метаквотам, имхо, ее удалось найти на mql5, когда ты можешь открыть ордер написав только направления и объём. По мт4 тоже нужно иметь универсальную функцию для открытия и модификации ордеров, где будут проверяться все возможные фокусы брокеров. Правда хорошо написанную функцию и скопировать можно, но опять же надо закладки делать, что бы не потеряться в тысячи строк.  

В архиве, который я выложил, есть такая функция в файле TradeUtils

А с недавних пор (добавлено после архивации) туда же интегрирована статистика мониторинга проскальзываний и задержек исполнения.

Выглядит вот так:

 

image.png.67c228f30849de3d51a2370271472e58.png

 

Это демо, поэтому не скользит почти. Как ни странно, именно "почти" - вероятно, задержки исполнения вмешиваются.

 

#13839
10 часов назад, ademen сказал:

Мне кажется что у коллеги @Rigalкод больше похожий на модульный, когда есть возможность заменить / поправить любой модуль не нарушая логику других, "разделяй и властвуй".

Да, но недостаток, который Юра озвучил, он и в моем подходе есть: если я рефакторю какой-то базовый модуль, эти изменения окажутся в следующей сборке любого советника, этот модуль использующего.

С одной стороны - это прекрасно, работы меньше.

А с другой - нарушается строгость контроля версий, когда повторные сборки одной и той же версии должны гарантировать результат.

В частности, если кто-то придет ко мне с проблемой версии двухмесячной давности, я могу быть не в состоянии проблему протестировать, даже если этого советника я не обновлял с тех пор - библиотеки могли уйти далеко вперед и вся проблемная логика уже была поправлена.

 

Эта проблема хорошо решена в dependency control системах, вроде maven, когда библиотеки маркируются версиями, их сборки хранятся по версиям и подключение новых изменений делается явно.

Но это, опять же, замедлит и усложнит процесс - и пока я этот код ковыряю один, я могу рассчитывать, что у меня все под контролем.

Мне понравилась идея в сетке с юнит тестами, я покрою у себя критические секции.

#13840
1 час назад, Rigal сказал:

В архиве, который я выложил, есть такая функция в файле TradeUtils

А с недавних пор (добавлено после архивации) туда же интегрирована статистика мониторинга проскальзываний и задержек исполнения.

Выглядит вот так:

Интересное решения. До вас я думал что в мт4 нельзя увидеть пинг, со слов @fxsaber

Вот его индикатор пинга для мт5 с кодом, может пригодится.

https://www.mql5.com/ru/code/19422

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025