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

 
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 завершается.

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

 
Мне нужна помощь не могу исправить ошибку в советники , хочу написать время входу в рынок и выходу чтобы можно было менять установки,
Файлы:
 

Доброго времени суток всем.

Подскажите, как адаптировать советника MT5 для торговли на фондовой секции ммвб?

Ни один советник не работает... 

 
Dadayance:

Доброго времени суток всем.

Подскажите, как адаптировать советника MT5 для торговли на фондовой секции ммвб?

Ни один советник не работает... 

Скорее всего всё дело в:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Неполные сведения FOK заявки

Karputov Vladimir, 2015.10.06 09:10

Если с помощью визарда собрали советника, то попробуйте дописать такой код:

//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//---
   CExpertTrade *MyTrade=new CExpertTrade;
      if(MyTrade==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating MyTrade");
     }
   MyTrade.SetTypeFilling(ORDER_FILLING_RETURN);
   ExtExpert.InitTrade(1,MyTrade);
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)

Причина обращения: