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.
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.
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.
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.
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 );
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 ];
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 );
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.
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
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?