Скачать MetaTrader 5

код закрытия сделки

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Вся активность MQL5.community у тебя на ладони. Заходи в раздел Стена!
aliev
11
aliev 2016.11.20 05:46 

Здравствуйте.

Нужен код для вставки в советник, чтобы он закрывал сделку либо по стоп-лосу,  либо после закрытия свечи если стоп-лос не сработал.

как написать такой код и вставить его в советник? Может есть у кого готовый код? 

Vladislav Andruschenko
91820
Vladislav Andruschenko 2016.11.20 07:35  

стоплосс устанавливается во время открытия сделки. прямиком в сделке - ВЫ устанавливаете стоплосс. 


Думаю Код, который Вам дадут, Вам не поможет, ибо Вы не сможете его "вставить" в советник.

Лучше обратитесь в фриланс.  

aliev
11
aliev 2016.11.20 17:18  
Vladislav Andruschenko:

стоплосс устанавливается во время открытия сделки. прямиком в сделке - ВЫ устанавливаете стоплосс. 


Думаю Код, который Вам дадут, Вам не поможет, ибо Вы не сможете его "вставить" в советник.

Лучше обратитесь в фриланс.  

советник я написал, и он работает. А вот что бы он закрывал сделку по закрытию свечи - ни как не получается. Думаю, что такой код я смогу вставить в свой советник.
Vladimir Karputov
Модератор
45767
Vladimir Karputov 2016.11.20 17:22  
aliev:
советник я написал, и он работает. А вот что бы он закрывал сделку по закрытию свечи - ни как не получается. Думаю, что такой код я смогу вставить в свой советник.
Подойдите к задаче по-другому: в момент появления новой свечи нужно закрыть позицию (если есть открытая). Новую свечу то сможете определить?
Vladislav Andruschenko
91820
Vladislav Andruschenko 2016.11.20 17:30  
aliev:
советник я написал, и он работает. А вот что бы он закрывал сделку по закрытию свечи - ни как не получается. Думаю, что такой код я смогу вставить в свой советник.

смею предположить что это нужно для мт4? 

 где то из соседних тем я уже писал про закрытие сделок на текущей свече - это неправильно, много вариантов.

Вам нужно закрывать по откртию новой свечи?

функция определения бара открытия сделки :

int BarOpenLastPos(string order_symbol="0",int tf=0,int order_type=-1,int order_magic=-1)
  {
   datetime t;
   int      i,k=OrdersTotal();

   if(order_symbol=="" || order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==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();
                    }
                 }
              }
           }
        }
     }
   return(iBarShift(order_symbol, tf, t, True));
  }


 функция закрытия:

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,clrNONE);
              }
           }
        }
     }
  }

 

итого надо вставить условие:

Если начался новый бар от открытия сделки - закрываем ее  

совмещаем две функции воедино и делаем так:

 

void ClosePosbyNextBar(string order_symbol="0",int tf=0,int order_type=-1,int order_magic=-1)
  {
   datetime t;
   int      i,k=OrdersTotal();

   if(order_symbol=="" || order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==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();
                     if(iBarShift(order_symbol, tf, t, True)>=1)OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,clrNONE);
                    }
                 }
              }
           }
        }
     }
   return;
  }

параметры:

//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    order_symbol - наименование инструмента   (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    order_type - операция                     (-1   - любая позиция)        |
//|    order_magic - MagicNumber                 (-1   - любой магик)          |
//|                                                                            |
//+----------------------------------------------------------------------------+


 

aliev
11
aliev 2016.11.21 03:36  
Vladislav Andruschenko:

смею предположить что это нужно для мт4? 

 где то из соседних тем я уже писал про закрытие сделок на текущей свече - это неправильно, много вариантов.

Вам нужно закрывать по откртию новой свечи?

функция определения бара открытия сделки :

int BarOpenLastPos(string order_symbol="0",int tf=0,int order_type=-1,int order_magic=-1)
  {
   datetime t;
   int      i,k=OrdersTotal();

   if(order_symbol=="" || order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==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();
                    }
                 }
              }
           }
        }
     }
   return(iBarShift(order_symbol, tf, t, True));
  }


 функция закрытия:

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderPrice(),0,clrNONE);
              }
           }
        }
     }
  }

 

итого надо вставить условие:

Если начался новый бар от открытия сделки - закрываем ее  

совмещаем две функции воедино и делаем так:

 

void ClosePosbyNextBar(string order_symbol="0",int tf=0,int order_type=-1,int order_magic=-1)
  {
   datetime t;
   int      i,k=OrdersTotal();

   if(order_symbol=="" || order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==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();
                     if(iBarShift(order_symbol, tf, t, True)>=1)OrderClose(OrderTicket(),OrderLots(),OrderPrice(),0,clrNONE);
                    }
                 }
              }
           }
        }
     }
   return;
  }

параметры:

//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    order_symbol - наименование инструмента   (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    order_type - операция                     (-1   - любая позиция)        |
//|    order_magic - MagicNumber                 (-1   - любой магик)          |
//|                                                                            |
//+----------------------------------------------------------------------------+


 

Большое всем спасибо! Буду дальше разбираться. 
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий