Помогите кодом замка

 
//открытие позиции
   ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,3,SL,TP,"Покупаем- хи-хи ",Magic,0,Green);
      if(ticket > 0) Lastp1 = b1;
   MagicControl=ticket;
//=============================================
   ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,3,SL,TP,"Продаем- тра-ля-ля",Magic,0,Red);
   if(ticket < 0) Lastp2 = s1 ;
   MagicControl=ticket;


//========================== Контроль позиций ======================================+
   for ( int t = OrdersTotal() - 1; t >= 0; t -- )                  
   {       
      if (OrderSelect(t, SELECT_BY_POS, MODE_TRADES))                
      {           
        if (OrderSymbol()==Symbol())     
        { 
//+=================================================================================+
if(OrderType() == OP_SELL  && OrderMagicNumber()==Magic)
   {
   if ((Ask-OrderOpenPrice()) > (Point*50))
   {
   if (4CT<2CT && 3CT>1CT)
   {
   OrderSend(Symbol(),OP_BUY,lots*2,Ask,3,SL,TP,"Покупаем- хи-хи ",MagicControl,0,Green);
   }
   }
   }
//+=================================================================================+
if(OrderType() == OP_BUY  && OrderMagicNumber()==Magic)
   {
   if ((OrderOpenPrice()-Bid) < (Point*50))
   {
   if (4CT>2CT && 3CT<1CT)
   {
   OrderSend(Symbol(),OP_SELL,lots*2,Ask,3,SL,TP,"Покупаем- хи-хи ",MagicControl,0,Green);
   }
   }
   }
//+=================================================================================+

//+=================================================================================+*/
    }  // Symbol()  
  } // select
} //total 
//============================== Конец блока контроля ==============================+

имеется 2 типа сигналов: для торговли и для замков.

Замки по данному коду открываются корректно и соответствуют задумке. Помогите кодом. Необходимо чтобы суммировался профит от позиции и от его замка. Если сумма этой пары позиций больше "0" то необходимо закрыть обе позиции.

как это реализовать.

Пробовал таким образом, ничего не выходит.

//+=================================================================================+
if(OrderType() == OP_SELL  && OrderMagicNumber()==Magic)
   {
   if (OrderTicket()==MagicControl)
   {  
   prof1=OrderProfit();
   if(OrderType() == OP_BUY && OrderMagicNumber()==MagicControl)
   {
   prof2=OrderProfit();
   if ((prof1+prof2)>0)
   {
   OrderClose(OrderTicket(),lots,Ask,3,Yellow);
   OrderClose(OrderTicket(),lots,Bid,3,Yellow);
   }
   }
   }
   }
 

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

Ясности побольше, иначе Вас просто не поймут... 

 
  total=OrdersTotal();
Comment( LotsCounting() );
//+=================================================================================+
  // Проверка средств
  if(AccountFreeMargin()<(1000*Lots))
     {
       Print("We have no money. Free Margin = ", AccountFreeMargin());   
       return(0);  
     }
//===========================  Открытие позиций  ===================================+  
if ( NumberOfPositions(NULL , -1, -1 )<Orders )  //если  открытых позиций менее Orders
{
//+=================================================================================+
// Проверка условий для совершения сделки селл 
if (Lastp2 != s1)
{
if (! NumberOfBarOpenLastPos(NULL, 0,OP_SELL, Magic)  ==0) //запрет неск. поз на одном баре 
{
if (CM_1>CS_1 && CM_0<CS_0 && CM_0>MA)
{
     if (s1>s2 && Close[1]<ma2 && Bid<ma60)  
     {
     SL=0;TP=0;
      if(StopLoss>0)   SL=Bid+Point*StopLoss;
      if(TakeProfit>0) TP=Bid-Point*TakeProfit;
      lots=LotsCounting();    
   ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,3,SL,TP,"Продаем- тра-ля-ля",Magic,0,Red);
   if(ticket < 0) Lastp2 = s1 ;
   MagicControl=ticket;
   {
            Print("Ошибка открытия ордера SELL #", GetLastError()); 
            Sleep(10000);  
            prevtime = Time[1]; 
            return (0); 
         } 
       }
     }
   }
   }
//+=================================================================================+
// Проверка условий для совершения сделки селл 
if (Lastp1 != b2)
{
if (! NumberOfBarOpenLastPos(NULL, 0,OP_BUY, Magic)  ==0) //запрет неск. поз на одном баре 
{
if (CM_1<CS_1 && CM_0>CS_0 && CM_0<MA_0)
{
     if (b1<b2 && Close[1]>ma2 && Ask>ma60)  
     {
       
       
      SL=0;TP=0;
      if(StopLoss>0)   SL=Ask-Point*StopLoss;
      if(TakeProfit>0) TP=Ask+Point*TakeProfit;
      lots=LotsCounting();    
   ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,3,SL,TP,"Покупаем- хи-хи ",Magic,0,Green);
      if(ticket > 0) Lastp1 = b1;
   MagicControl=ticket;
   {
            Print("Ошибка открытия ордера BUY #", GetLastError()); 
            Sleep(10000); 
            prevtime = Time[1]; 
            return (0);
         } 
       }
     }
   }
   }
//+=================================================================================+
 }    //если  открытых позиций менее Orders 
//======================== конец блока открытия позиций ============================+

//========================== Контроль позиций встречные позиции ===============+
   for ( int t = OrdersTotal() - 1; t >= 0; t -- )                  
   {       
      if (OrderSelect(t, SELECT_BY_POS, MODE_TRADES))                
      {           
        if (OrderSymbol()==Symbol())     
        { 
//+=================================================================================+
if(OrderType() == OP_SELL  && OrderMagicNumber()==Magic)
   {
   if ((Ask-OrderOpenPrice()) > (Point*50))
   {
   if (4CT<2CT && 3CT>1CT)
   {
   OrderSend(Symbol(),OP_BUY,lots*2,Ask,3,SL,TP,"Покупаем- хи-хи ",MagicControl,0,Green);
   }
   }
   }
//+=================================================================================+
if(OrderType() == OP_BUY  && OrderMagicNumber()==Magic)
   {
   if ((OrderOpenPrice()-Bid) < (Point*50))
   {
   if (4CT>2CT && 3CT<1CT)
   {
   OrderSend(Symbol(),OP_SELL,lots*2,Ask,3,SL,TP,"Покупаем- хи-хи ",MagicControl,0,Green);
   }
   }
   }
//+=================================================================================+
if(OrderType() == OP_SELL  && OrderMagicNumber()==Magic)
   {
   if (OrderTicket()==MagicControl)
   {  
   prof1=OrderProfit();
   if(OrderType() == OP_BUY && OrderMagicNumber()==MagicControl)
   {
   prof2=OrderProfit();
   if ((prof1+prof2)>0)
   {
   OrderClose(OrderTicket(),lots,Ask,3,Yellow);
   OrderClose(OrderTicket(),lots,Bid,3,Yellow);
   }
   }
   }
   }
//+=================================================================================+*/
    }  // Symbol()  
  } // select
} //total 
//============================== Конец блока контроля ==============================+

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

Далее пытаюсь суммировать эти 2 встречных позиции. Так понятней?

 
Ща в видео покажу.
 
Что сделать или как мне вопрос задать?)))
 
 

Спасибо, очень полезное видео для меня. Тогда вот встречный вопрос, если не возможно в селе проверить бай.

Допустим  у меня есть позиция селл, убыточная, я открываю по моему сигналу встречную позицию бай с двойным лотом. Как мне определить их общий профит и когда он будет больше 0 закрыть оба ордера?

 
berezhnuy:

Спасибо, очень полезное видео для меня. Тогда вот встречный вопрос, если не возможно в селе проверить бай.

Допустим  у меня есть позиция селл, убыточная, я открываю по моему сигналу встречную позицию бай с двойным лотом. Как мне определить их общий профит и когда он будет больше 0 закрыть оба ордера?


Идти циклом по открытым ордерам,  считая профит. Когда он станет больше 0 - закрыть все. Всё.

 
Последний блок, это была просто попытка подсчитать общий профит 2х позиций
 
berezhnuy:
Последний блок, это была просто попытка подсчитать общий профит 2х позиций

Выбирайте и подключайте эти ф-ии и всё! Зачем велосипеды???

 
berezhnuy:

Спасибо, очень полезное видео для меня. Тогда вот встречный вопрос, если не возможно в селе проверить бай.

Допустим  у меня есть позиция селл, убыточная, я открываю по моему сигналу встречную позицию бай с двойным лотом. Как мне определить их общий профит и когда он будет больше 0 закрыть оба ордера?



Открыли встречный ордер с двойным лотом. Теперь нужно узнать сколько в деньгах стОит 1 пункт для минимального лота. Довольно сложная для начинающего задачка. Но поскольку у Вас удвоение, то задача упрощается. Смотрите, у вас открыт бай с лотом 0,1 и селл с тем же лотом = 0,1. Расстояние между ордерами = 20 пунктов. Ясно, что точка безубытка встанет на уровень 10 пунктов - убыток одного ордера будет покрыт прибылью другого - то есть, при равенстве лотов точка безубытка находится ровно посерёдке между ордерами.

А теперь пусть наш бай-ордер имеет лото = 0,2. Получается, что ему нужно пройти в профит всего 5 пунктов (четверть расстояния) чтоб покрыть убыток вверхунаходящегося селл-ордера с лотом = 0,1

То есть, Если у Вас лоты всегда пропорциональны числу 2, то можно не заморачиваться со стоимостью пункта.