Добрый день подскажите как изменить Takeprofit

 

Пытаюсь написать часть кода, смысл в том что бы открывается одна сделка на покупку с определенным Takeprofit и один отложенный ордер на покупку ниже первой сделки, как только сделка на покупку  идет в низ(в минус) открывается отложенный ордер, я бы хотел сделать так что при открытии отложенного ордера, менялся Takeprofit у первой сделки, но почему то у меня это не получается, вот пример кода   

#include  <Trade/Trade.mqh>
CTrade Trading;
double Ask;
int TP1=30;
int TP2=15;
int TP3=40;
 MqlTradeRequest request1{};
MqlTradeResult result1{};
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
 if(PositionsTotal()==0)
 {
Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
request1.action=TRADE_ACTION_DEAL;
request1.symbol=Symbol();
request1.volume=0.01;
request1.sl=0;
request1.tp=Ask+TP1*Point();
request1.type=ORDER_TYPE_BUY;
request1.price=Ask;
OrderSend(request1, result1);
 
 
 
 
MqlTradeRequest request2{};
MqlTradeResult result2{};
Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
request2.action=TRADE_ACTION_PENDING;
request2.symbol=Symbol();
request2.volume=0.01;
request2.sl=0;
request2.tp=Ask-TP2*Point();
request2.type=ORDER_TYPE_BUY_LIMIT;
request2.price=Ask-30*Point();
OrderSend(request2, result2);
}
//int total=PositionsTotal();
//int total=OrdersTotal(); //количество отложеных ордеров
int total=PositionsTotal();
int total1=OrdersTotal();
if(total==1&&total1==1)
 {
Print(total1);
 
 ZeroMemory(request1);
ZeroMemory(result1);
request1.action=TRADE_ACTION_SLTP;
request1.symbol=Symbol();
request1.volume=0.01;
request1.sl=0;
request1.tp=Ask+15*Point();
request1.price=Ask;
OrderSend(request1, result1);
 
  
   
  }
}
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
Возвращает соответствующее свойство указанного символа. Существует 2 варианта функции. 1. Непосредственно возвращает значение свойства. 2...
 

Цену Тейка знаете, вычислите ?

//+------------------------------------------------------------------+
void SetSLTP(string sy,int type,double sl,double tp,string kom,int mn)
  {
   double po;
   int    i,k=OrdersTotal();

   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         po=MarketInfo(OrderSymbol(),MODE_POINT);
         if(OrderSymbol()==sy || sy=="")
           {
            if(mn<0 || OrderMagicNumber()==mn)
              {
               if(kom=="" || StringFind(OrderComment(),kom,0)>-1)
                 {
                  if(OrderType()==type || type==-1)
                    {
                     if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT)
                       {
                        if(sl>0)
                          {
                           if(sl>Bid-(MarketInfo(OrderSymbol(),MODE_STOPLEVEL)+1)*po)
                              sl=Bid-(MarketInfo(OrderSymbol(),MODE_STOPLEVEL)+1)*po;
                          }
                        if(tp>0)
                          {
                           if(tp<Ask+(MarketInfo(OrderSymbol(),MODE_STOPLEVEL)+1)*po)
                              tp=Ask+(MarketInfo(OrderSymbol(),MODE_STOPLEVEL)+1)*po;
                          }
                        ModifyOrder(-1,sl,tp);
                       }
                     if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)
                       {
                        if(sl>0)
                          {
                           if(sl<Ask+(MarketInfo(OrderSymbol(),MODE_STOPLEVEL)+1)*po)
                              sl=Ask+(MarketInfo(OrderSymbol(),MODE_STOPLEVEL)+1)*po;
                          }
                        if(tp>0)
                          {
                           if(tp>Bid-(MarketInfo(OrderSymbol(),MODE_STOPLEVEL)+1)*po)
                              tp=Bid-(MarketInfo(OrderSymbol(),MODE_STOPLEVEL)+1)*po;
                          }
                        ModifyOrder(-1,sl,tp);
                       }
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ModifyOrder(double pp=-1,double sl1=0,double tp1=0)
  {
   bool   fm;
   double op,os,ot;
   int    dg=(int)MarketInfo(OrderSymbol(),MODE_DIGITS);

   if(pp<=0)
      pp=OrderOpenPrice();
   if(sl1<0)
      sl1=OrderStopLoss();
   if(tp1<0)
      tp1=OrderTakeProfit();

   pp=NormalizeDouble(pp,dg);
   sl1=NormalizeDouble(sl1, dg);
   tp1=NormalizeDouble(tp1, dg);
   op=NormalizeDouble(OrderOpenPrice(), dg);
   os=NormalizeDouble(OrderStopLoss(), dg);
   ot=NormalizeDouble(OrderTakeProfit(), dg);
   fm=false;
   if(pp!=op || sl1!=os || tp1!=ot)
     {
      fm=OrderModify(OrderTicket(),pp,sl1,tp1,0,clrNONE);
      RefreshRates();
     }
  }
//End

Передаете цену Тейка и Стопа, функция модифицирует всю сетку, только передавать именно цену, а не расстояние.

 
Delakrya:

Пытаюсь написать часть кода, смысл в том что бы открывается одна сделка на покупку с определенным Takeprofit и один отложенный ордер на покупку ниже первой сделки, как только сделка на покупку  идет в низ(в минус) открывается отложенный ордер, я бы хотел сделать так что при открытии отложенного ордера, менялся Takeprofit у первой сделки, но почему то у меня это не получается, вот пример кода   

Вставляйте код правильно -

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

...

Sergey Golubev, 2020.03.23 16:08

Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  Исходный кодпредназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.


Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
Возвращает соответствующее свойство указанного символа. Существует 2 варианта функции. 1. Непосредственно возвращает значение свойства. 2...
 
Volodymyr Zubov #:

Цену Тейка знаете, вычислите ?

Передаете цену Тейка и Стопа, функция модифицирует всю сетку, только передавать именно цену, а не расстояние.

А можно по подробнее?
 
Delakrya #:
А можно по подробнее?

Под какой терминал нужно ? 4 или 5 ?

 
Volodymyr Zubov #:

Под какой терминал нужно ? 4 или 5 ?

Огрызок кода :)

он говорит обо всём

 
Volodymyr Zubov #:

Под какой терминал нужно ? 4 или 5 ?

5
 
Vitaly Muzichenko #:

Огрызок кода :)

он говорит обо всём

Да я просто спросил у ТС. Так как работы тут на пять минут, а у меня в "пятерке" постоянно ошибки. И что бы другие подобные вопросы не задавали.

 
Volodymyr Zubov #:

Да я просто спросил у ТС. Так как работы тут на пять минут, а у меня в "пятерке" постоянно ошибки. И что бы другие подобные вопросы не задавали.

Предрассудки.