Как написать функцию открытия отложенного ордера? - страница 2

 
      // выставим Buy Stop 
              if (OrderSend(Symbol(), OP_BUYSTOP, Lots, 
              Close[5]+MyPendingLevel, 0, Bid-Point*MyPendingLevel+Point*MySL, 
               Bid-Point*MyPendingLevel-Point*MyTP)!=-1)
            LastTradeTime = CurTime();
          // ордер не выставлен
          else         
            return(0);
Это правильное решение ?
 
int MyPendingLevel=5;//пунктов
int StopLoss=15;//:-)
int TakeProfit=1000;//;-)
 
double OP=NormalizeDouble(Close[5]+MyPendingLevel*Point,Digits);
double OSL=NormalizeDouble(OpenPrice-Point*StopLoss,Digits);
double OTP=NormalizeDouble(OpenPrice+Point*TakeProfit,Digits);
double MinOP=NormalizeDouble(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL),Digits);
 
if(OP>=MinOP){
   if(OrderSend(Symbol(), OP_BUYSTOP, Lots, OP, 0, OSL, OTP...............
}
 
Integer:
int MyPendingLevel=5;//пунктов
int StopLoss=15;//:-)
int TakeProfit=1000;//;-)
 
double OP=NormalizeDouble(Close[5]+MyPendingLevel*Point,Digits);
double OSL=NormalizeDouble(OpenPrice-Point*StopLoss,Digits);
double OTP=NormalizeDouble(OpenPrice+Point*TakeProfit,Digits);
double MinOP=NormalizeDouble(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL),Digits);
 
if(OP>=MinOP){
   if(OrderSend(Symbol(), OP_BUYSTOP, Lots, OP, 0, OSL, OTP...............
}

что такое OSL, OTP, OP ?
OpenPrice -  ?
 
int MyPendingLevel=5;//пунктов
int StopLoss=15;//:-)
int TakeProfit=1000;//;-)
 
double OP=NormalizeDouble(Close[5]+MyPendingLevel*Point,Digits);
double OSL=NormalizeDouble(OP-Point*StopLoss,Digits);
double OTP=NormalizeDouble(OP+Point*TakeProfit,Digits);
double MinOP=NormalizeDouble(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL),Digits);
 
if(OP>=MinOP){
   if(OrderSend(Symbol(), OP_BUYSTOP, Lots, OP, 0, OSL, OTP...............
}
Сорри, OpenPrice это тоже что и OP (ошибочка была)

OP - цена открытия
OSL - стоплосс
OTP - тейкпрофит
 
Integer:
int MyPendingLevel=5;//пунктов
int StopLoss=15;//:-)
int TakeProfit=1000;//;-)
 
double OP=NormalizeDouble(Close[5]+MyPendingLevel*Point,Digits);
double OSL=NormalizeDouble(OP-Point*StopLoss,Digits);
double OTP=NormalizeDouble(OP+Point*TakeProfit,Digits);
double MinOP=NormalizeDouble(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL),Digits);
 
if(OP>=MinOP){
   if(OrderSend(Symbol(), OP_BUYSTOP, Lots, OP, 0, OSL, OTP...............
}
Сорри, OpenPrice это тоже что и OP (ошибочка была)

OP - цена открытия
OSL - стоплосс
OTP - тейкпрофит
   //---- input parameters  
int MyPendingLevel=5;//пунктов
int StopLoss=15;//:-)
int TakeProfit=100;//;-)
  int Lots=0.5;
  //+------------------------------------------------------------------+
  //| expert initialization function                          |
  //+------------------------------------------------------------------+
  int init()
    {
  //----
 //----
     return(0);
  }
  //+------------------------------------------------------------------+
  //| expert deinitialization function                      |
  //+------------------------------------------------------------------+
  int deinit()
     {
   //----
   
   //----
      return(0);
     }
   //+------------------------------------------------------------------+
   //| expert start function                                    |
   //+------------------------------------------------------------------+
   int start()
     {
   //----
        double OP=OpenPrice();  
 
          // выставим Buy Stop 
double OpenPrice=NormalizeDouble(Close[5]+MyPendingLevel*Point,Digits);
double OSL=NormalizeDouble(OP-Point*StopLoss,Digits);
double OTP=NormalizeDouble(OP+Point*TakeProfit,Digits);
double MinOP=NormalizeDouble(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL),Digits);
 
if(OpenPrice>=MinOP){
   if(OrderSend(Symbol(), OP_BUYSTOP, Lots, OP, 0, StopLoss, TakeProfit);
}
        {
   //----
      return(0);
     }
   //+------------------------------------------------------------------+



--------------------Почему не идет ????

 
sadam:



--------------------Почему не идет ????

Я, конечно, не супер программист, а начинающий можно сказать. Так вот из того, что видно невооруженнім глазом:

1. Присваваешь переменной значение цены открытия ордера, а перед этим необходимо найти (выбрать) этот ордер -
см. пример МАСD и OrderSelect ( ) в справке MetaEditora.
2. Ошибка в использовании торговой функции: double OP=OpenPrice(); такой функции не существует. Зайди в Мета Эдитор, в окне
Навигатора вкдладка Поиск, в строке поиска введи OpenPrice, нажми Enter там в результах поиска найдешь правильную функцию.



Вобщем читай разбирайся, тебе и так НЕСЛАБО помогли! Всем сначала тяжело, потом будет полегче!

Да еще, вот это
int MyPendingLevel=5;//пунктов
int StopLoss=15;//:-)
int TakeProfit=100;//;-)

лучше написать будет так:
extern int MyPendingLevel=5;//пунктов
extern int StopLoss=15;//:-)
extern int TakeProfit=100;//;-)

Тогда, когда будет готов твой эксперт, сможеш изменять эти парааметры в настройках советника.

Удачи!
 
Не идет потому что это была подсказка, а не готовое решение

extern int MyPendingLevel=5;//пунктов
extern int StopLoss=15;//:-)
extern int TakeProfit=100;//;-)
extern double Lots=0.5;
 
int start(){
   double OP=NormalizeDouble(Close[5]+MyPendingLevel*Point,Digits);
   double OSL=NormalizeDouble(OP-Point*StopLoss,Digits);
   double OTP=NormalizeDouble(OP+Point*TakeProfit,Digits);
   double MinOP=NormalizeDouble(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL),Digits);
 
      if(OP>=MinOP){
         int rv=OrderSend(Symbol(), OP_BUYSTOP, Lots, OP, 0, OSL, OTP);
         if(rv<=0)Print("Error: "+GetLastError());
      }
      return(0);
}
Найдите 7 отличий

   //---- input parameters  
int MyPendingLevel=5;//пунктов
int StopLoss=15;//:-)
int TakeProfit=100;//;-)
int Lots=0.5;

int start(){


double OP=OpenPrice();  
// выставим Buy Stop 
double OpenPrice=NormalizeDouble(Close[5]+MyPendingLevel*Point,Digits);
double OSL=NormalizeDouble(OP-Point*StopLoss,Digits);
double OTP=NormalizeDouble(OP+Point*TakeProfit,Digits);
double MinOP=NormalizeDouble(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL),Digits);
 
if(OpenPrice>=MinOP){
   if(OrderSend(Symbol(), OP_BUYSTOP, Lots, OP, 0, StopLoss, TakeProfit);
}
        {
   //----
      return(0);
     }
Файлы:
sadam.mq4  1 kb
 
Integer:
Не идет потому что это была подсказка, а не готовое решение

extern int MyPendingLevel=5;//пунктов
extern int StopLoss=15;//:-)
extern int TakeProfit=100;//;-)
extern double Lots=0.5;
 
int start(){
   double OP=NormalizeDouble(Close[5]+MyPendingLevel*Point,Digits);
   double OSL=NormalizeDouble(OP-Point*StopLoss,Digits);
   double OTP=NormalizeDouble(OP+Point*TakeProfit,Digits);
   double MinOP=NormalizeDouble(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL),Digits);
 
      if(OP>=MinOP){
         int rv=OrderSend(Symbol(), OP_BUYSTOP, Lots, OP, 0, OSL, OTP);
         if(rv<=0)Print("Error: "+GetLastError());
      }
      return(0);
}
Найдите 7 отличий

   //---- input parameters  
int MyPendingLevel=5;//пунктов
int StopLoss=15;//:-)
int TakeProfit=100;//;-)
int Lots=0.5;

int start(){


double OP=OpenPrice();  
// выставим Buy Stop 
double OpenPrice=NormalizeDouble(Close[5]+MyPendingLevel*Point,Digits);
double OSL=NormalizeDouble(OP-Point*StopLoss,Digits);
double OTP=NormalizeDouble(OP+Point*TakeProfit,Digits);
double MinOP=NormalizeDouble(Ask+Point*MarketInfo(Symbol(),MODE_STOPLEVEL),Digits);
 
if(OpenPrice>=MinOP){
   if(OrderSend(Symbol(), OP_BUYSTOP, Lots, OP, 0, StopLoss, TakeProfit);
}
        {
   //----
      return(0);
     }
Подскажи как написать функцию ---не открывшийся сегодняшний отложенный ордер удалялся сегодня в такое-то время ???
 
Можно использоват парметр функции OrderSend() ExpirationTime

Что вызывает затруднение, удаление ордеров или определение момента в ремени когда ордера надо удалять или идентификация сегодняшнего ордера? Собственно вот и план: определеить момент времени когда надо удалять ордера, просматривая ордера определить те которые были установлены сегодня, и удалить.
 
Integer:
Можно использоват парметр функции OrderSend() ExpirationTime

Что вызывает затруднение, удаление ордеров или определение момента в ремени когда ордера надо удалять или идентификация сегодняшнего ордера? Собственно вот и план: определеить момент времени когда надо удалять ордера, просматривая ордера определить те которые были установлены сегодня, и удалить.

А как это всё написать ?

Пример какой приведи, если можешь .