Главная
Форум
Лаборатория стратегий и советников к ним.

Для того, чтобы использовать все возможности сайта, мы рекомендуем Вам person_add Зарегистрироваться или person Войти

Форум Трейдеров » Торговые стратегии и программирование на MQL » Лаборатория стратегий и советников к ним. » Exp - Templates #8 Tester Light (Программирование советников по индикаторам - Легко!)
Exp - Templates #8 Tester Light
Дата: Четверг, 22.11.2012, 21:05 | Сообщение # 1 Написал: expforex
Группа: Администраторы
Сообщений: 9682
Награды: 41
Статус: Оффлайн



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

attach_file Прикрепления

4675889.png(111.4 Kb)

gestureс Уважением, Владислав Expforex

Дата: Суббота, 21.01.2017, 10:51 | Сообщение # 121 Написал: expforex
Группа: Администраторы
Сообщений: 9682
Награды: 41
Статус: Оффлайн

Доливатор называется у меня. Или дополнительное открытие. 

https://www.expforex.com/load....1-0-163

gestureс Уважением, Владислав Expforex

Дата: Воскресенье, 22.01.2017, 17:02 | Сообщение # 122 Написал: viktorosyka_
Группа: Удаленные





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

Дата: Воскресенье, 22.01.2017, 19:38 | Сообщение # 123 Написал: expforex
Группа: Администраторы
Сообщений: 9682
Награды: 41
Статус: Оффлайн

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

насчет доработки, тут простой "доработкой не " отделаться. 

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

вот простейшая функция последней цены, последней открытой сделки:


Код
double PriceOpenLastPos(string order_symbol="",long order_type=-1,long order_magic=-1)
  {
   datetime t;
   double   r=0;
   long      i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==order_symbol || order_symbol=="")
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_type<0 || OrderType()==order_type)
                 {
                  if(order_magic<0 || OrderMagicNumber()==order_magic)
                    {
                     if(t<OrderOpenTime())
                       {
                        t=OrderOpenTime();
                        r=OrderOpenPrice();
                       }
                    }
                 }
              }
           }
        }
     }
   return(r);
  }


на основе ее уже сделать функцию не цены а лота. 
ну и прописать условие,

Если Последняя цена Бай ниже чем текущая - Дистанция для доливки - открываем позицию с удвоенным лотом
тоже самое наоборот для селл.


Шаблон здесь абсолютно не при чем. 
Шабло сделан для облегчения программирования советников для новичков.

gestureс Уважением, Владислав Expforex

Дата: Вторник, 12.09.2017, 13:50 | Сообщение # 124 Написал: Viktor940
Группа: Пользователи
Сообщений: 6
Награды: 0
Статус: Оффлайн

Уважаемый Влад! Помогите разобраться в написании советника по шаблону-10.
Например советник выставляет ордер при закрытии свечи выше  верней линии Envelopes - Sell, а ниже нижней линии Buy. Как  коректировать ширину канала  от угла наклона трендовой линии.
Или проще говоря Как значение буффера одного индикатора вставить в настройки другого индикатора.

attach_file Прикрепления

6581405.rar(50.2 Kb)

Сообщение отредактировал Viktor940 - Вторник, 12.09.2017, 13:57

Дата: Четверг, 10.05.2018, 21:28 | Сообщение # 125 Написал: kuzya
Группа: Пользователи
Сообщений: 3
Награды: 0
Статус: Оффлайн

Сообщение: 19944 Написал: expforex Ваш ответ:, Здравствуйте,Влад!А я тоже скачал у вас этот шаблон №8.По индикаторам,практически по всем,всё нормально у меня получается.А вот по стрелкам у меня ничего не выходит.Помогите,пожалуйста.Вообще сделок не открывает.

attach_file Прикрепления

6233931.mq4(66.2 Kb) · Indikator.mq4(13.6 Kb)

Сообщение отредактировал kuzya - Четверг, 10.05.2018, 21:34

Дата: Пятница, 11.05.2018, 08:43 | Сообщение # 126 Написал: expforex
Группа: Администраторы
Сообщений: 9682
Награды: 41
Статус: Оффлайн

Сообщение: 24415 Написал: kuzya Ваш ответ:

Здравствуйте.
я посмотрел Ваш индикатор.
ОН ВЫГЛЯДИТ ТАК:


Вы все сделали правильно, но есть одна особенность использования сигналов у 90% индикаторов. 
Это бар получения сигнала. в 90% случаях ПРАВИЛЬНО и ЛОГИЧНО получать сигнал с закрытого бара.
Подробно можно почитать в моей статье: Сигналы индикаторов с закрытого бара. 
Автор индикатора это понимает. Поэтому сразу дает сигналы на закрытом баре, а не генерирует ложные на текущем.
Я немного изменил Ваш код, добавив только сигнал по закрытому бару. И все работает.


код такоЙ:
   

Код
double val1 = iCustom(Symbol(),0,IndName,Notes,ZigZagDepth,RetraceDepthMin,RetraceDepthMax,
ShowAllLines,ShowAllBreaks,ShowTargets,Target1Multiply,Target2Multiply,HideTransitions,4,1);
   double val2 = iCustom(Symbol(),0,IndName,Notes,ZigZagDepth,RetraceDepthMin,RetraceDepthMax,
ShowAllLines,ShowAllBreaks,ShowTargets,Target1Multiply,Target2Multiply,HideTransitions,5,1);

   

attach_file Прикрепления

6197021.jpg(113.2 Kb) · 6229098.jpg(145.0 Kb)

gestureс Уважением, Владислав Expforex

Дата: Пятница, 11.05.2018, 10:29 | Сообщение # 127 Написал: kuzya
Группа: Пользователи
Сообщений: 3
Награды: 0
Статус: Оффлайн

Сообщение: 24417 Написал: expforex Ваш ответ:, Большое спасибо!Получилось.А то я уже почти месяц мучился с этим вопросом.Дело в том,что я начал изучать MQL для себя.Это вроде практики.Да и шаблон конечно удобная вещь.Я просто не знал про индикаторы,что их так пишут.Мелочь-а приятно! biggrin Спасибо за быстрый ответ.

Дата: Суббота, 13.10.2018, 00:54 | Сообщение # 128 Написал: eherher
Группа: Пользователи
Сообщений: 4
Награды: 0
Статус: Оффлайн

Добрый день Владислав. Скачал шаблон со страницы https://www.expforex.com/load/strategy_forex/exp_templates_8_tester_light/8-1-0-107.

 Сделал советника, на простом пересечении МА. Получилось. Но советник, после закрытия прибыли или стопа, открывает, еще, сделки в направлении сигналов МА. Как сделать чтобы было так, вернее какой код прописать в советнике, Одно пересечение МА, 1 сделка. Следующая сделка, только при обратном пересечении.

Если нужин код, то скажите какую часть кода выслать.Я так понимаю весь код "Exp - Templates #8 Tester Light", не нужно.

Да и на странице блога, там кто то задавал уже этот вопрос:

Последовал ответ от Вас:

там где: 

Код
//+------------------------------------------------------------------+ 
          //Открываем позицию 
          //+------------------------------------------------------------------+ 
          if((ONlyOnePosbySignal && !EPs(Symbol(),OP_BUY,Magic)) || !ONlyOnePosbySignal)

Меняем на : 

Код
//+------------------------------------------------------------------+ 
          //Открываем позицию 
          //+------------------------------------------------------------------+ 
          if((ONlyOnePosbySignal && !EPs(Symbol(),-1,Magic)) || !ONlyOnePosbySignal)

то же самое с СЕЛЛ

Я так понимаю, эти строки, прописывать сразу после сигнала от индикатора.

Заранее спасибо за ответ.

Дата: Суббота, 13.10.2018, 10:05 | Сообщение # 129 Написал: expforex
Группа: Администраторы
Сообщений: 9682
Награды: 41
Статус: Оффлайн

Сообщение: 24539 Написал: eherher Ваш ответ:

приветствую. 

по умолчанию советник торгует одной бай и одной селл позицией. 
вот код:
 

Код
if(timeCheckSignal!=Time[0])

     {
      //+------------------------------------------------------------------+
      // Если сигнал на бай:
      //+------------------------------------------------------------------+
      if(Signal==1)// buy
        {
         //Вычисляем стоплосс
         if(StopLoss!=0)sl=Bid-StopLoss*Point; else sl=0;
         // ВЫчисляем тейкпрофит
         if(TakeProfit!=0)tp=Ask+TakeProfit*Point; else tp=0;
         //+------------------------------------------------------------------+
         //Закрываем противоположную позицию
         //+------------------------------------------------------------------+
         if(ClosePosifChange)CPD(Symbol(),OP_SELL,Magic);
         //+------------------------------------------------------------------+
         //Открываем позицию
         //+------------------------------------------------------------------+
         if((ONlyOnePosbySignal && !EPs(Symbol(),OP_BUY,Magic)) || !ONlyOnePosbySignal)
           {
            OPs(Symbol(),OP_BUY,GetSizeLot(),sl,tp,Magic,"Templates www.expforex.com");
            timeCheckSignal=Time[0];
           }

        }

      //+------------------------------------------------------------------+
      // Если сигнал на селл:
      //+------------------------------------------------------------------+
      if(Signal==2)// селл
        {
         //Вычисляем стоплосс
         if(StopLoss!=0)sl=Ask+StopLoss*Point; else sl=0;
         // ВЫчисляем тейкпрофит
         if(TakeProfit!=0)tp=Bid-TakeProfit*Point; else tp=0;
         //Закрываем противоположную позицию
         if(ClosePosifChange)CPD(Symbol(),OP_BUY,Magic);
         //+------------------------------------------------------------------+
         //Открываем позицию
         //+------------------------------------------------------------------+
         if((ONlyOnePosbySignal && !EPs(Symbol(),OP_SELL,Magic)) || !ONlyOnePosbySignal)
           {
            OPs(Symbol(),OP_SELL,GetSizeLot(),sl,tp,Magic,"Templates www.expforex.com");
            timeCheckSignal=Time[0];
           }

        }


Если Вам нужно, чтобы советник торговал только 1 позицией то этот код выше заменить на :

Код

  if(timeCheckSignal!=Time[0])

     {
      //+------------------------------------------------------------------+
      // Если сигнал на бай:
      //+------------------------------------------------------------------+
      if(Signal==1)// buy
        {
         //Вычисляем стоплосс
         if(StopLoss!=0)sl=Bid-StopLoss*Point; else sl=0;
         // ВЫчисляем тейкпрофит
         if(TakeProfit!=0)tp=Ask+TakeProfit*Point; else tp=0;
         //+------------------------------------------------------------------+
         //Закрываем противоположную позицию
         //+------------------------------------------------------------------+
         if(ClosePosifChange)CPD(Symbol(),OP_SELL,Magic);
         //+------------------------------------------------------------------+
         //Открываем позицию
         //+------------------------------------------------------------------+
         if((ONlyOnePosbySignal && !EPs(Symbol(),-1,Magic)) || !ONlyOnePosbySignal)
           {
            OPs(Symbol(),OP_BUY,GetSizeLot(),sl,tp,Magic,"Templates www.expforex.com");
            timeCheckSignal=Time[0];
           }

        }

      //+------------------------------------------------------------------+
      // Если сигнал на селл:
      //+------------------------------------------------------------------+
      if(Signal==2)// селл
        {
         //Вычисляем стоплосс
         if(StopLoss!=0)sl=Ask+StopLoss*Point; else sl=0;
         // ВЫчисляем тейкпрофит
         if(TakeProfit!=0)tp=Bid-TakeProfit*Point; else tp=0;
         //Закрываем противоположную позицию
         if(ClosePosifChange)CPD(Symbol(),OP_BUY,Magic);
         //+------------------------------------------------------------------+
         //Открываем позицию
         //+------------------------------------------------------------------+
         if((ONlyOnePosbySignal && !EPs(Symbol(),-1,Magic)) || !ONlyOnePosbySignal)
           {
            OPs(Symbol(),OP_SELL,GetSizeLot(),sl,tp,Magic,"Templates www.expforex.com");
            timeCheckSignal=Time[0];
           }

        }

      //+------------------------------------------------------------------+
      //+------------------------------------------------------------------+

     }


смысл в это строчке: 
         
Код
if((ONlyOnePosbySignal && !EPs(Symbol(),OP_BUY,Magic)) || !ONlyOnePosbySignal)
     заменить на 
         
Код
if((ONlyOnePosbySignal && !EPs(Symbol(),-1,Magic)) || !ONlyOnePosbySignal)

то же самое на селл
         
Код
if((ONlyOnePosbySignal && !EPs(Symbol(),OP_SELL,Magic)) || !ONlyOnePosbySignal)

заменить на 
         
Код
if((ONlyOnePosbySignal && !EPs(Symbol(),-1,Magic)) || !ONlyOnePosbySignal)


Эти строки находятся в функции start
139 и 161 строки 

По поводу регистрации - это общая система регистрации на сайтах UWeb поэтому проблем быть не должно.

gestureс Уважением, Владислав Expforex

Дата: Среда, 17.10.2018, 19:58 | Сообщение # 130 Написал: eherher
Группа: Пользователи
Сообщений: 4
Награды: 0
Статус: Оффлайн

Сообщение: 24540 Написал: expforex Ваш ответ:

Приветствую

Влад, спасибо за Ответ. Попробую переписать, и отпишусь что получиться.

Форум Трейдеров » Торговые стратегии и программирование на MQL » Лаборатория стратегий и советников к ним. » Exp - Templates #8 Tester Light (Программирование советников по индикаторам - Легко!)
Поиск:
Expforex Expforex Идеи для Форекс https://www.expforex.com/1NEWDESIGN/NEWLOGO/LOGONEW.png expforex@meta.ua Украина expforex2