Biraz yardım?

 

Bu yüzden birkaç başka dilden sonra mql4 öğreniyorum ve basit bir hareketli ortalama tüccar olan ilk EA'mın ilk sürümünü yeni bitirdim (ya da öyle düşündüm). Dün hiçbir endişe duymadan çalışmasına izin verdim, giriş ve çıkış beklendiği gibi ve gitmeye hazır olduğunu düşündüm. Bu sabah her türlü sorunla karşılaştım, ilk olarak, yeniden düzenlediğimde kod sadece pozisyondan bağımsız olarak satacaktı ve şimdi, biraz uğraştıktan sonra, doğru pozisyonlarda alıp satacak, ANCAK satın alırken ticaret kapanacak ne olursa olsun bir sonraki kene üzerinde. Aynı formata sahip olmama rağmen satarken bu olmuyor - biri bana bunun nedenini söyleyebilir mi??

(Bir yan not olarak, bilgisayarım dün bütün gün daha fazla uğultu olmadan kodu çalıştırabildi (CPU ortalaması %12) bugün kodu çalıştırmak için cehennem çanları gibi gidiyor (~%60-90))

Kod:

 int total;
//+------------------------------------------------------------------+
//| expert init function                                            |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   int i;
   total= 0 ;
   if ( OrdersTotal ()== 0 )
      {
      total= OrdersTotal ();
   }
   else 
      {
       for (i= 1 ; i<= OrdersTotal (); i++)                                                       //--- counter for any trades open on the pair
         {
         if ( OrderSelect (i- 1 ,SELECT_BY_POS)== true )
            {
             if (OrderSymbol()== Symbol ())
               {
               if ((OrderType()==OP_BUY)&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )< iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 )))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);                   //--- with an open buy if the conditions have reversed close on initiation
               }
               if ((OrderType()==OP_SELL)&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )> iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 )))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);                   //--- same with sell
               }
               else 
                  {
                  total++;                                                                   //--- if there are open trades yet to be completed add to tally (*)
               }
           }
       }
   }
}
//----
   return ;
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return ( 0 );
}
//+------------------------------------------------------------------+
//| expert start function                                   |
//+------------------------------------------------------------------+
int start()
  {
//----
   int p,q,z,i,L;
   while (AccountBalance()> 50 )                                                                                     //---- ensures an infinite loop for 1 trade a run 
   {                                                                                                               //---- (no infibuying!) (*) but always run
//---- 
RefreshRates();
//----
if (( iRSI ( Symbol (), PERIOD_D1 , 14 , PRICE_CLOSE , 0 )< 70 )&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )> iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 ))&&(total== 0 ))
      {                                                                                                                             //---------- ^ conditions to buy
      p= OrderSend ( Symbol (),OP_BUY, 0.1 ,Bid, 0 , 0 , 0 , "" ,z, 0 ,Red);                                                                        //---------- Buy Order
      OrderSelect (p,SELECT_BY_TICKET);
         while ( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )> iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 ))                             //- whilst the above remains true
            {
            RefreshRates();                                                                                                         //- refresh then do nothing
             Sleep ( 1000 );
         }
      OrderClose(OrderTicket(), 0.1 ,OrderClosePrice(), 0 ,Green);                                                                      //---when above is broken, close
         while (TimeSeconds( TimeCurrent ())!= 0 )                                                                                       //---wait until a new minute
            {
             Sleep ( 1000 );
         }
         continue ;
      }
//-----         
if (( iRSI ( Symbol (), PERIOD_D1 , 14 , PRICE_CLOSE , 0 )> 30 )&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )< iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 ))&&(total== 0 ))
       {                                                                                                                             //---Same steps as above for sell
       q= OrderSend ( Symbol (),OP_SELL, 0.1 ,Ask, 0 , 0 , 0 , "" ,z, 0 ,Blue);
       OrderSelect (q,SELECT_BY_TICKET);
         while ( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )< iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 ))
            {
            RefreshRates();
             Sleep ( 1000 );
         }
      OrderClose(OrderTicket(), 0.1 ,OrderClosePrice(), 0 ,Green);
         while (TimeSeconds( TimeCurrent ())!= 0 )
            {
             Sleep ( 1000 );
         }      
         continue ;
      }
if (total!= 0 )
   {
   L= 0 ;
   for (i= 1 ; i<= OrdersTotal (); i++)                                                       //--- if trades were open which werent initially closed
         {
         if ( OrderSelect (i- 1 ,SELECT_BY_POS)== true )
            {
             if (OrderSymbol()== Symbol ())
               {
               if ((OrderType()==OP_BUY)&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )< iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 )))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);                   //--- close them if now the position has change
               }
               if ((OrderType()==OP_SELL)&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )> iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 )))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);                   //--- same with sell
               }
               else 
                  {
                  L++;
               }
            }
            total=L;
         }
      }
   }
else 
   {
   Sleep ( 1000 );
} 
}
//----
return ;
}
//--------------------------------------------------------------+
 

Kodunuzun derinliklerine inmedim

Neden RefreshRates ve ardından 1 saniye uyu, piyasa hızla hareket ederken veriler güncel olmayacak!?

Çubuklar üzerinde değil, keneler üzerinden hesaplıyorsunuz, bu nedenle 1 tik, bir MA'nın diğerinin üzerinde/altında minimum miktarda hareket etmesiyle bir siparişi tetikleyebilir. Aşağıdaki tik (uykudan sonra) tersine dönerse, MA'lar tekrar kesişir ve sipariş kapatılır.

 

Buradaki fikir, koşullar yakın koşullar oluşana kadar beklerken (diğer bir deyişle sma'nın geçişi) while döngüsünde tutmaktır - kuşkusuz bunu yapmanın en iyi yolu değil, ancak hesaplama açısından en ucuz olanlardan biridir.

SMA'ların hızla birbirinin üstünde/altında hareket etmesi kodun sorunlarından biridir - ama şu anda üzerinde çalıştığım ikisi arasında 10 - 15 pip varken kapanmaya yol açması için hiçbir neden göremiyorum? koşullar, anında kapanışa atlamak yerine, while döngüsünün kontrolde kalması için kesinlikle tutuyor (benim varsayımım, while döngüsünün satın alma için göz ardı edildiği, ancak satış için değil - ve nedenini bilmiyorum)

 
jwmsb :

Buradaki fikir, koşullar yakın koşullar oluşana kadar beklerken (diğer bir deyişle sma'nın geçişi) while döngüsünde tutmaktır - kuşkusuz bunu yapmanın en iyi yolu değil, ancak hesaplama açısından en ucuz olanlardan biridir.

SMA'ların hızla birbirinin üstünde/altında hareket etmesi kodun sorunlarından biridir - ama şu anda üzerinde çalıştığım ikisi arasında 10 - 15 pip varken kapanmaya yol açması için hiçbir neden göremiyorum? koşullar, anında kapanışa atlamak yerine, kesinlikle while döngüsünün kontrol altında kalması için tutuyor (benim varsayımım, while döngüsünün satın alma için göz ardı edildiği, ancak satış için değil - ve nedenini bilmiyorum)


Yalnızca bir MA'nın diğerinin üstünde/altında olup olmadığını kontrol ediyorsanız, genellikle 10 ila 15 pip fark olduğundan şüpheliyim, 0.1 pip olabilir ve böylece bir sonraki tik kolayca tersine çevirebilir.

Bu sadece benim fikrim, ancak geçişlerle çalışırken, çok fazla zıt sinyalden kaçınmak için yalnızca kapalı çubuklarda hesaplamanın en iyisi olduğuna inanıyorum.

 

Ayrıca initinizde

 int i;
   total= 0 ;
   if ( OrdersTotal ()== 0 )
      {
      total= OrdersTotal ();
   }
   else 
      {
       for (i= 1 ; i<= OrdersTotal (); i++)                                                       //--- counter for any trades open on the pair
         {
         if ( OrderSelect (i- 1 ,SELECT_BY_POS)== true )
            {
             if (OrderSymbol()== Symbol ())
               {
               if ((OrderType()==OP_BUY)&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )< iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 )))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);                   //--- with an open buy if the conditions have reversed close on initiation
               }
               if ((OrderType()==OP_SELL)&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )> iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 )))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);                   //--- same with sell
               }
               else 
                  {
                  total++;                                                                   //--- if there are open trades yet to be completed add to tally (*)
               }
           }
       }
   }
}

else'iniz yalnızca son if için geçerlidir, bu nedenle EA bir açık satış emrini kapatmazsa toplam 1 artırılacaktır. Bunu neden isteyesiniz?

 
GumRai :


Yalnızca bir MA'nın diğerinin üstünde/altında olup olmadığını kontrol ediyorsanız, genellikle 10 ila 15 pip fark olduğundan şüpheliyim, 0.1 pip olabilir ve böylece bir sonraki tik kolayca tersine çevirebilir.

Bu sadece benim fikrim, ancak geçişlerle çalışırken, çok fazla zıt sinyalden kaçınmak için yalnızca kapalı çubuklarda hesaplamanın en iyisi olduğuna inanıyorum.


pip açısından benim açımdan bir yanlış hesaplamaydı! benim hatam! Ama mesele şu ki, ikisi arasında kesinlikle nefes alan bir boşluk var, bu yüzden satışı zorlamak için bir geçiş sinyali yok. Sleep(1000) öğesini while (TimeSecond(TimeCurrent)!=59) {Sleep(1000)} ile değiştirmek, geçişin yalnızca mum kapandığında test edilmesini sağlar mı?


Buy bölümündeki OrderClose'u çıkardım ve emir çalıştırıldıktan sonra hala açılıyor ve ardından bir sonraki pipte kapanıyor: s


Daha sonra OP_BUY ve OP_SELL'i değiştirdim ve 6SMA 21SMA'nın üzerindeyken satış beklendiği gibi devam ediyor - ne olacağını görmek için bir sonraki geçişi bekliyorum (şu an için bunu dakika zaman diliminde test ediyorum)

 

Değiştirilecek çok şey var..... üzerinde çalışılacak bir şey var

EA'nızın yarattığı işlemlerde hangi sihirli sayı var?

neden bunu harici bir girdi değişkeni olarak yapmıyorsunuz, böylece benzersiz bir sayı yapabilirsiniz ve diğer EA'ların işlemlerini kapatmıyor

 int init()
  {

//---- 
   int i;
   total= 0 ;
   if ( OrdersTotal ()== 0 )
      {
      total= OrdersTotal ();
   }

burada ne olur...

       for (i= 1 ; i<= OrdersTotal (); i++)                                                        //--- counter for any trades open on the pair

         {
         if ( OrderSelect (i- 1 ,SELECT_BY_POS)== true )
            {
             if (OrderSymbol()== Symbol ())
               {
               if ((OrderType()==OP_BUY)&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )< iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 )))
                  { 
                   OrderClose( OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);                   //--- with an open buy if the conditions have reversed close on initiation
               }
               if ((OrderType()==OP_SELL)&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )> iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 )))
                  {
                   OrderClose(O rderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);                   //--- same with sell
               }
               else 
                  {
                  total++;                                                                   //--- if there are open trades yet to be completed add to tally (*)
               }
           }
       }

İşlemleri kontrol etmeyi saymayın, şimdi yaptığınız gibi döngü içindeki işlemleri kapatırsanız başarısız olur

Neden çalışmanız gerektiğini ve nasıl geri sayım yaptığınızı görmek için buraya bir göz atın.

https://www.mql5.com/en/forum/139654

( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )< iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 )

bu koşul, ödediğiniz her işlemde yeni bir tik geldiğinde birkaç dakika içinde birkaç kez değişebilir.

durum her zaman bir kez değişmez .... tek bir çubukta

   while (AccountBalance()> 50 )                                                                                     //---- ensures an infinite loop for 1 trade a run 
   {                                                                                                               //---- (no infibuying!) (*) but always run
//---- 

her zaman koşan şey, uyumasına izin verirsin

ve normal yollarla tick bittiğinde ve yeni tick geldiğinde start() tekrar çağrılır

     while (TimeSeconds( TimeCurrent ())!= 0 )                                                                                       //---wait until a new minute
            {
             Sleep ( 1000 );
         }
         continue ;
      }

bu şekilde kodu yalnızca saniye 0 olduğunda çalıştırmak genellikle başarısız olur

çünkü bir saniyede yeni bir kene gelmemesi sık sık olabilir.

dakikanın ilk tik işareti 1 saniyede gelirse, yeni dakikayı beklemeniz ve sonraki dakika 0'da yeni tik işaretinin gelmesini ummanız gerekir.

Refres hRates() fonksiyonunu kontrol edin

4 ila 5 haneli komisyoncu gibi çalışmasını sağlamak gibi daha fazla şey var

dönüş kodları kontrol ediliyor....

0 değerinizi kayma neden gerekli ??? daha büyük olması için

 
deVries :

Değiştirilecek çok şey var..... üzerinde çalışılacak bir şey var

EA'nızın yarattığı işlemlerde hangi sihirli sayı var?

neden bunu harici bir girdi değişkeni olarak yapmıyorsunuz, böylece benzersiz bir sayı yapabilirsiniz ve diğer EA'ların işlemlerini kapatmıyor

burada ne olur...

İşlemleri kontrol etmeyi saymayın, şimdi yaptığınız gibi döngü içindeki işlemleri kapatırsanız başarısız olur

Neden çalışmanız gerektiğini ve nasıl geri sayım yaptığınızı görmek için buraya bir göz atın.

https://www.mql5.com/en/forum/139654

bu koşul, ödediğiniz her işlemde yeni bir tik geldiğinde birkaç dakika içinde birkaç kez değişebilir.

durum her zaman bir kez değişmez .... tek bir çubukta

her zaman koşan şey, uyumasına izin verirsin

ve normal yollarla tick bittiğinde ve yeni tick geldiğinde start() tekrar çağrılır

bu şekilde kodu yalnızca saniye 0 olduğunda çalıştırmak genellikle başarısız olur

çünkü bir saniyede yeni bir kene gelmemesi sık sık olabilir.

dakikanın ilk tik işareti 1 saniyede gelirse, yeni dakikayı beklemeniz ve sonraki dakika 0'da yeni tik işaretinin gelmesini ummanız gerekir.

Refres hRates() fonksiyonunu kontrol edin

4 ila 5 haneli komisyoncu gibi çalışmasını sağlamak gibi daha fazla şey var

dönüş kodları kontrol ediliyor....

0 değerinizi kayma neden gerekli ??? daha büyük olması için

yardımın için teşekkürler, şimdi değişiklikler yapıyorum ve nasıl gittiğini göreceğim! Benim adıma aptalca hatalarla birleşen aptalca hatalar! İlk etapta neden koştuğu neredeyse bir merak!
 

Bu yüzden, en basit kapasitelerde (yani çaprazlama = ters pozisyonlar) çalıştırmak için kodu geri çıkardım - bu, iki SMA yakınken çok sayıda alım/satım emrine neden oluyor, ancak bunun için endişelenmiyorum (şimdilik) ve iyi çalışıyor bir demo hesabında. Şu anda benimle ilgili olan şey, kodumu Strategy Tester üzerinde çalıştırırsam, ilk konumu doğru şekilde açar, ancak daha sonra zaman açısından ileriye doğru hareket edemez, bu nedenle SMA'lar asla kesişmez. Neyi yanlış yapıyorum? Baskı listem:

2013.10.22 23:41:26 2013.09.18 00:41 Test kullanıcısı: 1. sipariş kapatıldı

2013.10.22 23:41:26 2013.09.18 00:41 SMACode3 GBPJPY,M1: 0

...

2013.10.22 23:40:53 2013.09.18 00:41 SMACode3 GBPJPY,M1: 0

2013.10.22 23:40:52 2013.09.18 00:41 SMACode3 GBPJPY,M1: 0

2013.10.22 23:40:51 2013.09.18 00:41 SMACode3 GBPJPY,M1: 0

2013.10.22 23:56:18 SMACode3 GBPJPY,M1: başarıyla yüklendi

Kod:



 //+------------------------------------------------------------------+
//|                                                   SMA scripy.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"
extern int z= 1234 ;
int total;
//----

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   int i;
   total= 0 ;
   if ( OrdersTotal ()!= 0 )
      {
       for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)                                                     
         {
         if ( OrderSelect (i,SELECT_BY_POS))
            {
             if (OrderSymbol()== Symbol ())
               {
               if (OrderMagicNumber()==z) 
                  {
                   if ((OrderType()==OP_BUY)&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )< iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 )))
                     { 
                     OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);                  
                  }
                   if ((OrderType()==OP_SELL)&&( iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 )> iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 )))
                     {
                     OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);                  
                  }
                   else 
                     {
                     total++;                                                                 
                  }
               }
           }
       }
   }
}
//----
   return ;
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return ( 0 );
}
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int start()
   {
//----
   int i,L;
   while (AccountBalance()> 50 )                                                                                     
   {
   RefreshRates();
//-----
double SMA6= iMA ( Symbol (), 0 , 6 , 0 , MODE_SMA , PRICE_CLOSE , 0 );
double SMA21= iMA ( Symbol (), 0 , 21 , 0 , MODE_SMA , PRICE_CLOSE , 0 );
double RSI70= iRSI ( Symbol (), PERIOD_D1 , 14 , PRICE_CLOSE , 0 )< 70 ;
double RSI30= iRSI ( Symbol (), PERIOD_D1 , 14 , PRICE_CLOSE , 0 )> 30 ;                                                                                                            
//-----   
if (IsTesting()== true )
{
Sleep ( 60000 );
Print ( GetLastError ());
}
//----
   if (total== 0 )
      {
       if ((RSI70)&&(SMA6>SMA21))
         {                                                                                                                       
         OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 0 , 0 , 0 , "" ,z, 0 ,Red); 
         total+= 1 ;                                                       
         continue ;
      }
       if ((RSI30)&&(SMA6<SMA21))
         {
         OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 0 , 0 , 0 , "" ,z, 0 ,Blue);
         total+= 1 ;
         continue ;
      }  
   }
//---
if (total!= 0 )
   {
   L= 0 ;
   for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)                                                    
      {
       if ( OrderSelect (i,SELECT_BY_POS))
         {
         if (OrderSymbol()== Symbol ())
            {
             if (OrderMagicNumber()==z) 
               {
               if ((OrderType()==OP_BUY)&&(SMA6<SMA21))
                  { 
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);
                     total+=- 1 ;
                 return ;
               }
               if ((OrderType()==OP_SELL)&&(SMA6>SMA21))
                  {
                  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);                 
                     total+=- 1 ;
                   return ;
               }
               else 
                  {
                  L++;                                                                  
               }
            }
            total=L;
         }
      }
   }
}
//----
}
//----
return ;
}
//--------------------------------------------------------------+
 
jwmsb : Şimdi beni ilgilendiren şey, kodumu Strateji Test Cihazında çalıştırırsam, ilk konumu doğru şekilde açar, ancak daha sonra zaman açısından ileriye doğru hareket edemez,
  1.  int start(){
       while (AccountBalance()> 50 ){
          :
    Tabii ki değil. RTFM. Yalnızca baştan döndüğünüzde yeni bir onay işareti alırsınız.
  2.  if (IsTesting()== true ){
         Sleep ( 60000 );
         Print ( GetLastError ());
    }
    RTFM ve Test Cihazı sınırlamaları , test cihazında uyuyamazsınız
  3.          OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 0 , 0 , 0 , "" ,z, 0 ,Blue);
                      OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 0 ,Green);
    
    İşlev dönüş değerleri nelerdir? Onları nasıl kullanırım? - MQL4 forumu
 
RefreshRates, test cihazındaki herhangi bir değeri değiştirmez, bu nedenle çalışacak yeni değerleri olmadığı için bir süre döngüsüne takılıp kalırsınız.