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

 
Fernando Carreiro :

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!

Şimdiye kadar kodumla bana yardımcı olduğunuz ve zaman ayırdığınız için çok teşekkür ederim, gerekli ayarlamaları yapmaya çalışacağım.
 
Keith Watford :

    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.
Bunu daha önce yazarken, orada bilet değişkeni yoktu, sadece oraya koymanın kodun işleyişi üzerinde bir etkisi olup olmayacağını görüyordum ve girdiniz ve zamanınız için teşekkür ederim.
 
Matt_Townsend :
Şimdiye kadar kodumla bana yardımcı olduğunuz ve zaman ayırdığınız için çok teşekkür ederim, gerekli ayarlamaları yapmaya çalışacağım.

EA'nızda çok fazla mantık probleminiz olduğu için, MetaQuotes'un örnek koduna, yani " Moving Average.mq4" ve/veya "MACD Sample.mq4"e bir göz atmanızı ve bunu anlayana kadar bunun üzerine inşa etmenizi öneririm. Bir EA'nın nasıl çalıştığının temel ilkeleri.

Dosyaları ekledim, ancak onları "MQL4\Experts" klasörünüzde bulacaksınız.

Dosyalar:
 
Fernando Carreiro :

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.

Düzenlemenizi fark ettikten sonra .....

Her zaman yeni bir onay işareti olduğunda OrderSelect() öğesinin kaybolacağını varsaymıştım.

Bu yüzden kontrol ettim ve bir sipariş seçildiğinde sonraki yeni onaylarda bile seçili kaldığını gördüm.

Her gün yeni bir şey öğrenin :)

 
Keith Watford : Düzenlemenizi fark ettikten sonra.....

Her zaman yeni bir onay işareti olduğunda OrderSelect() öğesinin kaybolacağını varsaymıştım.

Bu yüzden kontrol ettim ve bir sipariş seçildiğinde sonraki yeni onaylarda bile seçili kaldığını gördüm.

Her gün yeni bir şey öğrenin :)

Ancak pratikte, bu ayrıntılar zaman içinde donduğu için çok az kullanışlıdır, bu nedenle OrderClosePrice() gibi şeyler siz yeniden seçene kadar güncellenmeyecektir!
 
OrderSelect döngünüzde OrdersTotal'ı doğrudan ve/veya Magic sayı filtrelemesi olmadan kullanmak, kodunuzun her EA ile uyumlu olmadığı anlamına gelir (kendisi diğer grafiklerde ve manuel ticarette dahil). Sembol, başka bir ayrı grafiğe başka bir para birimi eklendiğinde Ordersymbol ile eşit değildir. - MQL4 forumu
 
Fernando Carreiro :

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!


     for ( int i= 0 ;i< OrdersTotal ();i++)
      {
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false ) break ;
         if ( OrderMagicNumber ()==MagicNumber && OrderSymbol ()== Symbol ()) continue ;
         //---Check Order Type
         if ( OrderType ()== OP_BUY )
         {
           if (fastma < slowma)
           {
             if ( OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE ))
             Print ( "Order Closed : " , OrderClosePrice ());
             return ( 0 );
           }
           else
             Print ( "Error : " , GetLastError ());
             return ( 0 );
           break ;
         }
       if ( OrderType ()== OP_SELL )
        {
           if (fastma > slowma)
          {
             if ( OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE ))
             Print ( "Order Closed : " , OrderClosePrice ());
             return ( 0 );
            
          }
           else
               Print ( "Error : " , GetLastError ());
               return ( 0 );
           break ;
        }

      } 

İşte OrderClose bölümü, artık geçersiz bilet hatası almıyorum, ancak şimdi geçersiz fiyat alıyorum

İşte doğrudan günlükten

2016.12.09 10:47:10.243 Basit Hareketli Ortalama Geçiş Stratejisi EURUSDi,H1: OrderClose işlevi için geçersiz fiyat 1.05454000


 
Matt_Townsend :

           {
             if ( OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE ))
             Print ( "Order Closed : " , OrderClosePrice ());
             return ( 0 );
           }

...

         {

             if ( OrderClose ( OrderTicket (),Lots, Ask , 10 , clrNONE ))
             Print ( "Order Closed : " , OrderClosePrice ());
             return ( 0 );

 

İşte OrderClose bölümü, artık geçersiz bilet hatası almıyorum, ancak şimdi geçersiz fiyat alıyorum

İşte doğrudan günlükten

2016.12.09 10:47:10.243 Basit Hareketli Ortalama Geçiş Stratejisi EURUSDi,H1: OrderClose işlevi için geçersiz fiyat 1.05454000


Kapatırken Bid/Ask kullanmayın, OrderClosePrice() kullanın. Otomatik olarak iyi fiyat olacaktır.
 
Alain Verleyen :
Kapatırken Bid/Ask kullanmayın, OrderClosePrice() kullanın. Otomatik olarak iyi fiyat olacaktır.

Bunu OrderClose işlevinde değiştirmeli miyim? ve öyleyse, altındaki yazdırma işlevindeki OrderClosePrice öğesini kaldırmalı mıyım?

Düzenlemek:

Bunu az önce yaptım, ama şimdi hiçbir pozisyonu açık tutmayacak. Sadece pozisyonları açar ve kapatır, ancak şu anda birden fazla çift üzerinde çalışırken herhangi bir sorun yaşamamaktadır.

 

         if ( OrderType ()== OP_BUY )
         {
           if (fastma < slowma)
           {
             if ( OrderClose ( OrderTicket (),Lots, Bid , 10 , clrNONE ))
             Print ( "Order Closed : " , OrderClosePrice ());
             return ( 0 );
           }
           else
             Print ( "Error : " , GetLastError ());
             return ( 0 );
           break ;
         }

Döngüyü tamamlamanız gerektiğinden, dönüşler veya molalar için herhangi bir işlem yoktur.

Ayrıca, hata yazdırmanız şunlara bağlıdır:


           if (fastma < slowma)


yanlış olmak, OrderClose() işlevinin başarısız olup olmamasıyla ilgili değildir



   if(OrderType()==OP_BUY)
     {
      if(fastma<slowma)
        {
         if(OrderClose(OrderTicket(),Lots, OrderClosePrice(),10,clrNONE))
            Print("Order Closed : ",OrderClosePrice());
         else
            Print("Error : ",GetLastError())
        }
     }


Neden: