Группа "Стол заказов MQL"

Рейтинг 2087



РЕКОМЕНДУЮ



Виртуальный трал

Здравствуйте!
на днях мы обсуждали работу этого советника virtual_trailing_stop.mq4 (4 Kb)
Прошу отладить работу данного советника.
Собственно надо заставить его закрывать правильно ордера, что меня лично смущает — отсутствие параметра «проскальзование».
Советник тестировал на Альпари.
К сожалению скринов пока нет, но ошибку 129 видел своими глазами (правда один раз), так он просто не закрывает ордера.
  • 0
  • Просмотров: 5160
  • 26 января 2016, 02:03
  • radox
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Написать советник по индикатору Forex Goiler...
Следующая запись в группе  
Слегка изменить индикатор МА
26 января 2016
26 января 2016

Комментарии (17)

+
0
Собственно надо заставить его закрывать правильно ордера, что меня лично смущает — отсутствие параметра «проскальзование».


Проскальзывание есть, вывел его в настройки.

так он просто не закрывает ордера.


Советник предназначен для работы только с одним ордером.
Сейчас поставлю на отладку.


//+------------------------------------------------------------------+
//|                                        virtual_trailing_stop.mq4 |
//|                                         Copyright 2015, cmillion |
//|                                               http://cmillion.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, cmillion@narod.ru"
#property link      "http://cmillion.ru"
#property strict
//---
input int     Stoploss      = 0;     // Стоп-лосс
input int     Takeprofit    = 0;     // Тейк-профит
input int     TrailingStop  = 5;     // Длина трала
input int     TrailingStart = 5;     // Минимальная прибыль для старта
input int     TrailingStep  = 1;     // Шаг трала
input int     Slippage      = 100;   // Проскальзывание
input int     Magic         = 31115; // Магик
double   TrallB = 0;
double   TrallS = 0;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   bool c;
   double OOP,SL;
   int b=0,s=0,tip,TicketB=0,TicketS=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            tip = OrderType();
            OOP = NormalizeDouble(OrderOpenPrice(),Digits);
            if(tip==OP_BUY)
              {
               b++;
               TicketB=OrderTicket();
               if(Stoploss!=0   && Bid<=OOP - Stoploss   * Point) c=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slippage,clrNONE);
               if(Takeprofit!=0 && Bid>=OOP + Takeprofit * Point) c=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slippage,clrNONE);
               if(TrailingStop>0)
                 {
                  SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
                  if(SL>=OOP+TrailingStart*Point && (TrallB==0 || TrallB+TrailingStep*Point<SL)) TrallB=SL;
                 }
              }
            if(tip==OP_SELL)
              {
               s++;
               if(Stoploss!=0   && Ask>=OOP + Stoploss   * Point) {if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slippage,clrNONE)) continue;}
               if(Takeprofit!=0 && Ask<=OOP - Takeprofit * Point) {if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slippage,clrNONE)) continue;}
               TicketS=OrderTicket();
               if(TrailingStop>0)
                 {
                  SL=NormalizeDouble(Ask+TrailingStop*Point,Digits);
                  if(SL<=OOP-TrailingStart*Point && (TrallS==0 || TrallS-TrailingStep*Point>SL)) TrallS=SL;
                 }
              }
           }
        }
     }
   if(b!=0)
     {
      if(b>1) Comment("Трал корректно работает только с 1 ордером");
      else
      if(TrallB!=0)
        {
         Comment("Тралим ордер ",TicketB);
         DrawHline("SL Buy",TrallB,clrBlue,1);
         if(Bid<=TrallB)
           {
            if(OrderSelect(TicketB,SELECT_BY_TICKET))
               if(OrderProfit()>0)
                  if(!OrderClose(TicketB,OrderLots(),NormalizeDouble(Ask,Digits),Slippage,clrRed))
                     Comment("Ошибка закрытия ордера ",GetLastError());
           }
        }
     }
   else {TrallB=0;ObjectDelete("SL Buy");}
//---
   if(s!=0)
     {
      if(s>1) Comment("Трал корректно работает только с 1 ордером");
      else
      if(TrallS!=0)
        {
         Comment("Тралим ордер ",TicketS);
         DrawHline("SL Sell",TrallS,clrRed,1);
         if(Ask>=TrallS)
           {
            if(OrderSelect(TicketS,SELECT_BY_TICKET))
               if(OrderProfit()>0)
                  if(!OrderClose(TicketS,OrderLots(),NormalizeDouble(Ask,Digits),Slippage,clrRed))
                     Comment("Ошибка закрытия ордера ",GetLastError());
           }
        }
     }
   else {TrallS=0;ObjectDelete("SL Sell");}
//---
   int err;
   if(IsTesting() && OrdersTotal()==0)
     {
      double Lot=0.1;
      err=OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,0,0,"тест",0);
      //err=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Slippage,0,0,"тест",0);
      return(0);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DrawHline(string name,double P,color clr,int WIDTH)
  {
   if(ObjectFind(name)!=-1) ObjectDelete(name);
   ObjectCreate(name,OBJ_HLINE,0,0,P,0,0,0,0);
   ObjectSet(name,OBJPROP_COLOR,clr);
   ObjectSet(name,OBJPROP_STYLE,2);
   ObjectSet(name,OBJPROP_WIDTH,WIDTH);
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 26 января 2016, 06:27
+
0
Совсем мертвый трал, не шевелится даже. Нужно заново переписывать или делать подобный на моей основе. А так он только для тестера.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 26 января 2016, 10:37
+
0
Советник предназначен для работы только с одним ордером.

я его пробовал. у меня он даже с одним ордером ничего не закрывал. только линию выставлял и на этом его работа заканчивалась. так что правильно. «совсем мёртвый». хотелось бы тоже в архив добавить рабочий виртуальный трал.:) 
avatar

  5  igr-yard Сообщений: 77

  • 26 января 2016, 12:45
+
0
На основе своей версии еще что то могу сделать: www.opentraders.ru/downloads/922/
А этот код не возьмусь править.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 26 января 2016, 18:30
+
0
Думаю неважно чей код, если будет работать без сбоев*za* 
avatar

  8  radox Автор Сообщений: 9

  • 26 января 2016, 18:59
+
0
Пробуйте мой вариант: www.opentraders.ru/downloads/922/
Я тоже поставлю его на тестирование.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 27 января 2016, 02:18
+
0
Обязательно попробую — немедленно:) 
avatar

  8  radox Автор Сообщений: 9

  • 27 января 2016, 08:21
+
0
Если открываете ордер руками, ставьте магик 0.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 27 января 2016, 08:29
+
0
Только что тралил и закрыл ордер:



Еще попробую трал цмиллиона с магиком 0.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 27 января 2016, 08:32
+
+1
По стопу трал Хлыстова закрыл позу:

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 27 января 2016, 10:23
+
0
Закрыл и по тралу, так что оба работают только магик нужно ставить 0 если открываем ручками.

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 27 января 2016, 10:30
+
0
Андрей! работает только с одним ордером? и ставится только на пару или в дополнительное окно и контролирует все пары?
avatar

  5  igr-yard Сообщений: 77

  • 27 января 2016, 11:45
+
0
Один ордер и один символ оба трала.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 27 января 2016, 16:32
+
0
Попробуйте этот: opentraders.ru/downloads/1021/
avatar

  18  Andrju81 Сообщений: 245 - Андрей

  • 29 января 2016, 04:15
+
0
Здравствуйте! Вот посмотрел последние предложенные варианты испытал их на дёмке, ну что сказать уж слишком всё виртуально теперь и брокер да и мы сами незнаем где линия стопа
Да все они закрывают ордер только вот где и как большой вопрос — похоже на самообман.
В такой проге динамическая линия стопа обязана присутствовать 100% а так кто знает что они там закрывают судя по профиту не совсем то что указано в настройках.
Мутно всё как то.*wall* 
avatar

  8  radox Автор Сообщений: 9

  • 30 января 2016, 03:41
+
0
В этом тральщике вся информация о стопах и профитах отображается в комментариях в левом верхнем углу:

Как можете заметить, на скрине отображается текущий профит(Current Profit) 40 пунктов, а текущий стоп (Current Stop) на уровне 10 пунктов, т.е. в настройках было установлено начальный уровень трала (TrailingStart) 10 п., фиксированный уровень трала (TralingStop) 30 п., шаг трала (TralingStep) 1 п… Когда профит достиг 40 пунктов, советник «перенес»(запомнил) стоп на уровень безубытка плюс 10 пунктов. Если цена окажется на этом уровне или при резком движении даже заскочит далеко вниз, если был ордер на покупку, то советник отдаст приказ брокеру на рыночное закрытие ордера. Вот теперь подумайте, оно Вам надо?!..
avatar

  18  Andrju81 Сообщений: 245 - Андрей

  • 31 января 2016, 02:51
+
0
Здравствуйте!
Ну кажись всё получилось, закрывает всё на раз
<code>//+------------------------------------------------------------------+
//|                                        virtual_trailing_stop.mq4 |
//|                                         Copyright 2015, cmillion |
//|                                               http://cmillion.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, cmillion@narod.ru"
#property link      "http://cmillion.ru"
#property strict
//---
input int     Stoploss      = 0;    // Стоп-лосс
input int     Takeprofit    = 0;    // Тейк-профит
input int     TrailingStop  = 5;    // Длина трала
input int     TrailingStart = 5;    // Минимальная прибыль для старта
input int     TrailingStep  = 1;    // Шаг трала
input int            slippage=30;   // Проскальзование
double   TrallB = 0;
double   TrallS = 0;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double OOP,SL;
   int b=0,s=0,tip,TicketB=0,TicketS=0;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            tip = OrderType();
            OOP = NormalizeDouble(OrderOpenPrice(),Digits);
            if(tip==OP_BUY)
              {
               b++;
               TicketB=OrderTicket();
               if(Stoploss!=0   && Bid<=OOP - Stoploss   * Point) {if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,clrNONE)) continue;}
               if(Takeprofit!=0 && Bid>=OOP + Takeprofit * Point) {if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,clrNONE)) continue;}
               if(TrailingStop>0)
                 {
                  SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
                  if(SL>=OOP+TrailingStart*Point && (TrallB==0 || TrallB+TrailingStep*Point<SL)) TrallB=SL;
                 }
              }
            if(tip==OP_SELL)
              {
               s++;
               if(Stoploss!=0   && Ask>=OOP + Stoploss   * Point) {if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,clrNONE)) continue;}
               if(Takeprofit!=0 && Ask<=OOP - Takeprofit * Point) {if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,clrNONE)) continue;}
               TicketS=OrderTicket();
               if(TrailingStop>0)
                 {
                  SL=NormalizeDouble(Ask+TrailingStop*Point,Digits);
                  if(SL<=OOP-TrailingStart*Point && (TrallS==0 || TrallS-TrailingStep*Point>SL)) TrallS=SL;
                 }
              }
           }
        }
     }
   if(b!=0)
     {
      if(b>1) Comment("Трал корректно работает только с 1 ордером");
      else
      if(TrallB!=0)
        {
         Comment("Тралим ордер ",TicketB);
         DrawHline("SL Buy",TrallB,clrBlue,1);
         if(Bid<=TrallB)
           {
            if(OrderSelect(TicketB,SELECT_BY_TICKET))
               if(OrderProfit()>0)
                  if(!OrderClose(TicketB,OrderLots(),NormalizeDouble(Bid,Digits),slippage,clrRed))
                     Comment("Ошибка закрытия ордера ",GetLastError());
           }
        }
     }
   else {TrallB=0;ObjectDelete("SL Buy");}
//---
   if(s!=0)
     {
      if(s>1) Comment("Трал корректно работает только с 1 ордером");
      else
      if(TrallS!=0)
        {
         Comment("Тралим ордер ",TicketS);
         DrawHline("SL Sell",TrallS,clrRed,1);
         if(Ask>=TrallS)
           {
            if(OrderSelect(TicketS,SELECT_BY_TICKET))
               if(OrderProfit()>0)
                  if(!OrderClose(TicketS,OrderLots(),NormalizeDouble(Ask,Digits),slippage,clrRed))
                     Comment("Ошибка закрытия ордера ",GetLastError());
           }
        }
     }
   else {TrallS=0;ObjectDelete("SL Sell");}
//---
   int err;
   if(IsTesting() && OrdersTotal()==0)
     {
      double Lot=0.1;
      err=OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),slippage,0,0,"тест",0);
      err=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,0,0,"тест",0);
      return(0);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DrawHline(string name,double P,color clr,int WIDTH)
  {
   if(ObjectFind(name)!=-1) ObjectDelete(name);
   ObjectCreate(name,OBJ_HLINE,0,0,P,0,0,0,0);
   ObjectSet(name,OBJPROP_COLOR,clr);
   ObjectSet(name,OBJPROP_STYLE,2);
   ObjectSet(name,OBJPROP_WIDTH,WIDTH);
  }
//+------------------------------------------------------------------+
</code>

Редактирован: 6 февраля 2016, 06:52
avatar

  8  radox Автор Сообщений: 9

  • 2 февраля 2016, 12:02

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари