Как протестировать советника для БО *.mq4 на истории?

sergdk1986

Новичок
Регистрация
22.03.19
Сообщения
7
Реакции
0
sergdk1986 не предоставил никакой дополнительной информации.
Доброго дня, форумчане!! Написал советника на mql4 для бинарных опционов (для Wforex через mt4) . Начал его тестировать на демосчете. Но это очень долго:eek: А иногда его приходиться дорабатывать и тестировать заново, что вообще может растянуться на годы:oops:. Но в mt4 же есть тестер стратегий, правда он не расчитан на БО. Пробовал протестировать при помощи Binary Options Strategy ссылка. Он состоит из 3 частей. Самого советник(который доступен в ознакомительном режиме через маркет), библиотеки(которая посылает сигнал на открытие позиции в советник) и индикатора(в котором описываешь свою стратегию, он же в свою очередь обращается к библиотеке и через нее открывает позицию на тестере, через функцию PlaceTrade()) Но вот проблема в том что mt4 не хочет добавлять добавлять индикатор к графику из-за того что функция PlaceTrade() обращается наружу.(хотя может и нет, но метод проб и ошибок показал, что без этой функции индикатор присоединяется к графику)
Далее пробовался способ, при котором советник(мною написанный) просто запускался в тестер с измененной функцией OpenOrder() на стандартную слипом в 60 секунд и записью разницы цены открытия ордера и актуальной цены в csv-файл. Но советник не реагирует на функцию sleep(). И здесь я тоже потерпел неудачу:mad: Стратегия запускает ордер при пересечении скользящих на open. Так что сейчас думаю можно будет брать разницу цен Open двух свечей, но это не сработает, если в скользящие будет применятся к другим ценам или другой логике робота.
Так вот в чем вопрос: Как можно протестировать советника или как задать задержку для стандартного тестера стратегий mt4?
 

блондинка

Старейшина
Регистрация
27.04.14
Сообщения
1,562
Реакции
1,780
блондинка не предоставил никакой дополнительной информации.
Обычная схема такая (не уверена но так кажется)
набор индикаторов делает сигналы (например стрелки)
или просто сигнальный буфер
эти сигналы естественно видны на истории и в тестере MT4
можно их посчитать и проверить(настроить)таким образом.
затем добавляется крошечный код(у вас он для Wforex )
т.е.вам надо разделить советник на две части-сигналист и транслятор
мухи от котлет)
Внутренний тестер советников учитывает спред.Это создаёт большую неточность в подсчете винрейта.
 
Последнее редактирование:

sergdk1986

Новичок
Регистрация
22.03.19
Сообщения
7
Реакции
0
sergdk1986 не предоставил никакой дополнительной информации.
Обычная схема такая (не уверена но так кажется)
набор индикаторов делает сигналы (например стрелки)
эти сигналы естественно видны на истории и в тестере MT4
можно их посчитать и проверить(настроить)таким образом.
затем добавляется крошечный код(у вас он для Wforex )
т.е.вам надо разделить советник на две части-сигналист и транслятор
мухи от котлет)
Крошечный код для Wforex? Это вы имеете в виду то как открывается ордер в Вфорексе? Там просто в комментарий пишется БО и время эксперации. На тестер не как не влияет. Главный нюанс в таком подходе это проблема, как сделать чтобы сделка в тестере закрывалась через время экспирации. Ваш подход оправдан для тестирования в реальном времени, а не для тестирования через тестер стратегий, но в любом случае спасибо!!
 

блондинка

Старейшина
Регистрация
27.04.14
Сообщения
1,562
Реакции
1,780
блондинка не предоставил никакой дополнительной информации.
Крошечный код для Wforex? Это вы имеете в виду то как открывается ордер в Вфорексе? Там просто в комментарий пишется БО и время эксперации. На тестер не как не влияет. Главный нюанс в таком подходе это проблема, как сделать чтобы сделка в тестере закрывалась через время экспирации. Ваш подход оправдан для тестирования в реальном времени, а не для тестирования через тестер стратегий, но в любом случае спасибо!!
"комментарий и время эксперации" я и назвала крошечным кодом.
Тест сигналов во внутреннем тестере MT4
Тут тестер в виде советника.Пример.
Есть тестеры и в виде индикаторов,которые тоже гонятся в MT4.
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    72 КБ · Просмотры: 93

sergdk1986

Новичок
Регистрация
22.03.19
Сообщения
7
Реакции
0
sergdk1986 не предоставил никакой дополнительной информации.
Тут тестер в виде советника.Пример.
Есть тестеры и в виде индикаторов,которые тоже гонятся в MT4.
О уже ближе))) А можно по конкретнее и по подробнее? Название индикаторов или советников? Еще б неплохо к индикаторам код который инициирует стрелки или открытие позиций? Вы с чем-то таким работаете?
Код:
...
if(Close[5]-Open[3]+High[2]<0) //если выполняется условие
{код инициализации} //открывается ордер или рисуется стрелка
 

блондинка

Старейшина
Регистрация
27.04.14
Сообщения
1,562
Реакции
1,780
блондинка не предоставил никакой дополнительной информации.
Эти тестовые советники и индикаторы есть на этом форуме.
Как бы между строк они затесались.По доброте душевной люди скинули свои разработки. Тут не выложу)))
В любой из них прописывается название сигнального индикатора и номера буферов сигналов для Put и Call. Работают по принципу прокладки(через iCustom).
 

AutoTrader

Старейшина
Регистрация
23.04.15
Сообщения
544
Реакции
441
AutoTrader не предоставил никакой дополнительной информации.
Решил написать своих пару советов по этому делу, т. к. сам это делал в своё время, вот только к сожалению, казалось бы крутые системы на истории в онлайн тестере быстро показывают свою несостоятельность. Итак, как проводить тест БО советника в тестере онлайн МТ4. Для этого нужно подготовить сам советник и прописать туда определённый код (здесь я опускаю случаи с мартингейлом, это отдельно надо еще рассматривать, рассматриваем вариант только с постоянной ставкой и как смотреть винрейт). Представим, что запустили тестер онлайн, допустим согласно нашей системе у нас появился сигнал CALL, здесь советник должен запомнить 2 параметра: текущее время и цену Bid (поскольку график строится по ценам bid). Текущее время определятся через t=TimeCurrent(), ну а текущая цена предопределенной переменной Price=Bid. Далее отсчитываем время экспы по онлайн графику TimeCurrent() - t >= Время экспы в секундах, как только оно наступает, сравниваем текущую цену с той ценой бид и если она больше той, значит мы выиграли (если call сигнал был). Дальше мы это отмечаем в счетчике выигрышей win++, если проиграли, отмечаем в счётчике проигрышей loss++, из этого высчитываем текущий винрейт. Эти данные можно выводить в консоль, можно прямо на график, можно нарисовать ещё графические стрелки моментов сигналов и результатов, но для всего этого нужно всё равно специально дорабатывать код советника. Стоит заметить, что для теста никаких ордеров открывать не нужно, весь тест проходит в памяти советника по текущим ценам бид в тестере онлайн. Вот примерно так.
 
Последнее редактирование:

sergdk1986

Новичок
Регистрация
22.03.19
Сообщения
7
Реакции
0
sergdk1986 не предоставил никакой дополнительной информации.
В принципе, имеет право на существование, но, к сожалению, только для очень простых систем, как вы уже заметили ранее.
Вот код вашей идеи, если кому сильно нужен будет мартин, могу позже дописать:
Код:
static int ss=0;//вводим триггер, который показывает открывалась позиция SELL или BUY
static int win=0;//вводим переменную для подсчета побед
static int loss=0;//вводим переменную для подсчета проигрышей
static int draw=0;//вводим переменную для подсчета сделок в ноль

int start()
{
   if(TimeCurrent()-t>=exper && TimeCurrent()-t<=4000)//проверяем условие закрытия сделки и была ли открыта сделка
    {
     if(ss==1)//если сделка была открыта на покупку
      {
       if(price-Bid>0)//если цена сейчас больше цены открытия сделки на покупку
        {
         win++;// прибавляем единицу к счетчику положительных сделок
         Comment("Сделка В ПЛЮС","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка положительна и отчет
        }
       if(price-Bid<0)//если цена сейчас меньше цены открытия сделки на покупку
        {
         loss++;// прибавляем единицу к счетчику отрицательных сделок
         Comment("Сделка В МИНУС","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка отрицательна и отчет
        }
       if(price-Bid==0)//если цена сейчас равна цене открытия сделки на покупку
        {
         draw++;// прибавляем единицу к счетчику сделок в ноль
         Comment("Сделка В НОЛЬ","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка в ноль и отчет
        }
      }
     if(ss==2)//если сделка была открыта на продажу
      {
       if(price-Bid<0)//если цена сейчас меньше цены открытия сделки на продажу
        {
         win++;// прибавляем единицу к счетчику положительных сделок
         Comment("Сделка В ПЛЮС","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка положительна и отчет
        }
       if(price-Bid>0)//если цена сейчас больше цены открытия сделки на продажу
        {
         loss++;// прибавляем единицу к счетчику отрицательных сделок
         Comment("Сделка В МИНУС","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка отрицательна и отчет
        }
       if(price-Bid==0)//если цена сейчас равна цене открытия сделки на продажу
        {
         draw++;// прибавляем единицу к счетчику сделок в ноль
         Comment("Сделка В НОЛЬ","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка в ноль и отчет
        }
      }
     ss=0;t=0;//обнуляем переменные триггера и времени, чтобы работало условие открытия сделок
     return(0);
    }
   if(Open[0]>Close[1])//это проверка условия открытия сделки на покупку(BUY), сюда можно вписывать своё условие
    {
     t=TimeCurrent();//засекаем время открытия сделки
     price=Bid;//засекаем цену открытия сделки
     ss=1;//переводим триггер открытия позиции в положение на покупку
     Comment("Открыта ПОКУПКА","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент об открытии сделки и отчет
     return(0);
    }
   if(Open[0]<Close[1])//это проверка условия открытия сделки на продажу(SELL), сюда можно вписывать своё условие
    {
     t=TimeCurrent();//засекаем время открытия сделки
     price=Bid;//засекаем цену открытия сделки
     ss=2;//переводим триггер открытия позиции в положение на покупку
     Comment("Открыта ПРОДАЖА","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент об открытии сделки и отчет
     return(0);
    }
 return(0);//на всякий случай, мало ли что
}
Автообъединение сообщений:

В принципе, имеет право на существование
Если будут вопросы по коду или другие идеи по тестированию, то смело высказывайтесь! Думаю, что тема очень полезна для новичков. Прошу так же прощения что забыл процитировать Автотрейдера в прошлом посте
Решил написать своих пару советов по этому делу
Автообъединение сообщений:

Решил написать своих пару советов по этому делу
Автотрейдер спасибо!
 
Последнее редактирование:

AutoTrader

Старейшина
Регистрация
23.04.15
Сообщения
544
Реакции
441
AutoTrader не предоставил никакой дополнительной информации.
В принципе, имеет право на существование, но, к сожалению, только для очень простых систем, как вы уже заметили ранее.
Вот код вашей идеи, если кому сильно нужен будет мартин, могу позже дописать:
Код:
static int ss=0;//вводим триггер, который показывает открывалась позиция SELL или BUY
static int win=0;//вводим переменную для подсчета побед
static int loss=0;//вводим переменную для подсчета проигрышей
static int draw=0;//вводим переменную для подсчета сделок в ноль

int start()
{
   if(TimeCurrent()-t>=exper && TimeCurrent()-t<=4000)//проверяем условие закрытия сделки и была ли открыта сделка
    {
     if(ss==1)//если сделка была открыта на покупку
      {
       if(price-Bid>0)//если цена сейчас больше цены открытия сделки на покупку
        {
         win++;// прибавляем единицу к счетчику положительных сделок
         Comment("Сделка В ПЛЮС","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка положительна и отчет
        }
       if(price-Bid<0)//если цена сейчас меньше цены открытия сделки на покупку
        {
         loss++;// прибавляем единицу к счетчику отрицательных сделок
         Comment("Сделка В МИНУС","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка отрицательна и отчет
        }
       if(price-Bid==0)//если цена сейчас равна цене открытия сделки на покупку
        {
         draw++;// прибавляем единицу к счетчику сделок в ноль
         Comment("Сделка В НОЛЬ","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка в ноль и отчет
        }
      }
     if(ss==2)//если сделка была открыта на продажу
      {
       if(price-Bid<0)//если цена сейчас меньше цены открытия сделки на продажу
        {
         win++;// прибавляем единицу к счетчику положительных сделок
         Comment("Сделка В ПЛЮС","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка положительна и отчет
        }
       if(price-Bid>0)//если цена сейчас больше цены открытия сделки на продажу
        {
         loss++;// прибавляем единицу к счетчику отрицательных сделок
         Comment("Сделка В МИНУС","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка отрицательна и отчет
        }
       if(price-Bid==0)//если цена сейчас равна цене открытия сделки на продажу
        {
         draw++;// прибавляем единицу к счетчику сделок в ноль
         Comment("Сделка В НОЛЬ","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент, что сделка в ноль и отчет
        }
      }
     ss=0;t=0;//обнуляем переменные триггера и времени, чтобы работало условие открытия сделок
     return(0);
    }
   if(Open[0]>Close[1])//это проверка условия открытия сделки на покупку(BUY), сюда можно вписывать своё условие
    {
     t=TimeCurrent();//засекаем время открытия сделки
     price=Bid;//засекаем цену открытия сделки
     ss=1;//переводим триггер открытия позиции в положение на покупку
     Comment("Открыта ПОКУПКА","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент об открытии сделки и отчет
     return(0);
    }
   if(Open[0]<Close[1])//это проверка условия открытия сделки на продажу(SELL), сюда можно вписывать своё условие
    {
     t=TimeCurrent();//засекаем время открытия сделки
     price=Bid;//засекаем цену открытия сделки
     ss=2;//переводим триггер открытия позиции в положение на покупку
     Comment("Открыта ПРОДАЖА","  Положительных ",win,"  Отрицательных ",loss,"  Нулевых ",draw);//и выводим коммент об открытии сделки и отчет
     return(0);
    }
return(0);//на всякий случай, мало ли что
}
Автообъединение сообщений:


Если будут вопросы по коду или другие идеи по тестированию, то смело высказывайтесь! Думаю, что тема очень полезна для новичков. Прошу так же прощения что забыл процитировать Автотрейдера в прошлом посте
Автообъединение сообщений:


Автотрейдер спасибо!
Интересно, а для каких систем это не подходит? Может быть конечно так, что во время действия одной ставки, возникает новый сигнал, тогда чтобы его учесть, придется делать массив переменных для сигналов. Но разве смысл БО в сложных системах какой-то другой? Ведь по любому какой бы сложной система не была, есть формирование сигналов на CALL и PUT, да может быть так, что их на время экспы больше чем один, но это тоже решаемо через массивы времен и цен, как упомянул выше. Если учитывать мартингейл, то да, там ещё много чего учесть надо. Но что означает ваша фраза, "только для очень простых систем" мне лично осталась непонятна.
 
Последнее редактирование:

Yuryj

Старейшина
Регистрация
28.01.15
Сообщения
915
Реакции
701
Yuryj не предоставил никакой дополнительной информации.
Вставлю и я свои пару слов. Тестировать ТС для БО можно двумя принципиально разными способами:
- на истории по барам без использования встроенного в мт4 тестера стратегий
- прогоном в тестере стратегий.
Для первого способа тестеры намного проще, их полно в открытом доступе. Но они работают только с ТС, сигналящими по закрытию сигнального бара, и не подходят для рисующих индикаторов. Не позволяют проводить оптимизацию параметров в автоматическом режиме. Тестеры, использующие встроенный тестер стратегий, в свою очередь можно разделить на две группы - работающие по закрытию бара или по всем тикам. И первые, и вторые интересны тем, что позволяют проводить оптимизацию. В первую группу попадают тестеры Лека, Андрея и Лексивектора. В них не производится прогон индикатора по всей истории котировок, а определяется результат по барам, а тестер стратегий используется для перебора параметров для оптимизации. Со второй группой интереснее. В этом случае производится прогон индикатора по всем тикам. Это позволяет тестировать абсолютно любые ТС - рисующие, сигналящие в середине бара, с экспирацией, не кратной длительности ТФ. Как раз о подобном тестере выше пишут AutoTrader и sergdk1986. И оптимизация доступна, нельзя только учесть плавающий процент выплат (как у Бинари). Единственный минус - для прогона по всем тикам требуется некоторое время (особенно для оптимизации). Подобный тестер я написал полтора года назад (в том числе с двумя типами мартина). Из-за его медлительности даже пришлось собрать себе новый комп. Но на мт4 все равно работает медленно, т.к. может быть задействовано только одно ядро проца. На мт5 работало намного шустрее, все ядра задействуются на 100%. Но в конце концов эту разработку забросил и вернулся к тестеру Андрея, т.к. недолюбливаю сам процесс тестирования/оптимизации.
 

блондинка

Старейшина
Регистрация
27.04.14
Сообщения
1,562
Реакции
1,780
блондинка не предоставил никакой дополнительной информации.
Вообще, хорошо бы площадку иметь специально для обсуждения нюансов торговли ботами, их оптимизации и практики применения.Тут у всех разные подходы и каждый открывает свою "америку",что с одной стороны и правильно, а с другой из за ограниченности возможностей и потенциала одинокого "мыслителя"мало жизнеспособно и непродуктивно. Нужно иметь колоссальную мотивацию, что бы продвигаться и достичь хоть какого то успеха и на это уходят годы.
Вот так и с топик стартер по непроторённому пути зашёл, совершенно для него новому и неизвестному, с неизбежной "ломкой дров".
Форум и обсуждения в основном вязнут в проблеме нахождения рабочих стратегий для авто торговли,которые чрезвычайно трудно найти, а дальше сплошь "не паханное поле".
Рисующие индикаторы имеют применение,но нигде не обсуждаются.
Это так - пожелание.
 
Последнее редактирование:

sergdk1986

Новичок
Регистрация
22.03.19
Сообщения
7
Реакции
0
sergdk1986 не предоставил никакой дополнительной информации.
Интересно, а для каких систем это не подходит?
На вскидку, для систем требующих функцию sleep(), чтоб открывать одну за другой сделки без учета тика.
Автообъединение сообщений:

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

Вообще, хорошо бы площадку иметь специально для обсуждения нюансов торговли ботами, их оптимизации и практики применения.Тут у всех разные подходы и каждый открывает свою "америку",что с одной стороны и правильно, а с другой из за ограниченности возможностей и потенциала одинокого "мыслителя"мало жизнеспособно и непродуктивно.
Здесь не совсем согласен. Конечно, офтопик, но когда каждый открывает свою "америку" - это очень важно для развития в целом. Грубо говоря, если все начнут пахать в одну сторону, то мы будет иметь охрененный айфон 10, в котором мощей более, чем в моем компе 5 лет назад. А ездить при этом будем на крайне неэффективных двс. А если каждый будет открывать свою "америку", то мы будем до сих пор звонить по старинной мотороле с 200, но у нас будут телепорты, пневмотранспорт из футурамы, сумки, которые больше внутри, чем снаружи, роботы для выгула животных, и масса другой фигни до которой додумаются изобретатели, не пошедшие по проторенному пути.
 
Последнее редактирование:

Yuryj

Старейшина
Регистрация
28.01.15
Сообщения
915
Реакции
701
Yuryj не предоставил никакой дополнительной информации.
Но такие тестеры же не эффективны на малой экспирации. Или я не прав? Если сигнал к открытию подается не в начале бара.
Такие тестеры применимы при следующих условиях:
- индикатор не рисует
- открытие сделки по открытию бара
- величина экспирации кратна длительности рабочего ТФ.
В принципе, большинство трейдеров именно с такими ТС и работают.
 
Верх Низ