Как запустить советника для нескольких пар? - страница 2

 
mittalpa:

Я думаю, что оба подхода хороши.

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

Одно из преимуществ варианта #3 - если вы хотите использовать данные из файла для чего-то, что MT4 не может сделать.

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

 
cloudbreaker wrote >>

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

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

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

2. Советник, который вы хотите создать, не сможет быть обратно протестирован и оптимизирован в Strategy Tester. По моему опыту, обратное тестирование и оптимизация очень важны. Есть оптимизации, которые значительно улучшили работу моего советника, которые я никогда бы не обнаружил, если бы не использовал Strategy Tester. Он дал мне такие вещи, как настройки индикатора, которые были настолько далеки от того, что многие считают наиболее полезными и оптимальными значениями для конкретного индикатора, что я никогда бы не подумал попробовать значения, близкие к оптимальным. Подумайте, сколько у вас параметров в советнике. Каждый из них должен быть оптимизирован, и каждая оптимизация одного параметра может потребовать изменения другого параметра. Вот почему вы не можете просто оптимизировать каждый параметр сам по себе. Цель оптимизации - оптимизировать все параметры по отношению друг к другу как можно лучше. Это может занять много времени и много работы с использованием тестера, но практически невозможно сделать эти оптимизации вручную, просто изменяя параметры один за другим самостоятельно.

И еще одно замечание: каким бы способом вы ни решили кодировать советника, сохранение состояния советника или другой информации в файл не является обязательным в большинстве случаев и не является единственным вариантом. Самый лучший, эффективный и простой способ сделать это - сохранить состояние в глобальных переменных. В конце концов, именно по этой причине функция глобальных переменных была добавлена в MT. Также некоторые из вас говорили о создании дополнительного советника с единственной целью обмена данными, хранящимися в файловой системе, что позволит обмениваться данными и взаимодействовать между двумя советниками. В этом также нет необходимости. Обмен данными и даже возможность условной логики между несколькими советниками - еще одна особенность глобальных переменных. Это позволяет нескольким советникам на разных графиках получать доступ к данным любого советника и использовать их для принятия решений, которые могут привести к изменению другого советника. Эти данные надежно защищены даже в случае сбоя компьютера или отключения электричества. Но что произойдет в случае сбоя или отключения электроэнергии, когда вы находитесь в процессе сохранения, чтения или обмена данными между советниками и у вас открыт один или два файла? Вполне вероятно, что в итоге вы получите недостающие данные, повреждение данных, а в худшем случае - файлы с нулевым байтом или вообще без файлов. С глобальными переменными ни одна из этих проблем не возникнет. Состояние вашего эксперта будет точно таким же, каким оно было за миллисекунду до того, как ваша система вышла из строя. Недостатком GV, о котором все говорят, является то, что они не могут хранить строки, но есть несколько хороших способов обойти это.

Во-первых, GV могут хранить строки, если вы используете имя GV КАК строковое значение, например GlobalVariableSet(Symbol() + "LastUptime=" + TimeLocal(), -1); Одна проблема заключается в том, что существует ограничение на длину имен GV, поэтому вы не сможете использовать этот способ для сохранения длинных строк. Другой отличный обходной путь, который я использую постоянно, - это сохранение строк в текстовых полях графических объектов. Вы можете работать с ними так же, как с заказами и GV. Существуют функции mql для получения общего количества как GV, так и графических объектов, так что вы можете перебрать их все и найти тот, который вы ищете, точно так же, как вы перебираете заказы.

ПРЕДУПРЕЖДЕНИЕ... Я сейчас пойду по кроличьей тропе, рассказывая о других интересных способах использования графических объектов для улучшения ваших торговых функций... Немного отклоняюсь от темы, но информация может быть полезной...

Есть гораздо больше полезных вещей, которые вы можете сделать с графическими объектами. Например, в одном из моих советников есть опциональная функция хеджирования. Когда хеджирование включено, конечно, нет реального стоп-лосса для любых новых размещенных ордеров, потому что при хеджировании на одном и том же символе смысл заключается в том, чтобы открыть противоположный ордер, если первый ордер проходит дальше, чем обычный стоп-лосс, и первый ордер должен остаться открытым. Таким образом, ваш код должен знать, что такое стоп-лосс, и следить за торговлей, чтобы открыть хедж, когда первый ордер достигнет цены стоп-лосса, и, в случае недопонимания, причина, по которой мы не можем использовать фактический стоп-лосс на ордере, заключается в том, что тогда ордер будет закрыт, что, конечно, не приведет к хеджу вообще. Но с помощью графических объектов вы можете сделать так, чтобы это работало лучше и выглядело для пользователя точно так же, как и реальный стоп-лосс. Делается это следующим образом: Когда вы размещаете ордер, в то же время вы создаете объект горизонтальной линии с параметром цены = цене стоп-лосса. Имя объекта линии - "Order #" + orderTicket; описание - "StopLoss @ " + SLPrice. Установите стиль линии на STYLE_DASHDOT, цвет - красный, и вы получите линию стоп-лосса, которая выглядит в точности как настоящая. Код, чтобы заставить его работать, тоже прост. Вся необходимая информация уже хранится в объекте линии - тикет# ордера и цена SL, которая является значением объекта линии. Затем вы делаете функцию, которая проверяет, достигает ли текущая цена линии или выходит за ее пределы. Когда это происходит, вы получаете билет#, который был сохранен в поле имени линии. Затем вы находите открытый ордер с таким же тикетом. Выберите ордер, чтобы узнать, является ли он ордером на покупку или продажу, а также получить размер лота. Теперь у вас есть вся необходимая информация для открытия хеджевого ордера. Вы открываете новый ордер, противоположный первому, с тем же размером лота. Последний шаг - удаление линии стоп-лосса. Когда вы смотрите, как это работает, это очень здорово, потому что теперь вы можете видеть, когда вы приближаетесь к "хеджированию".

Еще один плюс - если вы думаете, что ваш ордер просто может дойти, если кажется, что цена может вернуться в вашу пользу, но вам нужно еще немного пространства, то просто перетащите линию SL/Hedge немного вверх. Разве вам не хотелось бы сделать это со стандартными линиями SL и TP? Это была бы отличная новая функция, если бы они сделали линии стоп-лосса и тейк-профита подвижными, чтобы мы могли быстро вносить коррективы, когда рынок действительно движется. Конечно, вы можете сделать это уже сегодня в своем советнике, используя описанные выше шаги, и одним из преимуществ является то, что брокер никогда не увидит ваши SL или TP. Минусом является то, что если ваш компьютер выйдет из строя, у вас не будет SL или TP на стороне сервера. Но то же самое верно и для роботов, таких как FapTurbo. Их "скрытный" метод заключается в том, что они устанавливают поддельные значения SL и TP на ордерах и либо закрывают ордера из кода, либо модифицируют ордер с правильными значениями SL и TP в последнюю минуту, когда цена приближается.

 
Jacques366:

Привет,

Я предпочитаю помнить, что мы все еще работаем в режиме реального времени, поэтому я просто забываю об использовании цикла while или функции wait, чтобы держать руку на пульсе!

Прикрепление вашего советника к такой паре, как EURUSD, дает вам достаточно сигналов для управления всеми остальными парами, тики очень частые. Это вопрос не минут, а секунд (запуск цикла на 2 минуты для меня звучит просто безумно). Если это не вопрос секунды, просто подумайте почему или посмотрите у другого брокера.

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

Извините, если кажется, что это сообщение немного резкое. Хотел поделиться с вами своей точкой зрения.

Удачи.

Я начинающий программист, поэтому прошу считать это сценарием "что-если" для целей обсуждения:


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


Я продолжаю играть с идеей использования бесконечного цикла While и выпуска торговых ордеров через отдельные скрипты, потому что, полагаясь на входящие тики EURUSD для запуска советника, я могу привести к некоторым длительным задержкам. Например, сегодня между 0700 и 0800 GMT самое долгое ожидание составило 31 секунду, но позже в течение дня к концу Нью-Йоркской сессии ожидание входящего тика может занять до 2 минут --- Я еще не проверял Азиатскую сессию, но подозреваю, что там тоже есть длительные интервалы между тиками.


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


Я ценю все отзывы.

 
vangrosh wrote >>

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

блестяще!

 
vangrosh:

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

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

Пару вещей, которые я уже решил -.
1. Только одна пара на советника.
2. Только один ордер на пару. (Это может измениться позже, но я буду придерживаться этого, пока не стану достаточно опытным).

Большое спасибо за то, что поделились своим золотым опытом.

Pankaj
 

Этот график показывает временной интервал между тиками для EURUSD 29 апреля 2009 года. Я не знаю, какой часовой пояс представляют эти данные. Данные по тикам были загружены с сайта Gain Capital.

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



 
vangrosh:

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

vangrosh: Как создать и использовать файл .set? Я не смог найти никаких ссылок на этот тип файлов.

 
cloudbreaker wrote >>

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

Посмотрите здесь: https://book.mql4.com/special/index.

Общие характеристики сложных программ


Если вы хотите создавать мультивалютные советники, то это то, что вам нужно.

 
StraightTrader:

Пожалуйста, посмотрите здесь: https://book.mql4.com/special/index

Общая характеристика сложных программ


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

Спасибо за ссылку.

 
FXtrader2008 wrote >>

Этот график показывает временной интервал между тиками для EURUSD 29 апреля 2009 года. Я не знаю, какой часовой пояс представляют эти данные. Данные по тикам были загружены с сайта Gain Capital.

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

Спасибо за график. Было бы неплохо сравнить его с графиком некоторых других валют, чтобы убедиться, что у вас нет таких же задержек. (Я буду признателен, если вы сможете легко представить графики, скажем, для 4 пар).

Я просто заметил, когда я начал создавать свой советник, что когда у меня нет тиков в течение 1-2 минут на eurusd, то это происходит и с другими валютами. Возможно, в то время это была просто опасность или я сделал плохое предположение, но я сохранил эту идею, и мой советник работает уже несколько месяцев без проблем. Фактический опыт компенсирует отсутствие логики, и я сохранил свой советник в таком виде. Если бы я столкнулся с проблемами, я бы внедрил ваше решение, я имею в виду вашу идею держать советника в бодрствующем состоянии с задержкой между двумя запусками. Логически так и должно быть, насколько я знаю: но я не знаю, как генерируются тики у брокеров, поэтому мне трудно идти дальше.

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

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

С уважением,

Причина обращения: