Her EA ve her Strateji karlı değildir
Strateji test cihazını kullanarak bunu görsel mod açıkken de yapın ve EA'da belirlediğiniz ayarlarla bulunduğunuz göstergeleri grafiğe yerleştirin.
MA200 = iMA ( NULL , 0 , 200 , 8 , MODE_SMA , PRICE_CLOSE , 0 ); MA5 = iMA ( NULL , 0 , 5 , 8 , MODE_SMA , PRICE_CLOSE , 0 ); CurrentRSI = iRSI ( NULL , 0 , VarPeriod, PRICE_CLOSE , 0 );
Yukarıdaki değerleri her tikte hesaplıyorsunuz ve " ...., PRICE_CLOSE , 0 );" seçtiğiniz için her tik ile değişebilirler.
Test bittiğinde grafikte gördüğünüz değerler, bir işlem açıldığında sahip olduğunuz değerler değil...
if (AccountFreeMargin()<( 1000 *BuyVolume)) { Print ( "We have no money. Free Margin = " , AccountFreeMargin()); return ( 0 ); } if (CurrentRSI < LowerBound && MarketInfo( Symbol (), MODE_ASK) > MA200 ) { //Condition to execute buy entry Ticket = OrderSend ( Symbol (), OP_BUY, BuyVolume, Ask, 3 , Bid - ( StopLoss * Point ), Ask + ( TakeProfit * Point ), "Buy." , 111 , 0 ,Yellow) ; //execute buy order if (Ticket> 0 ) { if ( OrderSelect (Ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "BUY order opened : " ,OrderOpenPrice()); } if (Ticket < 0 ) { Print ( "Error opening BUY order : " , GetLastError ()); return ( 0 ); } return ( 0 ); }
Bir satın alma açmak için koşullar karşılandığında ve test cihazı bir satın alma açtığında, aynı koşulla açılmış bir tane var mı diye bir kontrol yoktur.
Bir satın alma işlemi açıldıktan sonra bir sonraki onay işareti tekrar bir ticaret açma koşuluna sahip olabilirsiniz.
Bu işlemlerin açılması, StrategyTester'da çalışabilir, ancak gerçek hesapta demoda gerçek zamanlı olarak,
test cihazında görmediğiniz hatalar alabilirsiniz. Örneğin, "3" Kaymayı seçmek, '5 haneli' hesapta işlem yapmak için çok düşük
OrderSend'in OrderStopLoss() ve OrdertakeProfit() > 0 değeriyle gönderilmesi ECN hesapları için başarısız olur
Total= OrdersTotal (); for (cnt= 0 ;cnt<Total;cnt++) { OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES); if (OrderType()<=OP_SELL && OrderSymbol()== Symbol ()) // check for symbol and check for opened position {OrderSend'de ve işlemleri kontrol etmek için bu döngüde, OrderMagicNumber()'ınızı kullanmanızı özlüyorum.
ve döngünün geri saymak yerine yukarı doğru saydığını görüyorum, siz de gerekirse pozisyonları kapatmasını istiyorsunuz Yani başka bir hata
OrderModify, her Noktada olabilir, bu, tradecontext'in çok meşgul olması gibi broker hatalarına yol açabilir.
Ek olarak, shift ve ma_shift'in ne olduğunu ve bunları nasıl doldurmam gerektiğini öğrenebilir miyim? bu iRSI() göstergesi için gerekli bir parametre, ne yazacağımı bilmiyordum, bu yüzden ona 0 atadım.
Bu bilgiyi nereden aldığından emin değilim ama yanlış. . .
iRSI() çift iRSI( string sembolü, int zaman çerçevesi, int periyodu, int uygulanan_fiyat, int shift)
belki iMA() demek istediniz? shift, MA'yı istediğiniz zamanın çubuk numarasıdır, ma_shift, MA değerini çubuk numarasına göre hareket ettirmenize izin verir, bu nedenle, ona 5'lik bir kayma ve -2'lik bir ma_shift verirseniz size MA'yı verecektir. bar 7 için, doğru olup olmadığımı kontrol etmek için bunu biraz denemeniz gerekir, prensipte öyleyim.
Strateji test cihazını kullanarak bunu görsel mod açıkken de yapın ve EA'da belirlediğiniz ayarlarla bulunduğunuz göstergeleri grafiğe yerleştirin.
Yukarıdaki değerleri her tikte hesaplıyorsunuz ve " ...., PRICE_CLOSE , 0 );" seçtiğiniz için her tik ile değişebilirler.
" ...., PRICE_CLOSE , 0 );" kaydırma değeri için ne seçmeliyim? sonra?
" ...., PRICE_CLOSE , 0 );" kaydırma değeri için ne seçmeliyim ? sonra?
Stratejiniz neyi gerektiriyor? bunu kullan. İsterseniz çubuk 0'ı kullanın, ancak PRICE_CLOSE, Kapat[0] ( 0 çubuğunun kapanış fiyatı ) == Teklif kullansanız bile "yeniden boyayacaktır". Çubuk 0 nihayet kapandığında artık Çubuk 0 değil, Çubuk 1 olur.
Her EA ve her Strateji karlı değildir
Strateji test cihazını kullanarak bunu görsel mod açıkken de yapın ve EA'da belirlediğiniz ayarlarla bulunduğunuz göstergeleri grafiğe yerleştirin.
Yukarıdaki değerleri her tikte hesaplıyorsunuz ve " ...., PRICE_CLOSE , 0 );" seçtiğiniz için her tik ile değişebilirler.
Test bittiğinde grafikte gördüğünüz değerler, bir ticaret açıldığında sahip olduğunuz değerler değil...
Bir satın alma açmak için koşullar karşılandığında ve test cihazı bir satın alma açtığında, aynı koşulla açılmış bir tane var mı diye bir kontrol yoktur.
Bir satın alma işlemi açıldıktan sonra bir sonraki onay işareti tekrar bir ticaret açma koşuluna sahip olabilirsiniz.
Bu takasların açılması, StrategyTester'da çalışabilir, ancak gerçek hesapta demoda gerçek zamanlı olarak,
test cihazında görmediğiniz hatalar alabilirsiniz. Örneğin, "3" Kaymayı seçmek, '5 haneli' hesapta işlem yapmak için çok düşük
OrderSend'in OrderStopLoss() ve OrdertakeProfit() > 0 değeriyle gönderilmesi ECN hesapları için başarısız olur
OrderSend'de ve işlemleri kontrol etmek için bu döngüde, OrderMagicNumber()'ınızı kullanmanızı özlüyorum.ve döngünün geri saymak yerine yukarı doğru saydığını görüyorum, siz de gerekirse pozisyonları kapatmasını istiyorsunuz Yani başka bir hata
OrderModify, her Noktada olabilir, bu, tradecontext'in çok meşgul olması gibi broker hatalarına yol açabilir
Her şeyi yeniden yaptım ve döngüyü, kaymayı düzelttim, hareketli ortalamayı ve RSI değerlerini düzelttim, yeni pozisyona başlamadan önce her açık pozisyonun kapatıldığından emin oldum. ama tekrar test ettiğimde hiçbir şey olmuyor, alım/satım yapılmadı... yine sorun ne?
//+------------------------------------------------------------------+ //| My Strategy 4.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern double StopLoss = 40 ; extern double TakeProfit = 40 ; extern double Lots = 0.1 ; extern double Slippage = 10 ; extern double RSINow; extern double MA200; extern double MA5; extern bool A1 = false ; extern bool A2 = false ; extern int Ticket; extern int Ticket2; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- Alert ( "Minimum Stop Level is " + MarketInfo( Symbol (), MODE_STOPLEVEL)); //find out minimum stop loss RSINow = iRSI ( NULL , 1440 , 2 , PRICE_CLOSE , 0 ); //calculates the RSI value for 2 days MA200 = iMA ( NULL , 1440 , 200 , 0 , MODE_SMA , PRICE_CLOSE , 0 ); //calculates the moving average for 200 days MA5 = iMA ( NULL , 1440 , 5 , 0 , MODE_SMA , PRICE_CLOSE , 0 ); //calculates the moving average for 5 days Alert (RSINow); Alert (MA200); Alert (MA5); //---- return ( 0 ); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return ( 0 ); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- //check if a long position is possible, A is false means no buy trade is open , execute buy when RSI drops below 5 and when Ask price rises above 200 day moving average if (A1 == false && RSINow < 5 && Ask > MA200) { Ticket = OrderSend ( Symbol (), OP_BUY, Lots, Ask, Slippage, Bid - ( StopLoss * Point ), Ask + ( TakeProfit * Point )); if (Ticket> 0 ) { if ( OrderSelect (Ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print ( "BUY order opened : " ,OrderOpenPrice()); A1 = true ; } if (Ticket < 0 ) { Print ( "Error opening BUY order : " , GetLastError ()); return ( 0 ); } } } //check if a short position is possible, A2 is false means no sell trade is open , execute sell when RSI rises above 95 and when Bid price drops below 200 day moving average if (A2 == false && RSINow > 95 && Bid < MA200) { Ticket2 = OrderSend ( Symbol (), OP_BUY, Lots, Bid, Slippage, Ask + ( StopLoss * Point ), Bid - ( TakeProfit * Point )); if (Ticket2> 0 ) { if ( OrderSelect (Ticket2,SELECT_BY_TICKET,MODE_TRADES)) { Print ( "SELL order opened : " ,OrderOpenPrice()); A2 = true ; } if (Ticket2 < 0 ) { Print ( "Error opening SELL order : " , GetLastError ()); return ( 0 ); } } } //check if buy position can be closed, once Ask price rises above 5 day moving average, its time to close the position. if ((A1 == true ) && (Ask > MA5)) { OrderClose(Ticket, Lots, Bid, Slippage, Violet); A1 = false ; return ( 0 ); } //check if sell position can be closed, if Bid price drops below 5 day moving average, close sell position. if ((A2 == true ) && (Bid < MA5)) { OrderClose(Ticket2, Lots, Bid, Slippage, Violet); A2 = false ; return ( 0 ); } //---- return ( 0 ); } //+------------------------------------------------------------------+
Her şeyi yeniden yaptım ve döngüyü, kaymayı düzelttim, hareketli ortalamayı ve RSI değerlerini düzelttim, yeni pozisyona başlamadan önce her açık pozisyonun kapatıldığından emin oldum. ama tekrar test ettiğimde hiçbir şey olmuyor, alım/satım yapılmadı... yine sorun ne?
hayır döngü sabit değil, sorun daha büyük olduğu için kaldırıldı
. ticaretin açıldığı anda gerçek değeri alan A1 ve A2 kullanıyorsunuz
ama bilgisayarınızın güç kaynağı düşerse ve bilgisayarınızı ve metatrader'ınızı yeniden başlatmanız gerekirse ne olur.
EA'nızdan açık işlemler olup olmadığını o anı kontrol etmelisiniz .
Bunu nasıl yapacaksın ????
İşlemlerinizi daha kolay açmak ve kontrol etmek için belirli bir OrderMagicNumber'ı kullanın
.
hareketli ortalama şimdi gelecekte bazı çubukları hareket ettirmiyor tamam
ancak bunu yalnızca init() bölümünde hesaplarsınız, bu yalnızca Uzman Danışmanınızı başlatırken çalışır
Start()'ta özlüyorum .... Onu neden orada kaldırdınız ???
.
Kodunuzu yeniden yazdınız ve bir test denediniz, ayrıca ayarlara bakın
En iyi geriye dönük test verileriyle değil ama doğru yaparsanız karlı olabilir
sembol | EURUSD (Euro vs ABD Doları) | ||||
Dönem | Günlük (D1) 2010.10.01 00:00 - 2013.01.29 00:00 (2010.10.01 - 2013.01.30) | ||||
modeli | Her onay işareti (mevcut tüm minimum zaman dilimlerini temel alan en kesin yöntem) | ||||
parametreler | RSIPeriyodu=3; UpperBound=90; Alt Sınır=5; MASlowPeriod=200; MAFastPeriod=5; sürü = 0.1; StopLoss=60; Kâr Al=120; İzleyenDurdur=40; SihirliSayı=54333; CommentEA="RSI stratejisi"; Slippage.Pips=3; | ||||
Testteki çubuklar | 1603 | Modellenmiş keneler | 40187739 | modelleme kalitesi | n/a |
Uyumsuz grafik hataları | 2062601 | ||||
İlk para yatırma | 3000.00 | ||||
Toplam net kar | 967.18 | Brüt kazanç | 2226.34 | Brüt kayıp | -1259.16 |
kar faktörü | 1.77 | Beklenen getiri | 13.62 | ||
Mutlak düşüş | 107.10 | maksimum düşüş | 327,47 (%7,99) | göreceli düşüş | %7,99 (327,47) |
Toplam işlemler | 71 | Kısa pozisyonlar (kazanılan %) | 66 (%69,70) | Uzun pozisyonlar (% kazandı) | 5 (80,00%) |
Karlı işlemler (toplamın yüzdesi) | 50 (%70,42) | Zarar işlemleri (toplamın yüzdesi) | 21 (%29,58) | ||
En büyük | kar ticareti | 120.07 | zarar ticareti | -60.00 | |
Ortalama | kar ticareti | 44.53 | zarar ticareti | -59.96 | |
Maksimum | ardışık kazançlar (para olarak kar) | 8 (424,26) | ardışık kayıplar (para kaybı) | 3 (-179.93) | |
maksimum | ardışık kar (kazanç sayısı) | 424.26 (8) | ardışık kayıp (kayıp sayısı) | -179.93 (3) | |
Ortalama | ardışık kazançlar | 4 | ardışık kayıplar | 2 |
Kodunuzu yeniden yazdınız ve bir test denediniz, ayrıca ayarlara bakın
En iyi geriye dönük test verileriyle değil ama doğru yaparsanız karlı olabilir
Toplam işlemler | 71 | Kısa pozisyonlar (kazanılan %) | 66 (%69,70) | Uzun pozisyonlar (% kazandı) | 5 (80,00%) |
- Ücretsiz alım-satım 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
Buradaki örnekle aynı EA'yı taklit ettim ve yazdım https://www.mql5.com/en/articles/1510 al/sell koşulları dışında
Alış pozisyonu açma koşulu: RSI 5'in altında VE Alış fiyatı 200 Günlük hareketli ortalamanın üzerinde, Satış fiyatı 5 günlük hareketli ortalamanın üzerinde olduğunda çıkın.
Satış pozisyonu açma koşulu: RSI 95'in üzerinde VE Alış fiyatı 200 Günlük hareketli ortalamanın altında, Alış fiyatı 5 günlük hareketli ortalamanın altında olduğunda çıkın.g
Testleri geri aldığımda, nedenini bilmediğim her seferinde negatif kar alıyorum. En iyi yanı, bazen bana 134 hatası veriyor, bu da yeterli paraya sahip olmadığım anlamına geliyor.
Ek olarak, shift ve ma_shift'in ne olduğunu ve bunları nasıl doldurmam gerektiğini öğrenebilir miyim? bu iRSI() göstergesi için gerekli bir parametre, ne yazacağımı bilmiyordum, bu yüzden ona 0 atadım.
işte kod