Обсуждение статьи "Пошаговое руководство по написанию советников в MQL5 для начинающих" - страница 5

 
Renat:

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

Блин, ну вот единственный русскоязычный ресурс, где тебе (1) толково промывают мозги и (2) ты испытываешь чувство благодарности за это :)

Вот уже 1,5 года знаю, что надо инициализировать переменные; 1,5 года намеренно употребляю фразу "переменная типа структуры"; но при этом 1,5 года присваиваю значения только отдельным (обязательным к заполнению) полям переменной типа Mqltraderequest, поскольку в Справочнике сказано, что "для каждой торговой операции необходимо указывать обязательные   поля"...

 
papaklass:
Renat, было бы не плохо, если бы на тему "работа с памятью и переменными" Вы (MQ) бы опубликовали статью или серию статей. Вообще, как правильно работать с памятью и переменными? После дисквалификации на Чемпионате нескольких советников из-за большого потребления памяти, эти статьи были бы уместными. Rosh в какой то теме писал, чтобы пользователи сами заказывали статьи, которые их интересуют, но я не нашел эту тему, поэтому пишу здесь.
Да, было бы интересно почитать статью на эту тему. Очень интересно почему на чемпионате у некоторых участников эксперты использовали так много памяти и как можно избежать подобной ситуации. У меня таких проблем не возникало, но это всё случайность. То есть я не знаю почему этого у меня не происходит, а хотелось бы знать, что делать, если вдруг. 
 
В первую очередь, расход памяти связан с вызовами индикаторов. Прежде чем создавать хендлы десятков индикаторов на различных символах/тпймфреймах, подумайте, какая плата будет за это. Могу посоветовать статью Уменьшаем расход памяти на вспомогательные индикаторы и ознакомиться с интервью одного из дисквалифицированных участников - Интервью с Ацуси Яманака (alohafx).
Интервью с Ацуси Яманака (alohafx) - Automated Trading Championship 2011
  • championship.mql5.com
Что общего между трейдингом, скайдайвингом, фьючерсами, Гавайями, переводами и шпионами? Мы тоже не знали, пока не пообщались с дисквалифицированным участником Ацуси Яманака (alohafx). Его кредо - ''Life is Good! - Жизнь прекрасна!'', и с этим трудно не согласиться. Было интересно узнать, что расстояние между разными континентами - не помеха в общении участников нашего Чемпионата.
 
abolk:

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

Приведённый автором "подход" полностью сводит на нет всё преимущество 5-тизнака. Вместо того, чтобы объяснить новичку, что введение 5-тизначной котировки даёт возможность установить, например, тейк-профит не 10 пунктов, а 10,5. А также объяснить, что при использовании советника на 5-тизнаке надо указывать тейк-профит не 10 пунктов, а 100. Вместо таких объяснений в программный код вводятся строки, которые программно не дают возможность использовать преимущества 5-тизначных котировок.

"Мы должны быть уверены в том, что наш советник будет корректно работать со всеми брокерами". Ну убедились и дальше что? Как теперь использовать преимущество 5-тизнака, если программно советник это преимущество "приговорил исправно служить".

А если

_Digits==3

тогда что, все равно?  

STP = STP*10; 

TKP = TKP*10;

И что же получается? Не правильней ли написать? 

STP = STP/10; 

TKP = TKP/10;

 

Зачем два раза идет повторение одного и того же кода в функции OnTick?

//--- Достаточно ли количество баров для работы
   if(Bars(_Symbol,_Period)<60) // общее количество баров на графике меньше 60?
     {
      Alert("На графике меньше 60 баров, советник не будет работать!!");
      return;

     }

и чуть подальше

//--- Имеем ли мы достаточное количество баров на графике для работы
   int Mybars=Bars(_Symbol,_Period);
   if(Mybars<60) // если общее количество баров меньше 60
     {
      Alert("На графике менее 60 баров, советник работать не будет!!");
      return;
     }
Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

И для оптимизации неплохо было бы к динамичным массивам использовать ArrayResize: https://www.mql5.com/ru/docs/array/arrayresize

И еще интересное в документации прочитала:

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

https://www.mql5.com/ru/docs/series

Документация по MQL5: Операции с массивами / ArrayResize
Документация по MQL5: Операции с массивами / ArrayResize
  • www.mql5.com
Операции с массивами / ArrayResize - Документация по MQL5
 

при компиляции выдает ошибку

return value of 'OrderSend' should be checked my_first_ea.mq5 211 10

что может быть не так? 

 
pisenysh:

при компиляции выдает ошибку

return value of 'OrderSend' should be checked my_first_ea.mq5 211 10

что может быть не так? 

А это точно ошибка?
 
pisenysh:

при компиляции выдает ошибку

return value of 'OrderSend' should be checked my_first_ea.mq5 211 10

что может быть не так? 

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

Здравствуйте! Подскажите пожалуйста. А торгует ли советник с точностью до секунд? То есть если мне нужно, что бы сделки открывали и закрывались не просто в определенный час и минуту, но и в определенную секунду?