EA birden fazla çiftte çalışmayacak, yardıma ihtiyacınız var

 
mql4 kodlamada çok yeniyim ve ilk EA'mı tamamladım. Şu anki tek sorunum, birden fazla çiftte işlem açmayı sağlayamam. Terminaldeki günlüğün yanındaki EA bölümünde, EA bir çift üzerinde işlemleri açıp kapatsa bile, orderclose işlevi için geçersiz bilet olan bir hata akışı gönderir. Biri lütfen yardım edebilir mi?
 
Matt_Townsend :
mql4 kodlamada çok yeniyim ve ilk EA'mı tamamladım. Şu anki tek sorunum, birden fazla çiftte işlem açmayı sağlayamam. Terminalin günlüğün yanındaki EA bölümünde, EA bir çift üzerinde işlemleri açıp kapatsa bile, bir hata akışı, sipariş kapatma işlevi için geçersiz bilet gönderir. Biri lütfen yardım edebilir mi?

Kodunuzu veya hata günlüğünüzü göstermediğinizi nasıl bilmemizi beklersiniz?

Biz akıl okuyucu değiliz! Eğer yardımımızı istiyorsanız, kodunuzu ve verdiği hataları (sonuçları günlükte) göstermeniz gerekecektir. Kodunuza baktığımızda hangi döviz çiftlerini ve zaman dilimlerini test ettiğinizi bilmek de yardımcı olacaktır.

Ayrıca, MetaTrader 4'te Strateji Test Cihazında bir seferde yalnızca tek bir para birimini test edebileceğinizi lütfen unutmayın. EA'nız tek bir grafikten aynı anda birden fazla para birimi ticareti yapıyorsa, bunu Strateji Test Cihazında test edemezsiniz - yalnızca canlı bir Demo veya gerçek hesapta!

 
Matt_Townsend : EA bir çiftte işlemleri açıp kapatsa da gayet iyi.
Bu yüzden tavsiye ederim
Tek bir EA'da birden fazla para birimi ticareti yapmayın
 
Matt_Townsend : İşte kodum ve canlı bir demoda sorun yaşıyorum, sorunu çözmek için birden fazla terminal kullanıp kullanamayacağımı bile denedim. Şimdiye kadarki geri bildiriminiz için teşekkür ederiz.

Lütfen gönderinizi düzenleyin ve kodunuzu eklemek için SRC düğmesini kullanın! Okunması zor olduğu için standart metin olarak kopyalama/geçirme yapmayın. Nasıl yapılması gerektiğini diğer konulardan görebileceğinize eminim. Lütfen kodunuzu göndermek için SRC düğmesini kullanın.

EDIT: Daha önce istendiği gibi - ... Hangi döviz çiftlerini ve zaman dilimlerini test ettiğinizi bilmek de yardımcı olacaktır ...

EDIT2: Daha önce istendiği gibi - ... ve verdiği hataların yanı sıra (logdaki sonuçlar) ...

 
Fernando Carreiro :
Lütfen gönderinizi düzenleyin ve kodunuzu eklemek için SRC düğmesini kullanın! Okunması zor olduğu için standart metin olarak kopyalama/geçirme yapmayın. Nasıl yapılması gerektiğini diğer konulardan görebileceğinize eminim. Lütfen kodunuzu göndermek için SRC düğmesini kullanın.
//+------------------------------------------------------------------+
//|                     Simple Moving Average Crossover Strategy.mq4 |
//|                                                 Matthew Townsend |
//+------------------------------------------------------------------+
#property version    "1.05"
#property strict
//---

//---Inputs
extern    double Lots         = 0.01 ;
extern    int     FastMA       = 5 ;
input    int     FastMAMode   = MODE_EMA ;
extern    int     SlowMA       = 8 ;
input    int     SlowMAMode   = MODE_SMA ;

//+----------------------------------------+
//|undesirables                            |
//+----------------------------------------+
int init()
{
   //----
   //----
   return ( 0 );
}

int deinit()
{
   //----
   //----
   return ( 0 );
}
//+---------------------------------------------+
//|System start                                 |
//+---------------------------------------------+
int start()
{


     double fastma, slowma;
     int     ticket, total;
     //---define Ma's
    
    fastma = iMA ( NULL , 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , 0 );
    slowma = iMA ( NULL , 0 , 8 , 0 , MODE_SMA , PRICE_CLOSE , 0 );
    
    total = OrdersTotal ();
     //---Start operations
    
     if (total < 1 )
    {
       if (fastma > slowma)
       {
         ticket = OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 10 , 0 , 0 , "" , 0 , 0 ,Blue);
         if (ticket > 0 )
         {
             if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
             Print ( "Buy order opened : " , OrderOpenPrice ());
         }
         else
           Print ( "Error opening order : " , GetLastError ());
           return ( 0 );
       }
       if (fastma < slowma)
       {
         ticket = OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 10 , 0 , 0 , "" , 0 , 0 ,Red);
         if (ticket > 0 )
         {
             if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
             Print ( "Sell order opened : " , OrderOpenPrice ());
         }
         else
           Print ( "Error opening order : " , GetLastError ());
           return ( 0 );
       }
       return ( 0 );
    }
     bool ans;
    
        
         if ( OrderType ()== OP_BUY )
         {
           while (fastma < slowma)
           {
             ans = OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE );
             if (ticket < 1 )
             {      
                 if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
                 Print ( "Buy order closed : " , OrderClosePrice ());    
             }    
             else
               Print ( "Error closing order : " , GetLastError ());
               return ( 0 );
           }
         }
       if ( OrderType ()== OP_SELL )
        {
           while (fastma > slowma)
          {
             ans = OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE );
             if (ticket < 1 )
             {
               if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))
               Print ( "Sell order closed : " , OrderClosePrice ());
              
             }
             else
               Print ( "Error closing order : " , GetLastError ());
               return ( 0 );
          }
          
        }
    
     return ( 0 );
}

//+-----------------------------------------------------------------------------------+
 
Fernando Carreiro :
Konuyu çok uzatmamak için bir önceki mesajınızı DÜZENLEMENİZİ , yenisini eklememenizi rica ettim!
Üzgünüm ben de bu forumda çok yeniyim, 2 mesajı silebilir miyim?
 
Matt_Townsend :
1 saatlik zaman diliminde, EURUSD ve 1hr GBPUSD'de test yapıyordum
Aşağıdaki kod için zaten iki derleyici uyarısı var:
...
ans = OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE );
...
ans = OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE );
...

Kapatma işleminin sonucunu doğru bir şekilde kontrol etmiyorsunuz.

Mantıksal olarak EA'nızda birkaç sorun var, ancak şu anda olduğu gibi, Strateji Test Cihazında benim tarafımda hatasız çalışıyor, bu yüzden lütfen aldığınız hataların listesini sağlayın!

 
Fernando Carreiro :
Aşağıdaki kod için zaten iki derleyici uyarısı var:
...
ans = OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE );
...
ans = OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE );
...

Kapatma işleminin sonucunu doğru bir şekilde kontrol etmiyorsunuz.

Mantıksal olarak EA'nızda birkaç sorun var, ancak şu anda olduğu gibi, benim tarafımda hatasız çalışıyor, bu yüzden lütfen aldığınız hataların listesini sağlayın!

EA'dan aldığım tek hata orderclose işlevi için geçersiz bilet, yanında bir sayı var, gerçek günlüğü göstermek istiyorum, ancak EA çalışırken ikinci grafikte hiçbir şey yapmıyor. çünkü normalde hemen bir ticaret açmaya çalışırdı. Günlük hatayla dolmaya başlarsa, size gerçek günlüğü nasıl gösteririm?
 
Matt_Townsend :
EA'dan aldığım tek hata orderclose işlevi için geçersiz bilet, yanında bir sayı var, gerçek günlüğü göstermek istiyorum, ancak EA çalışırken ikinci grafikte hiçbir şey yapmıyor, çünkü çünkü normalde hemen bir ticaret açmaya çalışırdı. Günlük hatayla dolmaya başlarsa, size gerçek günlüğü nasıl gösteririm?

Click, Ctrl-Click veya Shift-Click (standart Windows işlemi) ile söz konusu satırları seçin, ardından seçimi Sağ Tıklayın ve "Kopyala"yı seçin!

EDIT: Kodla ilgili olarak, OrderSelect kullanıyorsunuz, ancak her zaman her zaman çalıştığını varsayıyorsunuz. Ve çalışmadığında, kapanışınızda OrderTicket() gibi Sipariş ayrıntıları işlevlerini kullanmaya devam edersiniz; bu, ilk OrderSelect() de başarısız olursa başarısız olabilir. Belirttiğim gibi, kodunuzda birçok mantık probleminiz var!

 

    bool ans;

   

         //You do not select an order

         if(OrderType()==OP_BUY)
         {
           while(fastma < slowma)                                 //Use if not while
           {
             ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
             if(ticket < 1)                                        //ticket is a local variable and has not been assigned a value
             {     
                if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                Print("Buy order closed : ", OrderClosePrice());   
             }   
             else
               Print("Error closing order : ", GetLastError());
               return(0);
           }
         }
Kodun kapanış sırası bölümünü mantıklı olması için yeniden yazın, burada değişken bileti hiç kullanmamalısınız.
 
Matt_Townsend :
EA'dan aldığım tek hata orderclose işlevi için geçersiz bilet, yanında bir sayı var, gerçek günlüğü göstermek istiyorum, ancak EA çalışırken ikinci grafikte hiçbir şey yapmıyor. çünkü normalde hemen bir ticaret açmaya çalışırdı. Günlük hatayla dolmaya başlarsa, size gerçek günlüğü nasıl gösteririm?

EA'nızın birden fazla döviz çifti veya zaman diliminde kullanımıyla ilgili çok önemli bir not daha.

Kodunuz, "Sihirli Numara" seçimini kullanmaz ve Geçmiş'teki açık siparişleri kontrol ederken kullanılan Sembolü (veya "Sihirli numara") kontrol etmez. Yani özünde EA'nız ne kendisiyle ne de diğer EA'larla düzgün çalışmayacaktır.

Olduğu gibi, bu EA'yı başka hiçbir EA çalışmadan, hatta başka bir grafikte bile kendi başına kullanabilirsiniz!