MT5 terminali için programlama dilini öğrenmek istiyorum. öğrenmeye nereden başlamalı? - sayfa 6

 
Vasiliy Kolesov :

Kovalev'in ders kitabına göre, eskime nedeniyle sıfırdan öğrenmek uygun değil. Bazı alıştırmalar yapmaya başlarsınız, ancak derlenmezler. Ve sadece okumak, pratik yapmadan, bir şeyi hatırlamak daha zordur.

Bazı basit örneklerden bahsetmemiz olası değildir. Bu büyük olasılıkla ders kitabının sonundadır. Ve mesele muhtemelen, temelleri anlarken kolayca düzeltilen sözdizimindedir. Her durumda, TS her zaman şu veya bu örneğin neden derlenmediğini sorabilir.

Derlemeyen bir eğitimden örnek verebilir misiniz? Örneğin, bir göz atalım.

 
Ilya Malev :

Haklı olarak C++ öğrenmeniz tavsiye edildi, çünkü MQL neyse odur ve C++ ile ilgili çok daha fazla materyal vardır.

C++ biliyorsanız, diğer kişilerin Uzman Danışmanlarını analiz ederek yardımdan MQL öğrenin.

Bu, eğer bir kişi faaliyetlerini MT dışında planlıyorsa. Ancak bu önceden planlanamaz. Şimdi amaç MT için nasıl yazılacağını öğrenmek. Ve C veya C++ ile başlarsanız, MQL'de asla var olmayan şeylere hemen takılıp kalırsınız. Sonuçta, basit bir değer baskısı bile cout aracılığıyla yapılamaz. Bu bağlamda, MQL çok daha basittir - Yazdır veya Uyarı.

Bu nedenle, neye ihtiyacınız olduğunu öğrenmeye başlamak daha iyidir. Ve ancak o zaman, beğendiyseniz ve devam etmek istiyorsanız, o zaman C ++ 'a geçebilirsiniz.

 

Yeni başlayan biriyseniz C++ öğrenin. İşte iyi bir kaynak https://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-is

Profesyonel olmayanlardan kaçının, dilleri bir şekilde materyali hatırlamak için çok kuru. Anımsatıcı teknikleri kullanın, internette bu konuda birçok kitap var.

Şahsen, kendim için, bir şeyi hatırlamak için, örneğin, dünyanın gerçek bir nesnesi olarak bir işlevi sunmanın, daha fazla parlaklık ve mizah, seks, gerçeküstücülük vermenin gerekli olduğu sonucuna vardım.

 
multiplicator :

böyle daha iyi

PositionOpen'da hala 6 parametre belirlemeniz gerekir.


Parametrelerin geri kalanı isteğe bağlıdır.

 
Ihor Herasko :

Bazı basit örneklerden bahsetmemiz olası değildir. Bu büyük olasılıkla ders kitabının sonundadır. Ve mesele muhtemelen, temelleri anlarken kolayca düzeltilen sözdizimindedir. Her durumda, TS her zaman bunun veya bu örneğin neden derlenmediğini sorabilir.

Derlemeyen bir eğitimden örnek verebilir misiniz? Örneğin, bir göz atalım.

evet en başından beri, örneğin Başlat işlevi yok, şimdi OnInit()

Burada sıfırdan başlarsam kötü bir sunum bulamadım https://sgr-tradeinvest.ru/mql4

 
Vasiliy Kolesov :

evet en başından beri, örneğin Başlat işlevi yok, şimdi OnInit()


Derlenmiş. Hata yok. "İşlev" teriminin basit bir şekilde anlaşılmasıyla kolayca düzeltilebilecek tek bir uyarı.

Hatta biraz daha büyük bir örnek aldım:

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

Ayrıca derleme yapar. 12 uyarı, ancak hiçbiri programın performansını etkilemez. Onlar da düzeltilir. Bu nedenle, Eğitimi başlatmak için - bu kadar.

 
BillionerClub :

Yeni başlayan biriyseniz C++ öğrenin. İşte iyi bir kaynak https://foxford.ru/wiki/informatika/otlichiya-yazykov-programmirovaniya-si-is

Bir kişinin gitmesi gerekiyor ve ona dama veriyorsunuz. MQL'de ustalaşma aşamasında, ilke olarak, bir üst düzey başlangıç için ne kadar programlamaya ihtiyaç duyulduğu sorusu çekilecek mi? MQL hala C++'dan daha kolaydır. Neden zoru göze alsın?

Ayrıca, verilen bağlantı hemen MQL'de olmayan her şeye gider: standart kitaplık (MLQ'da vardır, ancak C++'da yoktur), ad alanı, cout ve cin aracılığıyla girdi ve çıktı.

 
Ihor Herasko :

Derlenmiş. Hata yok. "İşlev" teriminin basit bir şekilde anlaşılmasıyla kolayca düzeltilebilecek tek bir uyarı.

Hatta biraz daha büyük bir örnek aldım:

Ayrıca derleme yapar. 12 uyarı, ancak hiçbiri programın performansını etkilemez. Onlar da düzeltilir. Bu nedenle, Eğitimi başlatmak için - bu kadar.

Nedense denedim, olmadı. İsim değişikliği düşüncesi. Denediğin için teşekkürler. Geri dönmeye değer olabilir.

 
Vitaly Muzichenko :

Yuri, herkes bir yerden başladı.

.php ile başladım, sonra .js çalıştım çünkü onsuz normal bir şeyler yazmak gerçekçi değil. .js'ye jquery kütüphanesi verildiğinde, bu tam bir mutluluktu, ancak çalışılması gerekiyordu, daha sonra birçokları bunun saçma olduğunu ve sadece saf .js'nin kullanılması gerektiğini yazdı, daha sonra herkes jquery kullanmaya başladı çünkü kütüphaneler havalı.

Forex'e değindiğimde zorunluluktan .mql çalıştım, zor olsa da php ve js'ye hiç benzemiyor.

Yani önemli olan tek şey arzudur.

Ve şimdi, temiz bir çocuk olmak için jquery yeterli değil, *** on bir tane daha çerçeve öğrenmeniz gerekiyor ... Ortalama bir programcı tüm hayatını bitmemiş bir programcı olarak böyle yaşar - öğrenir öğrenmez bir çerçeve, ardından üç yeni çerçeve hemen görünecektir.

 
Anastasia Vasilenko :
ve ne okudun?

Keşke zaten bildiklerinizi ve neler yapabileceğinizi bilseydiniz. Genel olarak - sadece terminal kitinden bir danışman alın, düzenleyicide açın ve kodda bir şeyin farklı bir renkte vurgulanıp vurgulanmadığına bakın - imleci oraya getirin, f1 tuşuna basın ve yardımı okuyun.

Ve programlamaya hiç aşina değilseniz, ne için, eğer vb. - sonra, yeni başlayanlar için, aptallar veya çocuklar için herhangi bir dilde herhangi bir kitap.