Piyasada yayınlanan Expert Advisor'larda minimum stop kontrol ediliyor.

 

Herkese merhaba arkadaşlar!

marketin böyle bir özelliği var: min stop için tüm değerleri kontrol etmeniz gerekiyor.

Değişkenin değeri min stop'tan küçükse, min stop atayın, böylece hata 130 olmaz.

Şimdi, brokerlerin %90'ında spread ve minstop dalgalanıyor ve 0 veriyor.

tüm değişkenlere min stop değerleri atayan böyle bir kod yapısı vardır.

 int OnInitLevels( string symToWorkmodify)
  {
   if (lot< SymbolInfoDouble (symToWorkmodify, SYMBOL_VOLUME_MIN ))lots= SymbolInfoDouble (symToWorkmodify, SYMBOL_VOLUME_MIN ); else
   if (lot> SymbolInfoDouble (symToWorkmodify, SYMBOL_VOLUME_MAX ))lots= SymbolInfoDouble (symToWorkmodify, SYMBOL_VOLUME_MAX ); else lots=lot;
   if (StopLoss> 0 && StopLoss< SymbolInfoInteger (symToWorkmodify, SYMBOL_TRADE_STOPS_LEVEL ))StopLosss=( int ) SymbolInfoInteger (symToWorkmodify, SYMBOL_TRADE_STOPS_LEVEL ); else StopLosss=StopLoss;
   if (TakeProfit> 0 && TakeProfit< SymbolInfoInteger (symToWorkmodify, SYMBOL_TRADE_STOPS_LEVEL ))TakeProfits=( int ) SymbolInfoInteger (symToWorkmodify, SYMBOL_TRADE_STOPS_LEVEL ); else TakeProfits=TakeProfit;
   if (TrailingStop> 0 && TrailingStop< SymbolInfoInteger (symToWorkmodify, SYMBOL_TRADE_STOPS_LEVEL ))TrallingStops=( int ) SymbolInfoInteger (symToWorkmodify, SYMBOL_TRADE_STOPS_LEVEL ); else TrallingStops=TrailingStop;
   if (TakeProfitALL> 0 && TakeProfitALL< SymbolInfoInteger (symToWorkmodify, SYMBOL_TRADE_STOPS_LEVEL ))TakeProfitsAver=( int ) SymbolInfoInteger (symToWorkmodify, SYMBOL_TRADE_STOPS_LEVEL ); else TakeProfitsAver=( int )TakeProfitALL;
   if (TrailingStop> 0 && TrailingStop< SymbolInfoInteger (symToWorkmodify, SYMBOL_TRADE_STOPS_LEVEL ))TrallingStops=( int ) SymbolInfoInteger (symToWorkmodify, SYMBOL_TRADE_STOPS_LEVEL ); else TrallingStops=TrailingStop;
   return ( 0 );
  }

ama artık piyasada geçmiyor, çünkü artık her yerde min stop = 0,

bu sorunla kim uğraşıyor?

 

Tabii ki çalışmıyor))) Minimumu SL, TP ve TS değil, Stop Level değerini ayarlamanız gerekiyor. Ve programı başlatırken sadece bir kez değil, her tikte:

   digits          = ( int ) SymbolInfoInteger (symbol, SYMBOL_DIGITS );
   point           = SymbolInfoDouble (symbol, SYMBOL_POINT );
   
   tickSize        = SymbolInfoDouble (symbol, SYMBOL_TRADE_TICK_SIZE );
   
   ask             = SymbolInfoDouble (symbol, SYMBOL_ASK );
   bid             = SymbolInfoDouble (symbol, SYMBOL_BID );
   spread          = ask - bid;

   stopLevel       = MarketInfo (symbol, MODE_STOPLEVEL ) * point;
   
   if (stopLevel == 0 )
   {
       if (!isECN)
         stopLevel = NormalizeDouble ( 2 * spread, digits);
   }
   else
      stopLevel = NormalizeDouble (stopLevel + tickSize, digits);
isECN - kullanıcı tarafından yapılandırılabilir olmalıdır. Asgari mesafelerde gerçekten herhangi bir kısıtlamanın olmadığı "gerçek ECN" türünde hesaplar vardır, yani, spreadin içine duraklar / karlar / tasarruflar yerleştirilebilir.
 

Teşekkür ederim. ama benimkiyle aynı yapıya sahipsin, sadece spread * 2 ile min stop = 0 ile çarpmışsın ama birçok brokerda bildiğin gibi min stop = 3 spread neden 2 yaptın?

Her tikte dakika durağını kontrol ederim.

 
StopLevel yardımcı olmaz, çünkü sıfır da döndürüldüğünden, Ask-Bid farkını kullanarak, bazı çarpanlarla mümkündür
 
Alexander Bereznyak :
StopLevel yardımcı olmaz, çünkü Ask-Bid farkı kullanılarak sıfır da döndürülür
bu yayılma için, ancak dakika durağı için mi?
 
ve dakika durağı için de
 
Alexander Bereznyak :
ve dakika durağı için de
yani, minimum durmayı yayılmaya eşit mi yapıyorsunuz?
 
Vladislav Andruschenko :

Herkese merhaba arkadaşlar!

marketin böyle bir özelliği var: min stop için tüm değerleri kontrol etmeniz gerekiyor.

Değişkenin değeri min stop'tan küçükse, min stop atayın, böylece hata 130 olmaz.

Şimdi, brokerlerin %90'ında spread ve minstop dalgalanıyor ve 0 veriyor.

tüm değişkenlere min stop değerleri atayan böyle bir kod yapısı vardır.

ama artık piyasada geçmiyor, çünkü artık her yerde min stop = 0,

bu sorunla kim uğraşıyor?

Bir seçenek olarak, minimum durdurma boyutuna kendiniz bir sınır getirin. Örneğin, OnInit() içinde, kullanıcının 2 noktadan daha az bir durdurma belirleyip belirlemediğini kontrol edin, bir uyarı verin ve INIT_PARAMETERS_INCORRECT dönüş kodunu döndürün.

Diğer bir seçenek ise, kullanıcının stop boyutunu kontrol etmesine izin vermek değil, işlem koşullarına göre Expert Advisor'da dinamik olarak hesaplamaktır.

 
komisyoncu minimum durağı sıfıra eşit olarak ilan ettiğinden, başka hiçbir şey kalmaz, spread yeterli değilse bir çarpan seçebilirsiniz
 
Vitalii Ananev :

Bir seçenek olarak, minimum durdurma boyutuna kendiniz bir kısıtlama getirin. Örneğin, OnInit() içinde, kullanıcının 2 noktadan daha az bir durdurma belirleyip belirlemediğini kontrol edin, bir uyarı verin ve INIT_PARAMETERS_INCORRECT dönüş kodunu döndürün.

Diğer bir seçenek ise, kullanıcının stop boyutunu kontrol etmesine izin vermek değil, işlem koşullarına göre Expert Advisor'da dinamik olarak hesaplamaktır.

Katılıyorum - kontrol vermeyin, ancak bunun türüne göre nasıl gerekli olduğunu biliyorsunuz: Durağımı ayarlamak istiyorum. ayarı yapın.

Ve mesaj çıktısı hakkında - teşekkürler, bunu düşüneceğim.

 
Alexander Bereznyak :
komisyoncu minimum durağı sıfıra eşit olarak ilan ettiğinden, başka hiçbir şey kalmaz, spread yeterli değilse bir çarpan seçebilirsiniz

evet, bu sadece piyasa içindir - ancak herhangi bir komisyoncu için evrensellik yoktur

piyasada kabul edildiği ortaya çıktı - 3 spread için bir dakika durmanız gerekiyor,

ama aslında bu yanlıştır - çünkü aracının minstop = 1 spread'i varsa, kullanıcı 3'ten az spread koyamaz.

pusu.