Переход c MQL5 на Mql4

 

Появилось желание  открыть Метоедитор  МТ4 ,появись вопросы и т.д 

Если в мт5 еще боле мене как то  для себя могу подправить  код  , то мт4  ну никак поддается пониманию ......

Mт5 я начал осваивать  с стихов  этого кодера  и Mт4 хотел бы познать в этом стиле  поэзии ) 

 в общем вот такая  сочинюха :

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

#property copyright "Mechanic"

#property link      "https://login.mql5.com/ru/users/Sergey_Mechanic/portfolio"

#property version   "1.00"


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

// Соглашение об именовании переменных

//

// В коде используется "венгерская" нотация, суть которой заключается в том,

// что перед именем переменной добавляется префикс, обозначающий её тип:

// n - целочисленные переменные (int, long, ulong, short, ushort),

// f - переменные с плавающей точкой (double, float),

// e - перечисляемые переменные (enum),

// dt - переменная времени (datetime),

// h - хэндл (handle) файла или индикатора,

// s - строковые переменные (string).

//

// Кроме того, используются дополнительные префиксы области действия:

// i_ - входные параметры (input),

// g_ - глобальные переменные,

// m_ - член класса.

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

input string               i_sMASettings            = "Настройки MA";                        //  
input uint                  i_nMAPeriod=7;                                    // Период
input ENUM_MA_METHOD         i_eMAMethod=MODE_EMA;                              // Тип
input ENUM_APPLIED_PRICE    i_eMAPrice=PRICE_CLOSE;                           // Цена для расчёта



input string                                    i_sBBSettings                           = "*** Настройки Bollinger Bands ***";  //  
input uint                                              i_nBBPeriod                                     = 50;                                                                                           // Период
input double                                    i_fBBDeviation                          = 2;                                                                                            // Количество стандартных отклонений
input ENUM_APPLIED_PRICE        i_eBBPrice                                      = PRICE_CLOSE;                                                                  // Цена для расчёта

// хэндлы индикаторов
int g_hBollingerBands = 0;
int g_hMA = 0;
int OnInit()
  {
//---

        // Проверим корректность входных параметров.
        // Если какой-либо из параметров имеет недопустимое значение,
        // выведем окно с уведомлением и прекратим работу советника.
        
        // Строка с сообщением об ошибке.
        // Если после всех проверок она останется пустой, значит входные параметры корректны.
        string sError = "";
        
        if(i_nBBPeriod < 1)
                sError += "Период Bollinger Bands не может быть меньше 1. \n";
        
        if(i_fBBDeviation < 0)
                sError += "Количество стандартных отклонений Bollinger Bands не может быть отрицательным. \n";
                
        if(i_nMAPeriod < 1)
                sError += "Период МА не может быть меньше 1. \n";
                
        // если после всех проверок строка ошибки не пустая, значит входные параметры некорректны.
        // Выведем на экран уведомление с текстом ошибки, дополнив её предложением откорректировать параметры.
        if(sError != "")
        {
                sError += "\nОткорректируйте входные параметры. Работа советника прекращена.";
                Print(sError);                  // запись ошибки в журнал
                MessageBox(sError);     // вывод на экран сообщения об ошибке
                return(INIT_FAILED);    // завершаем инициализацию с ошибкой
        }
        
        // Если оказались здесь, значит входные параметры корректны и инициализация не прервалась.
        
        // Создадим экземпляр индикатора ВВ и получим его хэндл
        g_hBollingerBands = iBands(Symbol(), _Period, i_nBBPeriod, 0, i_fBBDeviation, i_eBBPrice,0,0);
        
        // Проверим корректность полученного хэндла. В случае ошибки сделаем запись в журнал и завершим работу.
        if(g_hBollingerBands == INVALID_HANDLE)
        {
                Print("Не удалось создать хэндл индикатора Bollonger Bands.");
                return(INIT_FAILED);    // завершаем инициализацию с ошибкой
        }
        
        // Создадим экземпляр индикатора МА и получим его хэндл
        
           g_hMA = iMA(Symbol(), _Period,i_nMAPeriod, 0, i_eMAMethod, i_eMAPrice, 0);
        
        // Проверим корректность полученного хэндла. В случае ошибки сделаем запись в журнал и завершим работу.
        if(g_hMA == INVALID_HANDLE)
        {
                Print("Не удалось создать хэндл индикатора MA.");
                return(INIT_FAILED);    // завершаем инициализацию с ошибкой
        }  
//---
   return(INIT_SUCCEEDED);
  }

 

на этапе инициализации  хэндла  

// Создадим экземпляр индикатора МА и получим его хэндл

        g_hMA = iMA(_Symbol_Period, i_nMAPeriod, 0, i_eMAMethod, i_eMAPrice);

     // Создадим экземпляр индикатора ВВ и получим его хэндл

        g_hBollingerBands = iBands(Symbol(), _Period, i_nBBPeriod, 0, i_fBBDeviation, i_eBBPrice,0,0);

Компилятор Мт4 говорит что в этих строчках  неправильный параметр , 

Что именно  изменили  в мт5  и как правильно записать  для мт4 ?

 
в 4-ке ненужны хендлы -  iMA(_Symbol_Period, i_nMAPeriod, 0, i_eMAMethod, i_eMAPrice,bar) сразу отдаст значение МА-шки на баре bar.
 
Alexander Antoshkin:

Появилось желание  открыть Метоедитор  МТ4 ,появись вопросы и т.д 

Если в мт5 еще боле мене как то  для себя могу подправить  код  , то мт4  ну никак поддается пониманию ......

Mт5 я начал осваивать  с стихов  этого кодера  и Mт4 хотел бы познать в этом стиле  поэзии ) 

 в общем вот такая  сочинюха :

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

#property copyright "Mechanic"

#property link      "https://login.mql5.com/ru/users/Sergey_Mechanic/portfolio"

#property version   "1.00"


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

// Соглашение об именовании переменных

//

// В коде используется "венгерская" нотация, суть которой заключается в том,

// что перед именем переменной добавляется префикс, обозначающий её тип:

// n - целочисленные переменные (int, long, ulong, short, ushort),

// f - переменные с плавающей точкой (double, float),

// e - перечисляемые переменные (enum),

// dt - переменная времени (datetime),

// h - хэндл (handle) файла или индикатора,

// s - строковые переменные (string).

//

// Кроме того, используются дополнительные префиксы области действия:

// i_ - входные параметры (input),

// g_ - глобальные переменные,

// m_ - член класса.

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

 

на этапе инициализации  хэндла  

// Создадим экземпляр индикатора МА и получим его хэндл

        g_hMA = iMA(_Symbol_Period, i_nMAPeriod, 0, i_eMAMethod, i_eMAPrice);

     // Создадим экземпляр индикатора ВВ и получим его хэндл

        g_hBollingerBands = iBands(Symbol(), _Period, i_nBBPeriod, 0, i_fBBDeviation, i_eBBPrice,0,0);

Компилятор Мт4 говорит что в этих строчках  неправильный параметр , 

Что именно  изменили  в мт5  и как правильно записать  для мт4 ?

В mql4 хендл не создаётся. Просто запрашивается значение линии или гистограммы индикатора на определённом баре. В документации всё чётко описано.
 
Alexey Viktorov:
В mql4 хендл не создаётся. Просто запрашивается значение линии или гистограммы индикатора на определённом баре. В документации всё чётко описано.

Ой Алексей да где эти книжки   , Когда их читать , с работы придешь  , туда сюда , и времени трендец ,,,,, час два посидишь у компа  и дальше в путь.......

 Для  меня удобнее спросить  чем  листать  гигобайты хлама

Ладно, Спасибо  с хенделом разобрался...

 
Alexander Antoshkin:

Ой Алексей да где эти книжки   , Когда их читать , с работы придешь  , туда сюда , и времени трендец ,,,,, час два посидишь у компа  и дальше в путь.......

 Для  меня удобнее спросить  чем  листать  гигобайты хлама

Ладно, Спасибо  с хенделом разобрался...

Можешь не верить, но если-бы ты заглянул в справку было-бы быстрей и удобней.

iMA

Возвращает значение технического индикатора Moving Average.

double  iMA(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   int          ma_period,        // период
   int          ma_shift,         // сдвиг средней
   int          ma_method,        // метод усреднения
   int          applied_price,    // тип цены
   int          shift             // сдвиг
   );
iMA - Технические индикаторы - Справочник MQL4
iMA - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
iMA - Технические индикаторы - Справочник MQL4
 
Alexander Antoshkin:

Появилось желание  открыть Метоедитор  МТ4 ,появись вопросы и т.д 

Если в мт5 еще боле мене как то  для себя могу подправить  код  , то мт4  ну никак поддается пониманию ......

Mт5 я начал осваивать  с стихов  этого кодера  и Mт4 хотел бы познать в этом стиле  поэзии ) 

 в общем вот такая  сочинюха :

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

#property copyright "Mechanic"

#property link      "https://login.mql5.com/ru/users/Sergey_Mechanic/portfolio"

#property version   "1.00"


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

// Соглашение об именовании переменных

//

// В коде используется "венгерская" нотация, суть которой заключается в том,

// что перед именем переменной добавляется префикс, обозначающий её тип:

// n - целочисленные переменные (int, long, ulong, short, ushort),

// f - переменные с плавающей точкой (double, float),

// e - перечисляемые переменные (enum),

// dt - переменная времени (datetime),

// h - хэндл (handle) файла или индикатора,

// s - строковые переменные (string).

//

// Кроме того, используются дополнительные префиксы области действия:

// i_ - входные параметры (input),

// g_ - глобальные переменные,

// m_ - член класса.

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

input string               i_sMASettings            = "Настройки MA";                        //  
input uint                  i_nMAPeriod=7;                                    // Период
input ENUM_MA_METHOD         i_eMAMethod=MODE_EMA;                              // Тип
input ENUM_APPLIED_PRICE    i_eMAPrice=PRICE_CLOSE;                           // Цена для расчёта



input string                                    i_sBBSettings                           = "*** Настройки Bollinger Bands ***";  //  
input uint                                              i_nBBPeriod                                     = 50;                                                                                           // Период
input double                                    i_fBBDeviation                          = 2;                                                                                            // Количество стандартных отклонений
input ENUM_APPLIED_PRICE        i_eBBPrice                                      = PRICE_CLOSE;                                                                  // Цена для расчёта

// хэндлы индикаторов
int g_hBollingerBands = 0;
int g_hMA = 0;
int OnInit()
  {
//---

        // Проверим корректность входных параметров.
        // Если какой-либо из параметров имеет недопустимое значение,
        // выведем окно с уведомлением и прекратим работу советника.
        
        // Строка с сообщением об ошибке.
        // Если после всех проверок она останется пустой, значит входные параметры корректны.
        string sError = "";
        
        if(i_nBBPeriod < 1)
                sError += "Период Bollinger Bands не может быть меньше 1. \n";
        
        if(i_fBBDeviation < 0)
                sError += "Количество стандартных отклонений Bollinger Bands не может быть отрицательным. \n";
                
        if(i_nMAPeriod < 1)
                sError += "Период МА не может быть меньше 1. \n";
                
        // если после всех проверок строка ошибки не пустая, значит входные параметры некорректны.
        // Выведем на экран уведомление с текстом ошибки, дополнив её предложением откорректировать параметры.
        if(sError != "")
        {
                sError += "\nОткорректируйте входные параметры. Работа советника прекращена.";
                Print(sError);                  // запись ошибки в журнал
                MessageBox(sError);     // вывод на экран сообщения об ошибке
                return(INIT_FAILED);    // завершаем инициализацию с ошибкой
        }
        
        // Если оказались здесь, значит входные параметры корректны и инициализация не прервалась.
        
        // Создадим экземпляр индикатора ВВ и получим его хэндл
        g_hBollingerBands = iBands(Symbol(), _Period, i_nBBPeriod, 0, i_fBBDeviation, i_eBBPrice,0,0);
        
        // Проверим корректность полученного хэндла. В случае ошибки сделаем запись в журнал и завершим работу.
        if(g_hBollingerBands == INVALID_HANDLE)
        {
                Print("Не удалось создать хэндл индикатора Bollonger Bands.");
                return(INIT_FAILED);    // завершаем инициализацию с ошибкой
        }
        
        // Создадим экземпляр индикатора МА и получим его хэндл
        
           g_hMA = iMA(Symbol(), _Period,i_nMAPeriod, 0, i_eMAMethod, i_eMAPrice, 0);
        
        // Проверим корректность полученного хэндла. В случае ошибки сделаем запись в журнал и завершим работу.
        if(g_hMA == INVALID_HANDLE)
        {
                Print("Не удалось создать хэндл индикатора MA.");
                return(INIT_FAILED);    // завершаем инициализацию с ошибкой
        }  
//---
   return(INIT_SUCCEEDED);
  }

 

на этапе инициализации  хэндла  

// Создадим экземпляр индикатора МА и получим его хэндл

        g_hMA = iMA(_Symbol_Period, i_nMAPeriod, 0, i_eMAMethod, i_eMAPrice);

     // Создадим экземпляр индикатора ВВ и получим его хэндл

        g_hBollingerBands = iBands(Symbol(), _Period, i_nBBPeriod, 0, i_fBBDeviation, i_eBBPrice,0,0);

Компилятор Мт4 говорит что в этих строчках  неправильный параметр , 

Что именно  изменили  в мт5  и как правильно записать  для мт4 ?

Шутишь? Люди годами не могут перейти с 4-ры на 5. Что ты за программист, если не в состоянии прочитать доку, там все по русски, черным по белому.
 
Evgeny Belyaev:
Шутишь? Люди годами не могут перейти с 4-ры на 5. Что ты за программист, если не в состоянии прочитать доку, там все по русски, черным по белому.

Алаверды в качестве конкретного примера. ("петросянов" не предлагать)!
Лет шесть назад  на этот лигушатник меня  вдохновил   человек  который посвятил этой деятельности   большую свою часть жизни
времена  шли  по ходу  шло  новое и новое обновления   , выходили все новые версии терминалов ( конкурентной возни вокруг инструментов  великого обмана)  печатались и перепечатывались  документация!
И вот наступает день "Х"
 И  до Человека  наконец то доходит.......  что технический прогресс может быть нейтральным  .......
Он  медленно подымает  руку в верх  и резко опуская посылоет све и всех не х...., потому как просто не реально угнаться за всем новым
уходит враз и навсегда...........

Строит дом , сожает дерево,ростит внуков  и нет у него желания читать  что там  какой то хрен  выдумал в очередной раз  но он остался трейдером  приказы отправляет чуть ли не почтовыми голубями (по звонку телефона)

в общем как то   так..  
--------------------------------

Я пока еще не против  и прочесть но( на досуге) , Хотя в большинстве своем поступаю   так :

Беру код  из кода базы , запускаю его в тестере, если он работает и  заложенная в нем  идея меня привлекает  , начинаю  разбирать !!

Что мне не понятно  я предпочитаю спросить,  можно между строками и пошутить заодно

 
Alexander Antoshkin:

Алаверды в качестве конкретного примера. ("петросянов" не предлагать)!
Лет шесть назад  на этот лигушатник меня  вдохновил   человек  который посвятил этой деятельности   большую свою часть жизни
времена  шли  по ходу  шло  новое и новое обновления   , выходили все новые версии терминалов ( конкурентной возни вокруг инструментов  великого обмана)  печатались и перепечатывались  документация!
И вот наступает день "Х"
 И  до Человека  наконец то доходит.......  что технический прогресс может быть нейтральным  .......
Он  медленно подымает  руку в верх  и резко опуская посылоет све и всех не х...., потому как просто не реально угнаться за всем новым
уходит враз и навсегда...........

Строит дом , сожает дерево,ростит внуков  и нет у него желания читать  что там  какой то хрен  выдумал в очередной раз  но он остался трейдером  приказы отправляет чуть ли не почтовыми голубями (по звонку телефона)

в общем как то   так..  
--------------------------------

Я пока еще не против  и прочесть но( на досуге) , Хотя в большинстве своем поступаю   так :

Беру код  из кода базы , запускаю его в тестере, если он работает и  заложенная в нем  идея меня привлекает  , начинаю  разбирать !!

Что мне не понятно  я предпочитаю спросить,  можно между строками и пошутить заодно

Ознакомиться с докой , по какой-то функцией 1-3 минуты(для меня.) Писать на форум , а прежде чем писать нужно сформулировать вопрос, при этом максимально подробно и развернуто, проверить нет ли двусмысленности....Выложить скрины.(минут 5, минимум). 

Потом нужно ждать пока кто нибудь ответит, еще не факт что ответит правильно.(это займет от 30 минут до бесконечности).

Так не проще ли прочитать доку?