OrderClose çalışmıyor

 

Merhaba,

EA'm için aşağıdaki kodlamaya sahibim, lütfen OrderClose'un neden tetiklenmediğine yardım edin? OrderSelect() kullanmam gerekir mi? OrderSelect()'in amacı nedir? Teşekkür ederim.

 //+------------------------------------------------------------------+
//|                                                       chuale.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.abc.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= 280 ;

double      bar1;
double      bar2;
double      bar3;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
//---
   
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
   int ticket;
   int total= OrdersTotal ();
   int     counted_bars= IndicatorCounted ();
   if (counted_bars> 0 ) counted_bars--;
   {
      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 ;
       if (bar1+bar2> 1 )
      {
       if (total< 1 )
      ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 3 , Ask -StopLoss* Point , Ask +TakeProfit* Point , "Chua EA" , 12345 , 0 ,Green);
       if (bar3<- 1 ) OrderClose ( OrderTicket (), OrderLots (), Bid , 3 ,Green);
      }
       if (bar1+bar2<- 1 )
      {
       if (total< 1 )
      ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 3 , Bid +StopLoss* Point , Bid +-TakeProfit* Point , "Chua EA" , 12345 , 0 ,Red);
       if (bar3> 1 )   OrderClose ( OrderTicket (), OrderLots (), Ask , 3 ,Red);
      }
   }
   
   return ( 0 );
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
 
OrderSelect 4 OrderClose kullanmak zorunda değilsiniz ama OrderTicket() , OrderLots() için 2 tane var
 
qjol :
OrderSelect 4 OrderClose kullanmak zorunda değilsiniz ama OrderTicket() , OrderLots() için 2 tane var


Sevgili qjol,

Ne demek istediğinizi tam olarak anlamadım, lütfen açıklar mısınız? Teşekkür ederim


 

senin kodunda

 if (bar3> 1 )   OrderClose ( OrderTicket (), OrderLots (), Ask , 3 ,Red);

OrderTicket() & OrderLots() & 4 bu fonksiyonları kullanarak OrderSelect()' i kullanmalısınız

Belgelerde görebileceğiniz gibi :

Not

Sipariş, bilet numarasına göre seçilirse havuz parametresi yok sayılır. Bilet numarası benzersiz bir sipariş tanımlayıcıdır.

Siparişin hangi listeden seçildiğini öğrenmek için kapanış zamanı analiz edilmelidir. Emir kapanış süresi 0 ise emir açık veya beklemededir ve terminal açık pozisyonlar listesinden alınır.

Açık bir pozisyon, bekleyen bir emirden emir tipine göre ayırt edilebilir. Emir kapanış zamanı 0'a eşit değilse, emir kapalı bir emirdir veya silinmiş bir bekleyen emirdir ve terminal geçmişinden seçilmiştir. Ayrıca sipariş türlerine göre birbirlerinden farklıdırlar.

OrderSelect() işlevi, sipariş verilerini program ortamına ve OrderClosePrice() , OrderCloseTime() , OrderComment() , OrderCommission() , OrderExpiration() , OrderLots() , OrderMagicNumber() , OrderOpenPrice() , OrderOpenTime( çağrılarına kopyalar. ) , OrderPrint() , OrderProfit() , OrderStopLoss() , OrderSwap() , OrderSymbol() , OrderTakeProfit() , OrderTicket() , OrderType() işlevleri daha önce kopyalanan verileri döndürür. Bu, bazı durumlarda sipariş detaylarının (açılış fiyatı, SL/TP seviyeleri veya son kullanma tarihi) değişebileceği ve verilerin güncel olmayacağı anlamına gelir. Sipariş verilerini istemeden önce OrderSelect() işlevini çağırmanız şiddetle tavsiye edilir.

 

Yani gerçek bilet numarasını ve Lot'u kullanırsam, OrderSelect'i kullanmama gerek kalmaz, değil mi? Bir seferde sadece bir emir açıyorum, açık emrin bilet numarasını nasıl alacağımı öğrenebilir miyim?

Tekrar teşekkürler

 
chuale :

Yani gerçek bilet numarasını ve Lot'u kullanırsam, OrderSelect'i kullanmaya gerek kalmaz, değil mi? Bir seferde sadece bir emir açıyorum, açık emrin bilet numarasını nasıl alacağımı öğrenebilir miyim?

Tekrar teşekkürler

OrderSend() işlevi, başarılı olursa Bilet numarasını döndürür. MQL'nin nasıl kullanılacağını daha iyi anlamak için bu sitedeki Kitap bölümünü baştan sona okumanızı ve hangi parametrelerin kullanılacağını ve dönüş değerlerinin ne olduğunu daha iyi anlamak için kullandığınız her işlev için başvuru belgelerine bakmanızı öneririm.

 

Sayın Arkadaşlar,

OrderSelect()'i ekledim, ancak OrderClose hala çalışmıyor , lütfen yardım edin. Çok teşekkürler


 //+------------------------------------------------------------------+
//|                                                       chuale.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.abc.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;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
//---
   
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
   int ticket;
   int total= OrdersTotal ();
   int     counted_bars= IndicatorCounted ();
   if (counted_bars> 0 ) counted_bars--;
   {
      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 ;
       if (bar2> 1 )
      {
       if (total< 1 )
      ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 3 , Ask -StopLoss* Point , Ask +TakeProfit* Point , "Chua EA" , 12345 , 0 ,Green);
       OrderSelect ( 1 , SELECT_BY_POS );
       if (bar3 <- 1 ) OrderClose ( OrderTicket (),Lots, Bid , 3 ,Green);
      }
       if (bar2<- 1 )
      {
       if (total< 1 )
      ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 3 , Bid +StopLoss* Point , Bid +-TakeProfit* Point , "Chua EA" , 12345 , 0 ,Red);
       if ( bar3> 1 )   OrderClose ( OrderTicket (), Lots, Ask , 3 ,Red);
      }
   }
   
   return ( 0 );
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
 
sana hayır olduğunu kim söyledi siparişin 1 mi?
 
Bir seferde yalnızca bir açık siparişe izin veriyorum.
 

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.

 //+------------------------------------------------------------------+
//|                                                       chuale.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.abc.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;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
//---
   
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
   int ticket;
   int total= OrdersTotal ();
   int     counted_bars= IndicatorCounted ();
   if (counted_bars> 0 ) counted_bars--;
   {
      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 ;
       if (bar2> 1 )
      {
       if (total< 1 )
      ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 3 , Ask -StopLoss* Point , Ask +TakeProfit* Point , "Chua EA" , 12345 , 0 ,Green);
      
       if (bar3 <- 1 ) OrderClose (ticket,Lots, Bid , 3 ,Green);
      }
       if (bar2<- 1 )
      {
       if (total< 1 )
      ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 3 , Bid +StopLoss* Point , Bid +-TakeProfit* Point , "Chua EA" , 12345 , 0 ,Red);
       if ( bar3> 1 )   OrderClose (ticket, Lots, Ask , 3 ,Red);
      }
   }
   
   return ( 0 );
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
 
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.



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

 double      bar1;
double      bar2;
double      bar3;
int ticket;
Neden: