Написание эксперта

 

Учусь писать советников на MQL4 прочитал весь материал, подан очень сложно. Хочу написать примитивный советник на мувингах в целях практики значит записываю так 

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict

extern int Period_MA_1=6;   здесь в заглавной части можно указать свои периоды

extern int Period_MA_2=10; здесь в заглавной части можно указать свои периоды

extern int Period_MA_3=1;   здесь в заглавной части можно указать свои периоды

extern int Magic=2345; магический номер пока ничего ещё не расписал и его не использую

extern double Lots=0.1;       здесь в заглавной части можно задавать программе значение лотажа чтоб не лесть в исходник

//---

int OnInit() основная специальная функция по умолчанию

  {



//---

   return(INIT_SUCCEEDED); выход из неё

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason) основная специальная функция по умолчанию

  {

//---


  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

//---


  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int start()               моя специальная функция в которой я буду записывать нужный мне параметры и значения

  {

   double MA_1;      здесь я указал что у меня есть переменная MA_1 и указал её тип 

   MA_1=iMA(Symbol(),0,6,0,1,0,0); здесь я расписал свою переменную что она будет базироваться на индикаторе МА и указал параметры где, нет привязки к символу Symbol(), ко времени 0, период я указал 6, сдвиг индикатора 0, метод вычисления экспоненциальное среднее 1, цена закрытия используется 0 и без смещения 0

   double MA_3;

   MA_3=iMA(Symbol(),0,1,0,1,0,0);

  {

      if(MA_3 > MA_1)                здесь я написал условие if если 1 MA_3 скользящая имеет значение больше 6 MA_1

         OrderSend(Symbol(),0,Lots,Ask,0,0,0,NULL,0,0,Green); откроется сделка без привязки к символу Symbol(), цены учитываются по закрытию 0 с лотажом который прописывается в заглавной части, цену открытия указал Ask, без привязки к проскальзыванию 0 стопу 0 и тейк профиту 0, без комментария Null, магический ордер тоже не указывал 0, срок истечения ордера тоже не указывал написал ноль и цвет.

      if(MA_3 < MA_1)

         OrderSend(Symbol(),1,Lots,Bid,0,0,0,NULL,0,0,Red); обратное условие на продажу

         return(0);

     }

   return(0);

  }

выбивается предупреждение и советник не работает return value of 'OrderSend' should be checked кто может подсказать почему?


Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Психология успешного трейдера. Не секрет, что успех...
Файлы:
2j1mrt.mq4  4 kb
 

Seric29: вставляйте код через SPC


 
Seric29:

Учусь писать советников на MQL4 прочитал весь материал, подан очень сложно. Хочу написать примитивный советник на мувингах в целях практики значит записываю так 

......

выбивается предупреждение и советник не работает return value of 'OrderSend' should be checked кто может подсказать почему?



Код эксперта должен выполнятся внутри функции OnTick(). Так как у вас эта функция пустая (в ней нет вызова вашей пользовательской функции Start()) то советник ни чего не делает (работает в холостую).

 
Vitalii Ananev:

Код эксперта должен выполнятся внутри функции OnTick(). Так как у вас эта функция пустая (в ней нет вызова вашей пользовательской функции Start()) то советник ни чего не делает (работает в холостую).

start() пока ещё подсвечивается как встроенная функция и всё ещё используется в древних древних кодах кажется за место OnTick, да в древних советниках именно start() за место OnTick()
 

По теме вопроса.
Специальные функции
Функции обработки событий
Стоит определиться start() или OnTick() использовать. В MQL4 данность еще актуальна.

 
Aleksey Semenov:
start() пока ещё подсвечивается как встроенная функция и всё ещё используется в древних древних кодах кажется за место OnTick, да в древних советниках именно start() за место OnTick()

Это я знаю. А вот как компилятор будет работать встретив в коде две функции предназначение которых вызываться при получении нового тика, при этом одна из них устаревшая? Как минимум надо использовать какую то одну из них, а не обе вместе. Функция Start() оставлена для совместимости с устаревшими версиями и на данный момент ее уже ни кто не использует. Я думаю, что топик стартер просто начитался где то старых статей по Mql4.

 
Vitalii Ananev:

Это я знаю. А вот как компилятор будет работать встретив в коде две функции предназначение которых вызываться при получении нового тика, при этом одна из них устаревшая? Как минимум надо использовать какую то одну из них, а не обе вместе. Функция Start() оставлена для совместимости с устаревшими версиями и на данный момент ее уже ни кто не использует. Я думаю, что топик стартер просто начитался где то старых статей по Mql4.

Посмотрите повнимательней CodeBase и найдёте в достаточно свежих кодах и extern и start() не только в советниках, но и в индикаторах.

А что касается "начитался", так свежее чем учебник Ковалёва не писали и вряд-ли напишут.
 
Alexey Viktorov:

extern


extern то чем не угодил?

 
Evgeny Belyaev:

extern то чем не угодил?

Сам не знаю. Отвык и уже бросается в глаза как старьё. Наверное так-же как Open[i] и open[i] в индикаторах. Казалось-бы нет разницы, а уже непривычно.

 
Alexey Viktorov:

Сам не знаю. Отвык и уже бросается в глаза как старьё. Наверное так-же как Open[i] и open[i] в индикаторах. Казалось-бы нет разницы, а уже непривычно.


Разница есть. В 4-ке есть моменты, когда нужно изменить значение переменной в процессе выполнения программыextern с этой задачей справиться, input -не справиться.

Из справки:

Подобно input-переменным, extern-переменные также определяют входные параметры mql4-программы, они доступны из окна свойств. В отличии input-переменных, значения extern-переменных могут быть программно изменены в процессе работы программы. 

 
Aleksey Semenov:
start() пока ещё подсвечивается как встроенная функция и всё ещё используется в древних древних кодах кажется за место OnTick, да в древних советниках именно start() за место OnTick()
Тогда удалите OnTick - заработает start
Причина обращения: