Toplam açık sipariş miktarıyla ilgili sorun - sayfa 3

 
Değiştirilen kodunuzun tamamını göstermeniz gerekir.
 
Değişkenlerinizi if ifadelerinden önce ve içeride yazdırın ve nedenini öğrenin.
 
WHRoeder :
Değişkenlerinizi if ifadelerinden önce ve içeride yazdırın ve nedenini öğrenin.

Tamam teşekkür ederim, bunu yapacağım ve daha fazla araştıracağım. Ayrıca, SL ve TP'nin OrderSend'den ayrılması nedeniyle ilgimi çeken bu kod parçasını da buldum. Buna da bakılacak

ticket = OrderSend ( Symbol (), OP_SELL, getPositionSize(), Bid, 3 , 0 , 0 , "Basic CCI EA" , magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
 

Herkese selam

Sorunlarımın çoğunu düzelttim ve EA test cihazında iyi çalışıyor, ancak hala OrdersTotal ile ilgili sorunlar yaşıyorum. Demo modunda bazen hem bekleyen Durdurma emirlerini açar, hem de çoğu zaman sadece alım veya satım emrini açar. Her iki bekleyen siparişin de aynı anda (birkaç saniye içinde) açılmasını istiyorum, ancak yalnızca başka bir sipariş veya bekleyen sipariş açık değilse. Sanırım, bazen emir sayısını hesaplama şansı bulamadan bekleyen emirleri açar ve bazen de bekleyen bir emrin gönderildiğini fark eder ve diğerini açmaz. Ordersend'leri küme parantezleri içine koyarsam, if koşulu karşılandığında her ikisini de uygulayacağını düşündüm. Ayrıca, son mum oluştuğu sürece, yani Zaman değişkeni Zaman[0] mumuyla eşleştiği sürece, onları sildiğimde bekleyen emirleri açmaya devam edeceğini de biliyorum, keneler önemsizdir.

İşte o kod parçası:

 extern datetime StartTime1 = D'2016.03.15 15:05' ;
int start(){
int buy_ticket= 0 , sell_ticket= 0 , buystop_ticket= 0 , sellstop_ticket= 0 , total= 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
       if ( OrderSelect (i,SELECT_BY_POS) && OrderMagicNumber()==magic && OrderSymbol()== Symbol ())
        {
         total++;
         if (OrderType()==OP_BUYSTOP) buystop_ticket=OrderTicket();
         if (OrderType()==OP_SELLSTOP) sellstop_ticket=OrderTicket();
         if (OrderType()==OP_BUY) buy_ticket=OrderTicket();
         if (OrderType()==OP_SELL) sell_ticket=OrderTicket();
        }

   if (total== 0 && Time[ 0 ]==StartTime1)
     {
      buystop_ticket= OrderSend ( Symbol (),OP_BUYSTOP,Lots,Ask+Price, 30 ,Ask-SL, 0 , "Pending" ,magic, 0 ,Lime);
      sellstop_ticket= OrderSend ( Symbol (),OP_SELLSTOP,Lots,Bid-Price, 30 ,Bid+SL, 0 , "Pending" ,magic, 0 ,Red);
     }

Peki bunu yapmamın daha iyi veya daha kolay bir yolu var mı? Teşekkür ederim

 
Trader3000 :

Herkese selam

Sorunlarımın çoğunu düzelttim ve EA test cihazında iyi çalışıyor, ancak hala OrdersTotal ile ilgili sorunlar yaşıyorum. Demo modunda bazen hem bekleyen Durdurma emirlerini açar, hem de çoğu zaman sadece alım veya satım emrini açar. Her iki bekleyen siparişin de aynı anda (birkaç saniye içinde) açılmasını istiyorum, ancak yalnızca başka bir sipariş veya bekleyen sipariş açık değilse. Sanırım bazen emir sayısını hesaplama fırsatı bulamadan hem bekleyen emirleri açıyor hem de aslında bekleyen bir emrin gönderildiğini fark ediyor ve diğerini açmıyor. Ordersend'leri küme parantezleri içine koyarsam, if koşulu karşılandığında her ikisini de uygulayacağını düşündüm. Ayrıca, son mum oluştuğu sürece, yani Zaman değişkeni Zaman[0] mumuyla eşleştiği sürece, onları sildiğimde bekleyen emirleri açmaya devam edeceğini de biliyorum, keneler önemsizdir.

İşte o kod parçası:

Peki bunu yapmamın daha iyi veya daha kolay bir yolu var mı? Teşekkür ederim

buystop_ticket ve sellstop_ticket değerlerini kontrol ediyor musunuz? Yalnızca 1 açık varsa, ikincisi hiçbir zaman açılmayacaktır (ilkini manuel olarak kaldırmadığınız sürece).
 
Trader3000 : SL ve TP'nin OrderSend'den ayrı olması nedeniyle ilgimi çeken bu kod parçasını da buldum. Buna da bakılacak
ticket = OrderSend ( Symbol (), OP_SELL, getPositionSize(), Bid, 3 , 0 , 0 , "Basic CCI EA" , magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
ECN brokerleri başladığında, OrderSend SL/TP seti ile başarısız olur. Çoğu, 600'den beri bunu düzeltti.
 
zirkoner :
buystop_ticket ve sellstop_ticket değerlerini kontrol ediyor musunuz? Yalnızca 1 açık varsa, ikincisi hiçbir zaman açılmayacaktır (ilkini manuel olarak kaldırmadığınız sürece).

Cevap için teşekkürler. Aslında hem buystop hem de sellstop emirleri zamanın yaklaşık %50'sinde açılır. Zamanın diğer %50'si ya alış ya da satış gönderilir. Ama bir şey buldum. Son hatayı sordum ve her ikisinin de gönderildiği durumlarda hata yok, ancak yalnızca biri açıldığında, açılmayanda 130 hatası alıyorum. Yani duraklarım geçersiz gibi görünüyor ama nedenini bilmiyorum. İşte SL için kod:

 extern int StopLossOriginal= 11 ;

int start(){
int stoplevel=(MarketInfo( Symbol (),MODE_STOPLEVEL))/ 10 ;
   if (StopLossOriginal<=stoplevel) StopLossOriginal=stoplevel;

double point= Point * 10 ,
       Price=Pipmove*point,
       SL=(StopLossOriginal-Pipmove)*point;

 if (total== 0 && (Time[ 0 ]==time1)
     {
      buystop_ticket= OrderSend ( Symbol (),OP_BUYSTOP,Lots,Ask+Price, 30 ,Ask-SL, 0 , "Pending" ,magic, 0 ,Lime);
       Print ( "Buystop ticket =" ,buystop_ticket);
      sellstop_ticket= OrderSend ( Symbol (),OP_SELLSTOP,Lots,Bid-Price, 30 ,Bid+SL, 0 , "Pending" ,magic, 0 ,Red);
       Print ( "Sellstop ticket =" ,sellstop_ticket);
     }

Ayrıca Yazdır işlevini ekledim. "Buystop_ticket ve sellstop_ticket'in değerini kontrol ediyor musunuz?" ile bunu mu kastetmiştiniz? Yani iki değer döndürür:

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: Buystop bileti =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Buystop bileti =49644335



 
WHRoeder :
ECN brokerleri başladığında, OrderSend SL/TP seti ile başarısız olur. Çoğu, 600'den beri bunu düzeltti.
Cevabın için teşekkürler. Bunu da denedim ama bir fark yaratmadı. 950 inşa ediyorum
 
Trader3000 :

Cevap için teşekkürler. Aslında hem buystop hem de sellstop emirleri zamanın yaklaşık %50'sinde açılır. Zamanın diğer %50'si ya alış ya da satış gönderilir. Ama bir şey buldum. Son hatayı sordum ve her ikisinin de gönderildiği durumlarda hata yok, ancak yalnızca biri açıldığında, açılmayanda 130 hatası alıyorum. Yani duraklarım geçersiz gibi görünüyor ama nedenini bilmiyorum. İşte SL için kod:

Ayrıca Yazdır işlevini ekledim. "Buystop_ticket ve sellstop_ticket'in değerini kontrol ediyor musunuz?" ile bunu mu kastetmiştiniz? Yani iki değer döndürür:

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: Buystop bileti =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Buystop bileti =49644335



2 OrderSend()'iniz arasına RefreshRates() eklemeniz gerekir.
 
zirkoner :
2 OrderSend()'iniz arasına RefreshRates() eklemeniz gerekir.
Vay canına! İşe yaradı. Çok teşekkürler