Скачать MetaTrader 5

Вопрос от новичка. Нужна помощь по коду. Советник 2 свечи!!!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Алексей
27
Алексей 2016.03.10 12:43 

Добрый день. Есть эксперт работающих на анализе 2 свечей. Код ниже. Писал не я.

Нужно к нему прикрутить следующее условие.

Если не установлен TP или SL , то ордер будет открыт до тех пор, пока не сменится направление свечи.

Пример.

Тайм фрейм 15МИН. Предположим открылся ордер на BAY (TP или SL  не установлены) . Две свечи подряд движение было в нашу сторону. 3 свеча оказалась в противоположную сторону. Нужно , при открытии 4 свечи закрыть ордер и заново запустить алгоритм на проверку.

Буду благодарен всем за помощь.


Код советника.

//---- input parameters
extern         int      Magic = 2008;
extern         double   Lot   = 0.1;
extern double TP =  50;                                  // ТэйкПрофит ордера
extern double SL =  15;                                  // СтопЛосс ордера
int            StopLevel;
int            t=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
   SL=SL*Point;                                        // СтопЛосс в пунктах
   TP=TP*Point;                                        // ТэйкПрофит в пунктах
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double   Stop;

   static datetime prevtime=0;
   if(Time[0]!=prevtime)
     {
      prevtime=Time[0];

      Checkt();
      if(t<=0) //нет открытого ордера
        {
         if(Open[4]<Close[4] && (Low[3]+Close[3])<(Open[3]+Close[3]) && 
            (Low[2]+Close[2])<(Open[2]+Close[2]) && Open[1]>Close[1]) //Сигнал на BUY
           {
            t=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,Ask-SL,Ask+TP,"",0,0,Blue);
            if(t<0) Alert("OrderSend Error: ",GetLastError());
           }
         if(Open[4]>Close[4] && (High[3]+Close[3])>(Open[3]+Close[3]) && 
            (High[2]+Close[2])>(Open[2]+Close[2]) && Open[1]<Close[1]) //Сигнал на SELL
           {
            t=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,Bid+SL,Bid-TP,"",0,0,Red);
            if(t<0) Alert("OrderSend Error: ",GetLastError());
           }
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Checkt()
  {
   if(t>0)
     {
      if(!OrderSelect(t,SELECT_BY_TICKET))
         t=0;
      else if(OrderCloseTime()!=0)
                                t=0;
     }
  }
//+------------------------------------------------------------------+
Vladimir Karputov
Модератор
49455
Vladimir Karputov 2016.03.10 13:12  
Пожалуйста, при вставке кода руководствуйтесь справкой: Правильно вставляем код на форуме (я вставил код правильно). Также крайне желательно свой код причёсывать при помощи стилизатора: Работа с исходным кодом: Стилизатор - Разработка программ
Александр
95
Александр 2016.03.11 06:52  
Алексей:

Добрый день. Есть эксперт работающих на анализе 2 свечей. Код ниже. Писал не я.

Нужно к нему прикрутить следующее условие.

Если не установлен TP или SL , то ордер будет открыт до тех пор, пока не сменится направление свечи.

Пример.

Тайм фрейм 15МИН. Предположим открылся ордер на BAY (TP или SL  не установлены) . Две свечи подряд движение было в нашу сторону. 3 свеча оказалась в противоположную сторону. Нужно , при открытии 4 свечи закрыть ордер и заново запустить алгоритм на проверку.

Буду благодарен всем за помощь.


Код советника.

Надо к нему трал прикрутить и готово. Можно даже ничего не менять, отдельный советник запустить. Например этот https://www.mql5.com/ru/code/13853
Алексей
27
Алексей 2016.03.11 10:41  

Спасибо, но мне нужно другое. см. пример.

И можно добавить это решение сразу в код?

Александр
95
Александр 2016.03.11 12:52  
Алексей:

Спасибо, но мне нужно другое. см. пример.

И можно добавить это решение сразу в код?

А если в нашу сторону одна свеча, или не одной, тогда чего делать?
Алексей
27
Алексей 2016.03.11 15:16  
Александр:
А если в нашу сторону одна свеча, или не одной, тогда чего делать?
Если одна или более свечей в нашу сторону, то держим ордер открытым, и ждем смены движения в обратную сторону, и после свечи в противоположную сторону, на открытии новой свечи закрываем ордер и открываем ордер в обратную сторону от закрытого ордера, аналогично если сразу пойдет в противоположную сторону.
Александр
95
Александр 2016.03.12 07:07  
Алексей:
Если одна или более свечей в нашу сторону, то держим ордер открытым, и ждем смены движения в обратную сторону, и после свечи в противоположную сторону, на открытии новой свечи закрываем ордер и открываем ордер в обратную сторону от закрытого ордера, аналогично если сразу пойдет в противоположную сторону.
Теперь понятно, пошла в нашу: ждем, развернулась: закрыли на следующей. Поковыряюсь напишу...
Александр
95
Александр 2016.03.12 14:15  
Алексей:
Если одна или более свечей в нашу сторону, то держим ордер открытым, и ждем смены движения в обратную сторону, и после свечи в противоположную сторону, на открытии новой свечи закрываем ордер и открываем ордер в обратную сторону от закрытого ордера, аналогично если сразу пойдет в противоположную сторону.
//+------------------------------------------------------------------+
//|                                                                  |
//|          закрытие ордеров по условию                                   
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Muamotomukalliu"
#property link      ""
//+------------------------------------------------------------------+
//| Блок переменных                               
//+------------------------------------------------------------------+
input int    Magic=2008;
//+------------------------------------------------------------------+
//|              |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|               |
//+------------------------------------------------------------------+
int deinit()
  {

   return(0);
  }
datetime Prev_Time=0;
//+------------------------------------------------------------------+
//|                          |
//+------------------------------------------------------------------+
int start()
  {
//----
   double A=NormalizeDouble(Ask,Digits);
   double B=NormalizeDouble(Bid,Digits);

//----
   if(OrdersTotal()>0) // Если уже совершена покупка или продажа.
     {
      if(Fun_New_Bar()==false) // Если нет нового бара выходим.
        {
         return(0);
        }
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))       // Если есть новый бар выбираем ордер (он у нас должен быть всего один).
        {
         if(OrderType()==OP_BUY && Magic) // Если это Buy..
           {
            if(Open[1]-Close[1]>=Point*1) //если цена 
              {
               if(OrderClose(OrderTicket(),OrderLots(),B,0))          // ..закрываем его.
               return(0);
              }
           }
         if(OrderType()==OP_SELL && Magic) // Если это Sell..
           {
            if(Open[1]-Close[1]<=Point*1)
              {
               if(OrderClose(OrderTicket(),OrderLots(),A,0))          // ..закрываем его.
               return(0);
              }
           }
        }
     }

   return(0);
  }
//--
bool Fun_New_Bar() // Ф-ия обнаружения ..
  {                                             // .. нового бара
   if(Prev_Time!=Time[0])
     {
      return(true);
     }
   return(false);
  }

//+------------------------------------------------------------------+
Отдельный советник на закрытие по твоему условию, в отдельное окно по тому же инструменту с тем же периодом поставишь, должно работать, в твой не могу запихать, чего то со временем нелады там...тейк профит со стоп лосом не забудь убрать, или подальше отодвинуть
Алексей
27
Алексей 2016.03.12 15:17  
Александр:
Отдельный советник на закрытие по твоему условию, в отдельное окно по тому же инструменту с тем же периодом поставишь, должно работать, в твой не могу запихать, чего то со временем нелады там...тейк профит со стоп лосом не забудь убрать, или подальше отодвинуть
Спасибо большое, буду смотреть.
Александр
95
Александр 2016.03.12 15:40  
Алексей:
Спасибо большое, буду смотреть.
Работает как вы просили, пока в нашу сторону свечи ничего не делает, только одна в обратную на следующей закрывает. А что хороший советник этот? Тестировали?
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий