Обсуждение статьи "Пошаговое руководство по написанию советников в MQL5 для начинающих" - страница 12

 

Простите пожалуйста, я не понял тогда как использовать эту кнопку, сейчас кажется понял.

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.13.22.13';
 if(OrdersTotal()==0)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
[Удален]  
Grenjohn:

Простите пожалуйста, я не понял тогда как использовать эту кнопку, сейчас кажется понял.

Все дело в условии:

if( OrdersTotal() == 0 )

Здесь не хватает проверки на то, что наступила указанная Вами дата date1. Сейчас у Вас ордер должен открываться сразу с появлением первого тика, если нет открытых ордеров! Т.е. нужно сделать также, как и тут,

if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)

только указать корректный день, час, минуту, секунду(несколько секунд). 

Да и еще. Цены sl и tp нужно нормализовать, иначе м.б. ошибки.

 

Что-то он у меня совсем перестал присоединяться к графику и подскажите пожалуйста, что значит нормализовать цены sl и tp?

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.3;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.15.08.30';
 if(OrdersTotal()==0 && Hour( )==15 && Minute( )==08 && Seconds( )>=30)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==15 && Minute( )==09 && Seconds( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
 
Grenjohn:

Простите пожалуйста, я не понял тогда как использовать эту кнопку, сейчас кажется понял.

extern datetime date1=D'2014.10.28 13:22:13';
extern datetime date2=D'2014.10.29 13:22:13';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket = 0;

void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - не было позиции
   case 0:
   {
     // При наступлении времени date1 открываем позицию
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend( ... );
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1 - была позиция
   case 1:
   {
     // При наступлении времени date2 закрываем позицию
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket, ... ) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}

При наступлении date1 открываем позицию, при наступлении date2 - закрываем, после этого до перезапуска ничего не делаем.

[Удален]  
Grenjohn:

Что-то он у меня совсем перестал присоединяться к графику и подскажите пожалуйста, что значит нормализовать цены sl и tp?

https://www.mql5.com/ru/docs/convert/normalizedouble
Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Всем спасибо большое за помощь и за терпение, но пока, что, к сожалению не получается!!??

Я так пытаюсь добавить советник, но он не добавляется!? журнал выдаетis not expert and cannot be executed

extern datetime date1=D'2014.10.29 22:29:10';
extern datetime date2=D'2014.10.29 21:30:00';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.30;
int ticket = 0;
void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - не было позиции
   case 0:
   {
     // При наступлении времени date1 открываем позицию
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1 - была позиция
   case 1:
   {
     // При наступлении времени date2 закрываем позицию
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket,Lots,Bid,20,Green) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}

 


 
Grenjohn:

Всем спасибо большое за помощь и за терпение, но пока, что, к сожалению не получается!!??

Я так пытаюсь добавить советник, но он не добавляется!? журнал выдаетis not expert and cannot be executed

 


Значит, вы не эксперт создали, а индикатор.

Создайте нового советника через мастер и замените только код функции OnStart и все глобальные переменные/внешние параметры. 

[Удален]  
komposter:

Значит, вы не эксперт создали, а индикатор.

Создайте нового советника через мастер и замените только код функции OnStart и все глобальные переменные/внешние параметры. 

Он, скорее всего, как раз эксперт создал, но с функцией OnStart(), которая только для скриптов.
[Удален]  
Grenjohn:

Всем спасибо большое за помощь и за терпение, но пока, что, к сожалению не получается!!??

Я так пытаюсь добавить советник, но он не добавляется!? журнал выдаетis not expert and cannot be executed

 


Создайте нового советника на MQL4, скопируйте полностью туда существующий код и замените строчку

void OnStart()

 на 

void OnTick()

Это в случае, если Вы хотите создать советник. Если же Вы хотите создать скрипт, создайте новый скрипт и полностью перенесите туда существующий код без изменений (хотя в скрипте, в случае торговли по времени, смысла нет).

 
Из статьи:
Новый бар характеризуется величиной тикового объема, равной 1, если он больше 1, то выполнение функции OnTick завершается.

А где находится код, который удовлетворяет этому описанию? Я что то не пойму, или в коде такого нет.