OrderClose çalışmıyor - sayfa 2

 
chuale :

Herkese selam,


Şimdi OrderClose'a OrderTicket() ve OrderLots() kullanmadan bilet ve Lot ekliyorum ama o da siparişi kapatmıyor. Lütfen yardım et.



Yanlış yaptığın birkaç şey var. Bu EA'nın M1 zaman diliminde JPY çiftleri üzerinde çalışmasını istediğinizi varsayıyorum. Yalnızca yeni çubukta sipariş vermek ve yalnızca yeni çubukta siparişleri kapatmak mı yoksa yeni çubuktan giriş yapıp koşullar sağlandığında çıkmak mı istiyorsunuz? İşte düşündüğüm şey:

Önce OrdersTotal() ile siparişleri sayarsınız.

Ardından değişkenlerinizi hesaplayın

Piyasada emirler varsa, kapatılmaları gerekip gerekmediğini kontrol edin .

Piyasada herhangi bir emir yoksa, giriş koşullarının karşılanıp karşılanmadığını kontrol edin.

Herhangi bir sorunuz olursa bana bildirin.

 //+------------------------------------------------------------------+
//|                                                 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= 500 ;
extern double    Lots= 0.1 ;
extern double    StopLoss= 300 ;

double      bar1;
double      bar2;
double      bar3;
int         total,ticket;
datetime    previousTime;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

//---

//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
   total= OrdersTotal ();
/*
  counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
  IndicatorCounted() is actually for indicators not EA
  
   */

   bar1=( iClose ( Symbol (), PERIOD_M1 , 2 )- iClose ( Symbol (), PERIOD_M1 , 3 ))* 100 ;
   bar2=( iClose ( Symbol (), PERIOD_M1 , 1 )- iClose ( Symbol (), PERIOD_M1 , 2 ))* 100 ;
   bar3=( iClose ( Symbol (), PERIOD_M1 , 0 )- iClose ( Symbol (), PERIOD_M1 , 1 ))* 100 ;
   /*
   Comment("Bar1 = "+DoubleToString(bar1,Digits)+"\n"+
           "Bar2 = "+DoubleToString(bar2,Digits)+"\n"+
           "Bar3 = "+DoubleToString(bar3,Digits)+"\n"
           );
   */
//Close any orders if conditions are met
   if (total> 0 )
     {
       if (bar3<- 1 ) OrderClose (ticket, OrderLots (), Bid , 3 ,Green);
       if (bar3> 1 ) OrderClose (ticket, OrderLots (), Ask , 3 ,Red);
     }
   if ( Time [ 0 ]==previousTime) return ( 0 );         //EA will not go past this point unless it is a new bar
   previousTime= Time [ 0 ];                         // If it was a new bar , it's old now but continue to the end
// if no order open and new bar
   if (total< 1 )
     {
       if (bar2> 1 ) // if condition met
        {
         //place buy order
         ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 3 , Ask -StopLoss* Point , Ask +TakeProfit* Point , "Chua EA" , 12345 , 0 ,Green);
         if (ticket< 0 ) Print ( "Error OP_BUY order failed. error : " +GetLastError()); // if returned ticket is -1 OrderSent failed
         return ( 0 );
        }
       // or if conditions for sell met
       if (bar2<- 1 )
        {
         ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 3 , Bid +StopLoss* Point , Bid +-TakeProfit* Point , "Chua EA" , 12345 , 0 ,Red);
         if (ticket< 0 ) Print ( "Error OP_SELL order failed. error : " +GetLastError());
         return ( 0 ); //return to start
        }
     }
   return ( 0 );
  }
//+------------------------------------------------------------------+
Dosyalar:
 
GumRai :


bilet yerel bir değişkendir, bu nedenle bir sonraki onay işareti aynı değere sahip olmayacaktır.

Globalscope yapmak için işlevlerin dışına koyun

 
   total= OrdersTotal ();

?????? ..... Faydasız

hangi ticaretlere sahip olduğunuzu doğru bir şekilde kontrol edin

doğru sembolü ve doğru sihirli sayıyı arayın

bir orderloop ile kapatmak için doğru ticareti seçebilirsiniz

 OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 3 ,Green);

.

senin yönteminle

PC'nizi yeniden başlattığınız anda bilet değerini kaybedersiniz

   if (total> 0 )
     {
       if (bar3<- 1 ) OrderClose (ticket, OrderLots (), Bid , 3 ,Green);
       if (bar3> 1 ) OrderClose (ticket, OrderLots (), Ask , 3 ,Red);
     }

başarısız .....

 
chuale :

Neden benim mesajımdan alıntı yaptın ve sonra yorum yapmadın?
 
evet şimdi kapanabilir teşekkürler GumRai. şimdi bilet numarasının tiklere göre değiştiğini biliyorum, peki açık siparişin bilet numarası nasıl elde edilir? OrderTicket()'i kullanmak zorundayım, değil mi?
 
chuale :
evet şimdi kapanabilir teşekkürler GumRai. şimdi bilet numarasının tiklere göre değiştiğini biliyorum, peki açık siparişin bilet numarası nasıl elde edilir? OrderTicket()'i kullanmak zorundayım, değil mi?

OrderTicket() kullanıyorsanız, o zaman önce OrderSelect() kullandığınızdan emin olun ve ayrıca kapatmak istediğiniz işlem olduğundan emin olun.
 
chuale :
evet şimdi kapanabilir teşekkürler GumRai. şimdi bilet numarasının tiklere göre değiştiğini biliyorum, peki açık siparişin bilet numarası nasıl elde edilir? OrderTicket()'i kullanmak zorundayım, değil mi?


Merhaba Chuale,

İşte siparişlerinizi seçmenin ve siparişleri sembole ve Sihirli numaraya göre kapatmanın kolay bir yolu:

 //+------------------------------------------------------------------+
//|                                                 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= 500 ;
extern double    Lots= 0.1 ;
extern double    StopLoss= 300 ;
extern int       MagicNumber = 12345 ;
extern int       Slip  = 3 ;
double      bar1;
double      bar2;
double      bar3;
int         myTrades,ticket;
datetime    previousTime;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

//---

//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
   myTrades = CountTrades(); //Count trades function counts this EA trades only
//
   bar1=( iClose ( Symbol (), PERIOD_M1 , 2 )- iClose ( Symbol (), PERIOD_M1 , 3 ))* 100 ;
   bar2=( iClose ( Symbol (), PERIOD_M1 , 1 )- iClose ( Symbol (), PERIOD_M1 , 2 ))* 100 ;
   bar3=( iClose ( Symbol (), PERIOD_M1 , 0 )- iClose ( Symbol (), PERIOD_M1 , 1 ))* 100 ;

//Close any orders if conditions are met
   if (myTrades> 0 )
     {
       if (bar3<- 1 ) CloseThisSymbolAll();
       if (bar3> 1 ) CloseThisSymbolAll();
     }
   if ( Time [ 0 ]==previousTime) return ( 0 );         //EA will not go past this point unless it is a new bar
   previousTime= Time [ 0 ];                         // If it was a new bar , it's old now but continue to the end
// if no order open and new bar
   if (myTrades< 1 )
     {
       if (bar2> 1 ) // if condition met
        {
         //place buy order
         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()); // if returned ticket is -1 OrderSent failed
         return ( 0 );
        }
       // or if conditions for sell met
       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 to start
        }
     }
   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()
  {
   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 ) OrderClose ( OrderTicket (), OrderLots (), Bid ,Slip,Blue);
         if ( OrderType ()== OP_SELL ) OrderClose ( OrderTicket (), OrderLots (), Ask ,Slip,Red);
        }
       //Sleep(1000);
     }
  }
//========================================================================
 
chuale :
evet şimdi kapanabilir teşekkürler GumRai. şimdi bilet numarasının tiklere göre değiştiğini biliyorum, peki açık siparişin bilet numarası nasıl elde edilir? OrderTicket()'i kullanmak zorundayım, değil mi?


Tekrar merhaba Chuale,

USDJPY'de fikrinizle uğraşıyordum ve bazı değişiklikler olmadan olumlu sonuçlar alamadım. M1 grafiğinde USDJPY'deki sonuçlarımdan bir örnek:

M1&#39;de USDJPY

Farklı bir çiftte kullanmayı düşündünüz mü?

bar3 < -1 veya bar3 > 1'de çıkış, olumlu sonuçlar döndürmedi.

 
deVries :

?????? ..... Faydasız

hangi ticaretlere sahip olduğunuzu doğru bir şekilde kontrol edin

doğru sembolü ve doğru sihirli sayıyı arayın

bir orderloop ile kapatmak için doğru ticareti seçebilirsiniz

.

senin yönteminle

PC'nizi yeniden başlattığınız anda bilet değerini kaybedersiniz

başarısız .....


Bunun bir emri kapatmanın en iyi yolu olmadığını söylüyorsanız, katılıyorum, ancak adam OrderSelect'i kullanmak istemiyorsa (veya nasıl olduğunu bilmiyorsa) ve piyasada herhangi bir açık emir bırakmıyorsa çalışır.

Burada birbirimize yardım etmeye çalışıyoruz ve cevabınız biraz yardımcı olmadı, ona Order Select işlevini nasıl kullanacağını göstermediniz ve yorumunuz nedeniyle EA'sı şimdi daha iyi çalışmıyor.

Bir daha yardım etmek istediğinde, doğru şekilde yap, oraya doğru kodu koy ki başkaları gerçekten bir şeyler öğrenebilsin.

 
thrdel :


Yanlış yaptığın birkaç şey var. Bu EA'nın M1 zaman diliminde JPY çiftleri üzerinde çalışmasını istediğinizi varsayıyorum. Yalnızca yeni çubukta sipariş vermek ve yalnızca yeni çubukta siparişleri kapatmak mı yoksa yeni çubuktan giriş yapıp koşullar sağlandığında çıkmak mı istiyorsunuz? İşte düşündüğüm şey:

Önce OrdersTotal() ile siparişleri sayarsınız.

Ardından değişkenlerinizi hesaplayın

Piyasada emirler varsa, kapatılmaları gerekip gerekmediğini kontrol edin.

Piyasada emir yoksa, giriş koşullarının karşılanıp karşılanmadığını kontrol edin.

Herhangi bir sorunuz varsa bana bildirin.