Вопрос о значках при срабатывании OrderModify при TakeProfit и StopLoss, вернее о их отсутствии

 

В тестере все нормально, все показывается, на демо-счете (и в реале) этого нет, ни Arrow tp ни Arrow sl ни trailing линий. Хоть советники, хоть в ручную ордера липи, их просто нет. В прошлых билдах все было нормально, правда не могу сказать, с какого билда это началось, но по моемому в 700-тых было все нормально с этим. Думал проблема в Windows 10, ан нет, на Windows 2012R2 такая-же ситуация, причем установка mt4 с нуля, т.е. его никогда не устанавливали на эту систему.

Отстутствие в реальном процессе

Причем в списке объектов графика тоже они отсутствуют (кнопку "Все" нажимал, если что).

А вот тестер

В тестере стратегий все значки (Arrow) на месте

Может я не прав? Так и должно быть?
Даже ручное выставление ордера, и его TP или SL закрытия не показываются.
Кусок кода советника который на картинках (один из многих - около сорока в моем исследовании):

...
       int ticket_long = OrderSend(Symbol(),OP_BUY,Lots_long,ask_long,Slippage,0,0,NULL,Magic_long,0,Lime);
...
       int ticket_short = OrderSend(Symbol(),OP_SELL,Lots_short,bid_short,Slippage,0,0,NULL,Magic_short,0,Red);
...
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
   if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long)Print("Modifying long direction order ticket : ",OrderTicket());
      OrderModify(OrderTicket(), price_long, OrderStopLoss(), tp_long, 0, Lime);
...
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
   if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short)Print("Modifying short direction order ticket : ",OrderTicket());
      OrderModify(OrderTicket(), price_short, OrderStopLoss(), tp_short, 0, Red);
...

и остальные, подобные, тоже.
К стати, только что попробовал MT5 терминал (мало ли, может действительно с Windows 10 или с 2012R2 что то не так) - все отлично, все значки как и должны быть - на графике, и в ручную и с любыми советниками.
Но мне нужен MT4 терминал, иначе я бы эту тему не поднимал бы.

Это пример работы приведенного мной выше кода в совершенно другой (чистой) ОС, и с нуля поставленного MT4:

Пример в другой ОС на другом компьютере

Полный код советника, если уж на то пошло:

//+------------------------------------------------------------------+
//|                                                       kolya1.mq4 |
//|                                                       moralproxy |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "moralproxy"
#property link      "https://www.mql5.com"
#property version   "AP_3.0.1_2Sides_mod"
#property strict

extern string _1_= "LONG DIRECTION";
extern double  Lots_long = 0.01;
extern double  LotMultiplicator_long = 1.1;
extern double  TakeProfit_long = 5;
extern double  Step_long = 5;
extern int     Magic_long = 1;
extern int     MaxTrades_long = 30;
extern string _2_ = "SHORT DIRECTION";
extern double  Lots_short = 0.01;
extern double  LotMultiplicator_short = 1.1;
extern double  TakeProfit_short = 5;
extern double  Step_short = 5;
extern int     Magic_short = 2;
extern int     MaxTrades_short = 30;
extern string _3_ = "COMMON";
extern int     Slippage = 3;
extern bool    ShowTableOnTesting = FALSE;
int            g_color_548 = Gold;
string         gs_104 = "AP_3.0.1_2Sides_mod";
int            g_fontsize_544 = 14; int bartime = 0; int gi_340 = 16; int gi_336 = 2; int co;
bool           modify_flag_long = FALSE; bool Step_long_flag = FALSE; bool mod_flag_long = FALSE;
bool           modify_flag_short = FALSE; bool Step_short_flag = FALSE; bool mod_flag_short = FALSE;
double         tp_long; double bid_long; double ask_long;
double         tp_short; double bid_short; double ask_short;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
if (((!IsOptimization()) && !IsTesting() && (!IsVisualMode())) || (ShowTableOnTesting && IsTesting() && (!IsOptimization()))) {
 info();  
  }
if(bartime == Time[0]) return (0);
 bartime = Time[0];
  
if( count_long ()==0)
 {
  double closebar1_long = iClose(Symbol(), 0, 1);
  double closebar2_long = iClose(Symbol(), 0, 2);
   bid_long = Bid;
   ask_long = Ask;
    if(closebar2_long < closebar1_long)
     {
      Print("Opening first order of long series");
       int ticket_long = OrderSend(Symbol(),OP_BUY,Lots_long,ask_long,Slippage,0,0,NULL,Magic_long,0,Lime);
        modify_flag_long = TRUE;
         if(ticket_long<0)
          {
            Print("Error openinig first order of long series: ", GetLastError());
             }            
       }
 }
if( count_short ()==0)
{
double closebar1_short = iClose(Symbol(), 0, 1);
double closebar2_short = iClose(Symbol(), 0, 2);
 bid_short = Bid;
 ask_short = Ask;
  if(closebar2_short > closebar1_short)
   {
    Print("Openinig first order of short series");
     int ticket_short = OrderSend(Symbol(),OP_SELL,Lots_short,bid_short,Slippage,0,0,NULL,Magic_short,0,Red);
      modify_flag_short = TRUE;
       if(ticket_short<0)
        {
         Print("Error openinig first order of short series: ", GetLastError());
          }            
       }
 }

if(count_long ()!=0 && count_long ()<= MaxTrades_long)
 {
  RefreshRates();
   if(OOP_long()-Ask >= Step_long*Point)
    {
     Print("Step time long, opening " +(count_long()+1)+ "order of long series");
      int ticket_long = OrderSend(Symbol(),OP_BUY,Multed_lot_long(),Ask,Slippage,0,0,NULL,Magic_long,0,Lime);
       modify_flag_long = TRUE;
         if(ticket_long<0)
          {
           Print("Error openinig  "+ (count_long()+1)+" order of series: ", GetLastError());
            }   
       }
   }
   
if(count_short ()!=0 && count_short ()<= MaxTrades_short)
 {
  RefreshRates();
   if(Bid - OOP_short() >= Step_short*Point)
    {
     Print("Step time short, opening " +(count_short()+1)+ "order of short series");
      int ticket_short = OrderSend(Symbol(),OP_SELL,Multed_lot_short(),Bid,Slippage,0,0,NULL,Magic_short,0,Red);
       modify_flag_short = TRUE;
         if(ticket_short<0)
          {
           Print("Error openinig  "+ (count_short()+1)+" order of short series: ", GetLastError());
            }   
       }
   }   
   
double price_long = 0;
double tl_long = 0;
 for (int i = OrdersTotal() - 1; i >= 0; i--) {
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
   if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long) {
     if (OrderType() == OP_BUY) {
      price_long += OrderOpenPrice() * OrderLots();
       tl_long += OrderLots();
         }
      }
   }
   
if(count_long()>0)
 {
  price_long = NormalizeDouble(price_long / tl_long, Digits);
   if(modify_flag_long ==TRUE)
    {
     for (int i = OrdersTotal() - 1; i >= 0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long) {
         if (OrderType() == OP_BUY) {
          tp_long = price_long + TakeProfit_long * Point;
           mod_flag_long=TRUE;
            }
           }
          }
         }
  }
if(mod_flag_long == TRUE && modify_flag_long ==TRUE)
 {
  for (int i = OrdersTotal() - 1; i >= 0; i--) {
   OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
     if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long)Print("Modifying long direction order ticket : ",OrderTicket()); OrderModify(OrderTicket(), price_long, OrderStopLoss(), tp_long, 0, Lime);
      modify_flag_long = FALSE;
       }
 }

double price_short = 0;
double tl_short = 0;
 for (int i = OrdersTotal() - 1; i >= 0; i--) {
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
   if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short) {
     if (OrderType() == OP_SELL) {
      price_short += OrderOpenPrice() * OrderLots();
       tl_short += OrderLots();
        }
      }
    }   

if(count_short()>0 )
{
 price_short = NormalizeDouble(price_short / tl_short, Digits);
  if(modify_flag_short ==TRUE)
   {
    for (int i = OrdersTotal() - 1; i >= 0; i--) {
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
       if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short) {
        if (OrderType() == OP_SELL) {
         tp_short = price_short - TakeProfit_short * Point;
          mod_flag_short=TRUE;
           }
          }
         }
    }
 }

if(mod_flag_short == TRUE && modify_flag_short ==TRUE)
{
 for (int i = OrdersTotal() - 1; i >= 0; i--) {
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
   if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short)Print("Modifying short direction order ticket : ",OrderTicket()); OrderModify(OrderTicket(), price_short, OrderStopLoss(), tp_short, 0, Red);
     modify_flag_short = FALSE;
      }
 }

hangorder(co);
co=hangorder(co);
Comment("Hanged orders",co);
return(0);

}

//+------------------------------------------------------------------+
   
double Multed_lot_long()
{
double mll;  
double m = count_long()-1;
   double x;
   if(m<0)
   {
   x=0;
   }
   else if(m>=0)
   {
    x = count_long()-1;
    }
      mll = NormalizeDouble(Lots_long * MathPow(LotMultiplicator_long, x), 2);
      Print("Current multiplicated long lot is : ",mll);
            
return(mll);
}
double Multed_lot_short()
{
double mls;  
double m = count_short()-1;
   double x;
   if(m<0)
   {
   x=0;
   }
   else if(m>=0)
   {
    x = count_short()-1;
    }
      mls = NormalizeDouble(Lots_short * MathPow(LotMultiplicator_short, x), 2);
      Print("Current multiplicated short lot is : ",mls);
            
return(mls);
}

double OOP_long() {
   double oop;
   int ticket1;
   int ticket2=0;
   for ( int i = OrdersTotal() - 1; i >= 0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long && OrderType() == OP_BUY) {
         ticket1 = OrderTicket();
         if (ticket1 > ticket2) {
            oop = OrderOpenPrice();
            ticket2=ticket1;
                        
         }
      }
   }
   return (oop);
}

double OOP_short() {
   double oop;
   int ticket1;
   int ticket2=0;
   for ( int i = OrdersTotal() - 1; i >= 0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short && OrderType() == OP_SELL) {
         ticket1 = OrderTicket();
         if (ticket1 > ticket2) {
            oop = OrderOpenPrice();
            ticket2=ticket1;
                        
         }
      }
   }
   return (oop);
}

int count_long (){
   int count = 0;
   for (int i = OrdersTotal() - 1; i >= 0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long)
         if (OrderType() == OP_BUY) count++;
   }
   return (count);
}

int count_short (){
   int count = 0;
   for (int i = OrdersTotal() - 1; i >= 0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short)
         if (OrderType() == OP_SELL) count++;
   }
   return (count);
}

void info (){
   double ld_0 = f0_8(0);
   string name_8 = gs_104 + "1";
   if (ObjectFind(name_8) == -1) {
      ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
      ObjectSet(name_8, OBJPROP_CORNER, 1);
      ObjectSet(name_8, OBJPROP_XDISTANCE, 10);
      ObjectSet(name_8, OBJPROP_YDISTANCE, 15);
   }
   ObjectSetText(name_8, "Заработок сегодня: " + DoubleToStr(ld_0, 2), g_fontsize_544, "Courier New", g_color_548);
   ld_0 = f0_8(1);
   name_8 = gs_104 + "2";
   if (ObjectFind(name_8) == -1) {
      ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
      ObjectSet(name_8, OBJPROP_CORNER, 1);
      ObjectSet(name_8, OBJPROP_XDISTANCE, 10);
      ObjectSet(name_8, OBJPROP_YDISTANCE, 33);
   }
   ObjectSetText(name_8, "Заработок вчера: " + DoubleToStr(ld_0, 2), g_fontsize_544, "Courier New", g_color_548);
   ld_0 = f0_8(2);
   name_8 = gs_104 + "3";
   if (ObjectFind(name_8) == -1) {
      ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
      ObjectSet(name_8, OBJPROP_CORNER, 1);
      ObjectSet(name_8, OBJPROP_XDISTANCE, 10);
      ObjectSet(name_8, OBJPROP_YDISTANCE, 51);
   }
   ObjectSetText(name_8, "Заработок позавчера: " + DoubleToStr(ld_0, 2), g_fontsize_544, "Courier New", g_color_548);
   name_8 = gs_104 + "4";
   if (ObjectFind(name_8) == -1) {
      ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
      ObjectSet(name_8, OBJPROP_CORNER, 1);
      ObjectSet(name_8, OBJPROP_XDISTANCE, 10);
      ObjectSet(name_8, OBJPROP_YDISTANCE, 76);
   }
   ObjectSetText(name_8, "Баланс : " + DoubleToStr(AccountBalance(), 2), g_fontsize_544, "Courier New", g_color_548);
}

double f0_8(int ai_0) {
   double ld_ret_4 = 0;
   for (int pos_12 = 0; pos_12 < OrdersHistoryTotal(); pos_12++) {
      if (!(OrderSelect(pos_12, SELECT_BY_POS, MODE_HISTORY))) break;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long||OrderMagicNumber() == Magic_short)
         if (OrderCloseTime() >= iTime(Symbol(), PERIOD_D1, ai_0) && OrderCloseTime() < iTime(Symbol(), PERIOD_D1, ai_0) + 86400) ld_ret_4 = ld_ret_4 + OrderProfit() + OrderCommission() + OrderSwap();
   }
   return (ld_ret_4);
}

int hangorder(int a)
{
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderTakeProfit()==0)
a++;
}
return(a);
}

ПС: MT4 терминал пробовал удалять, чистить реестр с упоминанием MetaQuotes и InstaTrader и установкой заново. Разрешение экрана 1920х1080

 

Зачем дублировать вопрос? 

https://forum.mql4.com/ru/70644/page6#1027280 

 

Продублирую ответ.

Стрелки на графике выставляются исключительно в результате вызова функций OrderSend, OrderModify, OrderClose, OrderCloseBy, OrderDelete из MQL4-программы, при условии, что в этих функциях выставлен цвет стрелки. отличный от CLR_NONE

Если ордер был закрыт сервером или вручную, открыт, модифицирован вручную (то есть, не из MQL4-программы), то никакие стрелки не выставляются.

Покажите в коде Вашей программы вызов функции OrderClose с выставленным цветом стрелки.

PS OrderModify выставляет цвет стрелки - я сам это проверил несколько раз.

PPS За декомпил и троллинг - бан. То есть, я не даю Вам никакого шанса на ответ

 
michaeladm:

В тестере все нормально, все показывается, на демо-счете (и в реале)этого нет, ни Arrow tp ни Arrow sl ни trailing линий. Хоть советники,хоть в ручную ордера липи, их просто нет. В прошлых билдах все былонормально, правда не могу сказать, с какого билда это началось, но помоемому в 700-тых было все нормально с этим.

Даже в 400-тых такого небыло. Не надо путать стрелки в тестере и торговом терминале.
 

Может бан за рекламу?

Я бы ещё промолчал если бы это небыла мать всех кухонь. 

 
eevviill:

Может бан за рекламу?

Я бы ещё промолчал если бы это небыла мать всех кухонь. 

Не мать, а бандерша! 
 
eevviill:

Может бан за рекламу?

Я бы ещё промолчал если бы это небыла мать всех кухонь. 

Вы про что?
 
stringo:
Вы про что?
Мы не назвали. Только прокомментировали скрин!