Как узнать результат предыдущей сделки?

 

Кто может, подскажите.

Как узнать результат предыдущей сделки

Сработал профит или лосс?


Заранее с уважением и с рождеством.......
 
Как вариант - можно хранить где-нибудь ticket этой сделки. А потом выбрать ордер по этому тикету и функцией ордер профит узнать ее прибыль.
 
favoritefx писал (а):
Как вариант - можно хранить где-нибудь ticket этой сделки. А потом выбрать ордер по этому тикету и функцией ордер профит узнать ее прибыль.
Я решил написать функцию таким образом :
( функция должна определять кол-во лотов в зависимости от того как закрылась позиция)
только она не работает , что-не то
Это моя первая ф.. C утра сижу .....ь
int Lots()
{
if(OrderSelect(OrdersHistoryTotal( )-1,SELECT_BY_POS, MODE_HISTORY)==false) return(-1);

if(OrderType()==OP_BUY)
{if(OrderTakeProfit()>0 && OrderTakeProfit()<=OrderClosePrice()) Lot=1;
else Lot=Lot+1;}



if(OrderType()==OP_SELL)
{if(OrderTakeProfit()>0 && OrderTakeProfit()>=OrderClosePrice()) Lot=1;
else Lot=Lot+1;}

return(Lot) ;
}

Если кто поможет буду багодарен !
 
Для начала, вставляйте код с помощью кнопки  !
Вот так.. ;)
int Lots()
      {
      if(OrderSelect(OrdersHistoryTotal( )-1,SELECT_BY_POS,MODE_HISTORY)==false) return(-1);
      
      if(OrderType()==OP_BUY)
      {if(OrderTakeProfit()>0 && OrderTakeProfit()<=OrderClosePrice())  Lot=1;     
       else Lot=Lot+1;}
     
      
 
      if(OrderType()==OP_SELL)
      {if(OrderTakeProfit()>0 && OrderTakeProfit()>=OrderClosePrice())   Lot=1;
       else Lot=Lot+1;}
       
     return(Lot) ; 
      }
 
Вы проверяете, закрылась ли сделка по TakeProfit и если профит, то Lot=1, иначе Lot=Lot+1 !?????
Где проверка на закрытие по StopLoss ?
Должно быть примерно так.. (код не проверял!)
  int Lots()
      {
       if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY)==false) return(-1);
      
       if(OrderType()==OP_BUY)
         {
          if(OrderTakeProfit()>0 && OrderTakeProfit()<=OrderClosePrice())  
            {
             //если закрылись по тэйку
            }     
          if(OrderStopLoss()>0 && OrderStopLoss()>=OrderClosePrice())
            {
             //если закрылись по стопу
            }
         }
     
      if(OrderType()==OP_SELL)
        {
          if(OrderTakeProfit()>0 && OrderTakeProfit()>=OrderClosePrice())  
            {
             //если закрылись по тэйку
            }     
          if(OrderStopLoss()>0 && OrderStopLoss()<=OrderClosePrice())
            {
             //если закрылись по стопу
            }
         }
       
     return(Lot) ; 
      }
 

Я так делаю удвоение лота при предыдущем стопе:

datetime oot;
double   stp=MarketInfo(Symbol(), MODE_LOTSTEP);
double   dLot=MarketInfo(Symbol(), MODE_MINLOT);
int      h=HistoryTotal(), i, k, np;
 
for (i=0; i<h; i++) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
      if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
        if (oot<OrderOpenTime()) {
          oot=OrderOpenTime();
          np=i;
        }
      }
    }
  }
}
if (OrderSelect(np, SELECT_BY_POS, MODE_HISTORY)) {
  // нормализация
  if (stp>0 && stp<1) k=1/stp;
  else if (stp>=1) k=1;
  else k=10;
  if (OrderProfit()<0) dLot=MathRound(2*OrderLots()*k)/k;
}


 

Всех отозвавшихся благодарю!

Начинаю копаться

Причина обращения: