Уважаемые профи, проверьте код.

 

Уважаемые профи, проверьте код. В зависимости как закрывается сделка (бай) - меняется Лот, размер Тейкпрофита, Трейлинстопа и Стоплосса. Есть синтактические ошибки, не влияющие на работоспособность.


int i=OrdersHistoryTotal()-1;
        while(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         {
         if(OrderSymbol()==Symbol()&& OrderType() == OP_BUY )
          {
          if(OrderProfit()<0) Lots_BUY=Lots_BUY*Multi_lot;
          if (Lots_BUY>Max_Lot) Lots_BUY=Max_Lot;
        
          if(OrderProfit()<0)  TakeProfit_BUY=TakeProfit_BUY+Increase_take;
          if(OrderProfit()<0)  StopLoss_BUY=StopLoss_BUY+Increase_stop;
          if(OrderProfit()>0) Lots_BUY=Lot_size;
          if(OrderProfit()>0)  TakeProfit_BUY=TakeProfit_BUY-Increase_take;
          if(OrderProfit()>0) StopLoss_BUY=StopLoss_BUY-Increase_stop;
         
            if(OrderProfit()<0)  TrailingStop=Trailing;
            if(OrderProfit()>0) TrailingStop=90;  
          break;
          }     
         i--;
         }

 
не понял.. что за молчок?
 

Судя по Вашему алгоритму Вы находите первую попавшуюся в истории сделку типа BUY и пытаетесь модернизировать на ее основе некоторые переменные. Можно было бы объединить присвоение новых значений под знаком профита выбранного ордера:

Например: if (OrderProfit()>=0) {Lots_BUY=Lot_size; TakeProfit_BUY=TakeProfit_BUY-Increase_take; StopLoss_BUY=StopLoss_BUY-Increase_stop; TrailingStop=90; }

else {Lots_BUY=Lots_BUY*Multi_lot; TakeProfit_BUY=TakeProfit_BUY+Increase_take; StopLoss_BUY=StopLoss_BUY+Increase_stop; TrailingStop=Trailing; }


if (Lots_BUY>Max_Lot) Lots_BUY=Max_Lot;

Как то так...

 
Alexander Ivanov:
не понял.. что за молчок?

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

Ошибка в том, что если будут постоянно идти профтные сделки, сл и тп рискуют стать отрицательными

if(OrderProfit()>0)  TakeProfit_BUY=TakeProfit_BUY-Increase_take;
if(OrderProfit()>0) StopLoss_BUY=StopLoss_BUY-Increase_stop; 

И еще, профит надо вычислять полностью

double profit = OrderProfit() + OrderSwap() - OrderCommission();   
 
Alexey Volchanskiy:

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

Ошибка в том, что если будут постоянно идти профтные сделки, сл и тп рискуют стать отрицательными

И еще, профит надо вычислять полностью

И еще, профит надо вычислять полностью. Только правильно считать надо.

double profit = OrderProfit() + OrderSwap() + OrderCommission();   
 
ага спасибо! Попробую поменять. Да верно. Это мартингейл, стоповый. С близким стопом. Если закрывается сделка в минусе то прибавляются некоторые переменные, то есть идет перекрытие убытка.
 
Dmitiry Ananiev:

И еще, профит надо вычислять полностью. Только правильно считать надо.

Точно, комиссия же с минусом идет, сенкс за поправку )
Причина обращения: