Siparişleri değiştirirken 1 numaralı hata

 

Bu lanet hata nasıl kaldırılır? O beni çoktan yakaladı. Fonksiyonun her giriş parametresini kontrol ediyorum. Şu anda elimde şu şekilde:

 if (OrderOpenPrice() != ND (fd_MurreyLevelsValue[ 11 ]))
   New_OOP = ND (fd_MurreyLevelsValue[ 11 ]);
else New_OOP = OrderOpenPrice();
if (OrderStopLoss() != ND (fd_MurreyLevelsValue[ 12 ]))
   New_SL = ND (fd_MurreyLevelsValue[ 12 ]);
else New_SL = OrderStopLoss();
if (OrderTakeProfit() != ND (fd_MurreyLevelsValue[ 2 ]))
   New_TP = ND (fd_MurreyLevelsValue[ 2 ]);
else New_TP = OrderTakeProfit();

Onlar. parametre değiştirilmediyse, değiştirmeye gerek yoktur. Bunu daha önce hiç yapmadım, ama...

Ardından parametrelerim şu şekilde sipariş değiştirme yöntemine iletilir:

 if (!fOrderModify (Ticket,  New_OOP, New_SL, New_TP))
{
   if ( _LastError != 0 )
     WriteLog ( StringConcatenate ( __FUNCTION__ , ". В строке " , __LINE__ , " " , CErrs.ErrorToString ( _LastError )),
                     CLogs.GetNeedLogs(), CLogs.GetPrintUP(), CLogs.GetCommentUP());
}

Hv günlük çıktısı:

modify # 2 sell limit 0.10 EURUSD at 1.34048 sl: 1.34125 tp: 1.33362 ok
OrderModify error 1

Günlüğün, değişiklik gibi bildirildiği ortaya çıktı: Tamam ve ardından ... bir hata. Ayarların hiçbiri değişmedi.

Sipariş beklemede. Böylece açılış fiyatını değiştirebilir, durdurabilir ve alabilirsiniz. Ve bu, anladığım kadarıyla belgelerle çelişmedi.

Kim benzerleriyle karşılaştı? Nasıl karar verilir?

 
hoz :

Bu lanet hata nasıl kaldırılır? O beni çoktan yakaladı. Fonksiyonun her giriş parametresini kontrol ediyorum. Şu anda elimde şu şekilde:

Onlar. parametre değiştirilmediyse, değiştirmeye gerek yoktur. Bunu daha önce hiç yapmadım, ama...

Ardından parametrelerim şu şekilde sipariş değiştirme yöntemine iletilir:

Hv günlük çıktısı:

Günlüğün değişiklik gibi bildirdiği ortaya çıktı: Tamam ve ardından ... bir hata. Ayarların hiçbiri değişmedi.

Sipariş beklemede. Böylece açılış fiyatını değiştirebilir, durdurabilir ve alabilirsiniz. Ve bu, anladığım kadarıyla belgelerle çelişmedi.

Kim benzerleriyle karşılaştı? Nasıl karar verilir?

Hata kodunu yanlış kullanıyorsunuz, birçok işlevinizden sonra gelen hata kodunun zaten geçersiz kılındığını unutuyorsunuz.

Bu nedenle, bir hata oluşursa, kodunun yerel bir değişkene kaydedilmesi ve sonraki birçok aramanızdan sonra ancak oradan yazdırılması gerekir.

 
Renat :

Hata kodunu yanlış kullanıyorsunuz, birçok işlevinizden sonra gelen hata kodunun zaten geçersiz kılındığını unutuyorsunuz.

Bu nedenle, bir hata oluşursa, kodunun yerel bir değişkene kaydedilmesi ve sonraki birçok aramanızdan sonra ancak oradan yazdırılması gerekir.

Ve ayrıca bir dizi hata alabilir mi? Sonuçta, belgeler siyah beyaz olarak _LastError değişkeninin son hatanın numarasını sakladığını söylüyor. Ve sıfırlaması ResetLastError() işlevi tarafından gerçekleştirilir. _LastError çağrıları arasında daha fazla hata yoksa, _LastError son hatanın değerini depolar. Yol boyunca daha fazla hatam olmadı. Ve mesele bu değil.

Üstelik her yöntemde hatalar için değişkenler ayarlayıp ardından bu değişkenleri Expert Advisors'da yazdırmak çok mantıklı değil.

Sonuçta, hataları toplamak için bir değişken varsa, neden bunları üretelim?

 

Evillive , bu nasıl çek yok? yukarıda yazdım:

 if (OrderOpenPrice() != ND (fd_MurreyLevelsValue[ 11 ]))    \\ Если текущая цена не равна новой.. из массива, то..
   New_OOP = ND (fd_MurreyLevelsValue[ 11 ]);               \\.. новая цена равна этому новому значению цены из массива( расчитанного ).
else New_OOP = OrderOpenPrice();                          \\ Иначе новая цена равно текущей цене выбранного ордера. Т.е. не изменяется.
if (OrderStopLoss() != ND (fd_MurreyLevelsValue[ 12 ]))
   New_SL = ND (fd_MurreyLevelsValue[ 12 ]);
else New_SL = OrderStopLoss();
if (OrderTakeProfit() != ND (fd_MurreyLevelsValue[ 2 ]))
   New_TP = ND (fd_MurreyLevelsValue[ 2 ]);
else New_TP = OrderTakeProfit();

İlki için bir yorum bile yaptı. Her şey temel olmasına rağmen.

Başka nasıl kontrol edebilirsiniz?

 
Eşit olmadığını ve olmasını beklediğiniz yere yönlendirildiğini iki kez kontrol ediyorum!
 
evillive :
anladım bu yüzden ayrıldım
Lütfen kaba (lar) olun! ;)
 
borilunad :
Eşit olmadığını ve olmasını beklediğiniz yere yönlendirildiğini iki kez kontrol ediyorum!

Boris , ne demek istiyorsun? Sonuçta, açıkça yazdım ki fiyat böyle değilse .. o zaman öyle ... aksi halde ... güncel ... Başka ne var? 20 kere kontrol edebilirsiniz... :) Sonuçta bu mantıklı değil. İki gündür bu kod üzerinde çalışıyorum. Daha önce bir şekilde böyle bir söve rastlamamıştı. Şimdi karşı karşıya. Tüm bu yöntemleri zaten defalarca yazdım ve test ettim. Burada bir sorunla karşılaştım.

Gerçek şu ki, ben daha çok başka taktiklerin hayranıyım. Ama son baykuşları yazarken bu aksaklıkla karşılaştım. Şimdi kendim nereye gideceğimi bilmiyorum, tk. tüm kodu yukarı ve aşağı yazdırdıktan sonra, başka düşüncem yok. Bu nedenle OrderModify() işlevi yerleşiktir. Ve nasıl uygulanacağını bilmiyorum.

 
hoz :

Evillive , bu nasıl çek yok? yukarıda yazdım:

İlki için bir yorum bile yaptı. Her şey temel olmasına rağmen.

Başka nasıl kontrol edebilirsiniz?

Viktor, yani kontrol ettikten sonra yeni bir değer atanır veya atanmaz ... Ama kontrol etmeniz gerekiyor

 if (OrderOpenPrice() != ND (fd_MurreyLevelsValue[ 11 ])  // Если текущая цена не равна новой.. из массива
 || OrderStopLoss() != ND (fd_MurreyLevelsValue[ 12 ])   // или 
 || OrderTakeProfit() != ND (fd_MurreyLevelsValue[ 2 ])) // или
  // если одно из условий выполнено пойдём в модифай... 
 
AlexeyVik :

Viktor, yani kontrol ettikten sonra yeni bir değer atanır veya atanmaz ... Ama kontrol etmeniz gerekiyor

Alexey ve geçirilen işlevlerin değerinin değişmezliğini nerede kontrol ediyorsunuz? Bunu zaten dikkate aldım. Ve başlangıçta genel olarak değişiklik ihtiyacı karşılanır. Seviyeler var, türkiye seviyenin değiştiğini bildirdiyse , devam edin ...

 
hoz :

Boris , ne demek istiyorsun? Sonuçta, açıkça yazdım ki fiyat böyle değilse .. o zaman öyle ... aksi halde ... güncel ... Başka ne var? 20 kere kontrol edebilirsiniz... :) Sonuçta bu mantıklı değil. İki gündür bu kod üzerinde çalışıyorum. Daha önce bir şekilde böyle bir söve rastlamamıştı. Şimdi karşı karşıya. Tüm bu yöntemleri zaten defalarca yazdım ve test ettim. Burada bir sorunla karşılaştım.

Gerçek şu ki, ben daha çok diğer birkaç taktiğin hayranıyım. Ama son baykuşları yazarken bu aksaklıkla karşılaştım. Şimdi kendim nereye gideceğimi bilmiyorum, tk. tüm kodu yukarı ve aşağı yazdırdıktan sonra, başka düşüncem yok. Bu nedenle OrderModify() işlevi yerleşiktir. Ve nasıl uygulayacağımı bilmiyorum.

Victor, Renat, genel olarak, sizi doğru bir şekilde kaydetti, Alexey gerekli son kontrolü gösterdi ve daha önce, anlamın belirsizliğini önlemek için ve herhangi bir koşulu kaçırmadan her parametre için gerekli tüm kontrolleri tüm nüanslarla yapın!
 
hoz :

Evillive , bu nasıl çek yok? yukarıda yazdım:

 if (OrderOpenPrice() != ND (fd_MurreyLevelsValue[ 11 ]))    \\ Если текущая цена не равна новой.. из массива, то..
   New_OOP = ND (fd_MurreyLevelsValue[ 11 ]);               \\.. новая цена равна этому новому значению цены из массива( расчитанного ).
else New_OOP = OrderOpenPrice();                          \\ Иначе новая цена равно текущей цене выбранного ордера. Т.е. не изменяется.
if (OrderStopLoss() != ND (fd_MurreyLevelsValue[ 12 ]))
   New_SL = ND (fd_MurreyLevelsValue[ 12 ]);
else New_SL = OrderStopLoss();
if (OrderTakeProfit() != ND (fd_MurreyLevelsValue[ 2 ]))
   New_TP = ND (fd_MurreyLevelsValue[ 2 ]);
else New_TP = OrderTakeProfit();

İlki için bir yorum bile yaptı. Her şey temel olmasına rağmen.

Başka nasıl kontrol edebilirsiniz?

3 parametreden hiçbiri değişmediyse, o zaman OrderModify'a da dokunulmaması için başka bir kontrol gereklidir. Daha doğrusu, bu parametrelerden en az biri değiştirilirse, ancak o zaman OrderModify'a gidin.
Neden: