Помогите с OrderModify

 

   double lots = 0.1;
   int ticket;
   ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-10*Point,0,"My order",13090,0,Green);
   OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
   while(OrderCloseTime()==0)
        {
         if(OrderOpenPrice()<Ask)
           {
            OrderModify(OrderTicket(),OrderOpenPrice(),Bid-10*Point,OrderTakeProfit(),0,Red);
           }
        }
Помогите пожалуйста кто знает хорошо MQL4. Вот эта часть эксперта не работает, а именно функция OrderModify.

 
Привет...
Задумка сама по себе лажневая...
Кроме того, здесь несколько ошибок:
1. while обычно используется для каких-то математических вычислений,  а так цикл просто зависает;
2. ticket обнуляется, с каждым приходящим тиком (ибо инициализация int ticket), поэтому функция OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) - тоже не будет работать.
В общем не работает не конкретно OrderModify, а вся прога в целом.. .
Как я понял это Трейлинг-стоп на 10 пунктов... Да, видимо.
Короче вот тебе код примерного трейлинг стопа... Он вобщем довольно эффективный, но:
1) Позиция открывается вручную;
2) Трейлинг-стоп активируется при выполнении двух условий:
     а) Размер Т-стопа болььше величины спреда;
     б) У ордера имеется определенный Stop-Loss, т.к. если Стоп-Лосс не указан, то Трейлинг стоп не активируется..
Попытайся разобраться, в принципе я думаю тут все понятно,  и ты можешь переделать его под себя...
Помог как мог.
+--------------------------------------------------------------------+
//| Trailing-Stop.mq4 |
//| John_SP |
//|                |
//+------------------------------------------------------------------+
#property copyright "John_SP"
#property show_confirm
#property show_inputs

//---- input parameters
extern int TS = 10; // Размер трейллинг стопа
GlobalVariableSet("Spread",MarketInfo(Symbol(),MODE_SPREAD));

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
Comment("");
int i;
double SL;
if(TS>=GlobalVariableGet("Spread"))
{
if(OrdersTotal()>0) // Если есть открытые позиции
{
if(OrderType()==OP_BUY && OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
SL = Bid-TS*Point;
if(NormalizeDouble(SL,4)>OrderStopLoss() && NormalizeDouble(SL,4)+10*Point<Bid)
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SL,4),OrderTakeProfit(),0,Red)==true) Print("SL modify to: ", DoubleToStr(SL,4));
else Print("OrderModify failed with error #",GetLastError());
return(0);
}
}
if(OrderType()==OP_SELL && OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
SL = Ask+TS*Point;
if(NormalizeDouble(SL,4)<OrderStopLoss() && NormalizeDouble(SL,4)-10*Point>Ask)
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SL,4),OrderTakeProfit(),0,Red)==true) Print("SL modify to: ", DoubleToStr(SL,4));
else Print("OrderModify failed with error #",GetLastError());
return(0);
}
}
}
}
else
{
Comment("РАЗМЕР ТРЕЙЛЛИНГ СТОПА МЕНЬШЕ СПРЕДА, ВЫПОЛНЕНИЕ СОВЕТНИКА НЕВОЗМОЖНО ! ! !");
Sleep(5000);
}
return(0);
 
int start()
  {
   int pos;
   double cl_prise, lots=0.1;
   for(pos=1;;pos++)
      {
       OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-10*Point,0,"My order",0,0,Green);
       OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
       cl_prise=OrderClosePrice();
       while(cl_prise==0)
         {
          if(Ask>OrderOpenPrice())
             OrderModify(OrderTicket(),OrderOpenPrice(),Bid-10*Point,0,0,Red);
          cl_prise=OrderClosePrice();
         }
      }
   return(0);
Вот например написал простой эксперт ,  и опять не работает , не знаю что такое . Никак не могу написать собственного эксперта чтобы виполнялась функция  OrderModify, постоянно одна и та самая ошыбка - invalid ticket for OrderModify function. Может хоть ктото обяснит мне в чём моя ошыбка?
 
stnazar:Вот например написал простой эксперт , и опять не работает , не знаю что такое . Никак не могу написать собственного эксперта чтобы виполнялась функция OrderModify, постоянно одна и та самая ошыбка - invalid ticket for OrderModify function. Может хоть ктото обяснит мне в чём моя ошыбка?

int start()
  {
   int pos;
   double cl_prise, lots=0.1;
   OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-10*Point,0,"My order",0,0,Green);
   for(pos=0;pos<OrdersTotal();pos++)
      {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES));
        if(Ask>OrderOpenPrice())  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-10*Point,0,0,Red);
      }
   return(0);
  }
В Вашем простом эксперте ошибка на ошибке, и в логике в том числе, учите матчасть.... Подправил только основное, нужно добавлять еще несколько проверок, нормализацию и т.д. попробуйте должно работать.
 
int start()
  {
   int pos;
   double lots=0.1;
   if(OrdersTotal() == 0)
      OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-10*Point,0,"My order",0,0,Green);
   else {
      for(pos=0;pos<OrdersTotal();pos++)
      {
        if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
          {
            if(Ask > OrderOpenPrice() && (Bid-10*Point) > OrderStopLoss()) // Только вверх!!!
              OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-10*Point,Digits),0,0,Red);
          }
      }
   }
   return(0);
  }
Причина обращения: