EA oluştururken kablolu Hareketli Ortalama sorunu yaşamak..

 

Neyi yanlış yapıyorum?

hareketli ortalamadan sorumlu bir kodun bir bölümünün ekran görüntüsü var. Ayarları görebilmeniz için tüm değişkenleri değerlerle değiştirdim. diğer ekran görüntüsü, MA ve çizelgeye atılan MA göstergesinin (veya daha doğrusu 4 tipinin tümü) çizimindeki farkı gösterir.

Açık Mavi aslında Pürüzsüzleştirilmiş olandır ve test cihazında oluşturulan MA'nın yakınında değildir.
Üretilen MA'ya en yakın olanı Basit'tir, ancak bununla eşleşmiyor.

Neler oluyor?

Dosyalar:
ma_problem1.png  154 kb
ma_problem2.png  80 kb
 
angreeee :

Neyi yanlış yapıyorum?

hareketli ortalamadan sorumlu bir kodun bir bölümünün ekran görüntüsü var. Ayarları görebilmeniz için tüm değişkenleri değerlerle değiştirdim. diğer ekran görüntüsü, MA ve çizelgeye atılan MA göstergesinin (veya daha doğrusu 4 tipinin tümü) çizimindeki farkı gösterir.

Açık Mavi aslında Pürüzsüzleştirilmiş olandır ve test cihazında oluşturulan MA'nın yakınında değildir.
Üretilen MA'ya en yakın olanı Basit'tir, ancak bununla eşleşmiyor.

Neler oluyor?

Ve hangi değeri aldınız? Hiçbir yerde göremiyorum.
 
angevoyageur :
Ve hangi değeri aldınız? Hiçbir yerde göremiyorum.

2 pencereyi karşılaştırın. soldaki bir strateji test cihazı tarafından oluşturulan MA'dır. tam olarak esnaf arasında gider. sağ tarafta tüm MA370 türleri (SMA, EMA, SSMA ve LWMA) var ve bunların hiçbiri soldaki MA 370 ile eşleşmiyor. SSMA açık mavidir ve geriye dönük testte oluşturulan MA'nın yakınında değildir.

Geçerli "ma" değişken değerinin hata ayıklama uyarı satırı eklenmiş başka bir ekran görüntüsü ekleme (günlükte gösterilen son MA değeri ve sağda, grafikte "atılan" Light Blue Smoothed 370 MA'nın son değeri)

Grafikteki MA'ların kapanış fiyatına atıfta bulunduğunu, ma kodu ise açık fiyatı ifade ettiğini fark ettim, ancak grafikteki hareketli ortalamaları değiştirdiğim için görsel olarak önemli bir şekilde değiştirmedi. hala ekteki ekran görüntüsündekiyle aynı görünüyorlar.

Dosyalar:
ma_problem3.png  142 kb
 
onun değil ea çalışmıyor. İyi çalışıyor, ancak hata ayıklarken, üretilen MA'nın olması gerekenden tamamen farklı olduğunu fark ettim. Yanlış bir şey yaptığımı biliyorum ama hala ne olduğunu bilmiyorum. Açık mavi düzleştirilmiş ea ayarlarının başka bir ekran görüntüsünü ekliyorum, böylece tam bir resminiz var.
Dosyalar:
ma_problem4.png  66 kb
 
Bulduğum en benzer MA, ekran görüntüsü eklenmiş Smoothed MA 220'dir. Hiç mantıklı değil :( ama belki bir çeşit ipucudur..
Dosyalar:
ma_problem5.png  57 kb
 

Sorunu ayrı bir EA'ya ayırdım.

#property copyright    "Grzegorz Korycki"
#property version      "1.0"
#property description "MA TEST"


#include <Trade/Trade.mqh>

   #define MAGICMA   20131002

double Bid;
double Ask;

   
double OnTester ()
{
     double custommax = TesterStatistics ( STAT_EQUITY_DDREL_PERCENT );
     return (custommax);
}

CTrade  trade;
   
void OnTick ()
{
   MqlTick last_tick;
   if ( SymbolInfoTick ( Symbol (),last_tick))
     {
      Bid = last_tick.bid;
      Ask = last_tick.ask;
     }
   start();
}
  
int OnInit ()
{
   trade.SetExpertMagicNumber(MAGICMA);
   int deviation= 99 ;
   trade.SetDeviationInPoints(deviation);
   trade.SetAsyncMode( false );
   return ( 0 );
}  
  
      
      
      
void trend1()
{

   int ma_temp;
   double ma_buffer[ 20 ];

   double ma;
   ma_temp= iMA ( Symbol (), PERIOD_D1 , 370 , 0 , MODE_SMMA , PRICE_OPEN );
   CopyBuffer (ma_temp, 0 , 0 , 1 ,ma_buffer);
   ma=ma_buffer[ 0 ];
   
   Alert ( "ma=" , ma);

}

      


void start()
{
   trend1();
}

test çifti GBP/NZD'dir.
Dosyalar:
ma_test.mq5  2 kb
 

sorun gittikçe garipleşiyor. Yukarıdaki EA'yı 2012'den test ettiğimde, MA için (günlük günlüğünde gerçek değeri görebilirsiniz) 2013'ten test ettiğimden biraz farklı sonuçlar veriyor. Bunların hiçbiri grafikte yer alan 370 SSMA'ya yakın değil.

Belki de benim başlatmamda EA'nın böyle davranmasını sağlayan bir şeydir?

ekran görüntüleri dahil. Her iki ekran görüntüsünü karşılaştırırken çizilen çizgilerin farklı seviyelerde olduğuna ve aynı EA olduğuna dikkat edin.

Dosyalar:
 

Basit bir hata gibi görünüyor: elemanlar zaman serilerinde olduğu gibi indekslenmiyor (ters sırada).

Düzeltmek için bu işlevi çağırmanız gerekir ...

 ArraySetAsSeries (ma_buffer, true );
 
figurelli :

Basit bir hata gibi görünüyor: elemanlar zaman serilerinde olduğu gibi indekslenmiyor (ters sırada).

Düzeltmek için bu işlevi çağırmanız gerekir ...

eklediğimde şunu alıyorum:

cannot be used for static allocated array       ma_test.mq5     50        4

ama bu dizinin sadece 1 çerçevesini kullanıyorum. Önemi var? Ve neden uyarı?

Bu satırı ekledikten sonra hiçbir şey değişmedi (hem uyarı hem de geriye dönük testler, eklemenin hiçbir etkisi olmadığını gösteriyor)

belgeler, yalnızca sabitlerle kullanılması gerektiğini belirtir:

[...]

const datetime &time[],

[...]

ArraySetAsSeries (time, true ); 

ve benim ma_buffer değişken bir dizidir:

 double ma_buffer[ 20 ];
 
angreeee :

eklediğimde şunu alıyorum:

ama bu dizinin sadece 1 çerçevesini kullanıyorum. Önemi var? Ve neden uyarı?

Bu satırı ekledikten sonra hiçbir şey değişmedi (hem uyarı hem de geriye dönük testler, eklemenin hiçbir etkisi olmadığını gösteriyor)

Sadece bir kareyi kopyalarsanız haklısınız ve asıl sebep bu değil (ma_buffer[20] beyanınız dikkatimi bu gerçeğe çevirdi).

Bununla birlikte, aşağıdaki satırı Init()'e ve tanıtıcıyı global'e taşımanızı öneririm, çünkü bu gerçekten bir sorun kaynağıdır (bunu yaptıktan sonra lütfen tekrar test edin).

ma_temp= iMA ( Symbol (), PERIOD_D1 , 370 , 0 , MODE_SMMA , PRICE_OPEN );
 
figurelli :

Sadece bir kareyi kopyalarsanız haklısınız ve asıl sebep bu değil (ma_buffer[20] beyanınız dikkatimi bu gerçeğe çevirdi).

Bununla birlikte, aşağıdaki satırı Init()'e ve tanıtıcıyı global'e taşımanızı öneririm, çünkü bu gerçekten bir sorun kaynağıdır (bunu yaptıktan sonra lütfen tekrar test edin).

komut dosyasını yönergelerinize göre değiştirdim ve sorun hala devam ediyor :(

şimdi şöyle görünüyor:

#property copyright    "Grzegorz Korycki"
#property version      "1.0"
#property description "MA TEST"


#include <Trade/Trade.mqh>

   #define MAGICMA   20131002

double Bid;
double Ask;

   int ma_temp;
   double ma_buffer[ 20 ];

   
double OnTester ()
{
     double custommax = TesterStatistics ( STAT_EQUITY_DDREL_PERCENT );
     return (custommax);
}

   CTrade  trade;
   

   void OnTick ()
  {
   MqlTick last_tick;
   if ( SymbolInfoTick ( Symbol (),last_tick))
     {
      Bid = last_tick.bid;
      Ask = last_tick.ask;
     }
   start();
  }
  
int OnInit ()
  {
   trade.SetExpertMagicNumber(MAGICMA);
   int deviation= 99 ;
   trade.SetDeviationInPoints(deviation);
   trade.SetAsyncMode( false );
   ma_temp= iMA ( Symbol (), PERIOD_D1 , 370 , 0 , MODE_SMMA , PRICE_OPEN );


   return ( 0 );
   }  
  
      
      
      
void trend1()
{

   double ma;
   CopyBuffer (ma_temp, 0 , 0 , 1 ,ma_buffer);
   ma=ma_buffer[ 0 ];
   
   Alert ( "ma=" , ma);
}

void start()
{
         trend1();

}

belki birisi böyle bir MA değeri üretecini nasıl oluşturacağını taslak EA oluşturabilir ve ben ikisini karşılaştırabilirim - test edebilir ve hatayı izole edebilirim. (birinin ayıracak birkaç dakikası varsa)

Bir saniye içinde kontrol edeceğim ve sorunun diğer çiftlerde de aynı olup olmadığını veya sadece bu çiftte mi olduğunu yanıtlayacağım, çünkü bu çok garip.