не срабатывает Order modify на mql4!

 

Я решил для пробы сделать менеджер сделки.. пока просто для текущей как тест.. проверить как работает.. но эта зараза уже на начальной стадии показывает мне свое фи!

Суть програмульки следущая:я торгую с руки..а программка находит мой ордер выявляет номер тикета, цену открытия и другие данные какие только захочу. И в дальнейшем программа сама уже закрывает сделку или модифицирует в зависимости от настроек..

Сделанно соответственно что бы не пялиться в монитор и контролировать текущую сделку.

посмотрите почему не работает Alert а так же не работает модифи..


//+------------------------------------------------------------------+
//|                                              ManagerPosition.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
datetime ctm;
double Open_Price;
int Type,starting=0,ticket,Loss;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
if((OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)&&(starting==0))
    {
    Open_Price = OrderOpenPrice();
    Type = OrderType();
    starting = 1;
    ticket = OrderTicket();
    Loss=0;
    Alert("Тип сделки=",Type," ","Тикет ордера=",ticket,"Цена открытия=",Open_Price);
       }
    else
    Alert("OrderSelect() вернул ошибку - ",GetLastError());
    
    
    if ((starting==1)&&(Type==1)&&(Loss==0)&&(Bid < Open_Price-10*Point))//sell
    {
    Loss=1;
    OrderModify(ticket,0,Open_Price,Ask-20*Point,0,Green);   
     
    }
    if ((starting==1)&&(Type==0)&&(Loss==0)&&(Ask > Open_Price+10*Point))//buy
    {
    Loss=1;
    OrderModify(ticket,0,Open_Price,Ask+20*Point,0,Green);    
    }
   
   if(OrderSelect(ticket,SELECT_BY_TICKET)==true)
{
ctm=OrderCloseTime();
if (ctm!=0)
{
starting=0;
Type=234;
Loss=0;
 //Alert("Тип сделки=",Type," ","Тикет ордера=",ticket,"Цена открытия=",Open_Price);
}
}
   
   
   return(0);
  }
  int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Select нужно проводить в цикле с for. Смотрите Доку, Учебник и т.п.!
 

Попробуйте этот кусок

if((OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)&&(starting==0))
    {
    Open_Price = OrderOpenPrice();
    Type = OrderType();
    starting = 1;
    ticket = OrderTicket();
    Loss=0;
    Alert("Тип сделки=",Type," ","Тикет ордера=",ticket,"Цена открытия=",Open_Price);
       }
    else
    Alert("OrderSelect() вернул ошибку - ",GetLastError());
    
    
    if ((starting==1)&&(Type==1)&&(Loss==0)&&(Bid < Open_Price-10*Point))//sell
    {
    Loss=1;
    OrderModify(ticket,0,Open_Price,Ask-20*Point,0,Green);   
     
    }
    if ((starting==1)&&(Type==0)&&(Loss==0)&&(Ask > Open_Price+10*Point))//buy
    {
    Loss=1;
    OrderModify(ticket,0,Open_Price,Ask+20*Point,0,Green);    
    }

по-другому

if(OrderSelect(0, SELECT_BY_POS)
    {
    if (starting==0)
    {
    Open_Price = OrderOpenPrice();
    Type = OrderType();
    starting = 1;
    ticket = OrderTicket();
    Loss=0;
    Alert("Тип сделки=",Type," ","Тикет ордера=",ticket,"Цена открытия=",Open_Price);
    }
    else
      {
      if(Type==1&&Loss==0&&Bid < Open_Price-10*Point)
       {
       Loss=1;
       OrderModify(ticket,0,Open_Price,Ask-20*Point,0,Green);       
       }
      if (Type==0&&Loss==0&&Ask > Open_Price+10*Point)//buy
       {
       Loss=1;
       OrderModify(ticket,0,Open_Price,Ask+20*Point,0,Green);    
       }
   }
 else
    Alert("OrderSelect() вернул ошибку - ",GetLastError());
    
    
   
    
   
 

попробывал не получается все равно... в документации тоже ничего про то где лучше писать..

 

так же попробывал вписать в цикл for/// все равно без результатно... а вот если нужен алерт... то он выполняетсятолько если вписывать этот код не в start() а в init()..что не устраивает меня...

Подскажите как решить эту проблему.. пожалуйста

 
Zugelman:

так же попробывал вписать в цикл for/// все равно без результатно... а вот если нужен алерт... то он выполняетсятолько если вписывать этот код не в start() а в init()..что не устраивает меня...

Подскажите как решить эту проблему.. пожалуйста

Когда чего-то не умеешь, можно взять готовое.
Причина обращения: