[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 188

 
Но не знаю как удалить отложенный ордер,если пятиминутка оказалась меньше 30 пунктов.
 
hoz:

Да, и что с того?

Есть ряд ограничений при работе в режиме визуализации
 

Что я сделал не так!!!!

Придумал вот такое решение своей проблемы

int start()
  {
     double Price=Ask+300*Point;    
     double SL=Price-300*Point;    
     double TP=Price+150*Point;
     bool New_Bar;
                          
     if (Time[0])                                                                           //   если образовался новый бар               
         int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP ); //   выставить отложенный ордер
     return ;
     Fun_New_Bar();                                                                      
     if ( New_Bar==true)                                                // если образовался следующий бар
        OrderDelete(Ticket);                                          // удалить отложенный ордер
  
//+------------------------------------------------------------------+
     void  Fun_New_Bar();                            //НО ПО ОТНОШЕНИЮ К ЭТОЙ СТРОКЕ КОМПИЛЯТОР ПИШЕТ ОШИБКУ       '(' - function definition unexpected  
       {                                                                           
          static datetime New_Time=0;
          New_Bar=false;
                                
         if( New_Time!==Time[0])                       
            New_Time=Time[0];                         
         New_Bar=true;                             
      }

/* сорри, малость поправил пост - что бы читаемым был   Vinin */

 
Спасибо за заботу.А на какую кнопку нужно нажимать ,что бы код получался в таком формате.
 
solnce600:

Что я сделал не так!!!!

Придумал вот такое решение своей проблемы

/* сорри, малость поправил пост - что бы читаемым был   Vinin */

Эта строка
 if (Time[0])

означает: "если время последнего бара не равно нулю". Так оно всегда не равно нулю. 

Далее, переменная

bool New_Bar;

определена внутри функции start(), поэтому внутри других функций ее будет не видно. Кроме того, Fun_New_Bar() вы попытались определить внутри тела start(), в MQL так делать нельзя, все функции надо объявлять на глобальном уровне модуля. Туда же стоит вынести и объявление New_Bar.

 

Кроме того, в процессе одного выполнения функции start() (если она не зациклена), нельзя определить формирование бара, а потом ждать формирования следующего бара: start() по определению вызывается и завершается на каждом тике (с нюансами, но в целом так).

Советую перечитать справку и ликвидировать пробелы в области выполнения программ MQL, а также посмотреть пример написания зацикленной программы, незацикленной тоже.

 
solnce600:
Спасибо за заботу.А на какую кнопку нужно нажимать ,что бы код получался в таком формате.

SRC----------------------------\|/

--------------------------------------- V

 
Имеет право.
 
alsu:
Эта строка   
 if (Time[0])

означает: "если время последнего бара не равно нулю". Так оно всегда не равно нулю. 


Спасибо.Но не понимаю где в этой строке "НЕ". Не равно обозначается символом  !==.

А я имел в виду - как только появилось время открытия нового бара,т.е. появился новый бар - открыть ордер.

и действительно вот такой код открывает ордер на открытии каждой пятиминутки

 int start()

  {
 double Price=Open[0]+300*Point;	
 double SL=Price-300*Point;	
 double TP=Price+150*Point;
 if (Time[0])                         
 int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
  

 
 }


 

Я решил пойти другим как мне кажется более простым путем.

Не удалять отложенный ордер - а выставлять отложенный ордер только если не закончилась пятиминутная свеча

Т.е. устанавливать отложенный ордер при исполнении двух условий. При исполнении первого условия

 if (Time[0])

- я проверял ордер устанавливается

А как оформить второе условие,т.е установить отложенный ордер только если не истекли 5 минут.  if (---------- && ?????????)

int start()

  {
 double Price=Open[0]+300*Point;    
 double SL=Price-300*Point;     
 double TP=Price+150*Point;
 
  
 
 
                          
   if (Time[0]&& ?????????  )                         
 int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
 return(0);
 
  }
Причина обращения: