Bir ticaret robotunu piyasaya sürerken doğrulama hatası. - sayfa 6

 
Andrey Kaunov :

Kontrol etmediğimi düşünüyorsun. Parti büyüklüğü ayrı bir fonksiyonda kontrol edilir

Burada sınırlara ihtiyaç yoktur, çünkü. Bir ticaret açarken Zarar Durdur ve Kâr Al sıfıra eşittir. RefreshRates(), partiyi hesaplarken verileri günceller. İletişim kontrolleri vb. tabi her girişin önünde değil ama her şeyin anlamı bu değil. OrderSend isteği göndermiş olsaydı, belirli bir hata olurdu: 130, 131, vb. Ama ben buna sahibim

Hiç açık sipariş göndermeye çalışmıyor. Son testte bile OnInit() işlevinden bir kontrol gecikmesi ayarladığımda


Belki. Ama zaten her şeyi kontrol ettim. Daha nereye kazacağımı bilmiyorum.

Parti normalleştirme fonksiyonunda partiyi maks/min değerini kontrol ettikten sonra yuvarlarsınız.
 
Artyom Trishkin :
Parti normalleştirme fonksiyonunda partiyi maks/min değerini kontrol ettikten sonra yuvarlarsınız.

valla evet kullanıyorum

 MathRound();
PS, çünkü hala giriş parametrelerinden kazmamız gerektiğini düşünüyorum. Bazen testi geçer. Her parametre için aptalca bir kontrol yapın.
 
Artık doğrulayıcı test günlüklerinden bahsetmiyorum. Ancak en azından testi GEÇMEYEN parametreleri göndermek mümkün olabilir. Kodu düzeltmek için tutunacak hiçbir şey yok. Test parametrelerinin seçimindeki değişkenliğin sonsuz olabileceğini anlıyorum. int türünde bir değişken hem +50000 hem de -45000'e eşit olarak ayarlanabilir.Ama bazı girdi parametrelerini aptalca bir değer aralığıyla sınırlayamam. Farklı enstrümanlar için değişiklik gösterecektir.
 
Andrey Kaunov :
Artık doğrulayıcı test günlüklerinden bahsetmiyorum. Ancak en azından testi GEÇMEYEN parametreleri göndermek mümkün olabilir. Kodu düzeltmek için tutunacak hiçbir şey yok. Test parametrelerinin seçimindeki değişkenliğin sonsuz olabileceğini anlıyorum. int türünde bir değişken hem +50000 hem de -45000'e eşit olarak ayarlanabilir.Fakat bazı girdi parametrelerini aptalca bir değer aralığıyla aptalca sınırlayamam, farklı araçlar için farklılık gösterecektir.

Her durumda işlem lotunun geçerli olduğundan emin olmanız gerekir. Boyutlarının izin verilen aralığı için kontrol edildikten sonra kodunuzdaki partideki değişikliği size işaret etmem boşuna değildi.

Ve yapılması gereken tamamen aptal girdi parametrelerinin kontrolüdür.

 

Yani lotla ilgili bir problem yok. Maks/min için kontrol edilir. Yuvarlamadan önce adıma bölünür, ardından yuvarlanan tam sayı tekrar adımla çarpılır. Tamamen doğru bir parti elde ediyoruz.

 //+------------------------------------------------------------------+
//| Функция нормализации лота                                        |
//+------------------------------------------------------------------+
double NormalizeLots( string symbol, double lot, bool is_margin= true ) {
   if (lot<= 0 ) return ( 0.0 );
   RefreshRates();
   double min= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MIN );
   double max= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MAX );
   double step = SymbolInfoDouble (symbol, SYMBOL_VOLUME_STEP ); 
   double free = AccountFreeMargin()* 0.95 ;
   double margin = MarketInfo(symbol,MODE_MARGINREQUIRED);
   double _lot=lot<min?min:(lot>max?max:lot);
          _lot= MathRound (_lot/ step )* step ;
   if (is_margin && _lot*margin>free)  _lot= 0.0 ; //MathFloor(free/margin/step)*step;
   return (_lot);
}

_lot(0.568)/adım(0.01)=56.8

MathRound(56.8)=57

57*adım(0.01)=0.57

Ardından, açmak için yeterli boşluk olup olmadığı kontrol edilir. Doğrulayıcı parti üzerine yemin etmez. Görünüşe göre yanlış giriş parametreleri girdiği için alım satım fonksiyonlarını görmüyor. EA basitçe bunların belirli bir kombinasyonu ile ticaret yapmaz! Koşulsuz martinim yok ve her mumda açılan bir ızgaram yok. Mantıksal danışmanın belirli parametrelerle anlaşma yapmadığını doğrulayıcıya nasıl açıklayabiliriz.

 
Andrey Kaunov :

Yani lotla ilgili bir problem yok. Maks/min için kontrol edilir. Yuvarlamadan önce adıma bölünür, ardından yuvarlanan tam sayı tekrar adımla çarpılır. Tamamen doğru bir parti elde ediyoruz.

_lot(0.568)/adım(0.01)=56.8

MathRound(56.8)=57

57*adım(0.01)=0.57

Ardından, açmak için yeterli boşluk olup olmadığı kontrol edilir. Doğrulayıcı parti üzerine yemin etmez. Görünüşe göre yanlış giriş parametreleri girdiği için alım satım fonksiyonlarını görmüyor. EA basitçe bunların belirli bir kombinasyonu ile ticaret yapmaz! Koşulsuz martinim yok ve her mumda açılan bir ızgaram yok. Mantıksal danışmanın belirli parametrelerle anlaşma yapmadığını doğrulayıcıya nasıl açıklayabiliriz.

Açıklama yapmayın, ancak EA'nın yanlış giriş parametrelerini düzelttiğinden emin olun. Tercihen, günlüğe geçersiz değerleri hakkında bir mesaj ve kabul edilebilir bir değere düzeltme ile.

Ve herhangi bir nedenle, gerçek hayatta kullanıcıyı yanlış parametre girmekten sorumlu kılmak istiyorsanız, parametreler yanlış olduğunda onun bilgilendirilmesi gerekir.
Ancak, test uzmanı için bunların da ayarlanması gerekir - böylece danışman işlem yapabilir.

 

EURUSD için bazı parametreler varsa ve örneğin Altın için tamamen farklı olanlar varsa düzeltilmesi gerektiği için. Şimdi, varsayılan olarak, ana çiftler için aşağı yukarı tolere edilebilirler, ancak altın için hiç çalışmazlar. Anlaşma olmayacak. Bunun parametreleri (anladığım kadarıyla) onları her enstrümana uyarlamak için var. Her şey bu kadar basit olsaydı, tüm parametreleri EA'ya koyardım ve harici olanlara hiçbir şey koymazdım.

Doğrulayıcının bir başka hatası, diğer zaman dilimlerini hiç görmemesidir. Onu atladım, ancak bir dereceye kadar algoritmanın zararına. EA'da, bir dizi gösterge, haftalık, D1, H4, vb. gibi diğer zaman dilimlerinden veri alır. M1'e. Ancak sayısız deneyden öğrendiğim gibi veriler sıfır geliyor. Ve bu konuda yapabileceğin hiçbir şey yok, sadece atla. Doğrulayıcıyı algoritmanın zararına uydurmak için EA'nın neden ince ayar yapılması gerekiyor? Tam tersi olması gerekmiyor mu, doğrulayıcı testlere uyarlanmalıdır. Ve sonra kesinlikle çalışan bir danışmanın testini geçmek bir tür sıkı çalışmaya dönüşür!

 
Andrey Kaunov :
EURUSD için bazı parametreler varsa ve örneğin Altın için tamamen farklı olanlar varsa düzeltilmesi gerektiği için. Şimdi, varsayılan olarak, ana çiftler için aşağı yukarı tolere edilebilirler, ancak altın için hiç çalışmazlar. Anlaşma olmayacak. Bunun parametreleri (anladığım kadarıyla) onları her enstrümana uyarlamak için var. Her şey bu kadar basit olsaydı, tüm parametreleri EA'ya koyardım ve harici olanlara hiçbir şey koymazdım.
ayrıca OrderSend'den önce tam olarak 0'a bölme koydunuz - ve böyle bir hata oluştu. OrderSend'e ulaştığı, ancak açmadığı anlamına gelir. Yani lot/marj/limit/fiyat, bazıları dikkate alınmaz
 
Maxim Kuznetsov :
ayrıca OrderSend'den önce tam olarak 0'a bölme koydunuz - ve böyle bir hata oluştu. OrderSend'e ulaştığı, ancak açmadığı anlamına gelir. Yani lot/marj/limit/fiyat, bazıları dikkate alınmaz

Maxim, yukarıdakilerden herhangi biri dikkate alınmazsa, doğrulayıcı çok özel bir hata verir: 130 , 131, 134, 145, vb. Burada durum böyle değil!

PS İnanın bana, günün 4 günü doğrulama için yüzden fazla kez gönderdim ve birçok seçenek denedim.

 

Evet, 0'a bölme (dolayısıyla OrderSend ) hemen ulaşılır. Ve hata veriyor.

Ancak kodda 0'a bölmeden bir Uzman Danışmanı doğrulama için gönderirsem, belirtilen süre boyunca işlemlerin hiç açılmadığı parametreleri bir şekilde sihirli bir şekilde ayarlıyor ve hata veriyor. Bu, olanların benim versiyonum, ama görünüşe göre gerçeklerden uzak değil.

Neden: