"Uyarlanabilir Alım Satım Sistemleri ve Bunların MetaTrader 5 Müşteri Terminalinde Kullanımları" makalesi için tartışma - sayfa 3

 
Quantum:

Sevgili Forexistence,

>>Sevgili

Sorunuzu yanıtladınız :)

>> Evet, belki kısmen sorumu kendim cevapladım ve sadece bir onay veya farklı görüşler istiyorum.

Haklısınız, işlem koşullarını değiştirmek istiyorsanız iki yol var, bir taraftan CStrategyMA stratejisine yeni koşullar ekleyebiliriz (ancak ilkinden farklı yeni bir strateji elde edeceğiz), diğer yol ise yeni bir sınıf oluşturmaktır (örneğin, CStrategyMA34) ve oraya ek alım / satım koşulları ekleyin.

Ancak elbette, dosyayı yeni stratejinize dahil etmeli ve bu yeni stratejileri CAdaptiveStrategy sınıfının Expert_OnInit işlevine eklemelisiniz:

İkinci yol daha iyidir, birçok strateji ve bunların varyasyonlarını ekleyebilirsiniz.

CStrategyMA sınıfı örneklerini (eğer varsa) kaldırmanıza gerek yoktur, sonuçları kötü olacağından kum havuzlarına bakmayacağız.

Piyasa, m_all_strategies'de yer alan stratejiler listesindeki en iyi stratejiyi belirlememize yardımcı olacaktır.

>> Tamam, düşündüğüm gibi anladım.

Ama şimdi asıl soru başka. Optimizasyonlarla çalışmak amacıyla EA'yı "inputize" etmek için çalışıyorum.

Yani örnek olarak bunun gibi kod parçalarını kastediyorum:

for(int i=0; i<RSIcicle; i++)
     {
      CStrategyRSI *t_StrategyRSI;
      t_StrategyRSI=new CStrategyRSI;
      if(t_StrategyRSI==NULL)
        {
         delete m_all_strategies;
         Print("Error of creation of object of the CStrategyRSI type");
         return(-1);
        }

      

       ////////////////////////// PLEASE LOOK AT THIS FOLLOWING PIECE OF CODE ///////////////////////
   //her strateji için süreyi ayarla
    int period=Trsi+Drsi*i;
    
    ENUM_TIMEFRAMES RSItempoframe=RSItempoframe_in; // SET TIMEFRAME (enum), INPUT, FOR STRATEGY 
    ENUM_APPLIED_PRICE RSIappprice=RSIappprice_in;  // SET APPPLIED PRICE (enum), INPUT, FOR STRATEGY
    
    int RSIvarA_root=RSIvarA_in;
    int RSIvarB_root=RSIvarB_in;
    
      // stratejinin başlatılması
      t_StrategyRSI.Initialization(period,true,RSItempoframe,RSIappprice,RSIvarA_root,RSIvarB_root);
      /////////////////////////////////////////////////////////////////////////////////////////////


      // stratejinin ayrıntılarını ayarlayın
      t_StrategyRSI.SetStrategyInfo(_Symbol,"[RSI_"+IntegerToString(period)+"]",period,"Relative Strenght Index "+IntegerToString(period));
      
      if(t_StrategyRSISet_Stops_ ==true) {
      t_StrategyRSI.Set_Stops(tSMSSone,tSMSStwo); //3500,1000);
      }

where (bildirimler) :

//+------------------------------------------------------------------+
//|                                            CAdaptiveStrategy.mqh |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"

#include <Arrays\ArrayObj.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <CStrategyMA.mqh>
#include <CStrategyMAinv.mqh>
#include <CStrategyStoch.mqh>

#include <CStrategyRSI.mqh>   // STRATEJI EKLENDI

/*
......
*/

input int Trsi=0, Drsi=10, RSIcicle=10;

input ENUM_TIMEFRAMES RSItempoframe_in= PERIOD_CURRENT;
input ENUM_APPLIED_PRICE RSIappprice_in= PRICE_CLOSE;

input int RSIvarA_in=60, RSIvarB_in=40;




input int tSMSSone=3500, tSMSStwo=1000;


input bool t_StrategyRSISet_Stops_=false;

/*
...
*/

//+------------------------------------------------------------------+
//| Class CAdaptiveStrategy                                          |

/*
...
*/

ve değişkenlerin nerede olduğu:

RSItempoframe, RSIappprice, RSIvarA_root, RSIvarB_root

ile işbirliği içinde çalışmak

//+------------------------------------------------------------------+
//|                                                  CStrategyMA.mqh |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#include <CSampleStrategy.mqh>

input int mval=0, mval1=1, mval2=2, mval3=3, mval4=4, mvalVar=0, mvalFix=0,

          mvalVar2=0, mvalFix2=0;
          

//+------------------------------------------------------------------+
//| Class CStrategyMA for implementation of virtual trading          |
//| by the moving average strategy                                   |
//+------------------------------------------------------------------+
class CStrategyRSI : public CSampleStrategy
  {
protected:
   int               m_handle;     // Hareketli Ortalama (iMA) göstergesinin tutamacı
   int               m_period;     // Hareketli Ortalama göstergesinin periyodu
   double            m_values[];   // göstergenin değerini saklamak için dizi





   int               RSIvarA, RSIvarB; 
   
   ENUM_TIMEFRAMES   m_timeframe;
   ENUM_APPLIED_PRICE m_appprice;



   
public:
   // Stratejinin başlatılması // Eklenen girdilere dikkat edin


   int               Initialization(int period,bool virtual_trade_flag,ENUM_TIMEFRAMES RSItempoframe,
                                    ENUM_APPLIED_PRICE RSIappprice,int RSIvarA_root, int RSIvarB_root);


   // stratejinin başlangıçtan kaldırılması
   int               Deinitialization();
   // ticaret koşullarının kontrolü ve sanal pozisyonların açılması
   bool              CheckTradeConditions();
  };
//+------------------------------------------------------------------+
//| Method of initialization of the strategy                         |
//+------------------------------------------------------------------+



int CStrategyRSI::Initialization(int period,bool virtual_trade_flag,ENUM_TIMEFRAMES RSItempoframe,
                                 ENUM_APPLIED_PRICE RSIappprice,int RSIvarA_root, int RSIvarB_root)


  {
   //set period for the RSI     (was //set period for the moving average)
   m_period=period;
      
   m_timeframe=RSItempoframe;
   m_appprice=RSIappprice;
   
   RSIvarA=RSIvarA_root;
   RSIvarB=RSIvarB_root;

/*
...
*/

//göstergenin tutamacını oluştur 
   
   m_handle=iRSI(_Symbol,m_timeframe,m_period,m_appprice);

/*
...
*/

//+------------------------------------------------------------------+
//| checking the trade conditions and opening the virtual positions  |
//+------------------------------------------------------------------+
bool CStrategyRSI::CheckTradeConditions()
  {
   RecalcPositionProperties(m_position);
  // double p_close;

/*
...
*/
   
     if(CopyRates(_Symbol,m_timeframe,0,3,m_rates)<0)

{
      Alert("Error of copying history data - error:",GetLastError(),"!!");
      return(false);
     }
// Önceki çubuğun mevcut kapanış fiyatını kopyalayın (bu çubuk 1'dir)
  // p_close=m_rates[1].close;  // close price of the previous bar          

   if(CopyBuffer(m_handle,0,0,3,m_values)<0)
     {
      Alert("Error of copying buffers of the Moving Average indicator - error number:",GetLastError());
      return(false);
     }

/*
...
*/

// Alış koşulu 1: RSI yükselir
   bool buy_condition_1=(m_values[mval]>m_values[mval1]) && (m_values[mval1]>m_values[mval2]);  // Dizinin [] kısmındaki tamsayı değişkenini BİLDİR

// Alış koşulu 2: önceki kapanış fiyatı MA'dan yüksek
 //  bool buy_condition_2=(p_close>m_values[1]);


     bool buy_condition_2=(m_values[mval+mvalVar+mvalFix]>RSIvarA);

/*
... vb.
*/


   

Benim sorum şu:

Strateji sınıf dosyası (dosya dahil, yani CStrategyRSI.mqh) düzeyinde veya diğer sınıf / dahil düzeyinde (CAdaptiveStrategy.mqh) uygun hiyerarşi / bağlantılar / ağaçlar ile giriş değişkenine sahip olmak için kodu değiştirmek uygun mudur?

Başka bir deyişle, optimizasyon testleri için bazı girdi parametrelerinin eklenmesiyle EA fikrinin çekirdek sistemini etkilemek için,

şöyle bir şey yapmalıyım: (CAdaptiveStrategy.mqh'deki giriş değişkenleri)

/*
...
*/

class CStrategyRSI : public CSampleStrategy
  {
protected:
   int               m_handle;     // handle of the Moving Average (iMA) indicator
   int               m_period;     // period of the Moving Average indicator
   double            m_values[];   // array for storing the value of indicator
   int               RSIvarA, RSIvarB;
   
   ENUM_TIMEFRAMES   m_timeframe;
   ENUM_APPLIED_PRICE m_appprice;
   
public:
   // initialization of strategy
   int               Initialization(int period,bool virtual_trade_flag,ENUM_TIMEFRAMES RSItempoframe,
                                    ENUM_APPLIED_PRICE RSIappprice,int RSIvarA_root, int RSIvarB_root);

/*
...
*/ 

//set period for the RSI     (was //set period for the moving average)
   m_period=period;
      
   m_timeframe=RSItempoframe;
   m_appprice=RSIappprice;
   
   RSIvarA=RSIvarA_root;
   RSIvarB=RSIvarB_root;

/*
...
*/

//göstergenin tutamacını oluştur 
   
   m_handle=iRSI(_Symbol,m_timeframe,m_period,m_appprice);

/*
...
*/
 

veya bunun gibi başka bir şey: (CSampleRSI.mqh'deki giriş değişkenleri)

/*
...
*/

input   int               RSIvarA_root, RSIvarB_root;
   
input  ENUM_TIMEFRAMES  RSItempoframe=PERIOD_M5;
input   ENUM_APPLIED_PRICE RSIappprice=PRICE_CLOSE;
   

class CStrategyRSI : public CSampleStrategy
  {
protected:
   int               m_handle;     // Hareketli Ortalama (iMA) göstergesinin tutamacı
   int               m_period;     // Hareketli Ortalama göstergesinin periyodu
   double            m_values[];   // göstergenin değerini saklamak için dizi

  ENUM_TIMEFRAMES   m_timeframe;
  ENUM_APPLIED_PRICE m_appprice;

int               RSIvarA, RSIvarB;

public:
   // stratejinin başlatılması
   int               Initialization(int period,bool virtual_trade_flag);  // ORIJINAL KODA DIKKAT EDIN

/*
...
*/ 

//set period for the RSI     (was //set period for the moving average)
   m_period=period;
      
   m_timeframe=RSItempoframe;
   m_appprice=RSIappprice;
   
   RSIvarA=RSIvarA_root;
   RSIvarB=RSIvarB_root;

/*
...
*/

//göstergenin tutamacını oluştur 
   
   m_handle=iRSI(_Symbol,m_timeframe,m_period,m_appprice);

/*
...
*/

Başka bir deyişle, girdi değişkenleri strateji include dosyasında, sınıf bildiriminden önce kullanılmalıdır (örnek2, burada sadece bu yukarıda) veya girdi değişkenleri

CAdaptive stratejisindeki "for" cicle'dan türetilmeli ve tüm sınıfların başlatma ve giriş parametrelerini dikkate almalı mı? (yani bu ilk örnek için (yukarıdaki kodun hemen üstünde) :)

public:
// stratejinin başlatılması
int Initialization(int period,bool virtual_trade_flag,ENUM_TIMEFRAMES RSItempoframe,
ENUM_APPLIED_PRICE RSIappprice,int RSIvarA_root, int RSIvarB_root);

CStrategyRSI.mqh dosyasında girdi değişkenleri kullanılıyorsa, sistemin çekirdeğini ne kadar farklı etkileyecektir veya CAdaptiveStrategy.mqh içinde?

Sanırım, eğer sadece bir test meselesiyse, CStrategyRSI.mqh'deki giriş değişkenlerini kullanabilirim, bunun yerine hem test etmek hem de

EA fikrinin çekirdek sistemini etkileyen (uyarlanabilir sistem ve ticaret simülatörü, sanal tüccar dahil) beyan etmeliyim

girdi değişkenleri strateji dahilinde değil, tüm uygun bağlantılar ve çağrılarla birlikte Uyarlanabilir dahil dosyasında

giriş/çıkışının ve sınıf/fonksiyon bildiriminin nasıl yapıldığını biliyor musunuz?

Değil mi?

Umarım ne demek istediğimi anlamışsınızdır.

Tnkx

 
forexistence:

....Ama şimdi soru başka... Optimizasyonlarla çalışmak amacıyla EA'yı "girdileştirmek" için çalışıyorum....

Strateji Test Cihazındaki optimizasyon seçeneğini kullanarak stratejinin en iyi parametrelerini bulmak istiyorsanız, EA'yı belirli bir strateji ile yeniden yazmak ve onunla oynamak daha iyidir.

Uyarlanabilir EA kavramı ve yapısı, parametrelerini doğrudan Strateji Test Cihazında optimize etmeye izin vermez, çünkü optimize edilecek belirli bir strateji ve parametre yoktur.

Uyarlanabilir EA'yı ticarette kullandığımızda veya Strateji Test Cihazında test ettiğimizde, farklı stratejilerden gelen bir dizi sinyal olarak bir ticaret sistemimiz olur. Başka bir deyişle, Test Cihazı oluşturduğumuz sanal sanal alanlara erişemez ve onlar hakkında hiçbir şey bilmez.

Kullanılacak ticaret stratejilerinin parametrelerini yapılandırmak için giriş parametrelerini kullanmak istiyorsanız, dosyaları kullanmak daha iyidir, ticaret stratejilerinin parametrelerini ve listesini yapılandırmanıza izin verecektir.

 
Quantum:

Strateji Test Cihazındaki optimizasyon seçeneğini kullanarak stratejinin en iyi parametrelerini bulmak istiyorsanız, EA'yı belirli bir strateji ile yeniden yazmak ve onunla oynamak daha iyidir.

>> Tamam, anladım. Bu kolay bir iş olmayacak..

Uyarlanabilir EA kavramı ve yapısı, Strateji Test Cihazındaki parametrelerini doğrudan optimize etmeye izin vermez, çünkü optimize edilecek belirli bir strateji ve parametre yoktur.

>> Evet. EA, stratejiler için hala optimize edilmişparametrelerle çalışmak üzere idealleştirilmiştir. Anladığım kadarıyla, piyasanın nasıl/ne şekilde tepki vereceği temelinde farklı stratejiler kullanıyor (ya da başka bir bakış açısına göre tam tersi...)

Uyarlanabilir EA'yı ticarette kullandığımızda veya Strateji Test Cihazında test ettiğimizde, farklı stratejilerden gelen bir dizi sinyal olarak bir ticaret sistemimiz var. Başka bir deyişle, Test Cihazı oluşturduğumuz sanal sanal alanlara erişemez ve onlar hakkında hiçbir şey bilmez.

>> Bu kavramı anladım ama tam olarak değil.

Test cihazını sanal sanal alanlarla etkileşime sokmanın hiçbir anlamı olmadığını anlıyorum, ticaret mantığı yok.

Tek amacım, bir eklenti ile kullanmak için EA'nın değiştirilmesini sağlamaktı: bu EA'yı başka bir EA'yı yeniden yazmadan veya tüm stratejileri yeniden yazmadan veya her stratejiyi ayrı ayrı test etmeden parametreleri optimize etmek için de kullanma amacı. Benim fikrim sadece aynı EA içinde parametreleri optimize etme olasılığına "rahatlık" içindi, ancak bu optimizasyonun sanal ticaret / uyarlanabilir sistemle çalışması amaçlanmadı. Bu sadece, aynı EA giriş penceresini kullanarak stratejilerin parametrelerini optimize etme olanağına sahip olma ve her strateji için başka bir EA yazmama, optimize parametreleri alma ve bunları Uyarlanabilir Strateji Sistemine sabit değerler olarak koyma meselesidir. Umarım demek istediğimi anladınız.

Kullanılacak ticaret stratejilerinin parametrelerini yapılandırmak için giriş parametrelerini kullanmak istiyorsanız, dosyaları kullanmak daha iyidir, ticaret stratejilerinin parametrelerini ve listesini yapılandırmanıza izin verecektir.

>> Hangi dosyalardan bahsediyorsunuz? ( Kullanılacak ticaret stratejilerinin parametrelerini yapılandırmak için giriş parametrelerini kullanmak istiyorsanız, dosyaları kullanmak daha iyidir )

CStrategyXXX.mqh kullanmaktan mı yoksa her strateji için ayrı bir EA yazmak, optimize etmek ve parametreleri CStrategyXXX.mqh'de sabit değerler olarak kopyalamaktan mı bahsediyorsunuz?

 

Are you talking about to use CStrategyXXX.mqh or the fact to write another individual EA for each strategy, optimize it, and copy the parameters as fixed values in CStrategyXXX.mqh?

Demek istediğim, strateji konteyneri uyarlanabilir EA'nın bazı ayarlarına göre doldurulabilir.

Örneğin, Adaptive_Expert.Expert_OnInit () içinde uyarlanabilir EA ayarlarını içeren bir dosya yükleyebilir:

MA;3
MA;15
MA;25
Stoch;3;12;20
Stoch;3;15;30

Strateji1; Param1; Param2;
Strateji2; Param1; Param2;

Her satırı ayrıştırarak, dahil edilmesi gereken stratejiyi tanır ve belirtilen ilgili parametrelerle ekler. Uyarlanabilir EA'yı derlemeler olmadan yapılandırmanın yollarından biridir. Basitlik için bunu makalede dikkate almadım.

Test cihazını sanal sanal alanlarla etkileşime sokmanın hiçbir anlamı olmadığını anlıyorum, ticaret mantığı yok.

Tek amacım, bir eklenti ile kullanmak için EA'nın değiştirilmesini sağlamaktı: bu EA'yı başka bir EA'yı yeniden yazmadan veya tüm stratejileri yeniden yazmadan veya her stratejiyi ayrı ayrı test etmeden parametreleri optimize etmek için de kullanma amacı. Benim fikrim sadece aynı EA içinde parametreleri optimize etme olasılığına "rahatlık" içindi, ancak bu optimizasyonun sanal ticaret / uyarlanabilir sistemle çalışması amaçlanmadı. Bu sadece, aynı EA giriş penceresini kullanarak stratejilerin parametrelerini optimize etme olanağına sahip olma ve her strateji için başka bir EA yazmama, optimize parametreleri alma ve bunları Uyarlanabilir Strateji Sistemine sabit değerler olarak koyma meselesidir. Umarım demek istediğimi anladınız.

Kum havuzlarına bakmanın bir yolu var. Strateji Test Cihazı kullanılarak dolaylı olarak yapılabilir.

Makalenin Şekil 2'sinde sunulan sonuçları yeniden üretmek istediğimizi varsayalım.

Uyarlanabilir EA adaptive-systems-mql5-sources-debug-en.zip 'in hata ayıklama sürümüne ihtiyacımız var (kum havuzlarını rapor eder) Bir sonraki, Strateji test cihazında Adaptive_Expert_Sample'ı derleyin ve açın, EURUSD H1 01.01.2010 - 20.08.2010'u seçin ve teste başlayın. Sandbox'lar ve uyarlanabilir strateji sonuçları tester\files\equity_res.txt dosyasına kaydedilecektir Bu şekilde tüm rakamları yeniden üretmek çok kolaydır.

Sanal ticaret özkaynaklarının/dengelerinin analizi optimizasyonu basitleştirmenizi sağlayacaktır.

 

Herkese merhaba,

Bu harika makale için teşekkürler, şimdi sadece uyarlanabilir bir EA üzerinde çalışıyorum.

Ancak, bu tür bir EA'ya takip eden bir durdurma işlevini nereye dahil edeceğimden emin değilim.

CAdaptiveStrategy.mqh kısmına böyle bir fonksiyonun eklenebileceğini düşünüyorum.

Herhangi biriniz bana biraz yardım sağlayabilir mi? Belki siz zaten böyle bir işlev geliştirmişsinizdir?

Şimdiden çok teşekkür ederim!

Saygılarımla,

Patrick

 
OO Uzman Sınıfına dayalı uzmanlarla çalışacak bir Uyarlanabilir Ticaret sürümü olan var mı?
 
MQL5 bizim için çok büyük fırsatlar sunuyor - ticaret topluluğunun çoğu hala bunları takdir edemiyor - hatta daha azı bunları kullanabiliyor.
 
Harika makale için teşekkürler, uyarlanabilir bir sistemi nasıl uygulayacağımı düşünüyordum, bu tasarladığım bir yaklaşımdı ancak henüz üzerinde çalışacak zamanım olmadı. Canlı verilerle birlikte yerleşik backtesting özelliklerinden herhangi birini kullanmayı düşündünüz mü?
 

Makaledeki sonuçları yeniden üretemiyorum.

Kaynak dosyaları indirdim, derledim ve aynı zaman diliminde çalıştırdım (EURUSD H1, 04/01/2010 - 20/08/2010) ve farklı bir sonuç aldım.

Hata ayıklama dosyalarını kullandım ve sanal işlem çıktılarını kontrol ettim ... sanal öz sermaye grafikleri aynı, ancak gerçek işlemler eşleşmiyor.

Gerçek işlemlerin bir günlük dosyası olmadan, işlemlerimin neden makaleninkilerle eşleşmediğini bulmak zor.

Neden eşleşmediğime dair bir fikriniz var mı?

 
Çok güzel bir makale, Dikkat dağınıklığı, önerilen işlevsel olasılıklardan uzaklaşmak ve bunları entegre etmek yerine sonuçları yeniden üretmeye çalışan insanlardan kaynaklanıyor. Artık tamamen işlevsel ve karlı bir otomatik ve yarı otomatik ticaret EA'sı oluşturma olasılığı gerçekleşmiştir. Göstergelerin geniş ölçekte test edilmesi, sonuçların derlenmesi ve söz konusu verilerin konformasyonel istatistiklerinin yanı sıra göstergelerin istatistiksel verilerinin çıkarılması ve EA'nın uygulanacak en iyi ticaret stratejisini seçmesine izin verilmesi. Temel ve Teknik analiz şimdiye kadar hiçbir EA'da MQL5 Dilinin Yardımcısıyla birleştirilmemişti. Geleceğe baktığımda, tüm Piyasalardaki EA'ların piyasa dalgalanmalarını tahmin etmek için bir araya geldiğini görüyorum.