EA'm neden tekrar test yaparken negatif kar sağlamaya devam ediyor? - sayfa 3

 
deVries :

Metatrader'ınızı başlattığınızda, EA'nın açık bir ticaret olup olmadığını öğrenmesi gerekir.

Bir işlem varsa, yalnızca işlemleri kontrol etmek için geri sayım döngüsü yapıyorum

Başta bire ayarlarsam ve OrdersTotal() >0'a ayarlarsam, o zaman işlemleri kontrol ederim if(.......> || .......> ){döngüyü yap....

Bana yukarıda gösterilen sonuçları veren kodu verdiğinden emin misin? 1440 (1 DAY ) periyodunda test ettim ve hiçbir işlem yapılmadı. ancak 1M olarak değiştirdiğimde birçok işlem gerçekleştirildi
 
cyxstudio :
Bana yukarıda gösterilen sonuçları veren kodu verdiğinden emin misin? 1440 (1 DAY ) periyodunda test ettim ve hiçbir işlem yapılmadı. ancak 1M olarak değiştirdiğimde birçok işlem gerçekleştirildi
Testimi tekrar kontrol ederseniz verileriniz kaç gün geriye gidiyor, testin periyodunu ve test edilen zaman dilimini bulacaksınız.
 

Tamam işte gidiyor..... Yapabilirsem burada yardım etmeye çalışacağım.

Bu Ma_Shift sorusu, bir süredir sahip olduğum ve hiçbir zaman net bir cevap alamadığım bir soruydu.

Kodunuzda Hareketli ortalamalarınızda 8'lik bir vardiya kullandığınızı fark edecekseniz.... bu ne anlama geliyor?

 MA200 = iMA(BOŞ, 0, 200, 8 ,MODE_SMA,PRICE_CLOSE, 0);
MA5 = iMA(BOŞ, 0, 5, 8 ,MODE_SMA,PRICE_CLOSE, 0);
CurrentRSI = iRSI (NULL, 0, VarPeriod,PRICE_CLOSE ,0);
 Gördüğünüz gibi bu shift ayarı RSI'da yok... kendi penceresinde gösteriyor.. Bu bir ipucu.
 Grafiğinize hareketli bir ortalama düşürürseniz, Shift kutusunda bir ayar olarak Ma_Shift'e neyin eşit olduğunu göreceksiniz.
 Ayrıca 200,8,sma,close parametrelerinin sırasına da dikkat edin. göstergeyi aradığınızda aynı
 kutuda listelendikleri sıraya göre... NULL ve zaman aralığı, Ma'yı ne bırakırsanız odur
 yani burada onlara ihtiyaç yok. ne de son vardiya ayarı... bu ma sürekli olarak değişeceği için
 şu anki mum... bunu birazdan anlayacaksınız. 
 gidip iAlligator gösterge ayarlarına bakarsanız, çene kaydırma, diş kaydırma ve dudak kaydırma ayarlarını göreceksiniz... bu, bu Hareketli ortalamaların her birinin MaShift'idir.
 hepsi, istediğiniz sayıda çubukla grafik üzerinde sola veya sağa kaydırılabilir. 

hangi böyle görüntülenir ............

 

Bu, veri penceresinde burada gösterildiği gibi bu 08:00 mumundaki değerde 3 piplik bir fark yaratır.

Bu da bizi şu soruya getiriyor; Sondaki "Shift" ayarı ne işe yarar?

Veri penceresi açıkken farenizi grafiğinizin üzerine getirdiğinizde ve mumdan muma hareket ettiğinizde

mumdan muma giderken 5 SMA için sayıların değiştiğini göreceksiniz...

Bu son SHIFT değeri bununla ilgilidir... şu anki mumun

çizilmiş mum sıfırdır... son tamamlanan mum mum 1'dir, yani üzerinde toplam 1000 mum varsa

Grafiğiniz, grafiğinizin sol kenarındaki 999'dan geriye doğru numaralandırılmıştır, burada 0'a kadar

şu anda. Yani 5 SMA'nın değerinin 5 tamamlanmış mum önce ne olduğunu bilmek istiyorsanız

o son noktaya bir 5 koyarsan... tabii ki zaman geçtikçe... mum 5 bir sonraki muma dönüşecektir.

Şimdi bahsedildiği gibi .. her zaman mum 0 değerini alıyorsanız .. o zaman bu değer sabittir

fiyatla değişiyor. Yani bir sinyal alabilirsin ve sonra gösterge seni yeniden boyar ..

her zaman mum 1'den bilgi istemek yapılır ve değişmez....

Umarım bu yardımcı olur...

 
cyxstudio :

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?



init() işlevi yalnızca başlangıçta çalışır ve start() işlevi gibi her tıklamada değil.. sadece çalışması için hareketli ortalamaları init() yerine başlangıç işlevine geri koymanız gerekir yeni rakamlar almaya devam ediyor...
 

Yeniden işlendi

EA'nın yeni bir pozisyon açmaya karar vermeden önce bekleyen emir olup olmadığını kontrol edeceği bir özellik ekleyin. Bekleyen veya açılmış bir emir varsa, artık açılmaya çalışmayacaktır.at

Herkesin alım yapmadan önce bir açık pozisyon olup olmadığını kontrol etmek için bir döngü kullandığını görüyorum, bunun mantığını anlayamıyorum. OrdersTotal > 0 olduğu sürece, açılmış emirler vardır ve EA'm daha fazla pozisyon açmaya çalışmayacaktır.

azalan döngü düzeltildi.

Bu sefer bana, yenileme oranları () ekleyerek çözülemeyen OrderClose hatası 138 veriyor.

ve hala kaybetmemem gereken parayı kaybediyorum.

Düzeltecek başka bir şey bulamıyorum...

 //+------------------------------------------------------------------+
//|                                       RSI_strategy_cyxstudio.mq4 |
//|                                  Copyright 2013, Tjipke de Vries |
//|                                     https://forum.mql4.com/53695/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"


extern int RSIPeriod        =   3 ;       //number of periods for RSI
extern double UpperBound    =   90 ;     //set upper bound value for RSI
extern double LowerBound    =   5 ;       //set lower bound value for RSI
extern int MASlowPeriod     = 200 ;
extern int MAFastPeriod     = 5 ;
extern double Lots  = 0.1 ;
extern double StopLoss      = 60 ;       //Set the stop loss level
extern double TakeProfit    = 120 ;       //Set the take profit level
extern double TrailingStop = 40 ;
//extra settings for OrderSend
extern int         MagicNumber = 54333 ;
extern string      CommentEA = "RSI strategy" ;
extern int         Slippage.Pips    = 3 ;


int     BUYS= 1 ,SELLS= 1 ;
//++++ These are adjusted for 5 digit brokers.
int      pips2points;       // slippage  3 pips    3=points    30=points
double   pips2dbl;         // Stoploss 15 pips    0.015      0.0150
int      Digits .pips;       // DoubleToStr(dbl/pips2dbl, Digits.pips)
//---
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----   
   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(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl        
//----      

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   int Ticket;
   double SL,TP;
   int Total;
   double MagicNo;
   double Slippage;
   
   double pAsk = MarketInfo( Symbol (), MODE_ASK);
   double pBid = MarketInfo( Symbol (), MODE_BID);
   double MA200 = iMA ( NULL , 0 , MASlowPeriod, 0 , MODE_SMA , PRICE_CLOSE , 0 );   //200 day Moving Average   
   double MA5 = iMA ( NULL , 0 , MAFastPeriod, 0 , MODE_SMA , PRICE_CLOSE , 0 );       //  5 day Moving Average
   double CurrentRSI = iRSI ( NULL , 1440 , RSIPeriod, PRICE_CLOSE , 0 );
  
   int Ticket2;
   int cnt;
   
   if ( Bars < 100 )
     {
       Print ( "bars less than 100" );
       return ( 0 );  
     }
   
   if (AccountFreeMargin()<( 1000 *Lots))
        {
         Print ( "We have no money. Free Margin = " , AccountFreeMargin());
         return ( 0 );  
        }


  
        
        
         if ( OrdersTotal () == 0 ) {
        
         if (CurrentRSI < LowerBound && pAsk > MA200) {     //Condition to execute buy entry
  
        Ticket = OrderSend ( Symbol (), OP_BUY, Lots, pAsk, 3 , pBid - ( StopLoss * Point ), pAsk + ( 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 ); 
   }
  
  }
  
  
 
   if (CurrentRSI > UpperBound && pBid < MA200) {     //Condition to execute sell entry
  
       Ticket2 = OrderSend ( Symbol (), OP_SELL, Lots, pBid, 3 , pAsk + ( StopLoss * Point ), pBid - ( TakeProfit * Point ), "Sell." , 000 , 0 , Yellow)  ;     //execute sell order
       if (Ticket2> 0 )
           {
             if ( OrderSelect (Ticket2,SELECT_BY_TICKET,MODE_TRADES)) 
               Print ( "SELL order opened : " ,OrderOpenPrice());
           
           }
         if (Ticket2< 0 ) {
           Print ( "Error opening SELL order : " , GetLastError ()); 
         return ( 0 ); 
        }
      
   
   } 
   }
   
   if ( OrdersTotal () > 0 ) {
   
   int PositionIndex;     //  <-- this variable is the index used for the loop

int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool

TotalNumberOfOrders = OrdersTotal ();     // <-- we store the number of Orders in the variable

for (PositionIndex = TotalNumberOfOrders - 1 ; PositionIndex >= 0 ; PositionIndex --)   //  <-- for loop to loop through all Orders . .   COUNT DOWN TO ZERO !
   {
   RefreshRates();
   if ( ! OrderSelect (PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue ;   // <-- if the OrderSelect fails advance the loop to the next PositionIndex
   
   if ( OrderMagicNumber() == MagicNo       // <-- does the Order's Magic Number match our EA's magic number ? 
      && OrderSymbol() == Symbol ()         // <-- does the Order's Symbol match the Symbol our EA is working on ? 
      && ( OrderType() == OP_BUY           // <-- is the Order a Buy Order ? 
      ||   OrderType() == OP_SELL ) )       // <-- or is it a Sell Order ?
   
   if (pAsk > MA5){       //condition to close long position
   RefreshRates();
    OrderClose(OrderTicket(),OrderLots(),pBid, 3 ,Violet); // close long position
 
   return ( 0 ); // exit
   
   if (TrailingStop> 0 )  
              {                 
               if (pBid-OrderOpenPrice()> Point *TrailingStop)
                 {
                   if (OrderStopLoss()<pBid- Point *TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),pBid- Point *TrailingStop,OrderTakeProfit(), 0 ,Green);
                     return ( 0 );
                    }
                 }
              }
   
  }
   
   if (pBid < MA5){       //condition to close short position
   RefreshRates();
   OrderClose(OrderTicket(),OrderLots(),pAsk, 3 ,Violet); // close short position
  
   return ( 0 ); // exit
   
   
   if (TrailingStop> 0 )  
              {                 
               if ((OrderOpenPrice()-pAsk)>( Point *TrailingStop))
                 {
                   if ((OrderStopLoss()>(pAsk+ Point *TrailingStop)) || (OrderStopLoss()== 0 ))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),pAsk+ Point *TrailingStop,OrderTakeProfit(), 0 ,Red);
                     return ( 0 );
                    }
                 }
              }
   }
   
       if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), Slippage ) )               // <-- try to close the order
         Print ( "Order Close failed, order number: " , OrderTicket(), " Error: " , GetLastError () );   // <-- if the Order Close failed print some helpful information 
      
   } //  end of For loop
   
   
   }
  
   
   
   
   
   
        
        
           return ( 0 );
}
 
cyxstudio :

Yeniden işlendi

EA'nın yeni bir pozisyon açmaya karar vermeden önce bekleyen emir olup olmadığını kontrol edeceği bir özellik ekleyin. Bekleyen veya açılmış bir emir varsa, artık açılmaya çalışmayacaktır.at

Herkesin alım yapmadan önce bir açık pozisyon olup olmadığını kontrol etmek için bir döngü kullandığını görüyorum, bunun mantığını anlayamıyorum. OrdersTotal > 0 olduğu sürece, açılmış emirler vardır ve EA'm daha fazla pozisyon açmaya çalışmayacaktır.

azalan döngü düzeltildi.

Bu sefer bana, yenileme oranları () ekleyerek çözülemeyen OrderClose hatası 138 veriyor.

ve hala kaybetmemem gereken parayı kaybediyorum.

Düzeltecek başka bir şey bulamıyorum...

EA'nızın hesabınızda açtığı işlemleri kontrol etmeden önce neden bir satın alma açma mantığını kurdunuz ????

Ne olacak şimdi ???? şimdiye kadar sahip olduğunuz programlama ile ???

EA'nızla çalışan bir hesabınız olduğunu varsayalım. GBPUSD için manuel olarak bir işlem açarsınız.

bu işlemle OrdersTotal() kaç işlem yapar ???

SATIN AL için kodunuz

 if (AccountFreeMargin()<( 1000 *Lots))
        {
         Print ( "We have no money. Free Margin = " , AccountFreeMargin());
         return ( 0 );  
        }


  
        
        
         if ( OrdersTotal () == 0 ) {
        
         if (CurrentRSI < LowerBound && pAsk > MA200) {     //Condition to execute buy entry
  
        Ticket = OrderSend ( Symbol (), OP_BUY, Lots, pAsk, 3 , pBid - ( StopLoss * Point ), pAsk + ( 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 ); 
   }
  

bu şimdi ne yapıyor??? ve neden böyle yapıyor???

 
deVries :

EA'nızın hesabınızda açtığı işlemleri kontrol etmeden önce neden bir satın alma açma mantığını kurdunuz ????

Ne olacak şimdi ???? şimdiye kadar sahip olduğunuz programlama ile ???

EA'nızla çalışan bir hesabınız olduğunu varsayalım. GBPUSD için manuel olarak bir işlem açarsınız.

bu işlemle OrdersTotal() kaç işlem yapar ???

SATIN AL için kodunuz

bu şimdi ne yapıyor??? ve neden böyle yapıyor ???


sadece satın alma koşulları karşılanmışsa ve herhangi bir pozisyon açılmamışsa satın alın
 
cyxstudio :

sadece satın alma koşulları karşılanmışsa ve herhangi bir pozisyon açılmamışsa satın alın

EA'nızla çalışan bir hesabınız olduğunu varsayalım. GBPUSD için manuel olarak bir işlem açarsınız.

koşul doğru olacak mı

 if ( OrdersTotal () == 0 )
 
cyxstudio 2013.01.31 18:04

Kodlarınıza bakmama izin verir misiniz?

Neden başarısız olduğumu ve bunu nasıl düzelteceğimi bilmiyorum.

.

Bana mesajınız size tam kodu doğrudan verebilirim .....

Bu bedava olmayacak. Bunun için İşler bölümünü kullanmanız ve almak için ödeme yapmanız gerekiyor...

o zaman oradan alırsın

.

Başka bir yol da konularınızı iyi okumaktır.

Kendiniz nasıl programlayacağınızı öğrenmeniz için burada size yardımcı oluyoruz. Bu ücretsiz Yardım

Hatalarınızı gösteriyoruz ve nasıl çözeceğiniz konusunda size yardımcı oluyoruz.

Yazmanın bir yolunu öğrendiğin an sahip olduğum kodu gösteriyorum ....

O zaman ödemeye gerek yok ve o an bu forumun yardımıyla burada yaptığınız kodla karşılaştırabilirsiniz.

....

buradaki son sorum hala cevaplanmadı

EA'nızla çalışan bir hesabınız olduğunu varsayalım. GBPUSD için manuel olarak bir işlem açarsınız.

koşul doğru olacak mı

 if ( OrdersTotal () == 0 )

.

. Diğer konuda OrderClose hatası 138

orada çok iyi yardım gördün ( RaptorUK ve WHRoeder , açıklama için teşekkürler, bence çok iyi iş çıkardın )

.

sana bir diğer sorum da şu

Bu hareketli Ortalama hesaplamasında Zaman Çerçevesini neden değiştirdiniz?

 

   double MA200 = iMA ( NULL , 0 , MASlowPeriod, 0 , MODE_SMA , PRICE_CLOSE , 0 );   //200 day Moving Average   
   double MA5 = iMA ( NULL , 0 , MAFastPeriod, 0 , MODE_SMA , PRICE_CLOSE , 0 );       //  5 day Moving Average

Bu benim verdiğimle aynı değil,

Günlük diğer grafikte doğru değeri hesaplamıyor

.

Bu yüzden öğrenmek ve pratik yapmak için zaman ayırın ve bu forumda alacağınız yardımı dikkatlice okuyun.

ya da şöyle bir sitede sizin için programlaması için birine ödeme yaparsınız   Meslekler  

 
deVries :
cyxstudio 2013.01.31 18:04

Kodlarınıza bakmama izin verir misiniz?

Neden başarısız olduğumu ve bunu nasıl düzelteceğimi bilmiyorum.

.

Bana mesajınız size tam kodu doğrudan verebilirim .....

Bu bedava olmayacak. Bunun için İşler bölümünü kullanmanız ve almak için ödeme yapmanız gerekiyor...

o zaman oradan alırsın

.

Başka bir yol da konularınızı iyi okumaktır.

Kendiniz nasıl programlayacağınızı öğrenmeniz için burada size yardımcı oluyoruz. Bu ücretsiz Yardım

Hatalarınızı gösteriyoruz ve nasıl çözeceğiniz konusunda size yardımcı oluyoruz.

Yazmanın bir yolunu öğrendiğin an sahip olduğum kodu gösteriyorum ....

O zaman ödemeye gerek yok ve o an bu forumun yardımıyla burada yaptığınız kodla karşılaştırabilirsiniz.

....

buradaki son sorum hala cevaplanmadı

EA'nızla çalışan bir hesabınız olduğunu varsayalım. GBPUSD için manuel olarak bir işlem açarsınız.

koşul doğru olacak mı

.

. Diğer konuda OrderClose hatası 138

orada çok iyi yardım gördün ( RaptorUK ve WHRoeder , açıklama için teşekkürler, bence çok iyi iş çıkardın )

.

sana bir diğer sorum da şu

Bu hareketli Ortalama hesaplamasında Zaman Çerçevesini neden değiştirdiniz?

 

Bu benim verdiğimle aynı değil,

Günlük diğer grafikte doğru değeri hesaplamıyor

.

Bu yüzden öğrenmek ve pratik yapmak için zaman ayırın ve bu forumda alacağınız yardımı dikkatlice okuyun.

ya da şöyle bir sitede sizin için programlaması için birine ödeme yaparsınız   Meslekler  

OrdersTotal (), EA veya manuel olarak açıldıklarına bakılmaksızın, bekleyen emirlerin ve piyasa emirlerinin toplam miktarını ortaya çıkaracak mı?

Bu şekilde düşünüyordum. EA'm her zaman açık sipariş olup olmadığını kontrol edecek ve varsa, artık sipariş açmayacak ve yalnızca açık sipariş olmadığında yeni siparişler açacaktır.

 if ( OrdersTotal () == 0 )

Bence gayet iyi çalışıyor çünkü sonuçlar bölümüm bana yeni sipariş açılmadan önce bir siparişin kapatıldığı anlamına gelen 1,1,2,2,3,3,4,4 sipariş sırasını gösteriyor.

hareketli ortalama ve RSI değişkenleri, test nedenleriyle değişti. Farklı bir zaman diliminde/dönemde deniyordum ama buraya gönderdiğimde değiştirmedim.

ve hepsinden daha tuhafı, kodum SADECE satın alma siparişini yürütecek. tek bir satış emrini bile yerine getirmedi. bu sadece garip

Özetle, şu anda hala karşılaştığım sorunlar.

1. sadece al işlemi gerçekleştiriyor ancak satışı kodlamış olmama rağmen hiçbir zaman satış gerçekleştirmiyor

2. hala negatif kar elde ediyorum ki bu stratejinin bu stratejinin gerektirmediğine eminim.

Neden: