Öncelikle, Raptor'u daha önce benimle bu konuyu gündeme getirdiğini biliyorum ama nereye yazdığını hatırlayamıyorum ve daha da önemlisi nerede yanlış yaptığımı anlıyorum?
Bildiğim kadarıyla, herhangi bir karşılık gelen Çifte eklenen EA'nın her zaman yalnızca o çift üzerinde çalışabilmesi için doğru yazıyordum. Şu anda, GBPCAD ve GBPUSD'nin başarılı olmadığını fark ettim, yani GBPCAD stoploss, hesaplamanın GBPUSD çifti tarafından yapıldığını düşünüyor... ....
Magicnumber==1234;
Aptal olduğum herhangi bir öneri veya alan, lütfen vurgulamaktan çekinmeyin :(
Sorununuz açık, ancak parantez girintilerini ve koşulları kullanma şekliniz nedeniyle görmek biraz zor olabilir. . . bunu yap:
for ( int b= OrdersTotal ()- 1 ; b>= 0 ; b--) { if (! OrderSelect (b,SELECT_BY_POS,MODE_TRADES)) continue ; if (OrderType()==OP_BUYSTOP) if (OrderMagicNumber()==MagicNumber) if (OrderSymbol()== Symbol ()) // if the symbol matches do . . . if (OrderStopLoss()< iMA ( NULL , 60 ,MA_Period, 0 , 1 , 0 , 0 )-ATR) // . . . . this { Stored_BuyPrice = OrderOpenPrice(); // and this DeleteOrder = OrderDelete(OrderTicket()); // and this } if (OpenOrdersThisPair( Symbol ())== 0 && DeleteOrder==True) // If there are no open orders = place a new order. // this happens even if the symbol didn't match . . . { int NewBuyOrder = OrderSend ( Symbol (),OP_BUYSTOP,LotSize,Stored_BuyPrice, 3 ,BuyStopPrice,btp, NULL ,MagicNumber, 0 ,Green); if (NewBuyOrder == - 1 ) Print ( "New Buy Order Last Error = " , GetLastError ()); } }
Sanırım demek istediğin şuydu. . .
for ( int b= OrdersTotal ()- 1 ; b>= 0 ; b--) { if (! OrderSelect (b, SELECT_BY_POS, MODE_TRADES)) continue ; if ( OrderType() == OP_BUYSTOP && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol () ) { if (OrderStopLoss() < iMA ( NULL , 60 , MA_Period, 0 , 1 , 0 , 0 ) - ATR) { Stored_BuyPrice = OrderOpenPrice(); DeleteOrder = OrderDelete(OrderTicket()); } if (OpenOrdersThisPair( Symbol ()) == 0 && DeleteOrder) // If there are no open orders = place a new order. { int NewBuyOrder = OrderSend ( Symbol (), OP_BUYSTOP, LotSize, Stored_BuyPrice, 3 , BuyStopPrice, btp, NULL , MagicNumber, 0 , Green); if (NewBuyOrder == - 1 ) Print ( "New Buy Order Last Error = " , GetLastError ()); } } }
Benim için bir parça fark ettiğin için teşekkürler :)
Ah tamam - orada kaçırdığım çok küçük bir şey. Ayrıca, ilk OrderSend() işlevi çağrıldığında orada yanlış bir şey mi yapıyorum? Bunu soruyorum çünkü o noktada emirlerin hangi çifte gönderilmesi gerektiğini bilip bilmediğini mantıklı bir şekilde düşünmeye çalışıyorum. Bu aptalca bir soru olabilir, ama o kısımda yanlış bir şey yapmıyorum, değil mi? "BuyTicketOrder" gönderme işlevi bölümü?
Benim için bir parça fark ettiğin için teşekkürler :)
![](https://c.mql5.com/mql4/forum/2013/08/wink_9.gif)
//+----------------------------------------------------------------------------------------------------------------------------------------+ //Moving Average Trailing Stop Function //+----------------------------------------------------------------------------------------------------------------------------------------+ void MA_Trail() { double ATR = iATR ( NULL , 60 , 14 , 1 ); double MA = iMA ( NULL , 60 ,MA_Period, 0 , 1 , 0 , 1 ); double BuyStopPriceMath = MA - ATR; double SellStopPriceMath = MA + ATR; double BuyStopPrice = NormalizeDouble (BuyStopPriceMath, 5 ); double SellStopPrice = NormalizeDouble (SellStopPriceMath, 5 ); //buy order section - This is where the stop will trail based upon a fixed point value stated on the EA. It will trail with price. for ( int b= OrdersTotal ()- 1 ; b>= 0 ; b--) { if ( OrderSelect (b,SELECT_BY_POS,MODE_TRADES)) if (OrderMagicNumber()==MagicNumber) if (OrderSymbol()== Symbol ()) if (OrderType()==OP_BUY) { if (OrderStopLoss() > BuyStopPrice) break ; if (OrderStopLoss() < BuyStopPrice) bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(), 0 , CLR_NONE ); if (BuyModify < 0 ) Print ( " Buy Trailing Stop Failed: " , GetLastError ()); } } //sell order section - This is where the stop will trail based upon a fixed point value stated on the EA. It will trail with price. for ( int s= OrdersTotal ()- 1 ; s>= 0 ; s--) { if ( OrderSelect (s,SELECT_BY_POS,MODE_TRADES)) if (OrderMagicNumber()==MagicNumber) if (OrderSymbol()== Symbol ()) if (OrderType()==OP_SELL) { if (OrderStopLoss() < SellStopPrice) break ; if (OrderStopLoss() > SellStopPrice) bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(), 0 , CLR_NONE ); if (SellModify < 0 ) Print ( " Sell Trailing Stop Failed: " , GetLastError ()); } } }Tamam - Sanırım soruna neden olan şey bu. Bu kısımdaki kodu az önce güncelledim ve artık kablodan GBPCAD fiyatlarına kadar her tikte titremeyi bırakmış görünüyor... Şimdi bu saatlik kapanışta kendini güncelleyene kadar tek durak fiyatta kaldı... bu yüzden yapacağım. onaylamak.
Bu sana uygun görünüyor mu? Ayrıca, bu kısmi sipariş kapanışlarına sahip olduğum için, muhtemelen parantezlerin "OrderSymbol()==Symbol())" ile ilgili olarak doğru konumda olduğunu iki kez kontrol etmem gerektiğini varsayıyorum?
if (OpenOrdersThisPair( Symbol ()) == 0Bunu kaç kez aramak istiyorsun? Her sipariş için (kodunuz)? Mevcut grafikte bekleyen her sipariş için (RaptorUK kodu)? Veya BİR KEZ, bekleyenleri saklayıp sildikten SONRA?
Tamam - Sanırım soruna neden olan şey bu. Bu kısımdaki kodu az önce güncelledim ve artık kablodan GBPCAD fiyatlarına kadar her tikte titremeyi bırakmış görünüyor... Şimdi bu saatlik kapanışta kendini güncelleyene kadar tek durak fiyatta kaldı... bu yüzden yapacağım. onaylamak.
Bu sana uygun görünüyor mu? Ayrıca, bu kısmi sipariş kapanışlarına sahip olduğum için, muhtemelen parantezlerin "OrderSymbol()==Symbol())" ile ilgili olarak doğru konumda olduğunu iki kez kontrol etmem gerektiğini varsayıyorum?
Tamam görünüyor, evet, her zaman diş tellerinizi kontrol edin ve mümkün olan her yerde hayatı kendiniz için kolaylaştırın, eğer bu diş telleri eklemek anlamına geliyorsa, öyle yapın, ancak diş telleri ve girintilerle tutarlı olmaya çalışın.
İki döngüye ihtiyacınız yok, biri yapacak. . .
//+----------------------------------------------------------------------------------------------------------------------------------------+ //Moving Average Trailing Stop Function //+----------------------------------------------------------------------------------------------------------------------------------------+ void MA_Trail() { double ATR = iATR ( NULL , 60 , 14 , 1 ); double MA = iMA ( NULL , 60 ,MA_Period, 0 , 1 , 0 , 1 ); double BuyStopPriceMath = MA - ATR; double SellStopPriceMath = MA + ATR; double BuyStopPrice = NormalizeDouble (BuyStopPriceMath, 5 ); double SellStopPrice = NormalizeDouble (SellStopPriceMath, 5 ); for ( int b= OrdersTotal ()- 1 ; b>= 0 ; b--) { if ( OrderSelect (b,SELECT_BY_POS,MODE_TRADES)) if (OrderMagicNumber()==MagicNumber) if (OrderSymbol()== Symbol ()) { //buy order section - This is where the stop will trail based // upon a fixed point value stated on the EA. It will trail with price. if (OrderType()==OP_BUY) { if (OrderStopLoss() > BuyStopPrice) break ; if (OrderStopLoss() < BuyStopPrice) bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(), 0 , CLR_NONE ); if (!BuyModify) Print ( " Buy Trailing Stop Failed: " , GetLastError ()); } // sell order section - This is where the stop will trail based // upon a fixed point value stated on the EA. It will trail with price. if (OrderType()==OP_SELL) { if (OrderStopLoss() < SellStopPrice) break ; if (OrderStopLoss() > SellStopPrice) bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(), 0 , CLR_NONE ); if (!SellModify) Print ( " Sell Trailing Stop Failed: " , GetLastError ()); } } }
OrderModify() bir bool, true veya false döndürür, int değil. . . bu nedenle SellModify asla 0'dan küçük olmayacaktır. . . Aynı şeyi dün ForexFactory'de de yazdım.
Emir her silindiğinde - ki bekleyen emrin silinmesini istiyorum HER 1 saatte bir kapatılır ve ardından aynı parametrelerle VEYA varsa, yeni duraklar, hedefler ve lot büyüklüğüne göre yeni bir emir açılır. (OrderStopLoss() < iMA ( NULL , 60 , MA_Period, 0 , 1 , 0 , 0 ) - ATR) "
YENİ bekleyen sipariş için (silme işleminden sonra) saklamam gereken tek şey, söz konusu kurulumdaki ilk giriş fiyatıdır. ( Stored_BuyPrice = OrderOpenPrice(); )
Komik çünkü yukarıdaki kodun ilk kısmı aynı zamanda göndermek üzere olduğum başka bir konu ile bağlantılı. Benzer bir soruyla yeni bir konu açmak yerine burada soracağım, sorun olmazsa? Aşağıdaki bağlantıya göz atın - sahip olduğum ve çözmekte zorlandığım sorunu açıklayan sadece birkaç dakikalık bir video...
O kadar çok kod yazdım ki, ama şimdi bunun tamir etmem gereken bir verimsizlik vakası olduğunu anlamaya başlıyorum...
Video: http://screencast.com/t/4nl8AaH8Sag
Bunu yalnızca sınırlı miktarda kod sağlayarak gerçekten belirsiz hale getirdiysem, biraz daha mı yapacağım?
Emir her silindiğinde - ki bekleyen emrin silinmesini istiyorum HER 1 saatte bir kapatılır ve ardından aynı parametrelerle VEYA varsa, yeni duraklar, hedefler ve lot büyüklüğüne göre yeni bir emir açılır. (OrderStopLoss() < iMA ( NULL , 60 , MA_Period, 0 , 1 , 0 , 0 ) - ATR) "
YENİ bekleyen sipariş için (silme işleminden sonra) saklamam gereken tek şey, o özel kurulumdaki ilk giriş fiyatıdır. ( Stored_BuyPrice = OrderOpenPrice(); )
Komik çünkü yukarıdaki ilk kod parçası aynı zamanda göndermek üzere olduğum başka bir konu ile bağlantılı. Benzer bir soruyla yeni bir konu açmak yerine burada soracağım, sorun olmazsa? Aşağıdaki bağlantıya göz atın - sahip olduğum sorunu açıklayan sadece birkaç dakikalık bir video ve çözmekte zorlanıyorum...
O kadar çok kod yazdım ki, ama şimdi bunun tamir etmem gereken bir verimsizlik vakası olduğunu anlamaya başlıyorum...
Video: http://screencast.com/t/4nl8AaH8Sag
Bunu yalnızca sınırlı miktarda kod sağlayarak gerçekten belirsiz hale getirdiysem, biraz daha fazla mı yapacağım?
21 EMA'ya geri çekilme yalnızca bir kez gerçekleşir. Oradan, 21 EMA'ya herhangi bir geri çekilme aramayı bırakacak. Ancak yapılması gereken, mevcut açık BEKLEMEDEKİ siparişin lotlarla, stoplarla ve her saat kapanışından SONRA kar elde ettiğinden emin olmaktır. Ancak, çözemiyorum, neden bazen kusursuz çalışıyor ve her H1 kapanışından sonra bekleyen siparişi güncelliyor ve diğer zamanlarda çalışmıyor? Bekleyen emrin kendisini güncellemesinin nedeni " " if (OrderStopLoss() < iMA ( NULL , 60 , MA_Period, 0 , 1 , 0 , 0 ) - ATR) ".
Bu doğru değilse, o zaman olmaz - ANCAK, bunun doğru olduğu sayısız zaman vardır, ancak siparişi silmez ve yeni değerlerle yeni bir tane yerleştirmez mi?
Yukarıdaki kodda videoya göre bir şey görüp göremediğinizden emin değil misiniz? (Düzelttiğiniz ilk kod). Umarım daha nettir?
![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
Bildiğim kadarıyla, herhangi bir karşılık gelen Çifte eklenen EA'nın her zaman yalnızca o çift üzerinde çalışabilmesi için doğru yazıyordum. Şu anda, GBPCAD ve GBPUSD'nin başarılı olmadığını fark ettim, yani GBPCAD stoploss, hesaplamanın GBPUSD çifti tarafından yapıldığını düşünüyor... ....
Magicnumber==1234;
Aptal olduğum herhangi bir öneri veya alan, lütfen vurgulamaktan çekinmeyin :(