"MQL5 Sihirbazı: Açık Pozisyonların İzlenme Modülü Nasıl Oluşturulur" makalesi için tartışma - sayfa 2

 

Harika ve faydalı makaleniz için teşekkür ederim,

Bu sınıfı bir uzman danışman yazarken nasıl kullanabileceğime dair bir örnek getirmenizi rica edebilir miyim, demek istediğim bu sınıfı EA şablonunda kullanmak EA oluşturmak değil ...

Tekrar teşekkür ederim, ..

 

İyi günler. Modül çalışmıyor.

Günlük, eşik kar seviyesinin emir belirleme seviyesinden daha büyük olması gerektiğini gösteriyor.

Yapıcıda boş olmayan ve sıfıra eşit olmayan değişkenleri başlatıyorum. Neden bir hata alıyorum?

 //+------------------------------------------------------------------+
//|TrailingFixedPips.mqh |
//| Telif Hakkı 2009-2013, MetaQuotes Software Corp. | |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert\ExpertTrailing.mqh>
// sihirbaz açıklaması başlangıç
//+----------------------------------------------------------------------+
//| Sınıfın açıklaması|
//| Başlık=Değişken Zarar Durdurma ile Takip (Fox104) | |
//| Type=Trailing|
//| Name=FixedPips|
//| Class=CTrailingFixedPips|
//| Sayfa=|
//| Parametre=StopLevel,int,30,Zararı Durdurma takip seviyesi (puan olarak) | |
//| Parametre=ProfitLevel,int,50,Kar alma takip seviyesi (puan olarak) | |
//+----------------------------------------------------------------------+
// sihirbaz açıklaması end
//+------------------------------------------------------------------+
//| Sınıf CTrailingFixedPips.|
//| Amaç: Pip cinsinden sabit stop seviyesine sahip takip eden stoplar sınıfı. || Amaç: Pip cinsinden sabit stop seviyesine sahip takip eden stoplar sınıfı. ||
//| CExpertTrailing sınıfından türetilmiştir.|
//+------------------------------------------------------------------+
class CTrailingFixedPips : public CExpertTrailing
  {
protected:
   //--- giriş parametreleri
   int               m_stop_level;
   int               m_profit_level;

public:
                     CTrailingFixedPips(void);
                    ~CTrailingFixedPips(void);
   //--- korunan verilerin başlatılması yöntemleri
   void              StopLevel(int stop_level)     { m_stop_level=stop_level;     }
   void              ProfitLevel(int profit_level) { m_profit_level=profit_level; }
   virtual bool      ValidationSettings(void);
   //---
   virtual bool      CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp);
   virtual bool      CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp);
  };
//+------------------------------------------------------------------+
//| Kurucu|
//+------------------------------------------------------------------+
void CTrailingFixedPips::CTrailingFixedPips(void)
  {
            m_stop_level = 30;
            m_profit_level = 50;
  }
//+------------------------------------------------------------------+
//| Yıkıcı|
//+------------------------------------------------------------------+
CTrailingFixedPips::~CTrailingFixedPips(void)
  {
  }
//+------------------------------------------------------------------+
//|| Doğrulama ayarları korunan veriler. ||
//+------------------------------------------------------------------+
bool CTrailingFixedPips::ValidationSettings(void)
  {
   if(!CExpertTrailing::ValidationSettings())
      return(false);
//--- ilk veri kontrolleri
   if((m_profit_level-m_stop_level)*m_adjusted_point<=m_symbol.StopsLevel()*m_symbol.Point() && m_profit_level!=0.0)
     {
      printf(__FUNCTION__+": eşik kar seviyesi sipariş ayar seviyesinden büyük olmalıdır");
      return(false);
     }
//--- tamam
   return(true);
  }
//+------------------------------------------------------------------+
//| Uzun pozisyon için takip eden stop ve/veya kar kontrol ediliyor.
//+------------------------------------------------------------------+
bool CTrailingFixedPips::CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp)
  {
//--- kontrol et
   if(position==NULL)
      return(false);
   if(m_stop_level==0)
      return(false);
//--- parametre kontrolü 
   if(m_profit_level==0.0)  return(false);
//--- şimdiden başa baş mı?
   double open=position.PriceOpen();
   if(position.StopLoss()>=open) return(false);
//--- kar kontrolü
   sl=EMPTY_VALUE;
   tp=EMPTY_VALUE;
   if(m_symbol.Bid()-open>m_profit_level*m_adjusted_point)
      sl=m_symbol.NormalizePrice(open+m_stop_level*m_adjusted_point);
//---
   return(sl!=EMPTY_VALUE);
  }
//+------------------------------------------------------------------+
//| Kısa pozisyon için takip eden stop ve/veya kar kontrol ediliyor.
//+------------------------------------------------------------------+
bool CTrailingFixedPips::CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp)
  {
//--- kontrol et
   if(position==NULL)
      return(false);
   if(m_stop_level==0)
      return(false);
//--- parametre kontrolü
   if(m_profit_level==0.0)  return(false);
//--- şimdiden başa baş mı?
   double open=position.PriceOpen();
   if(position.StopLoss()<=open) return(false);
//--- kar kontrolü
   sl=EMPTY_VALUE;
   tp=EMPTY_VALUE;
   if(open-m_symbol.Ask()>m_profit_level*m_adjusted_point)
      sl=m_symbol.NormalizePrice(open-m_stop_level*m_adjusted_point);
//---
   return(sl!=EMPTY_VALUE);
  }
//+------------------------------------------------------------------+

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Fox104:

İyi günler. Modül çalışmıyor.

Günlük, eşik kar seviyesinin emir belirleme seviyesinden daha büyük olması gerektiğini gösteriyor.

Yapıcıda boş olmayan ve sıfıra eşit olmayan değişkenleri başlatıyorum. Neden bir hata alıyorum?

Lütfen mesajınızdaki kodu doğru şekilde biçimlendirin: Kodu foruma doğru şekilde ekleyin. (Mesajınız zaten düzeltildi).
 
Andy:

Makalede belirtilen modülü kullanırken, Uzman Danışmanı grafiğe yüklerken Uzman Danışman günlüğünde hatalar oluşturulur:

2017.09.06 00:28:29.873 1 (EURUSD,M5) OnInit: göstergeler başlatılırken hata oluştu

2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetPriceSeries: zaman serisinin değiştirilmesi yasak

2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetOtherSeries: zaman serisinin değiştirilmesi yasak

2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::InitIndicators: ayar parametreleri kontrol edilmedi

2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpert::InitIndicators: takip eden nesnenin hata başlatma göstergeleri

2017.09.06 00:31:20.256 1 (EURUSD,M5) OnInit: göstergeler başlatılırken hata oluştu

Belki güncel değildir, yenisini nereden bulabilirim veya bu konuda neyi düzeltebilirim?

Sondaki "sampleTrailing.mqh" modülündebir değişiklik yapın:

//+------------------------------------------------------------------+
//| Ayar parametrelerini kontrol edin.|
//| GİRİŞ: hayır.|
//| ÇIKTI: ayarlar doğruysa true, aksi halde false. || ÇIKTI: ayarlar doğruysa true, aksi halde false.
//| REMARK: Hayır.|
//+------------------------------------------------------------------+
bool CSampleTrailing::ValidationSettings()
  {
   if(!CExpertTrailing::ValidationSettings())
      return(false);
//--- Init yönteminin çağrılmaması durumunda
   if(m_symbol==NULL) return(false);
//--- parametre kontrolü
   if((m_profit-m_stop_level)*m_adjusted_point<=m_symbol.StopsLevel()*m_symbol.Point() && m_profit!=0.0)
     {
      printf(__FUNCTION__+": eşik kar seviyesi sipariş ayar seviyesinden büyük olmalıdır");
      return(false);
     }
//--- tamam
   return(true);
  }
 
Andy:

Makalede belirtilen modülü kullanırken, Uzman Danışmanı bir grafiğe yüklerken Uzman Danışmanın günlüğünde hatalar oluşturulur:


Belki de modası geçmiştir, yenisini nereden alabilirim veya bunu nasıl düzeltebilirim?

Mesaj için teşekkürler, makale düzeltildi

 
Andy:

Kısa bir pozisyon açarken ve normal durdurma kaybını (takip eden değil) parametrelerde 0 olarak ayarlarken, takip eden durdurma başabaş olarak ayarlanmaz, ancak normal durdurmayı hafifçe hareket ettirir ve en az -1 pip olarak ayarlarsanız, her şey çalışır. Özlemde her şey normal çalışır. Zaten bir başabaş olduğu koşulunu kontrol ederken (durdurma fiyattan daha düşüktür), başlangıçta durdurma değerinde 0 ve daha ileri gitmesine izin vermez.


Bu doğru. BU takip modülünün başabaşta çalışması için tetikleyici olan, belirtilen Zararı Durdur'dur. Yani, pozisyonun başlangıçta bir durdurma kaybına sahip OLMASI GEREKTİĞİ varsayılır.


Eklendi:

herhangi bir makalenin amacı, bazı problemleri çözmek için yaklaşımları göstermek ve bunlara aşina olmaktır. Daha sonra kullanıcı, edindiği bilgilere dayanarak kendi kodunu geliştirmelidir.

 
Andy:

Stop yoksa, takip eden de olacak şekilde desteklenmelidir - değişkeni en azından açılış değeriyle doldurun.

(2 mesajınız için anlık bildirim aldım, ancak bunlardan biri eksik - silindi)?


Bir şeyi değiştirmeniz gerekiyorsa - bu makalenin sorunu bu değil. Burada edindiğiniz bilgilere dayanarak bunu kendiniz yapabilirsiniz. Yani, bir Teknik Ödev oluşturmak istiyorsanız ve makalenin bunun altında yeniden yazılacağını düşünüyorsanız - öyle değil.

Eylemlerinizi gördüğüm gibi: modülü yeniden yazın (küçük bir değişiklik) ve kullanın.


Eklendi: Son kez, lütfen "yanıtla" düğmesini kullanın. Aksi takdirde cevap vermeyeceğim.

 
Andy:

Tamam, kendim yazacağım. Gönderilerinizden birini sildiniz mi (sildiyseniz söyleyin, böylece aramak zorunda kalmayayım)?


Yeni bir konu açabilirsiniz," Başabaş noktasına kadaraçık pozisyon bakım modülü " gibi bir şey - böyle bir konunun yararlı olacağını düşünüyorum.

Evet, yazımı düzenliyordum ve yanlışlıkla "sil" e tıkladım - yani aslında İKİ yazı yazdım ve birini sildim. Bu nedenle itme doğru şekilde geldi.