Hata #130 geçersiz stoploss ile ilgili Yardıma ihtiyacınız var - sayfa 2

 

Stoploss'u düzeltmenin en iyi yolu, yayılma hakkında düzgün düşünmektir. Yayılma, Talep ve Teklif arasındaki mesafedir. Böylece Bid - SL kullanarak bir satın alma emrine stoploss eklediğinizde, farkı otomatik olarak dahil eder ve bunun için kodlama yapmanıza gerek kalmaz ve yayılmayı etkili bir şekilde tamamen yok sayabilirsiniz. Satış işlemi için Ask + SL kullanarak aynı etkiye sahiptir. Ancak, DİKKAT --- ticaret hacminin düşük olduğu zamanlarda spread büyür ve beklediğiniz yerden çok uzakta bir SL ile sonuçlanabilir --- bu nedenle, eklemeyi önlemek için bazı kodlar eklemek isteyebilirsiniz. SL'nin belirli bir Yayılma boyutunun üzerinde.

Şimdi, Yayılma sorunu, 130'ların hatalarının bir sonraki ana nedeni, EA'nız hala yürütülürken fiyatların değişmiş olmasıdır. Bunun nedeni, yürütülmesi uzun zaman alan bir EA olabilir veya sunucu, EA yürütmenizi geciktiren işlemlere hizmet vermekle çok meşgul olabilir. Sonuç olarak, bir onay işareti EA'nızın çalışmaya başlamasına neden oldu, ancak yürütme bitmeden başka bir onay işareti geldi ve fiyatlar artık geçersiz.

Her iki durumda da fiyatları RefreshRates kullanarak yenilemeniz gerekir: while (RefrshRates() == 1) Sleep(5); ------ veya ne isterseniz bekleme süresi olarak.

 
BigAl :


Her iki durumda da fiyatları RefreshRates kullanarak yenilemeniz gerekir: while (RefrshRates() == 1) Sleep(5); ------ veya ne isterseniz bekleme süresi olarak.

Bu, yalnızca kod Önceden Tanımlanmış değişkenler kullanıyorsa doğrudur https://docs.mql4.com/predefined/variables Kod Teklif için MarketInfo kullanıyorsa ve Sor, RefreshRates'in hiçbir etkisi olmayacaktır. . .
 
qjol :
AFAIK RefreshRates() hatası 130 ile ilgisi yok

RaptorUK noktası alındı ve MODE_ASK vb. kullanmanın RefreshRates() gerekliliğini ortadan kaldıracağına katılıyorum, ancak shinobi'nin kod örneğinde olduğu gibi varsaydım ....

Örneğin bir sipariş gönderiyorum:

int bilet = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);

önceden tanımlanmış ASK değişkeni kullanılıyor ve bu nedenle talep/teklif ve yayılma değeri 130 hatası vererek değişmiş olabilir. Böyle bir durumda, OrderSend'den hemen önce RefreshRates() kullanılabilir

 
BigAl :

RaptorUK noktası alındı ve MODE_ASK vb. kullanmanın RefreshRates() gerekliliğini ortadan kaldıracağına katılıyorum, ancak shinobi'nin kod örneğinde olduğu gibi varsaydım ....

Örneğin bir sipariş gönderiyorum:

int bilet = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);

önceden tanımlanmış ASK değişkeni kullanılıyor ve bu nedenle talep/teklif ve yayılma değeri 130 hatası vererek değişmiş olabilir. Böyle bir durumda, OrderSend'den hemen önce RefreshRates() kullanılabilir

Harika tavsiyeleriniz için herkese teşekkürler!
Şu anda biraz meşgulüm ama fırsat bulduğumda tüm önerilerinizi deneyeceğim ve daha sonra aynı sorunla bu konuya rastlayabilecek herkes için bir özet yazısı yazacağım.

Teşekkürler ve kendine iyi bak!

şinobi
 
BigAl : Örneğin bir sipariş gönderiyorum:

int bilet = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);

her şeyi söylemez. Bid'i kullanarak initial_stop'u nasıl hesaplıyorsunuz?

SLIPPAGE'i nasıl hesaplıyorsunuz - 4/5 haneli brokerler için ayarlama mı yapıyorsunuz?

 
Hey Millet!

Bir süre ara vermek zorunda kaldım (yeni bir şehre taşınma, yeni iş).
Ama şimdi bu konuyu ele almak ve nihayet bu lanetli #130 stoploss hatası için bir çözüm bulmak istiyorum.

Tüm tavsiyeleriniz için minnettarım ve hepsini birleştirmeye çalıştım:

1: Yaymak.
hatanın olası nedeni olarak yayılmayı ortadan kaldırmak için stoploss'u şu şekilde ayarladım:
Bid-stoploss (Uzun)
Ask+stoploss (Kısa)

2: Değişen Piyasa Oranları
Emir gönderilmeden önce piyasa oranlarının değişmesinin olası nedenini ortadan kaldırmak,
Kodumu değiştirdim ve tüm Ask and Bid olaylarını şununla değiştirdim:
MarketInfo(Symbol(), MODE_ASK) ve MarketInfo(Symbol(), MODE_BID)

3: 4-5 Haneli-Komisyoncu
geçersiz basamak sayısının olası nedenini ortadan kaldırmak için stoploss'u WHRoeders koduna göre yuvarladım:
 int      pips2points;     // slippage  3 pips    3=points    30=points
double   pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int      Digits .pips;     // DoubleToStr(dbl/pips2dbl, Digits.pips)

//init digit adjustment
if ( Digits % 2 == 1 ) {       // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
    pips2dbl    = Point * 10 ; pips2points = 10 ;   Digits .pips = 1 ;
} else {
    pips2dbl    = Point ;    pips2points =   1 ;   Digits .pips = 0 ; 
}

OrderSend ( Symbol (), OP_BUY, position_size, MarketInfo ( Symbol (), MODE_ASK), SLIPPAGE, ( MarketInfo ( Symbol (), MODE_BID) - stoploss) * pips2dbl, TAKEPROFIT, NULL , EXPERT_ID, 0 , Green );
Daha önce bahsedildiği gibi, benim durumumda SLIPPAGE ve TAKEPROFIT değişkenleri her zaman 0'dır. Dolayısıyla onlar da bir soruna neden olmamalıdır.

Bu yüzden tüm önerileri dahil ettim, ancak hata hala devam ediyor. Söyleyebileceğim kadarıyla, eskisi kadar sık oluyor, bu yüzden bunun başka bir nedeni olmalı.
İşte son bir günlük:

onay değeri: 12.5000000
posta boyutu: 37.00000000
Talep/Teklif 1262.00000000/1261.75000000
durma kaybı:12.59610000
konum_boyutu: 37
Yayılma 0.25000000

Hata uzun pozisyon alamazdı. Hata: #130 geçersiz durak

Yukarıdaki OrderSend kod satırı, günlüğe kaydedilen değerlerle uzun bir pozisyon denemek ve almak için kullanıldı.
Başka fikrin var mı, nedeni ne olabilir?

Teşekkürler!
şinobi
 

Bu bir ECN Aracısı mı?

WHRoeder 2011.09.15 20:36

ECN brokerlerinde açmalı ve SONRA durdurmalısınız.

 
shinobi :
geçersiz basamak sayısının olası nedenini ortadan kaldırmak için stoploss'u WHRoeders koduna göre yuvarladım:
  1. Gönderdiğim kodda yuvarlama yok
  2. ECN brokerlerinde açmalı ve SONRA durdurmalısınız.
  3. Metallerde (TICKSIZE != Point olduğunda) bekleyen emirlerin açılış fiyatı yuvarlanmalıdır.
     double TS= MarketInfo (pair, MODE_TICKSIZE);
    OOP = MathRound (OOP/TS)*TS;
    Durakları bilmiyorum.
  4. Bize değerlerin ne olduğunu ve ne yaptığınızı düşündüğünüzü söylemeyi bırakın. Kodu yayınlayın.
 

Sadece yap

harici çift StopLoss = 50;

harici çift TakeProfit = 50;

sonra satın almak için:

double SL = Teklif - Kaybı Durdur * Puan ;

double TP = Teklif + Kâr Al * Puan ;

int Ticket = OrderSend ( Simge () , 0 , 1 , Ask , 2 , SL , TP , "" , 12345 ) ;

if( Bilet<0) print("error="GetLastError());

satış için:

double SL = Ask + StopLoss * Puan ;

double TP = Ask - TakeProfit * Puan ;

int Ticket = OrderSend ( Symbol () , 1 , 1 , Bid , 2 , SL , TP , "" , 12345 ) ;

if( Bilet<0) print("error="GetLastError());

sonra işe yaramazsa günlük dosyasını gönderin.

 
Cevaplarınız için teşekkürler Raptor, WHRoeder ve SDC.

SDC:
Kodunuzu şöyle denedim:
   int result_ticket = - 1 ;
   double stoploss            = 50 ;
   double takeprofit          = 50 ;
   double SL = 0.0 ;
   double TP = 0.0 ;
   if ( long ) {   //take long position
      SL = MarketInfo ( Symbol (), MODE_BID) - stoploss * MarketInfo(Symbol(), MODE_POINT));
      TP = MarketInfo ( Symbol (), MODE_BID) + takeprofit * MarketInfo(Symbol(), MODE_POINT));
      result_ticket = OrderSend ( Symbol (), 0 , 1 , MarketInfo ( Symbol (), MODE_ASK), 2 , SL, TP, "" , 12345 );
   } else {     //take short position
      SL = MarketInfo ( Symbol (), MODE_ASK) + stoploss * MarketInfo(Symbol(), MODE_POINT));
      TP = MarketInfo ( Symbol (), MODE_ASK) - takeprofit * MarketInfo(Symbol(), MODE_POINT));
      result_ticket = OrderSend ( Symbol (), 1 , 1 , MarketInfo ( Symbol (), MODE_BID), 2 , SL, TP, "" , 12345 );
   }

   //check for errors
   if (result_ticket == - 1 ) {
      Log( "error=" + GetLastError ());
       return (- 1 );
   }
Tek fark, Raptor ve BigAI tarafından bahsedilen RefreshRates sorununu önlemek için Point, Ask ve Bid'i MarketInfo ile değiştirmem.
Bu basit örnekte sorun devam ediyor. hala anlıyorum

#ESZ1,M5: Açılış Pozisyonu
#ESZ1,M5: işaret değeri: 12.5000000
#ESZ1,M5: konum boyutu: 10000000000
#ESZ1,M5: Sor/Teklif 1244.50000000/1244.25000000
#ESZ1,M5: Yayılma 0.25000000
#ESZ1,M5: SL: 1244.00000000
#ESZ1,M5: TP: 1245.00000000
#ESZ1,M5: hata=130

yırtıcı hayvan:
Şu anda test için bir demo hesabıyla UWC-Trader kullanıyorum.
Daha önce de belirtildiği gibi, Vadeli İşlemler ticareti yapıyorum. Örneğin ESZ1 ve FDXZ1.

WHRoeder:
Üzgünüm ben de yuvarlamıyorum. "yuvarlak"ı "4/5-Digit Brokers için ayarla" ile değiştirin. IE Az önce kodunuzu uyguladım.
Ayrıca OrderSend'i önceki cevabımda kullandığım gibi yayınladım. Ve ilgili tüm değişkenlerin değerleri. Kodun başka hangi bölümünün ilginç olacağından emin değilim.
SDC tarafından önerilen mini örneğin gösterdiği gibi, hata bu basit koda bölünebilir. Yani daha temel olmalı.

Metal ticareti yapmıyorum, bu yüzden yuvarlama önemli olmamalı.

Bir sonraki deneyeceğim:
açma (stoploss yok) ve daha sonra değiştirme (stoploss ayarlama).

düşünceleriniz için tekrar teşekkürler

şinobi