"Yeni Başlayanlar için MQL5’te Uzman Danışman Yazmak İçin Adım Adım Açıklamalı Kılavuz" makalesi için tartışma - sayfa 29

 
İndirme içindeki dosya yanlış, lütfen düzeltin.
 

Herkese merhaba,

Şu anda Samuel'in EA'sı bir demo hesabında çalışıyor ve oldukça memnunum. İyi programlama!

Zaman zaman iyi ticaret gösteriyor, ancak bir zayıflığı var:

SAT seçenekleri, grafiklerin vadisindeki dönüm noktalarında yığılıyor ve aynı şey AL seçenekleriyle karşılık gelen zirvelerde de oluyor, bu da önce kitaplara negatif olarak büyük ölçüde çarpıyor. Bunu yeniden programlamak istiyorum, yani gün içinde AL'lar, zirvede SAT'lar ve şimdiye kadarki girişimlerim başarısız oldu. Ayrıca MQL5 hakkında sadece ilkel bir bilgiye sahibim.

Biri bana yardım edebilir mi?

SG ve çok teşekkürler!

 

Bu genellikle işe yaramaz çünkü EA'nın karlı bir pozisyon aldığı diğer noktalar da tersine çevrilir ....

Ama bunu okuyun:

EA-freelancer özellikleri : https://www.mql5.com/tr/articles/4368
Indi : https://www.mql5.com/tr/articles/4304
MQL5 ve MQL4'te Ticaret Robotu Nasıl Sipariş Edilir : https://www.mql5.com/tr/articles/117

Buradaki ipuçlarıyla fikrinizi daha kesin bir şekilde belirtebilir, işe yarayıp yaramadığını görmek için ya da birinden ücretli ya da ücretsiz olarak yapmasını isteyebilirsiniz.

So formulieren Sie das Pflichtenheft eines Auftrages für einen Handelsroboter
So formulieren Sie das Pflichtenheft eines Auftrages für einen Handelsroboter
  • www.mql5.com
Handeln Sie nach Ihrer eigenen Strategie? Wenn Sie Ihre Handelsregeln formalisieren und als Algorithmus für ein Programm beschreiben können, wäre es doch besser, Ihren Handel einem automatisierten Expert Advisor anzuvertrauen. Ein Roboter braucht weder Schlaf noch Nahrung und ist keinen menschlichen Schwächen unterworfen. In diesem Artikel zeigen wir Ihnen, wie Sie, um einen Handelsroboter im Freelance-Service in Auftrag zu geben, das sogenannte Pflichtenheft erstellen.
 

Herkese merhaba (Özellikle sevgili yazara)

Bu makale ile birlikte kodladım. Çok keyif aldım ve çok şey öğrendim.

Böyle bilgilendirici bir makale yazdığınız için teşekkür ederim.

Ancak bir sorunum var. EA'm herhangi bir sipariş vermedi. Yazarın kodunu indirdim ama o da herhangi bir emir vermedi.

Makale 13 yaşında olduğu için kodun artık güncelliğini yitirdiğini varsayıyorum. Biri bana yardım edebilir mi?

Kodum aşağıdaki dosyada. Şimdiden herkese teşekkürler.

Dosyalar:
myFirstEA.mq5  25 kb
 

Merhaba, sizi acemi olduğum konusunda uyarmak istiyorum, bu yüzden çok fazla küfür etmeyin)

Oluşturucu aracılığıyla bir Uzman Danışman oluşturmak istedim (ve her şey yolunda görünüyor, ancak bir ama var)

Bir önceki kapanıştan hemen sonra değil, örneğin bir mumdan sonra bir anlaşma açmak istiyorum,

Bir şeyler yazmaya çalıştım ama sonunda hata verdi.

Bu konuda yardımcı olabilecek veya hatanın ne olduğunu ve nasıl düzeltileceğini belirtebilecek biri var mı?

ve işte gerçek kod:


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

//| ParExpert.mq5 |

//| Telif Hakkı 2022, MetaQuotes Ltd. | |

//| https://www.mql5.com |

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

#property copyright "Telif Hakkı 2022, MetaQuotes Ltd."

#property link"https://www.mql5.com"

#property version "1.00"

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

//| Dahil et |

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

#include <Uzman\Uzman.mqh>

//--- mevcut sinyaller

#include <Uzman\Sinyal\SinyalSAR.mqh>

//--- kullanılabilir son

#include <Expert\Trailing\TrailingFixedPips.mqh>

//--- mevcut para yönetimi

#include <Expert\Money\MoneyFixedLot.mqh>

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

//| Girişler |

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

//--- Uzman için girdiler

input string Expert_Title = "ParExpert"; // Belge adı

ulong Expert_MagicNumber = 24195; //

bool Expert_EveryTick = false; //

//--- ana sinyal için girişler

giriş int Signal_ThresholdOpen = 10; // Açılacak sinyal eşik değeri [0...100]

input int Signal_ThresholdClose = 0; // Kapatılacak sinyal eşik değeri [0...100]

input double Signal_PriceLevel = 0.0; // Bir anlaşma gerçekleştirmek için fiyat seviyesi

input double Signal_StopLevel = 500; // Zararı Durdur seviyesi (puan olarak)

input double Signal_TakeLevel = 70; // Kar alma seviyesi (puan olarak)

input int Signal_Expiration = 4; // Bekleyen emirlerin sona ermesi (çubuk cinsinden)

input double Signal_SAR_Step = 0.02; // Parabolik SAR(0.02,0.2) Hız artışı

input double Signal_SAR_Maximum = 0.2; // Parabolik SAR(0.02,0.2) Maksimum oran

input double Signal_SAR_Weight = 0.6; // Parabolik SAR(0.02,0.2) Ağırlık [0...1.0]

//--- sondaki için girdiler

input int Trailing_FixedPips_StopLevel = 0; // Zararı Durdurma takip seviyesi (puan olarak)

input int Trailing_FixedPips_ProfitLevel= 10; // Kar alma takip seviyesi (puan olarak)

//--- para için girdiler

input double Money_FixLot_Percent = 10.0; // Yüzde

input double Money_FixLot_Lots = 0.1; // Sabit hacim

//--- ticaret bekleme süresi için girdiler

input int Expert_TradeCooldown = 1; // İşlemler arasındaki bekleme süresi (çubuk cinsinden)

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

//| Küresel uzman nesnesi |

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

CExpert ExtExpert;

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

//| Uzmanın başlatma fonksiyonu |

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

int OnInit()

{

//--- Uzman başlatılıyor

if (!ExtExpert.Init(Symbol(), Period(), Expert_EveryTick, Expert_MagicNumber))

{

//--- başarısız

printf(__FUNCTION__ + ": uzman başlatılırken hata oluştu");

ExtExpert.Deinit();

return (INIT_FAILED);

}


//--- Sinyal oluşturuluyor

CExpertSignal *signal = new CExpertSignal;

if (signal == NULL)

{

//--- başarısız

printf(__FUNCTION__ + ": sinyal oluşturma hatası");

ExtExpert.Deinit();

return (INIT_FAILED);

}


//---

ExtExpert.InitSignal(signal);

signal.ThresholdOpen(Signal_ThresholdOpen);

signal.ThresholdClose(Signal_ThresholdClose);

signal.PriceLevel(Signal_PriceLevel);

signal.StopLevel(Signal_StopLevel);

signal.TakeLevel(Signal_TakeLevel);

signal.Expiration(Signal_Expiration);


//--- CSignalSAR filtresi oluşturma

CSignalSAR *filter0 = yeni CSignalSAR;

if (filter0 == NULL)

{

//--- başarısız

printf(__FUNCTION__ + ": filter0 oluşturulurken hata oluştu");

ExtExpert.Deinit();

return (INIT_FAILED);

}

signal.AddFilter(filter0);


//--- Filtre parametrelerini ayarlayın

filter0.Step(Signal_SAR_Step);

filter0.Maximum(Signal_SAR_Maximum);

filter0.Weight(Signal_SAR_Weight);


//--- Sondaki nesnenin oluşturulması

CTrailingFixedPips *trailing = new CTrailingFixedPips;

if (trailing == NULL)

{

//--- başarısız

printf(__FUNCTION__ + ": error creating trailing");

ExtExpert.Deinit();

return (INIT_FAILED);

}


//--- Uzmana son ekleme (otomatik olarak silinecektir))

if (!ExtExpert.InitTrailing(trailing))

{

//--- başarısız

printf(__FUNCTION__ + ": error initialising trailing");

ExtExpert.Deinit();

return (INIT_FAILED);

}


//--- Sondaki parametreleri ayarlayın

trailing.StopLevel(Trailing_FixedPips_StopLevel);

trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);


//--- Para nesnesinin oluşturulması

CMoneyFixedLot *money = new CMoneyFixedLot;

if (money == NULL)

{

//--- başarısız

printf(__FUNCTION__ + ": para oluştururken hata oluştu");

ExtExpert.Deinit();

return (INIT_FAILED);

}


//--- Uzmana para ekleyin (otomatik olarak silinecektir))

if (!ExtExpert.InitMoney(para))

{

//--- başarısız

printf(__FUNCTION__ + ": para başlatılırken hata oluştu");

ExtExpert.Deinit();

return (INIT_FAILED);

}


//--- Para parametrelerini ayarlayın

money.Percent(Money_FixLot_Percent);

money.Lots(Money_FixLot_Lots);


//--- Tüm ticaret nesneleri parametrelerini kontrol edin

if (!ExtExpert.ValidationSettings())

{

//--- başarısız

ExtExpert.Deinit();

return (INIT_FAILED);

}


//--- Gerekli tüm göstergelerin ayarlanması

if (!ExtExpert.InitIndicators())

{

//--- başarısız

printf(__FUNCTION__ + ": error initialising indicators");

ExtExpert.Deinit();

return (INIT_FAILED);

}


//--- Son işlem zamanı değişkenini başlatın

datetime lastTradeTime = 0;

ExtExpert.SetVariable("LastTradeTime", lastTradeTime);


//--- tamam

return (INIT_SUCCEEDED);

}

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

//| Uzmanın başlangıçtan çıkarma işlevi |

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

void OnDeinit(const int reason)

{

ExtExpert.Deinit();

}

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

//| "Tik" olay işleyici işlevi |

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

void OnTick()

{

//--- Son işlemden bu yana geçen süreyi kontrol edin

datetime lastTradeTime = ExtExpert.GetVariable("LastTradeTime");

int cooldownBars = Bars - ExtExpert.GetBarShiftByTime(Symbol(), Period(), lastTradeTime);


if (cooldownBars < Expert_TradeCooldown)

{

//--- İşlem bekleme süresi dolmadı, yeni işlem açmayı atla

geri dön;

}


ExtExpert.OnTrade();

}

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

//| "Ticaret" olay işleyici işlevi |

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

void OnTrade()

{

ExtExpert.OnTrade();

}

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

//| "Zamanlayıcı" olay işleyici işlevi |

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

void OnTimer()

{

ExtExpert.OnTimer();

}

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

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2023.05.27
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
Joosy #:

Herkese merhaba😊

@Mario31415927

Bunun nedeni, ticker'da her yeni dönem veya yeni çubukta (her neyse) değişkenlerin olmasıdır:

pozisyonların zaten açık olup olmadığına bakılmaksızın sıfırlanır.

Bu, kodda nispeten hızlı bir şekilde bulunabilir.

Ancak, bunun amaçlanıp amaçlanmadığı ve eğer öyleyse, tüm pozisyonların tekrar nasıl kapatıldığı sorusu ortaya çıkmaktadır.

Belki de bu bağlamda TRADE_ACTION_DEAL emir türünü anlamıyorum?

Ticaret emri süreci de basitçe Ticaret sınıfına uyarlanabilir. Örneğin:

Saygılarımla:-)

Okuyun: https://www.mql5.com/tr/articles/232

Bu, emirler, pozisyonlar ve anlaşmalar arasındaki farkı ve ilişkileri açıklar. İkincisi, broker tarafındaki rezervasyon süreçlerini yansıtır.

Handelsereignisse in MetaTrader 5
Handelsereignisse in MetaTrader 5
  • www.mql5.com
Eine Überwachung des aktuellen Status eines Handels-Account bedeutet offene Positions und Order kontrollieren zu können. Bevor ein Handelssignal zu einem Abschluss wird, sollte es vom Client-Terminal als Anfrage zum Handels-Server geschickt werden, wo es in eine Order-Warteschlange gestellt wird und auf seine Bearbeitung wartet. Eine Anfrage vom Handels-Server annehmen, sie löschen, wenn sie abläuft oder auf ihrer Grundlage einen Abschluss ausführen - alle diese Handlungen haben Handelsereignisse zur Folge, und der Handels-Server informiert das Terminal entsprechend darüber.
 
Carl Schreiber #:

Okuyun: https://www.mql5.com/tr/articles/232

Bu, emirler, pozisyonlar ve anlaşmalar arasındaki farkı ve ilişkileri açıklar. İkincisi, broker tarafındaki rezervasyon süreçlerini yansıtır.

Merhaba Carl,

İpucu için teşekkürler!

Ancak, kendimi düzeltmeliyim.

Değişkenlerin her yeni zaman dilimi için sıfırlandığı doğrudur:

   bool Buy_opened = false, Sell_opened = false; // açılan pozisyonun sonucunu tutmak için değişkenler

Ancak buna göre bir pozisyon varsa daha sonra tekrar ayarlanırlar.

   if(PositionSelect(_Symbol) == true) { // açılmış bir pozisyonumuz var

      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) {

         Buy_opened = true;  //Bu bir Alış

      }

      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) {

         Sell_opened = true; // Bu bir Satış

      }

   }

Bununla birlikte, alış (POSITION_TYPE_BUY) doğru bir şekilde sorgulanıyor, ancak satış (POSITION_TYPE_SELL) sorgulanmıyor. Değişken artık ayarlanmıyor mu?

Kodda adım adım hata ayıklamam gerekiyor. Bu sadece mantıksal bir hata olabilir😉

Einen Expert Advisor mit Hilfe des MQL5 Objekt-orientierten Programmieransatzes schreiben
Einen Expert Advisor mit Hilfe des MQL5 Objekt-orientierten Programmieransatzes schreiben
  • www.mql5.com
Dieser Beitrag beschäftigt sich mit dem Objekt-orientierten Ansatz, um das zu machen, was wir bereits im Artikel "Schrittweiser Leitfaden zum Schreiben eines Expert Advisors in MQL5 für Anfänger" getan haben - einen einfachen Expert Advisor erstellen. Die meisten Menschen glauben, das sei schwer, doch ich darf Ihnen versichern: wenn Sie diesen Beitrag gelesen haben, dann können Sie Ihren eigenen Objekt-orientierten Expert Advisor schreiben.
 
Joosy #:
Sell_opened = true; // Bu bir Satıştır

Tanrım, bugün çok heyecanlıyım.

Sadece bir kez sorgulanır. Hata bu;-)

Tüm pozisyonlar aşağıdaki gibi aranmalıdır;

   bool Buy_opened = false, Sell_opened = false; // açılan pozisyonun sonucunu tutmak için değişkenler
   
   for(int i=0; i < PositionsTotal(); i++) {
      ticket = PositionGetTicket(i);
      if(PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == EA_Magic) {
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { 
            Buy_opened = true; 
         }
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { 
            Sell_opened = true; 
         }
      }   
   }
 

Gerçekten de bir hataydı, bir web dosyası gibi görünüyor.

İçeriğe göre kendim yeniden yazdım ve yükledim. Bu işte yeni olduğum için detay var mı bilmiyorum. Umarım yardımcı olur.

Dosyalar:
my_first_ea.mq5  12 kb
 

Test Cihazı - "Desteklenmeyen dolum modu"

3 farklı brokerda denedim. Sorun nedir?