OrderClose çalışmıyor - sayfa 5

 
Teşekkürler GumRai
 

Merhaba,


EA'yı birkaç farklı para birimi grafiğine ekliyorum. EA, koşulların karşılanması durumunda birçok siparişi tek bir grafikte açacaktır. Grafik başına yalnızca bir sipariş sağlamak için hangi kodlama?

 
chuale :

Merhaba,


EA'yı birkaç farklı para birimi grafiğine ekliyorum. EA, koşulların karşılanması durumunda birçok siparişi tek bir grafikte açacaktır. Grafik başına yalnızca bir sipariş sağlamak için hangi kodlama?


Açık siparişler arasında dolaşın ve sihirli sayı ve sembolü kontrol edin .

Zaten açık bir sipariş varsa, daha fazla açmayın.

not. Sorunuz konu başlığıyla hiçbir şekilde ilgili olmadığı için gerçekten yeni bir konu başlatmış olmalısınız :)

 
chuale :

Merhaba thrdel,

Zaman[0], çubuk 0'ın zamanını mı ifade ediyor? Zaman[1], Zaman [2] vs. var mı? Google'da denedim ama internette pek bilgi yok. Ayrıca, bu EA'yı iki döviz çiftine eklersem, bu OrderSelect'in yalnızca grafikteki emirleri mi yoksa terminaldeki tüm emirleri mi seçtiği anlamına gelir?




Zaman[0], mevcut çubuğun başladığı zamandır . Evet, Zaman[1] önceki çubuğun başladığı zamandır vb.

Aynı EA'yı birden fazla grafik üzerinde çalıştırmak istiyorsanız, farklı grafiklerde aynı sembole sahip olsanız bile "MagicMunber" değişkeninin her EA için farklı olduğundan emin olmanız gerekir.

O zaman EA'lar birbirlerinin emirlerine karışmaz.

OrderSelect() değeri grafikten değil sunucudan alır.

Hesabınız ve siparişlerinizle ilgili bilgiler sunucuda saklanır ve bu nedenle bilgisayarınızı kapattığınızda sipariş durdurma veya tp işleminiz devam eder.

 
chuale :

Merhaba thrdel,


"if(ticket<0)Print("Error OP_BUY order başarısız, error:"+GetLastError()) için "'number'dan 'string' postin forum.mq4 69 61'e örtülü dönüşüm" uyarı mesajını neden alıyorum? ;"?


Comment() ile bir çift değişken görüntülemek istiyorsanız veya Print() ile Yazdırmak istiyorsanız, DoubleToString() işleviyle onu dizeye dönüştürmeniz gerekir.

int değişkenleri için dönüşüm açıktır, bu nedenle bunu yapmak için IntToString () kullanmazsanız, çok açık olduğu için derlemeye ve çalışmaya devam edecektir.

 
chuale :

Merhaba,


EA'yı birkaç farklı para birimi grafiğine ekliyorum. EA, koşulların karşılanması durumunda birçok siparişi tek bir grafikte açacaktır. Grafik başına yalnızca bir sipariş sağlamak için hangi kodlama?


Merhaba Chuale,

Çalışmasını sağlamak için EA'nızda birkaç değişiklik yaptım.

MagicNumber, her grafikte farklı olduğundan emin olmanız gereken bir değişkendir!

Değişikliklerin neden ve nasıl çalıştığını açıklamamı isterseniz bana pm atın ve elimden geldiğince yardımcı olmaktan memnuniyet duyarım.

Kendiniz bazı testler yapabilir ve nasıl çalıştığını görebilirsiniz, USDJPY'de test ettim.

Max ve Min değişkeni, durumunuzdaki 1 ve -1 değerlerini değiştiriyor, böylece optimize edebilir ve diğer değerlerin daha iyi çalışıp çalışmadığını görebilirsiniz.


 if (bar2 <- 1 ) //changed to 
if(bar2 < Min
if (bar2 > 1) //changed to 
 if(bar2 > Max

Parametreleri nasıl optimize edeceğinizi biliyor musunuz?

Herhangi bir sorunuz varsa bana bildirin veya pm atın.

İşte kod:

 //+------------------------------------------------------------------+
//|                                                 chuale_test1.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link        "http://www.abc.com"
#property version    "1.00"
#property strict

extern double    TakeProfit= 150 ;
extern double    Lots= 0.1 ;
extern double    StopLoss= 300 ;
extern int       Max = 6 ;
extern int       Min = -9;
extern int       MagicNumber = 12345 ;
extern int       Slip  = 3 ;
double      bar1;
double      bar2;
double      bar3;
double      bar3max,bar3min;
int         myTrades,ticket;
datetime    previousTime;
int         xMultiply;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

//---
if ( Digits == 3 ) xMultiply= 100 ;
if ( Digits == 5 ) xMultiply= 10000 ;
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
 
   myTrades = CountTrades();
//
   bar1=( iClose ( Symbol (), 0 , 2 )- iClose ( Symbol (), 0 , 3 ))*xMultiply;
   bar2=( iClose ( Symbol (), 0 , 1 )- iClose ( Symbol (), 0 , 2 ))*xMultiply;
   bar3=( iClose ( Symbol (), 0 , 0 )- iClose ( Symbol (), 0 , 1 ))*xMultiply;
   //
   if (myTrades> 0 )
     {
       if (bar3<Min) CloseThisSymbolAll( "OP_BUY" );
       if (bar3>Max) CloseThisSymbolAll( "OP_SELL" );
     }
   //
   if ( Time [ 0 ]==previousTime) return ( 0 );    
   previousTime= Time [ 0 ];          
   //
   if (myTrades< 1 )
     {
       if (bar2> 1 )
        {
         ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 3 , Ask -StopLoss* Point , Ask +TakeProfit* Point , "Chua EA" ,MagicNumber, 0 ,Green);
         if (ticket< 0 ) Print ( "Error OP_BUY order failed. error : " +GetLastError()); 
         return ( 0 );
        }
       if (bar2<- 1 )
        {
         ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 3 , Bid +StopLoss* Point , Bid +-TakeProfit* Point , "Chua EA" ,MagicNumber, 0 ,Red);
         if (ticket< 0 ) Print ( "Error OP_SELL order failed. error : " +GetLastError());
         return ( 0 ); 
        }
     }
   return ( 0 );
  }
//========================================================================
int CountTrades()
{
int count= 0 ;
int trade;
for (trade= OrdersTotal ()- 1 ;trade>= 0 ;trade--)
   {
   OrderSelect (trade, SELECT_BY_POS , MODE_TRADES );
   if ( OrderSymbol ()!= Symbol () || OrderMagicNumber () != MagicNumber)
   continue ;
   if ( OrderSymbol ()== Symbol () && OrderMagicNumber () == MagicNumber)
   if ( OrderType ()== OP_SELL || OrderType ()== OP_BUY )
   count++;
   }
return (count);
}
//========================================================================
void CloseThisSymbolAll( string direction)
  {
   string dir = direction;
   int trade;
   for (trade= OrdersTotal ();trade>= 0 ;trade--)
     {
       OrderSelect (trade, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()!= Symbol ()) continue ;
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber)
        {
         if ( OrderType ()== OP_BUY && dir == "OP_BUY" ) OrderClose ( OrderTicket (), OrderLots (), Bid ,Slip,Blue);
         if ( OrderType ()== OP_SELL && dir == "OP_SELL" ) OrderClose ( OrderTicket (), OrderLots (), Ask ,Slip,Red);
        }
     }
  }
//========================================================================
 

Merhaba thrdel,


Çok teşekkürler. çok kibar ve yardımseversin. İlk önce kodlamanızı gözden geçireceğim. Tekrar teşekkürler.

 

Merhaba Thrdel,

Bu, hangisinin en uygun değer olduğunu belirlemek için her geriye dönük test için farklı Maks ve Min değerleriyle denemem gerektiği anlamına mı geliyor?

teşekkürler

Neden: