Quero aprender a linguagem de programação para o terminal MT5. Por onde começo como iniciante ? - página 6

 
Vasiliy Kolesov:

Não é conveniente aprender do zero com o livro de Kovalev, pois ele está desatualizado. Você começa a fazer alguns exercícios e eles não são compilados. E a simples leitura, sem prática, torna mais difícil lembrar das coisas.

Não creio que estejamos falando de nenhum exemplo simples. É provavelmente o fim do livro didático. E provavelmente é uma questão de sintaxe, que, se você entender o básico, é facilmente corrigida. Em qualquer caso, a TC pode sempre perguntar por que este ou aquele exemplo não é compilado.

Você pode dar um exemplo do tutorial que não é compilado? Por exemplo, vamos quebrar isso.

 
Ilya Malev:

Você foi corretamente aconselhado a aprender C++, porque é MQL, e há muito mais materiais em C++.

Se você conhece C++, então estude MQL a partir da ajuda, analisando os EAs de outras pessoas.

Isto se a pessoa planeja suas atividades fora da MT. Mas não se pode planejar tal coisa com antecedência. Neste momento, o objetivo é aprender a escrever para a MT. E se uma pessoa começa em C ou C++, ela ficará presa lá por tais coisas que estão ausentes na MQL desde o início. Afinal de contas, mesmo uma simples impressão de valor não pode ser feita com cout. A este respeito, a MQL é muito mais fácil - Imprimir ou Alertar.

Portanto, é melhor começar a aprender o que você precisa. E mais tarde, se você gostar e quiser continuar, você pode mudar para C++.

 

Aprenda C++ se você é um iniciante. Aqui está um bom recursohttps://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-i-s

Evite os não-profissionais, seu idioma é seco demais para se lembrar de qualquer coisa. Usando técnicas mnemônicas, há muitos livros sobre este tema na Internet.

Pessoalmente, para memorizar algo, é preciso imaginar uma função, por exemplo, como um objeto do mundo real, acrescentando mais brilho e humor, sexo e surrealismo.

 
multiplicator:

é melhor

6 mais parâmetros devem ser inseridos no PositionOpen.


Os outros parâmetros não precisam ser prescritos

 
Ihor Herasko:

Estes não são quase nenhum exemplo simples. Provavelmente já está no final de um livro didático. E provavelmente se trata de sintaxe, que, se você entender o básico, pode ser facilmente corrigida. Em qualquer caso, a TC pode sempre perguntar por que este ou aquele exemplo não é compilado.

Você pode dar um exemplo do tutorial que não é compilado? Vejamos um exemplo.

Sim, desde o início, por exemplo, não há função Start, agora éOnInit().

Encontrei aqui uma boa descrição, se você começar do zerohttps://sgr-tradeinvest.ru/mql4

 
Vasiliy Kolesov :

sim desde o início, por exemplo, não há função Start, agora é OnInit()


Compilado. Não há erros. Apenas um aviso, que é facilmente corrigido com uma compreensão elementar do termo "função".

Eu até peguei um exemplo um pouco maior:

 //--------------------------------------------------------------------
// 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 --

Ele também compila. 12 avisos, mas nenhum deles afeta o desempenho do programa. Eles também são corrigidos. Portanto, para iniciar o Tutorial - é isso.

 
BillionerClub:

Aprenda C++ se você é um iniciante. Aqui está um bom recursohttps://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-i-s

O homem precisa de uma carona e você está lhe dando a carona. Na fase de aprendizagem do MQL, a questão de saber se o programador precisa de programação em princípio, se ele pode realizá-la. O MQL é mais fácil que o C++. Por que se preocupar com coisas complicadas?

Especialmente, que o link acima inclui tudo o que a MQL não tem: biblioteca padrão (MLQ tem, mas sua própria, não C++), namespace, entrada e saída via cout e cin.

 
Ihor Herasko:

Compilado. Não há erros. Apenas um aviso, que é facilmente corrigido com uma compreensão básica do termo "função".

Eu até tomei um exemplo um pouco maior:

Compila também. Há 12 avisos, mas nenhum deles afeta a operabilidade do programa. Eles também podem ser facilmente fixados. É por isso que o Tutorial é um bom ponto de partida.

Eu tentei por alguma razão e não funcionou. Pensei que fosse por causa da mudança de nome. Obrigado por tentar. Talvez devêssemos voltar a ele.

 
Vitaly Muzichenko:

Yuri, bem, todos começam em algum lugar.

Eu comecei com .php, depois estudei .js porque sem ele, escrever algo normal simplesmente não é realista. Quando o .js foi complementado com a biblioteca jquery, foi uma alegria, mas você tinha que aprender. Muitas pessoas escreveram então que era um absurdo e que você só deveria usar .js puro, mais tarde todos passaram a usar jquery, porque as bibliotecas são legais.

Quando toquei em forex, estudei .mql porque precisava, mesmo sendo difícil, não é o mesmo que php e js.

Portanto, o que importa é o desejo.

Agora, para ser um garoto legal, não basta ser um garoto legal, você tem que estudar mais dezoito estruturas... É assim que o programador médio vive sua vida inteira como um programador inacabado - ele aprende uma estrutura e mais três aparecem ao mesmo tempo.

 
Anastasia Vasilenko:
O que você estudou?

Se ao menos você soubesse o que já sabe e o que pode fazer. Em geral - basta pegar o Expert Advisor do kit terminal, abri-lo no editor e ver se algo no código está destacado em uma cor diferente - colocar o cursor ali, pressionar f1 e ler a ajuda.

Se você não está nada familiarizado com programação, não sabe para quê, se, etc. - Você pode começar com qualquer livro de idiomas para manequins ou livros infantis.