Мультивалютный open source советник - Beat The Market 2.0

От lsv107, 29 мая, 2020 в Лаборатория ProfitFX

#76

Уважаемый @lsv107

Мне кажется вот тут

   if(tmaUseCurrentBar)
      SetNewBar(symbol.Pair,symbol.newBarTMA);
   else
      symbol.newBarTMA=symbol.newBar;

немного нестройно. Если мы хотим добиться перерасчета на текущем баре, когда выбрано использование значения ТМА на текущем баре, то логично было бы просто сбрасывать флажок is_new_bar. А так мы, получается, пересчитываем его либо на новом баре, либо на новом баре текущего ТФ, что совсем лишнее.

Я бы предложил, например, вот так:

   if(tmaUseCurrentBar)
      symbol.newBarTMA.is_new_bar = true;
   else
      SetNewBar(symbol.Pair,symbol.newBarTMA);

 Так будет пересчитывать на тиках. Можно сделать, чтобы пересчитывало на барах текущего таймфрейма:

   if(tmaUseCurrentBar)
      symbol.newBarTMA.is_new_bar = symbol.newBar.is_new_bar;
   else
      SetNewBar(symbol.Pair,symbol.newBarTMA);

Я могу что-то упускать, конечно.

 

Еще я бы оградил работу с визуальными объектами

   if(IsTesting() && !IsVisualMode())
      return;

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

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

 

Глядя на код дальше:

Сигнал на покупку и продажу по BTArrows вычисляется на разных ТФ: в покупку на текущем, а в продажу - на заданном в настройках. Поправил

 

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

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

Также пересадил боллинджера на библиотечную реализацию в Indicators\Indicators.mqh - гораздо оптимальнее доступ к массиву.

 

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

 

Из чистого эстетства перенес функцию расчета TMA внутрь структуры инструмента - она работает с членами структуры исключительно.

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

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

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

 

 

Beat The Market 2.0.2 Rigal Mod.mq482 скач.

Изменено 22 июня, 2020 пользователем Rigal

#77
8 минут назад, Старик сказал:

@Stinger12 , вам следует найти и выложить в топик файлы логов бота (тот, что виден во вкладке "Эксперты" мт4) за 17 и 18 июня.

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

 

Также сообщите нам у вас в терминале работал бот в мультивалютном режиме лишь на одном графике или у вас в терминале одновременно было/работало несколько копий бота?!

 

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

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

От вас требуются точные и быстрые действия!  Пожалуйста, сделайте что вам предложено точно и не откладывая!

Я пробежался по коду и не нашел, как может возникать такая ситуация с одного графика.

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

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

Но имхо прокладка всему виной. Между рулем и сиденьем :)

Ждем комментариев пользователя.

Изменено 22 июня, 2020 пользователем Rigal

#78
35 минут назад, Rigal сказал:

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

Исходники и для меня как быку красное - немедленно забодать!:d

Ближе к 60 я понял, что это неизлечимо.

 

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

Я пробежался по коду и не нашел, как может возникать такая ситуация с одного графика.

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

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

Но имхо прокладка всему виной. Между рулем и сиденьем :)

Ждем комментариев пользователя.

У меня сейчас 3 ситуации класса "(Слово удалено системой)" (в смысле фиаско), когда по уму надо объявлять запрет на торги ботом вообще или использования какого-то режима.

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

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

#79

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

Один из надежных способов - открытие файла на запись по имени символа (и отказ торговать этот символ с предупреждением на экране, если открыть не удалось).

Держать открытым, пока не наступит DeInit.

Автор#80

@Rigal, приветствую!

10 часов назад, Rigal сказал:

просьба меня не пинать за безудержный забег по чужому коду

В большинстве случаев программисты, особенно начинающие, не любят выкладывать на всеобщее обозрение открытый код вовсе не из боязни "воровства" их идей, а по причине опростоволоситься в глазах коллег. Я с возрастом понял, что лучше выставить напоказ свои ошибки и чему-то научиться, чем вариться в собственном соку. К тому же коллеги не упустят возможности поковыряться в твоём коде и всегда найдут за тебя баги, которые ты упустил ;). Ну и в конце концов - проект некоммерческий, а скорее экспериментальный. Так что, "забеги по чужому коду" я горячо приветствую. Уверен, что и для себя вы нашли там что-то полезное. Единственная просьба, в названии файла, указывайте, пожалуйста, что это ваша модификация, например "... mod Rigal ..." или ещё как. Просто пользователи будут думать, что вышел новый релиз "2.0.2" от автора. Вдруг кто-то из коллег тоже захочет что-то поменять и продолжит вашу нумерацию.  Все запутаются.

 

По ситуации с 

tmaUseCurrentBar

Тут у меня конкретная ошибка, забыл указать логическое отрицание. Спасибо за отловленного "жука"=b

 

10 часов назад, Rigal сказал:

Еще я бы оградил работу с визуальными объектами


   if(IsTesting() && !IsVisualMode())
      return;

 

У меня в коде есть глобальный флаг display_graphics как раз для этих целей.

   if(IsOptimization() || (IsTesting() && !IsVisualMode()))
      display_graphics=false;
   else
      display_graphics=true;

В моновалютной версии из графических объектов были только TMA и пивоты. В мультивалютной добавились панели, и я благополучно забыл ограничить их отрисовку с помощью флага. Хотя терминал сам блокирует к ним доступ в режиме оптимизации и невизуального тестирования, какие-то такты мы теряем просто на обращении к соответствующим функциям. Тут наши подходы совпадают.

 

По остальному сейчас не могу ничего сказать, надо смотреть код. 

Вам респект.

 

Изменено 22 июня, 2020 пользователем lsv107

#81
11 минут назад, lsv107 сказал:

названии файла, указывайте, пожалуйста, что это ваша модификация, например "... mod Rigal ..." или ещё как

перезалил

#82

Добрый день, уважаемые форумчане!!! Хотелось бы выразить огромную благодарность за создание такого профессионального советника!!!

@chmelyn  за мультивалютную идею!!!

@lsv107 за прекрасную реализацию как самого советника, так и его мультивалютную версию!!!

Просила бы @lsv107 все-таки добавить в мультивалютную версию функцию лока! Сейчас (как на скрине) мы имеем открытый ордер по стратегии и его профит, если будет добавлен лок, то будет видно все ордера и первые  и локовые. Что нам это даст?

1) видеть текущую ситуацию по паре

2) возможность закрыть обе позиции одним нажатием на крестик ( так на этой неделе 24,06 был открыт ордер селл  по gbpnzd и его лок, позже профит по двум ордерам составлял порядка 10-20 центов, таким образом можно было получить прибыль, не висеть в рынке, может быть получили еще один вход, а так имеем профит по селл 56,08 и

профит по локу -300 центов)

3) возможность оптимизировать шаг лока, что может помочь быстрее закрывать ордера, и может быть повысит прибыльность

Вроде бы постаралась объяснить свое видение добавления функции лока в советник!

ВСЕМ ПРОФИТА!!!

1889537086_.thumb.png.078da41c96d931e64148226290bb6b11.png

#83

Побаловался с советником с тралом общего профита и сторонним локом.

Моё мнение - можно просто подбрасывать монетку и потом тралить общий профит и лочить и разруливать. 

Ведь нет никакой статистики в таком методе. И нет тестов отдельно пар, чтоб свести в Кванте и посмотреть насколько оправдан такой подход к торговле.

На этом баловство закончил.

 

#84
35 минут назад, ostapbender сказал:

Ведь нет никакой статистики в таком методе. И нет тестов отдельно пар, чтоб свести в Кванте и посмотреть насколько оправдан такой подход к торговле.

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

#85
В 28.06.2020 в 08:49, ademen сказал:

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

А  тралл общего эквити вы как протестируете?

Изменено 29 июня, 2020 пользователем valerii.badaev

#86

По итогам прошедшей недели снял сов с реальных торгов.В пятницу закрыл сделки вручную в минус. Оставил только на демосчете.

Изменено 29 июня, 2020 пользователем valerii.badaev

#87

все для каждой пары отдельно!!! а там можно делать корзины!!!

 

#88

Валерий, Вы опытный человек!!! Когда было  +10% за неделю и один лок, то супер!!! а сейчвс 6 локов и??? Поэтому и нужны советы или предложения, как можно улучшить!!!

#89
2 часа назад, AngelaZP сказал:

Валерий, Вы опытный человек!!! Когда было  +10% за неделю и один лок, то супер!!! а сейчвс 6 локов и??? Поэтому и нужны советы или предложения, как можно улучшить!!!

Сейчас на демо счете 3 лока.И просадка только увеличивается.В тестере протестировать мультивалютный советник  невозможно, тем более с переворотом позиции.Гонять на демосчете можно всю оставшуюся жизнь.А у вас какие предложения?

Изменено 29 июня, 2020 пользователем valerii.badaev

#90
16 минут назад, valerii.badaev сказал:

В тестере протестировать мультивалютный советник  невозможно

А если МТ5?

#91
Только что, SebastianPerreira сказал:

А если МТ5?

Это могло бы стать решением проблемы с тестированием.

#92
30 минут назад, valerii.badaev сказал:

Сейчас на демо счете 3 лока.И просадка только увеличивается.В тестере протестировать мультивалютный советник  невозможно, тем более с переворотом позиции.Гонять на демосчете можно всю оставшуюся жизнь.А у вас какие предложения?

Я уже предложила!!! Сделать лок- переворот в  советнике!!!

#93
26 минут назад, valerii.badaev сказал:

Это могло бы стать решением проблемы с тестированием.

Попробовал конвертнуть в лоб - не получилось: 41 ошибка при конвертации, моих знаний не хватает для исправления.

Файлы прилагаю, уверен, у опытных программистов исправление много времени не займет.

BTMmql5.zip27 скач.

#94
14 минут назад, AngelaZP сказал:

Я уже предложила!!! Сделать лок- переворот в  советнике!!!

Лок равнозначен закрытию, только копит своп вдобавок, который никогда не положителен в локе.

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

 

Тогда уже закрытие и переворот.

7 минут назад, SebastianPerreira сказал:

Попробовал конвертнуть в лоб - не получилось

МТ5 выглядит, как рабочая альтернатива.  Советник объемный, там нетривиально.  Надо,  чтобы кто-то с хорошим знанием МТ5,  я пока продираюсь сквозь дебри.

 

3 часа назад, AngelaZP сказал:

все для каждой пары отдельно!!! а там можно делать корзины!!!

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

Я прогнал с десяток и не получил устойчивого результата.

#95
19 минут назад, AngelaZP сказал:

Я уже предложила!!! Сделать лок- переворот в  советнике!!!

Вы точно понимаете о чём говорите?

Вы вообще знаете, что локи вручную более-менее успешно разруливает хорошо если 1 из 1000 трейдеров?

А все основные автоматизированные "разрулы" локов сводятся к набивке прибыли другим способом и постепенному невыгодному погашению лока?

Не уверен, что эту тему есть смысл вообще хоть как-то рассматривать...

#96
23 минуты назад, AngelaZP сказал:

Я уже предложила!!! Сделать лок- переворот в  советнике!!!

 

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

Тогда уже закрытие и переворот.

Поддержу Rigal - лок это долгое зло: его вручную нервными месяцами разруливать приходиться, а автоматов умеющее это эффективно делать я не встречал. В свое время хороший урок по локам получил: мог закрыть сделку в минус $2000, пожадничал залез в локи (практиковал тогда) и, в итоге, через месяца полтора-два закрыл в минус $50 000. С тех пор на жо волос нет ))

#97

У меня есть советник специальный, "разруливатель". Мелкими профитами постепенно вынимает из просадки.

Он умеет работать в трех режимах:

  • разруливать, как есть, позволяя исходной позиции проседать, или выруливаться
  • залочить просадку 
  • закрыть просадку

Во всех трех режимах он восполняет потери сериями мелких сделок.

Он работает в тестере: если тестер, он сперва раскидывает сделки, залезая в просадку. А когда достигается заданная просадка, принимается за работу.

 

Так вот, многочисленные воспроизводимые тесты показали, что закрытие гораздо выгоднее лока. Из-за свопов.

Первый вариант, понятно, как повезет с трендом.

#98
31 минуту назад, Rigal сказал:

У меня есть советник специальный, "разруливатель". Мелкими профитами постепенно вынимает из просадки.

Он умеет работать в трех режимах:

  • разруливать, как есть, позволяя исходной позиции проседать, или выруливаться
  • залочить просадку 
  • закрыть просадку

Во всех трех режимах он восполняет потери сериями мелких сделок.

Он работает в тестере: если тестер, он сперва раскидывает сделки, залезая в просадку. А когда достигается заданная просадка, принимается за работу.

 

Так вот, многочисленные воспроизводимые тесты показали, что закрытие гораздо выгоднее лока. Из-за свопов.

Первый вариант, понятно, как повезет с трендом.

я прочитала ветку с Вашим локером!!! Спасибо!!!

#99
1 минуту назад, AngelaZP сказал:

я прочитала ветку с Вашим локером!!! Спасибо!!!

нет, я боюсь, это ветка уважаемого @Rever27

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

Вот она эта просадка, лок и результат, очень похоже на то, что @SebastianPerreira описал, включая оставшиеся залысины:

image.thumb.png.79f7c3ea182730f42550786b4e6bb821.png

#100
6 часов назад, SebastianPerreira сказал:

Попробовал конвертнуть в лоб - не получилось: 41 ошибка при конвертации, моих знаний не хватает для исправления.

Файлы прилагаю, уверен, у опытных программистов исправление много времени не займет.

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

6 часов назад, Rigal сказал:

Лок равнозначен закрытию, только копит своп вдобавок, который никогда не положителен в локе.

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

Интересно было бы почитать. 

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

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

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

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