English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
MQL5 Tarif Defteri Farklı Yazdırma Modlarını Kullanma

MQL5 Tarif Defteri Farklı Yazdırma Modlarını Kullanma

MetaTrader 5Örnekler | 13 Ocak 2022, 09:25
49 0
Anatoli Kazharski
Anatoli Kazharski


Giriş

Bu, MQL5 Tarif Defteri serisinin ilk makalesidir. Programlamaya ilk adımlarını atanların yeni dile yavaş yavaş aşina olmaları için basit örneklerle başlayacağım. Hayatımdaki gördüğüm ilk programlama dili olduğunu düşünürsek, oldukça zorlandığımı söyleyebileceğim alım satım sistemlerini tasarlama ve programlama konusundaki ilk çabalarımı hatırlıyorum. O zamana kadar bu dile uygun olmadığımı ve bunu asla anlayamayacağımı düşünürdüm.

Ancak, düşündüğümden daha kolay çıktı ve oldukça karmaşık bir program geliştirmem sadece birkaç ayımı aldı. Bununla ilgili daha fazla bilgiyi "MetaTrader 5 ve MQL5 ile Sınırsız Fırsatlar" başlıklı makalede bulabilirsiniz.

Burada, yeni başlayan Uzman Danışman geliştiricilerine, programlama sürecinde basitten karmaşığa doğru kılavuzluk etmeye çalışacağım. Buraya MetaEditor 5 menüsündeki Yardım kısmında bulunan hiçbir bilgiyi kopyalamayacağım, bu yüzden sık sık F1 tuşuna basmaya hazır olun. Bu makale serisi, aynı zamanda, geliştirmelerinizde hem orijinal hem de özelleştirilmiş şekilde kullanılabilecek birçok örnek, hazır fonksiyon ve şema sağlayacaktır.

Öyleyse başlayalım. Bu makalede, çeşitli modlarda bazı sembol özelliklerini yazdıran basit bir betik oluşturacağız. Bir program geliştirirken, özellikle öğrenme sürecinin başlarında, genelde programın beklendiği gibi yanıt vermediği durumlar olacaktır. Bu olursa, hesaplamalarda yer alan belirli değişkenlerin değerlerini kontrol etmeniz gerekecektir. Bizim durumumuzda, Print(), Comment() ve Alert() fonksiyonlarını kullanacağımız üç yöntemi yakından inceleyeceğiz. Hangi yöntemin sizin için daha uygun olduğuna daha sonra kendiniz karar verebileceksiniz.


MQL5 Sihirbazı

MQL5 çalışmam betiklerle başladı. Betikler, oldukça kolay ve hızlıdır. Betik yüklendiğinde, oluşturduğunuz fonksiyonu yürütür ve ardından grafikten silinir. Bu, hareket halindeyken deneme yapmanızı ve hangi yöne hareket edeceğinizi görmenizi sağlar.

MetaTrader 5 alım satım terminalini henüz kurmadıysanız, hemen şimdi kurun. Yüklemeden sonra terminali başlatın ve F4 tuşuna basarak MetaEditor 5'i açın. Bu düğme, MetaTrader 5 alım satım terminali ile MetaEditor 5 arasında hızlı geçiş yapmak için kullanılabilir. MetaEditor 5'i terminal araç çubuğundaki uygun düğmeye tıklayarak da başlatabilirsiniz. Alım satım terminalindeki ve MetaEditor 5'teki Yardım (F1) seçeneğini kullanarak program arayüzünü cidden iyi bir şekilde incelediğinizden emin olun, çünkü belirli konulara değinsek bile kısaca değinebiliriz.

MetaEditor 5'i başlatın ve MetaEditor panelindeki ana menünün altında yer alan Ctrl+N veya Yeni düğmesine basın. Bir MQL5 Sihirbazı penceresi açılacaktır, burada oluşturmak istediğiniz programın türünü seçebileceksiniz. Bizim durumumuzda, Betik seçeneğini seçip Sonraki düğmesine tıklayacağız:

Şekil 1. MQL5 Sihirbazı - Betik

Şekil 1. MQL5 Sihirbazı - Betik

Daha sonra betik adını (dosya adı) girmeniz gerekecektir. Varsayılan olarak betikler Metatrader 5\MQL5\Scripts\file_name.mq5 dosyasında oluşturulur. Dosyalarınızı amaçlarına göre gruplamak için bu dizin içinde başka klasörler de oluşturabilirsiniz.

Şekil 2. MQL5 Sihirbazı - Dosya Adı

Şekil 2. MQL5 Sihirbazı - Dosya Adı

Bu noktada, gerekli ise giriş parametrelerini de girebilirsiniz. Her şey ayarlanıp hazır olduğunda Bitir seçeneğine tıklayın. Şablon kullanılarak yeni bir belge oluşturulacak ve betiğe devam edebileceksiniz:

//+------------------------------------------------------------------+
//|                                                   PrintModes.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
    
  }
//+------------------------------------------------------------------+


Bir Kod Yazma

Çift eğik çizgiden sonra gelen her şey bir yorumdur ve programın yürütülmesini etkilemez. Kodunuzda ayrıntılı yorumlar sağlamanız, özellikle uzun bir aradan sonra program mantığını anlamayı oldukça kolaylaştırdığından her zaman tavsiye edilir.

Yukarıdaki ilk üç kod satırında #property sonrasında gelen her şey program özellikleri ile ilgilidir. Her fonksiyon ve özellik hakkında daha fazla bilgiyi MQL5 Referansı bölümünde bulabilirsiniz. Herhangi bir fonksiyonun açıklamasını hızlı bir şekilde görüntülemek istiyorsanız, bunu seçmek için fonksiyona çift tıklamanız ve F1 tuşuna basmanız yeterlidir. Size seçilen fonksiyonun bir açıklamasını sağlayan Yardım penceresi açılacaktır.

Bunu, diğer tüm fonksiyonları ve hesaplamaları içeren ana betik fonksiyonu - OnStart() - izler.

Programın yürütülmesinden önce gerekli bilgileri yazdırmak için bir yöntem seçme imkanı sağlamalıyız. Bunun anlamı, açılır listeden gerekli modu seçmemizi sağlayacak harici bir parametremiz olmamız gerektiğidir. Ayrıca, programın yürütülmesinden önce betiğin harici parametrelerine sahip bir pencere açmaktan sorumlu olacak başka bir özellik (#property) belirtmemiz gerekir. Bu özellik script_show_inputs özelliğidir. Bunu, kodda halihazırda bulunan diğer tüm özelliklerin altına ekleyeceğiz:

#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//---

Harici parametrelerde açılır listemiz olması için, tüm modların numaralandırmasını oluşturmamız gerekir. Bu kodu program özelliklerinden sonra ekleyelim:

// ENUMERATION
enum ENUM_PRINT_MODE
  {
   PRINT   = 0,
   COMMENT = 1,
   ALERT   = 2
  };
//---

Bundan sonra, bu betikteki tek harici parametre - PrintMode - gelir:

// INPUT PARAMETERS
input ENUM_PRINT_MODE printMode=PRINT; // Print mode

Giriş parametreleri çoğunlukla programın başında yer alır ve harici parametreyi tanımlayan giriş değiştiricisi de değişken türünden önce yerleştirilir. Betiği şimdi çalıştırırsak, bir program penceresi açılacaktır ve biz de, Print Mode parametresinin açılır listesinden bir yazdırma modu seçebiliriz:

Şekil 3. Betik parametrelerinin penceresi

Şekil 3. Betik parametrelerinin penceresi

Sonra değişkenler yaratırız ve harici parametrede kullanıcı tarafından belirtilen modu kullanarak daha fazla yazdırmak için bunlara bazı değerler atarız (bizim durumumuzda bazı sembol verilerini yazdıracağız). Bunun, ana OnStart() fonksiyonunda çağrılacak olan ayrı bir kullanıcı fonksiyonu - PrintSymbolProperties() - düzenlememiz gerekir.

Fonksiyonu oluşturmak için kodu aşağıda gösterildiği gibi eklememiz yeterlidir:

//+------------------------------------------------------------------+
//| PRINTING SYMBOL PROPERTIES                                       |
//+------------------------------------------------------------------+
void PrintSymbolProperties()
  {
    
  }

Döndürülecek değerin türü, fonksiyon adından önce belirtilmelidir. Alternatif olarak, bizim durumumuzda olduğu gibi fonksiyon bir şey döndürmezse, void (boşluk) koymalıyız. Ayrıca, kalan kodu PrintSymbolProperties() fonksiyon gövdesinde parantezler arasına yazmamız gerekiyor. İlk olarak değişkenleri oluşturalım:

string symb_symbol    = "";  // Symbol
int    symb_digits    = 0;   // Number of decimal places

int    symb_spread    = 0;   // Difference between the ask price and bid price (spread)
int    symb_stoplevel = 0;   // Stop levels
double symb_ask       = 0.0; // Ask price
double symb_bid       = 0.0; // Bid price

Değişken türü, kendisine atanacak veri türüne bağlıdır. Şimdi bu değişkenlere değerler atayalım. MQL5, sembol özelliklerini elde etmek amacıyla her veri türü için özel fonksiyonlar sağlar.

symb_symbol    =Symbol();
symb_digits    =(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
symb_spread    =(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
symb_stoplevel =(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
symb_ask       =SymbolInfoDouble(_Symbol,SYMBOL_ASK);
symb_bid       =SymbolInfoDouble(_Symbol,SYMBOL_BID);
//---

Materyalin yeterli düzeyde öğrenilmesini sağlamak için, geçtikleri her bir fonksiyonu ve parametreyi incelemek için MQL5 Referansı belgesini kullanın. Buradaki tüm sembol özellikleri, sıklıkla başvurmanız gereken bir tabloda görüntülenir.

Artık değişkenlerin kendilerine atanmış değerleri olduğuna göre, sadece her yazdırma modu için uygun bir kod yazmamız gerekir. Bu, şuna benzerdir:

//---
// If it says to print to the journal
   if(printMode==PRINT)
     {
      Print("Symbol: ",symb_symbol,"\n",
            "Digits: ",symb_digits,"\n",
            "Spread: ",symb_spread,"\n",
            "Stops Level: ",symb_stoplevel,"\n",
            "Ask: ",symb_ask,"\n",
            "Bid: ",symb_bid
            );
     }
//---
// If it says to print to the chart
   if(printMode==COMMENT)
     {
      int mb_res=-1; // Variable with the option selected in the dialog box
      //---
      Comment("Symbol: ",symb_symbol,"\n",
              "Digits: ",symb_digits,"\n",
              "Spread: ",symb_spread,"\n",
              "Stops Level: ",symb_stoplevel,"\n",
              "Ask: ",symb_ask,"\n",
              "Bid: ",symb_bid
              );
      //---
      // Open a dialog box
      mb_res=MessageBox("Do you want to delete comments from the chart?",NULL,MB_YESNO|MB_ICONQUESTION);
      //---
      // If "Yes" is clicked, remove the comments from the chart 
      if(mb_res==IDYES) { Comment(""); }
      //---
      return;
     }
//---
// If it says to print to the alert window
   if(printMode==ALERT)
     {
      Alert("Symbol: "+symb_symbol+"\n",
            "Digits: "+IntegerToString(symb_digits)+"\n",
            "Spread: "+IntegerToString(symb_spread)+"\n",
            "Stops Level: "+IntegerToString(symb_stoplevel)+"\n",
            "Ask: "+DoubleToString(symb_ask,_Digits)+"\n",
            "Bid: "+DoubleToString(symb_bid,_Digits)
            );
     }
//---

Uzman Danışmanın harici parametresi için PRINT (YAZDIR) öğesini seçerseniz, bilgi Uzman Danışmanların günlüğüne yazdırılacaktır (Araç kutusu - Uzmanlar sekmesi):

Şekil 4. Araç Kutusu - Uzmanlar sekmesi

Şekil 4. Araç Kutusu - Uzmanlar sekmesi

COMMENT (YORUM) öğesini seçerseniz, bilgiler grafiğin sol üst köşesinde görüntülenecektir. Bilgiler grafikte göründükten sonra, MessageBox() fonksiyonu, grafikten yorumları silmenizi isteyen bir iletişim kutusu açacaktır:

Şekil 5. Grafiğin sol üst köşesindeki yorumlar

Şekil 5. Grafiğin sol üst köşesindeki yorumlar

ALERT (UYARI) seçeneğini seçerseniz, betiği çalıştırdıktan sonra, istenen bilgileri içeren bir uyarı penceresi veya basit bir kullanıcı mesajı görüntülenecektir. Bu durumda, YAZDIR seçeneğinde olduğu gibi, bilgiler günlüğe yazdırılır, ancak ek olarak sesli bir bildirim gönderilir.

Şekil 6. Uyarı penceresi

Şekil 6. Uyarı penceresi

Aşağıda tüm betik kodu yer almaktadır:

//+------------------------------------------------------------------+
//|                                                   PrintModes.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2012, MetaQuotes Software Corp."
#property link        "http://tol64.blogspot.com"
#property description "email: hello.tol64@gmail.com"
#property version     "1.00"
#property script_show_inputs
//---
//--- ENUMERATION
enum ENUM_PRINT_MODE
  {
   PRINT   = 0,
   COMMENT = 1,
   ALERT   = 2
  };
//---
// INPUT PARAMETERS
input ENUM_PRINT_MODE printMode=PRINT; // Print mode
//---
//+------------------------------------------------------------------+
//| MAIN FUNCTION                                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   PrintSymbolProperties();
  }
//+------------------------------------------------------------------+
//| PRINTING SYMBOL PROPERTIES                                       |
//+------------------------------------------------------------------+
void PrintSymbolProperties()
  {
   string symb_symbol    = "";  // Symbol
   int    symb_digits    = 0;   // Number of decimal places
   int    symb_spread    = 0;   // Difference between the ask price and bid price (spread)
   int    symb_stoplevel = 0;   // Stop levels
   double symb_ask       = 0.0; // Ask price
   double symb_bid       = 0.0; // Bid price
//---
   symb_symbol    =Symbol();
   symb_digits    =(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
   symb_spread    =(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
   symb_stoplevel =(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
   symb_ask       =SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   symb_bid       =SymbolInfoDouble(_Symbol,SYMBOL_BID);
//---
// If it says to print to the journal
   if(printMode==PRINT)
     {
      Print("Symbol: ",symb_symbol,"\n",
            "Digits: ",symb_digits,"\n",
            "Spread: ",symb_spread,"\n",
            "Stops Level: ",symb_stoplevel,"\n",
            "Ask: ",symb_ask,"\n",
            "Bid: ",symb_bid
            );
     }
//---
// If it says to print to the chart
   if(printMode==COMMENT)
     {
      int mb_res=-1; // Variable with the option selected in the dialog box
      //---
      Comment("Symbol: ",symb_symbol,"\n",
              "Digits: ",symb_digits,"\n",
              "Spread: ",symb_spread,"\n",
              "Stops Level: ",symb_stoplevel,"\n",
              "Ask: ",symb_ask,"\n",
              "Bid: ",symb_bid
              );
      //---
      // Open a dialog box
      mb_res=MessageBox("Do you want to delete comments from the chart?",NULL,MB_YESNO|MB_ICONQUESTION);
      //---
      // If "Yes" is clicked, remove the comments from the chart  
      if(mb_res==IDYES) { Comment(""); }
      //---
      return;
     }
//---
// If it says to print to the alert window
   if(printMode==ALERT)
     {
      Alert("Symbol: "+symb_symbol+"\n",
            "Digits: "+IntegerToString(symb_digits)+"\n",
            "Spread: "+IntegerToString(symb_spread)+"\n",
            "Stops Level: "+IntegerToString(symb_stoplevel)+"\n",
            "Ask: "+DoubleToString(symb_ask,_Digits)+"\n",
            "Bid: "+DoubleToString(symb_bid,_Digits)
            );
     }
  }

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


Sonuç

Bu makaleyi burada bitireceğiz. Yukarıda açıklanan yöntemlere ek olarak, bir dosyaya veri de yazabilirsiniz. Düz bir metin dosyası veya hatta CSS kullanılarak güzel bir şekilde biçimlendirilmiş bir HTML raporu olabilir. Ancak bu yöntemler yeni başlayanlar için çok daha karmaşıktır ve yukarıda sağlanan bilgiler başlangıç için yeterli olacaktır.

MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/638

Ekli dosyalar |
printmodes.mq5 (3.54 KB)
MQL5 Tarif Defteri Pozisyon Özelliklerini Elde Etme MQL5 Tarif Defteri Pozisyon Özelliklerini Elde Etme
Bu makalede, tüm pozisyon özelliklerini elde eden ve bunları kullanıcıya bir iletişim kutusunda gösteren bir betik oluşturacağız. Betiği çalıştırdıktan sonra, geçerli semboldeki pozisyon özelliklerini görüntülemek veya tüm simgelerdeki pozisyon özelliklerini görüntülemek için harici parametrelerdeki açılır listede bulunan iki moddan birini seçebileceksiniz.
MQL5 Market Bir Yaşına Girdi MQL5 Market Bir Yaşına Girdi
MQL5 Markette satışların başlamasının üzerinden bir yıl geçti. Yeni hizmeti MetaTrader 5 platformu için en büyük alım satım robotları ve teknik göstergeler mağazasına dönüştüren zorlu bir çalışma yılıydı.
MQL5 Tarif Defteri Özel Bilgi Panelindeki Pozisyon Özellikleri MQL5 Tarif Defteri Özel Bilgi Panelindeki Pozisyon Özellikleri
Bu defa, mevcut sembol üzerindeki pozisyon özelliklerini elde ederek manuel alım satım sırasında bunları özel bilgi panelinde gösterecek basit bir Uzman Danışman oluşturacağız. Bilgi paneli, grafik nesneler kullanılarak oluşturulacak ve her tikte görüntülenen bilgiler yenilenecektir. Bu, aşağıdaki serinin önceki makalesinde açıklanan betiği manuel olarak çalıştırmak zorunda kalmaktan çok daha uygun olacaktır: "MQL5 Tarif Defteri: Pozisyon Özelliklerini Elde Etme".
MetaTrader 4 ve MetaTrader 5 Alım Satım Sinyalleri Pencere Öğeleri MetaTrader 4 ve MetaTrader 5 Alım Satım Sinyalleri Pencere Öğeleri
MetaTrader 4 ve MetaTrader 5 kullanıcıları, yakın zamanda Sinyal Sağlayıcı olma ve ek kazanç elde etme fırsatı yakalamıştır. Şimdi ise, alım satım başarınızı yeni pencere öğelerini kullanarak web siteniz, blogunuz veya sosyal ağ sayfanızda gösterebilirsiniz. Pencere öğelerini kullanmanın faydaları açıktır: Sinyal Sağlayıcının popülerliğini artırır, başarılı yatırımcılar olarak ün sağlar ve yeni Aboneleri etkiler. Pencere öğelerini web sitelerine ekleyen tüm yatırımcılar bu faydalardan yararlanabilir.