Je souhaite apprendre le langage de programmation pour le terminal MT5. Par où commencer en tant que débutant ? - page 6

 
Vasiliy Kolesov:

Il n'est pas pratique d'apprendre le manuel de Kovalev à partir de zéro, car il est dépassé. Vous commencez à faire des exercices et ils ne se compilent pas. Et le simple fait de lire, sans pratique, rend plus difficile la mémorisation des choses.

Je ne pense pas que nous parlions d'exemples simples. C'est probablement déjà à la fin d'un manuel. Et c'est probablement une question de syntaxe, qui, si vous comprenez les bases, est facilement corrigée. Dans tous les cas, TC peut toujours demander pourquoi tel ou tel exemple ne compile pas.

Pouvez-vous donner un exemple du tutoriel qui ne compile pas ? Prenons un exemple.

 
Ilya Malev:

On vous a conseillé à juste titre d'apprendre le C++, car MQL n'est que cela, et il y a beaucoup plus de matériel sur le C++.

Si vous connaissez le C++, étudiez le MQL à partir de l'aide, en analysant les EA d'autres personnes.

Et ce, si l'on planifie ses activités en dehors de MT. Mais on ne peut pas planifier une telle chose à l'avance. Pour l'instant, l'objectif est d'apprendre à écrire pour MT. Et si une personne commence avec C ou C++, elle y sera coincée pour ces choses qui sont absentes dans MQL dès le début. Après tout, même une simple impression de valeur ne peut être réalisée avec cout. À cet égard, MQL est beaucoup plus facile - Imprimer ou Alerter.

Il est donc préférable de commencer à apprendre ce dont vous avez besoin. Et plus tard, si cela vous plaît et que vous voulez continuer, vous pourrez passer au C++.

 

Apprenez le C++ si vous êtes un débutant. Voici une bonne ressourcehttps://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-i-s

Évitez les non-professionnels, leur langage est trop sec pour que l'on puisse se souvenir de quoi que ce soit. Utilisez des techniques mnémotechniques, il y a beaucoup de livres sur ce sujet sur Internet.

Personnellement, pour mémoriser quelque chose, il faut imaginer une fonction, par exemple, comme un objet du monde réel, en y ajoutant plus de luminosité et d'humour, de sexe et de surréalisme.

 
multiplicator:

il est préférable de

6 autres paramètres doivent être saisis dans PositionOpen.


Les autres paramètres ne doivent pas être prescrits

 
Ihor Herasko:

Il ne s'agit pas d'exemples simples. Il est probablement déjà à la fin d'un manuel scolaire. Et il s'agit probablement d'une question de syntaxe, qui, si vous comprenez les bases, peut être facilement corrigée. Dans tous les cas, TC peut toujours demander pourquoi tel ou tel exemple ne compile pas.

Pouvez-vous donner un exemple du tutoriel qui ne compile pas ? Prenons un exemple.

Oui, depuis le début, par exemple il n'y a pas de fonction Start, maintenant c'estOnInit().

J'ai trouvé une bonne description ici, si vous partez de zérohttps://sgr-tradeinvest.ru/mql4.

 
Vasiliy Kolesov :

oui depuis le tout début, par exemple il n'y a pas de fonction Start, maintenant c'est OnInit()


Compilé. Il n'y a pas d'erreurs. Un seul avertissement, qui est facilement corrigé avec une compréhension élémentaire du terme "fonction".

J'ai même pris un exemple un peu plus gros :

 //--------------------------------------------------------------------
// tradingexpert.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
#property copyright "Copyright © Book, 2007"
#property link        "http://AutoGraf.dp.ua"
//--------------------------------------------------------------- 1 --
                                   // Численные значения для М15
extern double StopLoss   = 200 ;     // SL для открываемого ордера
extern double TakeProfit = 39 ;       // ТР для открываемого ордера
extern int     Period_MA_1= 11 ;       // Период МА 1
extern int     Period_MA_2= 31 ;       // Период МА 2
extern double Rastvor    = 28.0 ;     // Расстояние между МА 
extern double Lots       = 0.1 ;     // Жестко заданное колич. лотов
extern double Prots      = 0.07 ;     // Процент свободных средств
 
bool Work= true ;                     // Эксперт будет работать.
string Symb;                       // Название финанс. инструмента
//--------------------------------------------------------------- 2 --
int start()
  {
   int
   Total,                           // Количество ордеров в окне 
   Tip=- 1 ,                           // Тип выбран. ордера (B=0,S=1)
   Ticket;                           // Номер ордера
   double
   MA_1_t,                           // Значен. МА_1 текущее
   MA_2_t,                           // Значен. МА_2 текущее 
   Lot,                             // Колич. лотов в выбран.ордере
   Lts,                             // Колич. лотов в открыв.ордере
   Min_Lot,                         // Минимальное количество лотов
   Step,                             // Шаг изменения размера лота
   Free,                             // Текущие свободные средства
   One_Lot,                         // Стоимость одного лота
   Price,                           // Цена выбранного ордера
   SL,                               // SL выбранного ордера 
   TP;                               // TP выбранного ордера
   bool
   Ans  = false ,                     // Ответ сервера после закрытия
   Cls_B= false ,                     // Критерий для закрытия  Buy
   Cls_S= false ,                     // Критерий для закрытия  Sell
   Opn_B= false ,                     // Критерий для открытия  Buy
   Opn_S= false ;                     // Критерий для открытия  Sell
//--------------------------------------------------------------- 3 --
   // Предварит.обработка
   if ( Bars < Period_MA_2)                       // Недостаточно баров
     {
       Alert ( "Недостаточно баров в окне. Эксперт не работает." );
       return ;                                   // Выход из start()
     }
   if (Work== false )                               // Критическая ошибка
     {
       Alert ( "Критическая ошибка. Эксперт не работает." );
       return ;                                   // Выход из start()
     }
//--------------------------------------------------------------- 4 --
   // Учёт ордеров
   Symb= Symbol ();                               // Название фин.инстр.
   Total= 0 ;                                     // Количество ордеров
   for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер
     {
       if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) // Если есть следующий
        {                                       // Анализ ордеров:
         if ( OrderSymbol ()!=Symb) continue ;       // Не наш фин. инструм
         if ( OrderType ()> 1 )                     // Попался отложенный
           {
             Alert ( "Обнаружен отложенный ордер. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total> 1 )                           // Не более одного орд
           {
             Alert ( "Несколько рыночных ордеров. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Ticket= OrderTicket ();                   // Номер выбранн. орд.
         Tip   = OrderType ();                     // Тип выбранного орд.
         Price = OrderOpenPrice ();               // Цена выбранн. орд.
         SL    = OrderStopLoss ();                 // SL выбранного орд.
         TP    = OrderTakeProfit ();               // TP выбранного орд.
         Lot   = OrderLots ();                     // Количество лотов
        }
     }
//--------------------------------------------------------------- 5 --
   // Торговые критерии
   MA_1_t= iMA ( NULL , 0 ,Period_MA_1, 0 , MODE_LWMA , PRICE_TYPICAL , 0 ); // МА_1
   MA_2_t= iMA ( NULL , 0 ,Period_MA_2, 0 , MODE_LWMA , PRICE_TYPICAL , 0 ); // МА_2
 
   if (MA_1_t > MA_2_t + Rastvor* Point )         // Если разница между
     {                                           // ..МА 1 и 2 большая
      Opn_B= true ;                               // Критерий откр. Buy
      Cls_S= true ;                               // Критерий закр. Sell
     }
   if (MA_1_t < MA_2_t - Rastvor* Point )         // Если разница между
     {                                           // ..МА 1 и 2 большая
      Opn_S= true ;                               // Критерий откр. Sell
      Cls_B= true ;                               // Критерий закр. Buy
     }
//--------------------------------------------------------------- 6 --
   // Закрытие ордеров
   while ( true )                                   // Цикл закрытия орд.
     {
       if (Tip== 0 && Cls_B== true )                 // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert ( "Попытка закрыть Buy " ,Ticket, ". Ожидание ответа.." );
         RefreshRates ();                         // Обновление данных
         Ans= OrderClose (Ticket,Lot, Bid , 2 );       // Закрытие Buy
         if (Ans== true )                         // Получилось :)
           {
             Alert ( "Закрыт ордер Buy " ,Ticket);
             break ;                               // Выход из цикла закр
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
 
       if (Tip== 1 && Cls_S== true )                 // Открыт ордер Sell..
        {                                       // и есть критерий закр
         Alert ( "Попытка закрыть Sell " ,Ticket, ". Ожидание ответа.." );
         RefreshRates ();                         // Обновление данных
         Ans= OrderClose (Ticket,Lot, Ask , 2 );       // Закрытие Sell
         if (Ans== true )                         // Получилось :)
           {
             Alert ( "Закрыт ордер Sell " ,Ticket);
             break ;                               // Выход из цикла закр
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       break ;                                     // Выход из while
     }
//--------------------------------------------------------------- 7 --
   // Стоимость ордеров
   RefreshRates ();                               // Обновление данных
   Min_Lot= MarketInfo (Symb, MODE_MINLOT );         // Миним. колич. лотов 
   Free   = AccountFreeMargin ();                 // Свободн средства
   MarketInfo (Symb, MODE_MARGINREQUIRED ); // Стоимость 1 лота
   Step   = MarketInfo (Symb, MODE_LOTSTEP );       // Шаг изменен размера
 
   if (Lots > 0 )                                 // Если заданы лоты,то 
      Lts =Lots;                                 // с ними и работаем 
   else                                          // % свободных средств
      Lts= MathFloor (Free*Prots/One_Lot/Step)*Step; // Для открытия
 
   if (Lts < Min_Lot) Lts=Min_Lot;               // Не меньше минимальн
   if (Lts*One_Lot > Free)                       // Лот дороже свободн.
     {
       Alert ( " Не хватает денег на " , Lts, " лотов" );
       return ;                                   // Выход из start()
     }
//--------------------------------------------------------------- 8 --
   // Открытие ордеров
   while ( true )                                   // Цикл закрытия орд.
     {
       if (Total== 0 && Opn_B== true )               // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates ();                         // Обновление данных
         SL= Bid - New_Stop(StopLoss)* Point ;     // Вычисление SL откр.
         TP= Bid + New_Stop(TakeProfit)* Point ;   // Вычисление TP откр.
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend (Symb, OP_BUY ,Lts, Ask , 2 ,SL,TP); //Открытие Buy
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       if (Total== 0 && Opn_S== true )               // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates ();                         // Обновление данных
         SL= Ask + New_Stop(StopLoss)* Point ;     // Вычисление SL откр.
         TP= Ask - New_Stop(TakeProfit)* Point ;   // Вычисление TP откр.
         Alert ( "Попытка открыть Sell. Ожидание ответа.." );
         Ticket= OrderSend (Symb, OP_SELL ,Lts, Bid , 2 ,SL,TP); //Открытие Sel
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Sell " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       break ;                                     // Выход из while
     }
//--------------------------------------------------------------- 9 --
   return ;                                       // Выход из start()
  }
//-------------------------------------------------------------- 10 --
int Fun_Error( int Error)                         // Ф-ия обработ ошибок
  {
   switch (Error)
     {                                           // Преодолимые ошибки            
       case    4 : Alert ( "Торговый сервер занят. Пробуем ещё раз.." );
         Sleep ( 3000 );                           // Простое решение
         return ( 1 );                             // Выход из функции
       case 135 : Alert ( "Цена изменилась. Пробуем ещё раз.." );
         RefreshRates ();                         // Обновим данные
         return ( 1 );                             // Выход из функции
       case 136 : Alert ( "Нет цен. Ждём новый тик.." );
         while ( RefreshRates ()== false )           // До нового тика
             Sleep ( 1 );                           // Задержка в цикле
         return ( 1 );                             // Выход из функции
       case 137 : Alert ( "Брокер занят. Пробуем ещё раз.." );
         Sleep ( 3000 );                           // Простое решение
         return ( 1 );                             // Выход из функции
       case 146 : Alert ( "Подсистема торговли занята. Пробуем ещё.." );
         Sleep ( 500 );                             // Простое решение
         return ( 1 );                             // Выход из функции
         // Критические ошибки
       case    2 : Alert ( "Общая ошибка." );
         return ( 0 );                             // Выход из функции
       case    5 : Alert ( "Старая версия терминала." );
         Work= false ;                             // Больше не работать
         return ( 0 );                             // Выход из функции
       case 64 : Alert ( "Счет заблокирован." );
         Work= false ;                             // Больше не работать
         return ( 0 );                             // Выход из функции
       case 133 : Alert ( "Торговля запрещена." );
         return ( 0 );                             // Выход из функции
       case 134 : Alert ( "Недостаточно денег для совершения операции." );
         return ( 0 );                             // Выход из функции
       default : Alert ( "Возникла ошибка " ,Error); // Другие варианты   
         return ( 0 );                             // Выход из функции
     }
  }
//-------------------------------------------------------------- 11 --
int New_Stop( int Parametr)                       // Проверка стоп-прик.
  {
   int Min_Dist= MarketInfo (Symb, MODE_STOPLEVEL ); // Миним. дистанция
   if (Parametr < Min_Dist)                     // Если меньше допуст.
     {
      Parametr=Min_Dist;                         // Установим допуст.
       Alert ( "Увеличена дистанция стоп-приказа." );
     }
   return (Parametr);                             // Возврат значения
  }
//-------------------------------------------------------------- 12 --

Il compile également. 12 avertissements, mais aucun d'entre eux n'affecte les performances du programme. Ils sont également corrigés. Par conséquent, pour démarrer le didacticiel - c'est tout.

 
BillionerClub:

Apprenez le C++ si vous êtes un débutant. Voici une bonne ressourcehttps://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-i-s

Cet homme a besoin d'un chauffeur et vous lui donnez des réponses évasives. Au stade de la maîtrise de MQL, la question de savoir si le programmeur a besoin de la programmation en principe, s'il peut y arriver. MQL est plus facile que C++. Pourquoi s'embêter avec des choses compliquées ?

En particulier, le lien ci-dessus inclut tout ce que MQL n'a pas : bibliothèque standard (MLQ en a une, mais la sienne, pas C++), espace de noms, entrée et sortie via cout et cin.

 
Ihor Herasko:

Compilé. Il n'y a pas d'erreurs. Un seul avertissement, qui est facilement corrigé avec une compréhension de base du terme "fonction".

J'ai même pris un exemple un peu plus grand :

Il compile aussi. Il y a 12 avertissements, mais aucun d'entre eux n'affecte le fonctionnement du programme. Ils peuvent également être facilement réparés. C'est pourquoi le tutoriel est un bon point de départ.

J'ai essayé pour une raison quelconque et ça n'a pas marché. Je pensais que c'était à cause du changement de nom. Merci de l'avoir essayé. On devrait peut-être y revenir.

 
Vitaly Muzichenko:

Yuri, eh bien, tout le monde commence quelque part.

J'ai commencé par le .php, puis j'ai étudié le .js, car sans lui, écrire quelque chose de normal n'est tout simplement pas réaliste. Lorsque le .js a été complété par la bibliothèque jquery, c'était une joie, mais il fallait l'apprendre. Beaucoup de gens ont écrit à l'époque que c'était une absurdité et qu'il fallait utiliser uniquement du .js pur, puis tout le monde est passé à l'utilisation de jquery, parce que les bibliothèques sont cool.

Quand j'ai touché au forex, j'ai étudié le .mql parce que j'en avais besoin, même si c'était difficile, ce n'est pas la même chose que php et js.

Donc tout ce qui compte, c'est le désir.

Maintenant, pour être un enfant cool, jquery n'est pas suffisant, vous devez étudier ***teen more frameworks... C'est ainsi que le programmeur moyen vit toute sa vie de programmeur inachevé - il apprend un framework et trois autres apparaissent en même temps.

 
Anastasia Vasilenko:
Qu'avez-vous étudié ?

Si seulement vous saviez ce que vous savez déjà et ce que vous pouvez faire. En général, il suffit de prendre le conseiller expert dans le kit terminal, de l'ouvrir dans l'éditeur et de voir si quelque chose dans le code est mis en évidence dans une couleur différente - mettez le curseur à cet endroit, appuyez sur f1 et lisez l'aide.

Si vous n'êtes pas du tout familier avec la programmation, si vous ne savez pas ce qu'il faut faire, si, etc. - Vous pouvez commencer par un livre de langue pour les nuls ou des livres pour enfants.