MT5 단말기용 프로그래밍 언어를 배우고 싶습니다. 어디에서 학습을 시작해야 하나요? - 페이지 6

 
Vasiliy Kolesov :

Kovalev의 교과서에 따르면 노후화로 인해 처음부터 배우는 것이 편리하지 않습니다. 몇 가지 연습을 시작하지만 컴파일되지 않습니다. 그리고 연습 없이 읽기만 하면 무언가를 기억하기가 더 어렵습니다.

우리가 몇 가지 간단한 예에 대해 이야기하는 것 같지는 않습니다. 이것은 교과서가 끝날 무렵에 가장 가능성이 높습니다. 그리고 요점은 아마도 기본 사항을 이해하면 쉽게 수정할 수 있는 구문에 있을 것입니다. 어떤 경우든 TS는 항상 이 예나 저 예가 컴파일되지 않는 이유를 물을 수 있습니다.

컴파일되지 않는 자습서의 예를 들어 줄 수 있습니까? 예를 들어 살펴보겠습니다.

 
Ilya Malev :

MQL이 바로 그것이며 C++에 대한 훨씬 더 많은 자료가 있기 때문에 C++를 배우라는 조언을 받은 것이 옳습니다.

C++를 알고 있다면 도움말에서 MQL을 배우고 다른 사람의 Expert Advisors를 분석하십시오.

이것은 사람이 MT 외부에서 활동을 계획하는 경우입니다. 그러나 이것은 미리 계획할 수 없습니다. 이제 목표는 MT를 작성하는 방법을 배우는 것입니다. 그리고 C나 C++로 시작한다면 MQL에 존재하지 않는 것들에 즉시 빠져들게 될 것입니다. 결국, 단순한 값 출력조차도 cout을 통해 수행할 수 없습니다. 이와 관련하여 MQL은 인쇄 또는 경고와 같이 훨씬 간단합니다.

따라서 필요한 것을 배우기 시작하는 것이 좋습니다. 그런 다음에만 마음에 들고 계속하려면 C ++로 전환할 수 있습니다.

 

초보자라면 C++를 배우십시오. 다음은 좋은 리소스입니다. https://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-is

비전문가를 피하십시오. 그들의 언어는 너무 건조하여 어떻게든 자료를 기억할 수 없습니다. 니모닉 기술을 사용하면 인터넷에 이 주제에 대한 책이 많이 있습니다.

개인적으로 나 자신은 무언가를 기억하기 위해서는 예를 들어 더 많은 밝기와 유머, 섹스, 초현실주의를주는 세계의 실제 개체로서의 기능을 제시해야한다고 결론 지었습니다.

 
multiplicator :

이 방법으로 더 나은

PositionOpen에서는 여전히 6개의 매개변수를 처방해야 합니다.


나머지 매개변수는 선택사항입니다.

 
Ihor Herasko :

우리가 몇 가지 간단한 예에 대해 이야기하는 것 같지는 않습니다. 이것은 교과서가 끝날 무렵에 가장 가능성이 높습니다. 그리고 요점은 아마도 기본 사항을 이해하면 쉽게 수정할 수 있는 구문에 있을 것입니다. 어떤 경우든 TS는 항상 이 예나 저 예가 컴파일되지 않는 이유를 물을 수 있습니다.

컴파일되지 않는 자습서의 예를 들어 줄 수 있습니까? 예를 들어 살펴보겠습니다.

예, 처음부터 시작 기능이 없습니다. 이제 OnInit()입니다.

https://sgr-tradeinvest.ru/mql4 에서 처음부터 시작하면 여기에서 나쁘지 않은 프레젠테이션을 찾았습니다.

 
Vasiliy Kolesov :

예, 처음부터 시작 기능이 없습니다. 이제 OnInit()입니다.


컴파일됨. 오류가 없습니다. "기능"이라는 용어에 대한 기본적인 이해로 쉽게 수정할 수 있는 단 하나의 경고입니다.

나는 약간 더 큰 예를 들기도 했습니다.

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

또한 컴파일합니다. 12개의 경고가 표시되지만 그 중 어느 것도 프로그램의 성능에 영향을 미치지 않습니다. 그들은 또한 수정됩니다. 따라서 튜토리얼을 시작하는 것이 전부입니다.

 
BillionerClub :

초보자라면 C++를 배우십시오. 다음은 좋은 리소스입니다. https://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-is

사람이 가야하고 당신은 그에게 체커를줍니다. MQL을 마스터하는 단계에서는 원칙적으로 탑스타터에게 어느 정도의 프로그래밍이 필요한가 하는 질문을 던질 것입니다. MQL은 여전히 C++보다 쉽습니다. 왜 어려운 일을 합니까?

더욱이 주어진 링크는 MQL에 없는 모든 것으로 즉시 이동합니다. 표준 라이브러리(MLQ에는 있지만 C++가 아닌 자체가 있음), 네임스페이스, cout 및 cin을 통한 입력 및 출력이 있습니다.

 
Ihor Herasko :

컴파일됨. 오류가 없습니다. "기능"이라는 용어에 대한 기본적인 이해로 쉽게 수정할 수 있는 단 하나의 경고입니다.

나는 약간 더 큰 예를 들기도 했습니다.

또한 컴파일합니다. 12개의 경고가 표시되지만 그 중 어느 것도 프로그램의 성능에 영향을 미치지 않습니다. 그들은 또한 수정됩니다. 따라서 튜토리얼을 시작하는 것이 전부입니다.

어떤 이유로 시도했지만 작동하지 않았습니다. 이름 변경에 대한 생각. 노력해주셔서 감사합니다. 돌아갈 가치가있을 수 있습니다.

 
Vitaly Muzichenko :

유리, 뭐, 다들 어디선가 시작했어.

.php로 시작한 다음 .js를 공부했습니다. .js가 없으면 정상적인 것을 작성하는 것이 현실적이지 않기 때문입니다. .js에 jquery 라이브러리가 주어졌을 때, 그것은 완전한 행복이었지만 연구해야 할 필요가 있었습니다. 많은 사람들은 그것이 넌센스이고 순수한 .js만 사용해야 한다고 썼고, 나중에 라이브러리가 멋지기 때문에 모두가 jquery를 사용하도록 옮겼습니다.

Forex를 접할 때 부득이하게 .mql을 공부했는데, 어렵지만 php, js와 전혀 유사하지 않습니다.

그러므로 중요한 것은 욕망뿐입니다.

그리고 이제 명확한 아이가 되려면 jquery만으로는 충분하지 않습니다. *** 11가지 더 많은 프레임워크에 대해 배워야 합니다... 이것이 바로 일반 프로그래머가 미완성 프로그래머로 평생을 살아가는 방식입니다. 배우자마자 하나의 프레임워크가 추가되면 세 개의 새로운 프레임워크가 즉시 나타납니다.

 
Anastasia Vasilenko :
그리고 무엇을 공부했습니까?

당신이 이미 알고 있는 것과 할 수 있는 것을 알았다면. 일반적으로 터미널 키트에서 어드바이저를 가져와 편집기에서 열고 코드에서 다른 색상으로 강조 표시되어 있는지 확인하십시오. 커서를 거기에 놓고 f1을 누르고 도움말을 읽으십시오.

그리고 프로그래밍에 전혀 익숙하지 않다면 for, if 등이 무엇인지 모릅니다. - 그런 다음, 우선 인형이나 어린이를 위한 모든 언어로 된 책.