Конечно, пример был дан для ответа, что в MT5 все совсем не в порядке. Пример, показывающий проблему
// Пример неправильного считывания торгового окружения на каждом тике// Скрипт эмулирует два тика ТС, которая должна открыть одну позицию, если ее нет.#include <Trade/Trade.mqh>
// Возвращает количество позиций по символуint GetAmountPositions( conststring Symb )
{
int Res = 0;
// Этот MQL5-код с ошибкойfor (int i = PositionsTotal() - 1; i >= 0; i--)
if (PositionGetSymbol(i) == Symb)
Res++;
/*
// В MT4 такой код выполняется без ошибки
for (int i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS) && (OrderType() <= OP_SELL) && (OrderSymbol() == Symb))
Res++;
*/return(Res);
}
// Пример OnTickvoid ExampleOnTick()
{
static CTrade Trade;
// Если нет позиции, открываемif (!GetAmountPositions(_Symbol))
Trade.Buy(1);
}
// Эмуляция прихода двух Tick-событийvoidOnStart()
{
ExampleOnTick();
Sleep(10); // Между двумя тиками ~10 мс.
ExampleOnTick();
}
Как думаете, если запустить этот скрипт на символе без позиций, что будет в итоге?
Правильный ответ: будет открыта одна или две позиции.
fxsaber: Мало, кто будет спорить с этим утверждением
Это универсальное правило. Но немногие задумываются над его реализацией в MT5. Поэтому написал шаблон большинства несложных ТС (в кодобазе почти все такие)
По какой-то причине некоторые пишут больше кода для таких же ТС. Но на самом деле этот код справляется не хуже. Большинство ТС требуют написания только BuySignal и SellSignal. Больше ничего не нужно.
Пример шаблона специально написан с помощью СБ. Поэтому вопрос к спецам по MT5, код правильный?
Случайно попал в эту ветку.Вообще, давно хотел начать ветку по обсуждению шаблонов стратегий. Ваш шаблон достаточно близок к тому, что я представляю правильным (удобочитаемым для себя), но все таки я не любляю, когда в OnTick вставляют вызов одной функции, под которым прячется целый горнообогатительный комбинат.
В свое время я даже написал статью MetaEditor: Опираясь на силу шаблонов. С тех пор изменился язык, нет шаблон редактора. Интересно было бы обсудить этот вопрос (можно в отдельной ветке), а еще бы и статью получить на эту тему. Я считаю, что при написании кода нужно стараться, чтобы стратегия читалась с одного взгляда без необходимости залезать в методы класса или макроса.
Случайно попал в эту ветку.Вообще, давно хотел начать ветку по обсуждению шаблонов стратегий. Ваш шаблон достаточно близок к тому, что я представляю правильным (удобочитаемым для себя), но все таки я не любляю, когда в OnTick вставляют вызов одной функции, под которым прячется целый горнообогатительный комбинат.
Если сделать OnTick == Strategy, то шаблон уменьшится/упростится до неприличных размеров.
В свое время я даже написал статью MetaEditor: Опираясь на силу шаблонов. С тех пор изменился язык, нет шаблон редактора. Интересно было бы обсудить этот вопрос (можно в отдельной ветке), а еще бы и статью получить на эту тему. Я считаю, что при написании кода нужно стараться, чтобы стратегия читалась с одного взгляда без необходимости залезать в методы класса или макроса.
Так шаблон для обеих платформ показал. Он настолько простой, что его обсуждать тяжело, хотя для MT5 он в корне неверный. А так у Вас же есть CExpert. Сам туда не заглядывал - страшно.
И что, OrderClose гарантированно закрывает сделку?
Не гарантировано, но проверка в коде есть на этот случай. Каждый вызов OnTick независим от предыдущего.
Не гарантировано, но проверка в коде есть на этот случай. Каждый вызов OnTick независим от предыдущего.
Ок, закрытие на следующем тике подойдет.
@Artyom Trishkin, @Andrey Khatimlianskii, Спасибо за участие! Жаль, никто больше не высказался по MT5-коду. Видимо, считают, что все в порядке.
Конечно, пример был дан для ответа, что в MT5 все совсем не в порядке. Пример, показывающий проблему
Как думаете, если запустить этот скрипт на символе без позиций, что будет в итоге?
Правильный ответ: будет открыта одна или две позиции.
Конечно, пример был дан для ответа, что в MT5 все совсем не в порядке. Пример, показывающий проблему
Как думаете, если запустить этот скрипт на символе без позиций, что будет в итоге?
Правильный ответ: будет открыта одна или две позиции.
Как следствие - подавляющее большинство MT5-советников в Кодобазе написаны неверно!
Мало, кто будет спорить с этим утверждением
Это универсальное правило. Но немногие задумываются над его реализацией в MT5. Поэтому написал шаблон большинства несложных ТС (в кодобазе почти все такие)
По какой-то причине некоторые пишут больше кода для таких же ТС. Но на самом деле этот код справляется не хуже. Большинство ТС требуют написания только BuySignal и SellSignal. Больше ничего не нужно.
Пример шаблона специально написан с помощью СБ. Поэтому вопрос к спецам по MT5, код правильный?
Случайно попал в эту ветку.Вообще, давно хотел начать ветку по обсуждению шаблонов стратегий. Ваш шаблон достаточно близок к тому, что я представляю правильным (удобочитаемым для себя), но все таки я не любляю, когда в OnTick вставляют вызов одной функции, под которым прячется целый горнообогатительный комбинат.
В свое время я даже написал статью MetaEditor: Опираясь на силу шаблонов. С тех пор изменился язык, нет шаблон редактора. Интересно было бы обсудить этот вопрос (можно в отдельной ветке), а еще бы и статью получить на эту тему. Я считаю, что при написании кода нужно стараться, чтобы стратегия читалась с одного взгляда без необходимости залезать в методы класса или макроса.
Как следствие - подавляющее большинство MT5-советников в Кодобазе написаны неверно!
Как всегда - категорично. Не можут быть, хотя и не читал ваш код.
Случайно попал в эту ветку.Вообще, давно хотел начать ветку по обсуждению шаблонов стратегий. Ваш шаблон достаточно близок к тому, что я представляю правильным (удобочитаемым для себя), но все таки я не любляю, когда в OnTick вставляют вызов одной функции, под которым прячется целый горнообогатительный комбинат.
Если сделать OnTick == Strategy, то шаблон уменьшится/упростится до неприличных размеров.
В свое время я даже написал статью MetaEditor: Опираясь на силу шаблонов. С тех пор изменился язык, нет шаблон редактора. Интересно было бы обсудить этот вопрос (можно в отдельной ветке), а еще бы и статью получить на эту тему. Я считаю, что при написании кода нужно стараться, чтобы стратегия читалась с одного взгляда без необходимости залезать в методы класса или макроса.
Так шаблон для обеих платформ показал. Он настолько простой, что его обсуждать тяжело, хотя для MT5 он в корне неверный. А так у Вас же есть CExpert. Сам туда не заглядывал - страшно.
Как всегда - категорично. Не можут быть, хотя и не читал ваш код.
Вы прочтите, очень интересно Ваше мнение.
Конечно, пример был дан для ответа, что в MT5 все совсем не в порядке. Пример, показывающий проблему
Как думаете, если запустить этот скрипт на символе без позиций, что будет в итоге?
Правильный ответ: будет открыта одна или две позиции.
А если заменить GetAmountPositions на штатную OnTradeTransaction???
Примерно так: