English Русский 中文 Español Deutsch 日本語 Português Français Italiano
preview
MQL5’i kullanarak çizgilerle nasıl çalışılır?

MQL5’i kullanarak çizgilerle nasıl çalışılır?

MetaTrader 5Ticaret | 12 Ağustos 2024, 12:06
117 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Giriş

Yatırımcılar olarak hepimiz, alım-satım yaparken, bazı önemli seviyeleri gözlemlememize ve bunlara dayanarak uygun bir alım-satım kararı vermemize yardımcı olmaları için birçok çizgi çizeriz. Dolayısıyla, bu çizgiler yatırımcılar olarak bizim için çok önemlidir ve otomatik olarak bu çizgileri çizmek veya bunlara dayanarak uygun bir karar almak için kullanabileceğimiz bir yöntemimiz olup olmadığını merak edebiliriz çünkü bunun bize çok yardımcı olacağını biliyoruz. Cevap evet, bunu MQL5’in (MetaQuotes Language 5) yardımıyla yapabiliriz.

Bu makale, MQL5’i kullanarak bu çizgilerle nasıl çalışabileceğimizi öğrenmek için bir örnektir, çünkü böyle bir şey yapmak için birçok yöntem vardır ve bu yöntemler ne yapmanız gerektiğine bağlıdır. Birçok çizgi türü vardır, ancak bu makalede bunlardan popülerlikleri nedeniyle yalnızca üçünden bahsedeceğiz: trend, destek ve direnç çizgileri.

Bunları aşağıdaki konular aracılığıyla ele alacağız:

  1. Trend çizgileri ve MQL5
  2. Destek seviyeleri ve MQL5
  3. Direnç seviyeleri ve MQL5
  4. Sonuç

Genel olarak konuşursak, MQL5 aracılığıyla çizgilerle çalışmak için kullanılabilecek birçok yöntem vardır. Burada yalnızca basit bir yöntemi ele alacağız. Bu yöntemi stratejinize uyacak şekilde geliştirmeniz gerektiğini görebilirsiniz. Bahsedeceğimiz yöntem fiyat seviyelerini tespit edecek ve ardından uygun türde çizgiyi çizecektir.

Türlerini tanımlayarak çizgilerin ne olduğunu, bunları manuel olarak nasıl oluşturacağımızı ve alım-satımda nasıl kullanabileceğimizi ayrıntılı olarak öğreneceğiz. En önemlisi, trend, destek ve direnç çizgileriyle çalışmak için MQL5 dilini nasıl kullanacağımızı göreceğiz. Ana hedef, alım-satımı kolaylaştırmak ve sonuçları iyileştirmek için süreçlerin nasıl otomatikleştirileceğini öğrenmektir. Makalede, kodlarımızı yazmak için MetaQuotes Language 5 (MQL5) programlama dilini ve MetaTrader 5 işlem platformunda yerleşik MetaEditor kod düzenleyicisini kullanacağız. MetaTrader 5’in nasıl kurulacağı ve MetaEditor’ın nasıl kullanılacağı hakkında daha fazla bilgi edinmek istiyorsanız, önceki makalelerimden birinde yer alan “MetaEditor’da MQL5 kodu yazma” bölümünü okuyabilirsiniz.

Okuyuculara, bu makalede bahsedeceğimiz kodları kendi başlarına yazma pratiği yapmalarını tavsiye ederim. Bu şekilde programlama becerilerinizi geliştirecek, konuyu daha iyi anlayacak ve belki de kendiniz için yeni fikirler bulabilecek ve alım-satım sonuçlarınızı iyileştirebileceksiniz.

Sorumluluk reddi: Sağlanan tüm bilgiler ’olduğu gibi’ yalnızca bilgilendirme amaçlıdır, alım-satım tavsiyesi değildir. Bu bilgiler herhangi bir sonucu garanti etmemektedir. Bu materyalleri herhangi bir işlem hesabında kullanırsanız, ortaya çıkabilecek tüm riskler size ait olacaktır.


Trend çizgileri ve MQL5

Çizgiler, finansal piyasalarda alım-satım yaparken kullanılan teknik analiz araçlarıdır. Çizgiler önemli fiyatlarda veya seviyelerde çizilebilir ve bunlar da etkili kararlar almak için tetikleyici olarak kullanılabilir. Birçok çizgi türü vardır. Bu makalede şu üç çizgi türünden bahsedeceğiz: trend çizgileri, destek seviyesi çizgileri ve direnç seviyesi çizgileri.

Trend çizgileri: nasıl tanımlanır ve kullanılır? Trend çizgileri, fiyatın yönsel hareketini (yukarı veya aşağı) görsel olarak gösteren çizgilerdir. Çizgi, piyasanın yönüne bağlı olarak fiyatların üstüne ya da altına çizilebilir. Dolayısıyla, bir trend çizgisinin temel amacı piyasa trendinin yönünü belirlemeye yardımcı olmaktır. Fiyat, çizilen çizgiye en az üç noktada çarparsa ve her seferinde yukarı doğru bir fiyat sıçraması meydana gelirse, bu bir yükseliş trendi çizgisi olacaktır. Bunun tam tersi olarak, fiyat çizilen çizgiye en az üç noktada uğrayıp her seferinde aşağıya doğru sıçrarsa, bu da bir düşüş trendi çizgisi olacaktır. Doğru şekilde oluşturulur ve kullanılırsa, bir trend çizgisi çok faydalı bir araç olabilir.

Trend çizgisini, emirlerimizi trend çizgisi türüne göre vererek alım-satımda kullanabiliriz. Bir yükseliş trendi çizgisi oluşmuşsa, fiyatın aşağı inerek bu trend çizgisini yukarıdan test etmesini ve ardından yukarı sıçramasını bekleyebiliriz - bu durumda bu trend çizgisine alış emri yerleştirebiliriz. Tersi şekilde, grafikte düşen bir trend çizgisi görürsek, fiyatın bu trend çizgisini aşağıdan test etmek için yukarı çıkacağını ve ardından aşağı sıçrayacağını varsayabiliriz. Böyle bir durumda, düşüş trendi çizgisine satış emri yerleştirebiliriz.

Yükseliş trendi çizgisi aşağıda gösterilmektedir:

Yükseliş trendi çizgisi

Yukarıdaki görüntüde yukarı yönlü bir hareketimiz olduğunu net bir şekilde görebiliyoruz ve son üç düşük seviye arasında bağlantı kurmaya çalışırsak, bunların aynı çizgi üzerinde yukarı doğru ilerlediklerini anlayabiliriz.

Aşağıda, piyasadaki bir yükseliş trendi çizgisine bir örnek verilmiştir:

Yükseliş trendi çizgisi

Yukarıdaki grafikte görebileceğimiz gibi, bir yükseliş trendi çizgisi oluşmuştur, fiyat bu çizgiye birçok kez dokunmuş ve alıcıların gücüyle oradan yukarı sıçramıştır, bu da bir yükseliş trendinin varlığını doğrulamaktadır.

Aşağıda düşüş trendi çizgisi vardır:

Düşüş trendi çizgisi

Şekilde aşağı doğru net bir hareket vardır ve son üç tepe noktası arasında bağlantı kurmaya çalışırsak, bunların aynı çizgi üzerinde aşağı doğru hareket ettiklerini görebiliriz.

Aşağıda piyasadan bir düşüş trendi çizgisi örneği verilmiştir:

Düşüş trendi çizgisi

Yukarıdaki grafikte görebileceğimiz gibi, bir düşüş trendi çizgisi oluşmuştur, fiyat bu çizgiye birçok kez dokunmuş ve satıcıların gücüyle oradan aşağı sıçramıştır, bu da bir düşüş trendinin varlığını doğrulamaktadır.


    1. Yükseliş trendi çizgisi sistemi

      Şimdi MetaTrader 5'te otomatik olarak bir yükseliş trendi çizgisi oluşturmak için kullanılabilecek bir program oluşturalım. Fiyatların altında görüntülenecek ve potansiyel yukarı yönlü hareketi görmenizi sağlayacaktır. Program, her tikte fiyat düşüklerini kontrol edecek ve bir yükseliş trendi oluşup oluşmadığını belirleyecektir. Ardından, varsa önceki yukarı yönlü trend çizgisini silerek, fiyatın altında güncellenmiş yeni bir mavi çizgi oluşturacaktır. 

      Bunu yapmak için kullanılabilecek yöntemlerden biri olarak aşağıdaki adımları takip edebiliriz.

      İlk mumu belirlemek için, mevcut grafiğin ilgili özelliğinin long türünde değeri olacak bir tamsayı değişkeni oluşturalım - aşağıdaki parametrelerle “ChartGetInteger” fonksiyonunu kullanalım:

      • chart_id - Grafik kimliği. Mevcut grafiği temsil etmek için (0) kullanacağız.
      • prop_id - Grafik özelliği kimliği. Burada (ENUM_CHART_PROPERTY_INTEGER) numaralandırmasının değerlerinden birini kullanabiliriz. Bizim durumumuzda (CHART_FIRST_VISIBLE_BAR) kullanacağız.
      • sub_window=0 - Grafik alt pencere numarası. Ana grafik penceresini temsil etmek için (0) kullanacağız.

      int candles = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);

      Minimum fiyat değerlerini içerecek pLow adında double türünde bir dizi oluşturalım.

      double pLow[];

      “ArraySetAsSeries” fonksiyonunu kullanarak oluşturulan diziyi mevcut veriden başlayarak sıralayalım. Başarılı olması durumunda true, aksi takdirde false geri döndürür (bool türü).

      ArraySetAsSeries(pLow,true);

      Mevcut sembolün mevcut zaman dilimindeki en düşük fiyatına ulaşmak için “CopyLow” fonksiyonunu kullanarak oluşturulan pLow dizisini bu verilerle dolduralım. Parametreleri şunlardır:

      • symbol_name - Sembol adı. Mevcut sembole uygulanmak üzere (_Symbol) kullanacağız.
      • timeframe - Zaman dilimi. Mevcut zaman dilimine uygulanmak üzere (_Period) kullanacağız.
      • start_pos - Kopyalamanın başlangıç konumu. (0) ayarlayacağız.
      • count - Kopyalanacak veri miktarı. (candles) ayarlayacağız.
      • low_array[] - Kopyalamanın yapılacağı hedef dizi. (pLow) dizisini kullanacağız.

      int copy_low = CopyLow(_Symbol,_Period,0,candles,pLow);

      “copy_low” 0'dan büyükse koşulunu ayarlayalım.

      if(copy_low>0)

      if koşulunun gövdesinde, dizinin minimum değerine eşit olacak şekilde candleLow tamsayı değişkenini oluşturarak en düşük mum değerini hesaplayacağız. Dizideki en düşük elemanı geri döndürmek için "ArrayMinimum" fonksiyonunu kullanacağız. Parametreleri şunlardır:

      • array[] - Kullanılacak dizi. (pLow) dizisini kullanacağız.
      • start=0 - Kontrole başlanacak indeks. (0) değerini kullanacağız.
      • count=WHOLE_ARRAY - Kontrol edilecek eleman sayısı. Önceden oluşturduğumuz (candles) değişkenini kullanacağız.
      int candleLow = ArrayMinimum(pLow,0,candles);

      Fiyatlar, hacim ve makas hakkında bilgi depolayan "MqlRates" fonksiyonunu kullanarak pArray adlı bir fiyat dizisi oluşturalım.

      MqlRates pArray[];

      “ArraySetAsSeries” fonksiyonunu kullanarak pArray dizisini mevcut veriden başlayarak sıralayalım.

      ArraySetAsSeries(pArray,true);

      Data tamsayı değişkenini oluşturduktan sonra, “CopyRates" fonksiyonunu kullanarak MqlRates yapısındaki fiyat verilerini pArray fiyat dizisine alalım. Parametreleri şunlardır:

      • symbol_name - Sembol adı. Mevcut sembole uygulanmak üzere (_Symbol) kullanacağız.
      • timeframe - Zaman dilimi. Mevcut zaman dilimine uygulanmak üzere (_Period) kullanacağız.
      • start_pos - Kopyalamanın başlangıç konumu. (0) ayarlayacağız.
      • count - Kopyalanacak veri miktarı. (candles) ayarlayacağız.
      • rates_array[] - Kopyalamanın yapılacağı hedef dizi. (pArray) dizisini kullanacağız.
      int Data = CopyRates(_Symbol,_Period,0,candles,pArray);

      Güncellemek için varsa önceden oluşturulmuş çizgiyi sileceğiz. Bunu yapmak için, belirtilen herhangi bir grafikten belirtilen herhangi bir nesneyi silen “ObjectDelete” fonksiyonunu kullanacağız. Parametreleri şunlardır:

      • chart_id - Grafik kimliği. Mevcut sembole uygulanmak üzere (_Symbol) kullanacağız.
      • name - Kaldırmak istediğimiz nesnenin adı. Biz (“UpwardTrendline”) belirteceğiz.
      ObjectDelete(_Symbol,"UpwardTrendline");

      Bir trend çizgisi nesnesi oluşturmak için "ObjectCreate" fonksiyonunu kullanarak yeni bir trend çizgisi oluşturalım. Parametreleri şunlardır:

      • chart_id - Grafik kimliği. Mevcut sembole uygulanmak üzere (_Symbol) kullanacağız.
      • name - Oluşturmak istediğimiz nesnenin adı. Biz (“UpwardTrendline”) belirteceğiz.
      • type - Nesnenin türü. Bir trend çizgisi oluşturmak için (OBJ_TREND) kullanacağız.
      • nwin - Pencere indeksi. Ana grafik penceresini kullanmak için (0) değerini kullanacağız.
      • time1 - İlk bağlantı noktasının zamanı. (pArray[candleLow].time) kullanacağız.
      • price1 - İlk bağlantı noktasının fiyatı. (pArray[candleLow].low) kullanacağız.
      • timeN - N’inci bağlantı noktasının zamanı. (pArray[0].time) değerini kullanacağız.
      • priceN - N’inci bağlantı noktasının fiyatı. (pArray[0].low) değerini kullanacağız.
      ObjectCreate(_Symbol,"UpwardTrendline",OBJ_TREND,0,pArray[candleLow].time,pArray[candleLow].low,pArray[0].time,pArray[0].low);

      Nesne için renk değeri ile “ObjectSetInteger” fonksiyonunu kullanarak trend çizgisinin rengini tanımlayalım. Parametreleri şunlardır:

      • chart_id - Grafik kimliği. Mevcut grafik anlamına gelen (0) değerini kullanacağız.
      • name - Nesne adı. Nesnenin önceden tanımladığımız adı olan ("UpwardTrendline") kullanacağız.
      • prop_id - Nesne özelliğinin kimliği. (ENUM_OBJECT_PROPERTY_INTEGER) numaralandırmasından (OBJPROP_COLOR) kullanacağız.
      • prop_value - Özelliğin değeri. Oluşturulan trend çizgisinin rengi için (Blue) kullanacağız.
      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_COLOR,Blue);

      Çizginin stilini yine “ObjectSetInteger” fonksiyonunu kullanarak tanımlayalım, ancak bu sefer (ENUM_OBJECT_PROPERTY_INTEGER) numaralandırmasının farklı bir değerini kullanacağız: (OBJPROP_STYLE). Oluşturulacak trend çizgisinin stili olarak düz çizgi belirleyeceğiz: (STYLE_SOLID).

      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_STYLE,STYLE_SOLID);

      Çizginin kalınlığını tanımlayalım. (ENUM_OBJECT_PROPERTY_INTEGER) numaralandırmasından (OBJPROP_WIDTH) değeriyle “ObjectSetInteger” fonksiyonunu kullanacağız. Oluşturulacak trend çizgisinin kalınlığı olarak prop_value değişkenine (3) değerini ayarlayacağız.

      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_WIDTH,3);

      Çizginin sağa doğru devam etmesini sağlayalım. (ENUM_OBJECT_PROPERTY_INTEGER) numaralandırmasından (OBJPROP_RAY_RIGHT) değeriyle “ObjectSetInteger” fonksiyonunu kullanacağız. prop_value değişkenin değerini (true) olarak ayarlayalım, yani çizginin sağa doğru devam etmesini istediğimizi belirtelim.

      ObjectSetInteger(0,"UpwardTrendline",OBJPROP_RAY_RIGHT,true);

      Aşağıda, otomatik olarak bir yükseliş trendi çizgisi çizecek olan programın tam kodunu görebilirsiniz:

      //+------------------------------------------------------------------+
      //|                                       UpwardTrendline System.mq5 |
      //+------------------------------------------------------------------+
      void OnTick()
        {
         int candles = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
         double pLow[];
         ArraySetAsSeries(pLow,true);
         int copy_low = CopyLow(_Symbol,_Period,0,candles,pLow); 
         if(copy_low>0)
           {
            int candleLow = ArrayMinimum(pLow,0,candles);
            MqlRates pArray[];
            ArraySetAsSeries(pArray,true);
            int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
            ObjectDelete(0,"UpwardTrendline");
            ObjectCreate(0,"UpwardTrendline",OBJ_TREND,0,pArray[candleLow].time,pArray[candleLow].low,
                         pArray[0].time,pArray[0].low);
            ObjectSetInteger(0,"UpwardTrendline",OBJPROP_COLOR,Blue);
            ObjectSetInteger(0,"UpwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
            ObjectSetInteger(0,"UpwardTrendline",OBJPROP_WIDTH,3);
            ObjectSetInteger(0,"UpwardTrendline",OBJPROP_RAY_RIGHT,true);
           }
        }
      //+------------------------------------------------------------------+
      

      Kod yazıldıktan sonra derlenmelidir. Derleme sırasında herhangi bir hata olmamalıdır.  Devamında derlenen program işlem terminalindeki Kılavuzdan bulunabilir:

      Kılavuz - UpwardTrendline System

      Programa çift tıklayarak veya onu grafiğe sürükleyerek başlatıyoruz. Devamında, aşağıdaki pencere açılacaktır:

      UpwardTrendline System penceresi

      "Algoritmik alım-satıma izin ver" seçeneğini etkinleştirip Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

      Grafiğe eklenmiş UpwardTrendline System

      Grafiğin sağ üst köşesindeki ifade, Uzman Danışmanın bu grafik üzerinde çalışıyor olduğu anlamına gelir. Uzman Danışman fiyatın altında mavi bir yükseliş trendi çizgisi oluşturmuştur.


        2. Düşüş trendi çizgisi sistemi

          Şimdi MetaTrader 5'te otomatik olarak bir düşüş trendi çizgisi oluşturmak için kullanılabilecek bir program oluşturalım. Grafikte fiyatların üzerinde görüntülenecek ve potansiyel aşağı yönlü hareketi görmemizi sağlayacaktır. Program, her tikte fiyat yükseklerini kontrol edecek ve bir düşüş trendi oluşup oluşmadığını belirleyecektir. Ardından, varsa önceki düşüş yönlü trend çizgisini silerek, fiyatın üzerinde güncellenmiş yeni bir mavi çizgi oluşturacaktır. 

          Bu işlevi uygulayan programın tam kodu aşağıda gösterilmiştir.

          //+------------------------------------------------------------------+
          //|                                     DownwardTrendline System.mq5 |
          //+------------------------------------------------------------------+
          void OnTick()
            {
             int candles = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
             double pHigh[];
             ArraySetAsSeries(pHigh,true);
             int copy_high = CopyHigh(_Symbol,_Period,0,candles,pHigh);
             if(copy_high>0)
               {
                int candleHigh = ArrayMaximum(pHigh,0,candles);
                MqlRates pArray[];
                ArraySetAsSeries(pArray,true);
                int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
                ObjectDelete(0,"DnwardTrendline");
                ObjectCreate(0,"DnwardTrendline",OBJ_TREND,0,pArray[candleHigh].time,pArray[candleHigh].high,
                             pArray[0].time,pArray[0].high);
                ObjectSetInteger(0,"DnwardTrendline",OBJPROP_COLOR,Blue);
                ObjectSetInteger(0,"DnwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
                ObjectSetInteger(0,"DnwardTrendline",OBJPROP_WIDTH,3);
                ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
               }
            }
          //+------------------------------------------------------------------+

          Bu koddaki farklılıklar şunlardır:

          Mumların yüksek fiyatlarını içerecek bir dizi oluşturuyoruz:

          double pHigh[];

          Oluşturulan diziyi mevcut veriden başlayarak sıralıyoruz:

          ArraySetAsSeries(pHigh,true);

          Diziyi verilerle dolduruyoruz:

          int copy_high = CopyHigh(_Symbol,_Period,0,candles,pHigh);

          Dizinin en yüksek değerini belirleyerek bu değeri candleHigh değişkenine atıyoruz:

          int candleHigh = ArrayMaximum(pHigh,0,candles);

          Önceden oluşturulan düşüş trendi çizgisini grafikten siliyoruz:

          ObjectDelete(_Symbol,"DnwardTrendline");

          Yeni bir düşüş trendi çizgisi oluşturuyoruz:

          ObjectCreate(_Symbol,"DnwardTrendline",OBJ_TREND,0,pArray[candleHigh].time,pArray[candleHigh].high,pArray[0].time,pArray[0].high);

          (OBJPROP_COLOR) özelliğini kullanarak düşüş trendi çizgisinin rengini mavi olarak ayarlıyoruz:

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_COLOR,Blue);

          Çizgi stili için, (OBJPROP_STYLE) özelliğini (STYLE_SOLID) olarak ayarlayarak düz çizgiyi seçiyoruz:

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_STYLE,STYLE_SOLID);

          Düşüş trendi çizgisinin kalınlığını (3) değerine eşit olarak ayarlıyoruz, bu amaçla (OBJPROP_WIDTH) özelliğini kullanıyoruz:

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_WIDTH,3);

          (OBJPROP_RAY_RIGHT) ışın özelliğini (true) olarak ayarlıyoruz:

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);

          Başarılı bir derlemeden sonra, Kılavuz penceresinden Uzman Danışman dosyasını bulabiliriz. Uzman Danışmanı çalıştırıyoruz ve hemen grafik üzerinde çalışmaya başlayacak ve otomatik olarak bir düşüş trendi çizgisi oluşturacaktır:

          Grafiğe eklenmiş DownwardTrendline System

          Uzman Danışmanın adı ve çalışıyor olduğu grafiğin sağ üst köşesinde görünmektedir ve fiyatların üzerinde mavi renkte bir düşüş trendi çizgisi oluşturmuştur.


          Destek seviyeleri ve MQL5

          Destek seviyesi, mevcut fiyatların altında kalan bir fiyat seviyesi ya da bölgesidir. Fiyatlar bu seviyeden yukarı doğru sıçrar çünkü burada alış gücü oluşur. Bu nedenle çok önemlidirler çünkü bu seviyeleri alış işlemlerine girmek için kullanabiliriz. Birçok destek seviyesi biçimi vardır, bunlardan biri yatay destek seviyesidir. Aşağıda bu biçimin nasıl göründüğü gösterilmektedir:

           Destek seviyesi

          Aşağıda piyasadaki destek seviyesine bir örnek verilmiştir:

          Destek seviyesi 1

          Yukarıdaki grafikte fiyatların altında, fiyatların yukarı doğru sıçradığı yeşil bir destek çizgisi görülmektedir.

          Programımız her tikte otomatik olarak fiyat düşüklerini kontrol edecek ve bir destek seviyesi olup olmadığını belirleyecektir. Ardından, varsa önceki destek çizgisini silerek, fiyatın altında güncellenmiş yeni bir yeşil çizgi oluşturacaktır. Otomatik şekilde böyle bir çizgi oluşturan programın tam kodu aşağıda gösterilmiştir:

          //+------------------------------------------------------------------+
          //|                                          Support Line System.mq5 |
          //+------------------------------------------------------------------+
          void OnTick()
            {
             int candles=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
             double pLow[];
             ArraySetAsSeries(pLow,true);
             CopyLow(_Symbol,_Period,0,candles,pLow);
             int candleLow = ArrayMinimum(pLow,0,candles);
             MqlRates pArray[];
             ArraySetAsSeries(pArray,true);
             int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
             ObjectDelete(_Symbol,"supportLine");
             ObjectCreate(_Symbol,"supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low,pArray[0].time,pArray[0].low);
             ObjectSetInteger(0,"supportLine",OBJPROP_COLOR,Green);
             ObjectSetInteger(0,"supportLine",OBJPROP_STYLE,STYLE_SOLID);
             ObjectSetInteger(0,"supportLine",OBJPROP_WIDTH,3);
             ObjectSetInteger(0,"supportLine",OBJPROP_RAY,true);
            }
          //+------------------------------------------------------------------+

          Bu koddaki farklılıklar şunlardır:

          supportLine adlı önceki tüm destek çizgilerini siliyoruz:

          ObjectDelete(_Symbol,"supportLine");

          Nesnenin türü olarak (OBJ_HLINE) belirterek yeni bir destek çizgisi oluşturuyoruz:

          ObjectCreate(_Symbol,"supportLine",OBJ_HLINE,0,pArray[candleLow].time,pArray[candleLow].low, pArray[0].time,pArray[0].low);

          (OBJPROP_COLOR) kullanarak destek çizgisinin rengini ayarlıyoruz:

          ObjectSetInteger(0,"supportLine",OBJPROP_COLOR,Green);

          Destek çizgisinin stilini tanımlıyoruz - (OBJPROP_STYLE) özelliğini (STYLE_SOLID) olarak ayarlıyoruz:

          ObjectSetInteger(0,"supportLine",OBJPROP_STYLE,STYLE_SOLID);

          Çizginin kalınlığını (OBJPROP_WIDTH) özelliğinde belirtiyoruz:

          ObjectSetInteger(0,"supportLine",OBJPROP_WIDTH,3);

          Çizginin sağa doğru devam etmesi için (OBJPROP_RAY) özelliğini (true) olarak ayarlıyoruz:

          ObjectSetInteger(0,"supportLine",OBJPROP_RAY,true);

          Bu kodu herhangi bir hata olmadan derledikten sonra, daha önce bahsettiğimiz gibi grafiğe ekleyebiliriz. Sağ üst köşedeki simge, Uzman Danışmanın çalıştığını gösterecektir. Uzman Danışman, aşağıdaki örnekte olduğu gibi bir destek çizgisi oluşturacaktır:

          Grafiğe eklenmiş Support System

          Yukarıdaki grafikte, Support System Uzman Danışmanı çalışmakta ve fiyatın altında bir destek çizgisi görüntülemektedir.


          Direnç seviyeleri ve MQL5

          Direnç seviyesi, mevcut fiyatların üzerinde olan bir fiyat seviyesi ya da bölgesidir. Fiyatlar bu seviyeden aşağı doğru sıçrar çünkü burada satış gücü oluşur. Bu nedenle çok önemlidirler çünkü bu seviyeleri satış işlemlerine girmek için kullanabiliriz. Direnç seviyelerinin birçok şekli vardır ve bunlardan biri yatay direnç seviyesidir, aşağıda bu biçimin neye benzediği gösterilmiştir:

          Direnç seviyesi

          Aşağıda piyasadaki direnç seviyesine bir örnek verilmiştir:

          Direnç seviyesi 1

          Yukarıdaki grafikte fiyatların üzerinde kırmızı bir çizgi görülmektedir. Fiyatlar aşağıdan ona dokunur ve devamında tekrar aşağı sıçrar. 

          Fiyatların yüksekliğini ve her kene herhangi bir direnç çizgisi olup olmadığını kontrol etmek için programa ihtiyacımız var. Program her tikte fiyat yükseklerini kontrol edecek ve direnç seviyesini belirleyecektir. Grafikte mevcut bir direnç çizgisi bulunuyorsa, onu silecek ve ardından fiyat yükseklerinin üzerinde kırmızı renkte yeni bir direnç çizgisi oluşturacaktır. Otomatik şekilde böyle bir çizgi oluşturan programın tam kodu aşağıda gösterilmiştir:

          //+------------------------------------------------------------------+
          //|                                       Resistance Line System.mq5 |
          //+------------------------------------------------------------------+
          void OnTick()
            {
             int candles=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
             double pHigh[];
             ArraySetAsSeries(pHigh,true);
             CopyHigh(_Symbol,_Period,0,candles,pHigh);
             int candleHigh = ArrayMaximum(pHigh,0,candles);
             MqlRates pArray[];
             ArraySetAsSeries(pArray,true);
             int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
             ObjectDelete(_Symbol,"resistanceLine");
             ObjectCreate(_Symbol,"resistanceLine",OBJ_HLINE,0,pArray[candleHigh].time,pArray[candleHigh].high,pArray[0].time,pArray[0].high);
             ObjectSetInteger(0,"resistanceLine",OBJPROP_COLOR,Red);
             ObjectSetInteger(0,"resistanceLine",OBJPROP_STYLE,STYLE_SOLID);
             ObjectSetInteger(0,"resistanceLine",OBJPROP_WIDTH,3);
             ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
            }
          //+------------------------------------------------------------------+

          Bu koddaki farklılıklar şunlardır:

          Grafikte halihazırda resistanceLine adında bir çizgi varsa, bunu siliyoruz:

          ObjectDelete(_Symbol,"resistanceLine");

          Nesnenin türü olarak (OBJ_HLINE) belirterek yeni bir direnç çizgisi oluşturuyoruz:

          ObjectCreate(_Symbol,"resistanceLine",OBJ_HLINE,0,pArray[candleHigh].time,pArray[candleHigh].high,pArray[0].time,pArray[0].high);

          (OBJPROP_COLOR) kullanarak direnç çizgisinin rengini ayarlıyoruz:

          ObjectSetInteger(0,"resistanceLine",OBJPROP_COLOR,Red);

          Direnç çizgisinin stilini tanımlıyoruz - (OBJPROP_STYLE) özelliğini (STYLE_SOLID) olarak ayarlıyoruz:

          ObjectSetInteger(0,"resistanceLine",OBJPROP_STYLE,STYLE_SOLID);

          Çizginin kalınlığını (OBJPROP_WIDTH) özelliğinde belirtiyoruz:

          ObjectSetInteger(0,"resistanceLine",OBJPROP_WIDTH,3);

          (OBJPROP_RAY_RIGHT) ışın özelliğini (true) olarak ayarlıyoruz:

          ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);

          Bu kodu herhangi bir hata olmadan derledikten sonra, daha önce bahsettiğimiz gibi grafiğe ekleyebiliriz. Resistance System Uzman Danışmanı grafik üzerinde çalışmaya başlayacaktır:

          Grafiğe eklenmiş Resistance System

          Yukarıdaki grafikte, Resistance System Uzman Danışmanı çalışmaktadır - bu, grafiğin sağ üst köşesindeki Uzman Danışman simgesiyle anlaşılabilir. Kırmızı direnç çizgisi de fiyat yükseklerinin üzerinde görüntülenmektedir.


          Sonuç

          Bu makalede, alım-satımda kullanılabilecek muhtemelen en önemli üç çizgiyi öğrendik. Bunlar trend çizgileri (yükseliş ve düşüş), destek ve direnç çizgileridir. Ne anlama geldiklerine ve nasıl kullanılacaklarına baktık. Ayrıca bu çizgileri otomatik olarak oluşturmak için MQL5'te bu çizgilerle nasıl çalışacağımızı da öğrendik. Her bir çizgi türü için kendi sistemimizi oluşturduk. Bu kodu daha da geliştirebilir, seviyelere göre işlem yapmak için emir gönderme yeteneği ekleyebilirsiniz. Ancak, bu makalenin temel amacı tamamen eğitim amaçlı olduğundan, çalıştıklarından emin olmak için programları gerçek bir hesapta kullanmadan önce iyice test ettiğinizden emin olmalısınız.

          Umarım bu makale sizin için yararlı olmuştur ve bu makaledeki bilgileri tek başına veya başka, daha gelişmiş bir sistemin parçası olarak kullanabilirsiniz. Bu makaledeki bilgiler, bu makalede doğrudan ele alınmayanlar da dahil olmak üzere yeni fikirler bulmanıza yardımcı olabilir. Ayrıca bu makaledeki tüm kodları kendiniz yazdığınızı ve test ettiğinizi umuyorum. Böyle bir pratik programlama becerilerinizi geliştirmek için önemlidir.

          Bu makaleyi beğendiyseniz, yararlı bulduysanız, Moving Average, RSI, Stochastic, Parabolic SAR vb. gibi popüler teknik göstergeleri kullanarak alım-satım sistemlerinin geliştirilmesine adanmış diğer makalelerimi de okumanızı tavsiye ederim.

          Ayrıca daha önceki makalelerimde MQL5 programlama dilinin temellerine değinmiş, algoritmik alım-satım sistemlerinin nasıl oluşturulacağını ve neden yapılacağını öğrenmiştik. Bunları da okumak ilginizi çekebilir.

          MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
          Orijinal makale: https://www.mql5.com/en/articles/11538

          Scikit-learn kütüphanesinin sınıflandırma modelleri ve bunların ONNX'e aktarılması Scikit-learn kütüphanesinin sınıflandırma modelleri ve bunların ONNX'e aktarılması
          Bu makalede, Fisher'ın iris veri kümesinin sınıflandırma görevini çözmek için Scikit-learn kütüphanesinde bulunan tüm sınıflandırma modellerinin uygulanmasını inceleyeceğiz. Bu modelleri ONNX formatına dönüştürmeye ve elde edilen modelleri MQL5 programlarında kullanmaya çalışacağız. Ek olarak, orijinal modellerin doğruluğunu tam iris veri setindeki ONNX versiyonlarıyla karşılaştıracağız.
          Scikit-learn kütüphanesinin regresyon modelleri ve bunların ONNX'e aktarılması Scikit-learn kütüphanesinin regresyon modelleri ve bunların ONNX'e aktarılması
          Bu makalede, Scikit-learn paketinden regresyon modellerinin uygulanmasını inceleyecek, bunları ONNX formatına dönüştürmeye çalışacak ve sonuçta ortaya çıkan modelleri MQL5 programlarında kullanacağız. Ayrıca, orijinal modellerin doğruluğunu hem float hem de double hassasiyet için ONNX versiyonlarıyla karşılaştıracağız. Ek olarak, regresyon modellerinin ONNX temsilini inceleyerek iç yapılarının ve çalışma prensiplerinin daha iyi anlaşılmasını sağlayacağız.
          Gator Oscillator göstergesine dayalı bir alım-satım sistemi nasıl geliştirilir? Gator Oscillator göstergesine dayalı bir alım-satım sistemi nasıl geliştirilir?
          En popüler göstergelere dayalı alım-satım sistemlerini nasıl oluşturacağımızı öğrendiğimiz serinin yeni makalesi. Bu kez Gator Oscillator göstergesi hakkında konuşacağız ve bu göstergeyi kullanan bazı basit stratejilere dayalı olarak bir alım-satım sistemi oluşturacağız.
          Freelance hizmetinde yatırımcıların siparişlerini yerine getirerek nasıl para kazanılır? Freelance hizmetinde yatırımcıların siparişlerini yerine getirerek nasıl para kazanılır?
          MQL5 Freelance, yatırımcı müşteriler tarafından sipariş verilen ticaret uygulamalarını oluşturmaları için geliştiricilere ödeme yapılan çevrimiçi bir hizmettir. Hizmet 2010 yılından bu yana başarılı bir şekilde faaliyet göstermekte olup, bugüne kadar tamamlanan 100.000'den fazla projenin toplam değeri 7 milyon dolardır. Gördüğümüz gibi, burada önemli miktarda para söz konusu.