Hata Kodu "0"?

 

Uzun pozisyonların neden işe yaradığını ve kısa işlemlerin neden hiç işe yaramadığını anlamakta zorlanıyorum?

Eldeki verilen komisyoncu ile ondalık basamak sayısını belirlemek için init işlevimle ilgili bir şey olduğunu hissediyorum. (Test cihazını ilk başlattığımda, hayali siparişlerin neden atıldığının suçlusu bu gibi görünüyor ...)

Kısa tarafın neden bana bu hatayı söylediğine dair bir fikri olan var mı?


Şimdiden teşekkürler (kod şu anda biraz dağınık, elbette temizlemeyi düşünüyorum!)

 //+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

   double ticksize = MarketInfo( Symbol (), MODE_TICKSIZE);
   if (ticksize == 0.00001 || ticksize == 0.001 ) // if you set this to 0 it WONT throw an order out straight away.
   pips = ticksize* 10 ;
   else pips = ticksize;  
   

   return ( 0 );
  }
//+----

//+------------------------------------------------------------------+
//| Order Enter Function                                             |
//+------------------------------------------------------------------+

void OrderEntry ( int direction)
{    
   
   int PositionIndex;     //  <-- this variable is the index used for the loop
   int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool
  TotalNumberOfOrders = OrdersTotal ();     // <-- we store the number of Orders in the variable
   
   
   double s12 = iMA ( NULL , 60 , 60 , 0 , 1 , 0 , 1 ); 
   double i121 = iMA ( NULL , 60 , 60 , 0 , 1 , 0 , 1 );
   
   double LotSize= 0 ;
   double Equity=AccountEquity();
   double RiskedAmount=Equity*RiskPercent* 0.01 ;

   int iTBT= iBarShift( NULL , 60 , triggerBarTime, true ),
        iHH= iHighest( NULL , 60 , MODE_HIGH, iTBT + 1 , 0 ); 
             double buyPrice = High[iHH]+PadAmount*pips;
   
   
     int iTBT_1= iBarShift( NULL , 60 , triggerBarTime1, true ),
        iLL= iLowest( NULL , 60 , MODE_LOW, iTBT_1 + 1 , 0 ); 
             double sellPrice = Low[iLL]-PadAmount*pips;
            
   
   double buy_stop_price = iMA ( NULL , 60 , 60 , 0 , 1 , 0 , 1 )-PadAmount*pips; 
   double pips_to_bsl = buyPrice-buy_stop_price;         
   double buy_takeprofit_price = (pips_to_bsl*RewardRatio)+buyPrice;   
   double sell_stop_price = iMA ( NULL , 60 , 60 , 0 , 1 , 0 , 1 )+PadAmount*pips; 
   double pips_to_ssl = sell_stop_price-sellPrice;     
   double sell_takeprofit_price = sellPrice-(pips_to_ssl*RewardRatio);
   
//+----------------------------------------------------------------------------------------------------------------------------------------+  
//+----------------------------------------------------------------------------------------------------------------------------------------+   
   
  
if (direction== 0 ) //--Buy--//
   {
      
      {
       double bsl=buy_stop_price;
       double btp=buy_takeprofit_price;
      LotSize = (RiskedAmount/(pips_to_bsl/pips))/ 10 ;
       if (OpenOrdersThisPair( Symbol ())== 0 ) 
       int BuyTicketOrder = OrderSend ( Symbol (),OP_BUYSTOP,LotSize,buyPrice, 3 ,bsl,btp, NULL ,MagicNumber, 0 ,Green); 
      
       if (BuyTicketOrder > 0 )
         {
         Print ( "Order Placed #" , BuyTicketOrder);
         }
       else
         {
         Print ( "Order Send Failed, error # " , GetLastError ());   
         }
  
      }
   }

            
if (direction== 1 ) //--Sell--//
   {
      {
       double ssl=sell_stop_price;
       double stp=sell_takeprofit_price;
      LotSize = (RiskedAmount/(pips_to_ssl/pips))/ 10 ;    
       if (OpenOrdersThisPair( Symbol ())== 0 )  
       int SellTicketOrder = OrderSend ( Symbol (),OP_SELLSTOP,LotSize,sellPrice, 3 ,ssl,stp, NULL ,MagicNumber, 0 ,Red); 
  
       if (SellTicketOrder > 0 )
         {
         Print ( "Order Placed #" , SellTicketOrder);
         }
       else
         {
         Print ( "Order Send Failed, error # " , GetLastError ());   
         }
 
      }
   }
} 
 

yorum yapınca işlem giriyor mu

 //if (OpenOrdersThisPair( Symbol ())== 0
ne zaman giriyor
LotSize = 0.1 ;
vb. işlemlere girmeye başlayana kadar yolunuza devam edin, orada bir kez muhtemelen sorunun ne olduğunu anlayacaksınız. hh
 
Evet, parti büyüklüğü "0" olsa bile uzun taraftan giriyor...

OpenOrderThisPair'i değiştirmek de çalışmıyor.... Hmmm. Çok garip...
 
DomGilberto :
Evet, parti büyüklüğü "0" olsa bile uzun taraftan giriyor...

OpenOrderThisPair'i değiştirmek de çalışmıyor.... Hmmm. Çok garip...

Bu test sıfırdan farklı bir değer döndürürse. . .

 if (OpenOrdersThisPair( Symbol ()) == 0 )  

. . . OrderSend() çağrılmaz, ancak yine de SellTicketOrder'ın 0'dan büyük olup olmadığını kontrol edersiniz. . .

Bunu yap . . .

 if (direction== 1 ) //--Sell--//
   {
      {
       double ssl=sell_stop_price;
       double stp=sell_takeprofit_price;
      LotSize = (RiskedAmount/(pips_to_ssl/pips))/ 10 ;    
       if (OpenOrdersThisPair( Symbol ())== 0 )
         {
         int SellTicketOrder = OrderSend ( Symbol (),OP_SELLSTOP,LotSize,sellPrice, 3 ,ssl,stp, NULL ,MagicNumber, 0 ,Red); 
  
         if (SellTicketOrder > 0 )
            {
             Print ( "Order Placed #" , SellTicketOrder);
            }
         else
            {
             Print ( "Order Send Failed, error # " , GetLastError ());   
            }
         }
      }
 
Hayır - satış emri göndermek istemiyor gibi görünüyor ...

Bir siparişi tetiklemek için OrderEntry işlevini gönderen for döngüsü içindeki "IF" ifadeleriyle ilgili kodu yazma şeklimde bir hata olmalı...
 
DomGilberto :
Hayır - satış emri göndermek istemiyor gibi görünüyor...

Bir siparişi tetiklemek için OrderEntry işlevini gönderen for döngüsü içindeki "IF" ifadeleriyle ilgili kodu yazma şeklimde bir hata olmalı...

Peki şimdi nasıl bir hata alıyorsunuz? Bir tane almazsanız ve "Sipariş verildi # 12345" almazsanız, o zaman OrderSend() aranmıyor ve OpenOrdersThisPair() işlevinizle ilgili bir sorununuz var. . . kodunuzu yayınlayın.
 
Bu çalıştığında, uzun taraf için iyi çalışıyor (son 2 saattir bununla oynuyorum). Mesele şu ki, hareketli ortalama parametrelerine göre IF ifadeleri ile ilgili olarak nerede yanlış gittiğimi ("CheckForMaTrade" işlevi olarak adlandırdığım) bildiğim için, sizi ve belirli birini büyük olasılıkla saracağım ve nasıl olduklarını "true" OrderEntry'yi OrderSend'e gönderecek... Sorun şu ki, hala o kısmı düzgün yazmayı öğreniyorum...
 //+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

int start()
  {
//----
   
   if (OpenOrdersThisPair( Symbol ())>= 1 )
      {
       if (UseMoveToBreakEven)MoveToBreakEven();
       if (UseTrailingStop)AdjustTrail();
       if (Use_MA_Trail)MA_Trail();
      }
       if (IsNewCandle())CheckForMaTradeLong();
       if (IsNewCandle())CheckForMaTradeShort();
//----
   return ( 0 );
  }
 
DomGilberto :
Bu çalıştığında, uzun taraf için iyi çalışıyor (son 2 saattir bununla oynuyorum). Mesele şu ki, hareketli ortalama parametrelerine göre IF ifadeleriyle ilgili olarak nerede yanlış gittiğimi ("CheckForMaTrade" işlevini çağırdığım) bildiğim için sizi ve belirli bir kişiyi büyük olasılıkla saracağım ve nasıl olduklarını "true" OrderEntry'yi OrderSend'e gönderecek... Sorun şu ki, hala o kısmı düzgün yazmayı öğreniyorum...

Raptorİngiltere :
Peki şimdi nasıl bir hata alıyorsunuz? Bir tane almazsanız ve "Sipariş verildi # 12345" almazsanız, o zaman OrderSend() aranmıyor ve OpenOrdersThisPair() işlevinizle ilgili bir sorununuz var. . . kodunuzu yayınlayın.


Böyle .. . . ne hatası alıyorsunuz vs. . .
 
Oh üzgünüm - Artık ne olursa olsun herhangi bir hata almıyorum. Sadece alım emirleri alıyorum ve satış emri yok ...

MA çapraz geçişleriyle ilgili önceki iş parçacığımla ilgili - hala anlamıyorum! Ama insanlar bana cevap verirken (cevap lol anlamasam da) kimseyi sarsmak ve ölü bir atı dövmek istemiyorum! RaptorUK'a yardımınız için teşekkürler!
 
      if (IsNewCandle())CheckForMaTradeLong();
     if (IsNewCandle())CheckForMaTradeShort();
Fonksiyonlara çarpanlara ayırma işlemlerini desteklerken, New Candle/New Bar'ın çoğu varyasyonunu desteklemiyorum çünkü bu fonksiyon sadece ONCE [başlangıçta()] olarak adlandırılabilir.
 int start(){
   static datetime time0; bool isNewCandle = time0 != Time[ 0 ]; time0 = Time[ 0 ]; // Once per start only.
   :
       if (isNewCandle)CheckForMaTradeLong();
       if (isNewCandle)CheckForMaTradeShort();
 
Teşekkürler WHRoeder - iyi bir ipucu!