Hata Kodu "0"? - sayfa 2

 
DomGilberto :
Oh üzgünüm - Artık ne olursa olsun herhangi bir hata almıyorum. Sadece alım emirleri alıyorum ve satış emirleri 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!

Başkası adına konuşamam, üzülmem. . .

Hata almıyorsanız ve herhangi bir satış emri verilmediyse, OpenOrdersThisPair(Symbol()) 0 değerine eşit değilse, bu işlev ne türdür? int mi yoksa çift mi? ya da belki bir bool?

 
//+----------------------------------------------------------------------------------------------------------------------------------------+  
//| Check to see if any order open on this currency pair                                                                                   |
//+----------------------------------------------------------------------------------------------------------------------------------------+   

int OpenOrdersThisPair( string pair)
{
   int total= 0 ;
       for ( int i= OrdersTotal ()- 1 ; i >= 0 ; i--)
         {
         OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
         if (OrderSymbol()==pair) total++;
         }
         return (total);
} 
//+------------------------------------------------------------------+
//| 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);
  }
Aslında sorunun ne olduğunu anlayamıyorum. MA if ifadelerini sınırlı bilgimin bana söylediği kadar çok şekilde yazdım (kısa tarafta işe yaramayacağı için açıkça sınırlı ...)

Bunun nedeni, siparişlerin sadece hareketli ortalamaların kesiştiği yere değil, farklı bir noktaya verilmesidir.
 
//+----------------------------------------------------------------------------------------------------------------------------------------+   
//| Function that checks for an MA Cross                                                                                                   |
//+----------------------------------------------------------------------------------------------------------------------------------------+   
  

void CheckForMaTradeLong()
{
   
   TriggerBarTime = Time[ 1 ];
   
   for ( int i= 0 ; i < Bars ; i++)
   {
   double i1  = iMA ( NULL , 60 , 3 , 0 , 1 , 0 ,i); 
   double i2  = iMA ( NULL , 60 , 5 , 0 , 1 , 0 ,i);
   double i3  = iMA ( NULL , 60 , 8 , 0 , 1 , 0 ,i);
   double i4  = iMA ( NULL , 60 , 10 , 0 , 1 , 0 ,i);  
   double i5  = iMA ( NULL , 60 , 12 , 0 , 1 , 0 ,i);
   double i6  = iMA ( NULL , 60 , 15 , 0 , 1 , 0 ,i);  
   double i7  = iMA ( NULL , 60 , 30 , 0 , 1 , 0 ,i);
   double i8  = iMA ( NULL , 60 , 35 , 0 , 1 , 0 ,i);
   double i9  = iMA ( NULL , 60 , 40 , 0 , 1 , 0 ,i);
   double i10 = iMA ( NULL , 60 , 45 , 0 , 1 , 0 ,i);
   double i11 = iMA ( NULL , 60 , 50 , 0 , 1 , 0 ,i);
   double i12 = iMA ( NULL , 60 , 60 , 0 , 1 , 0 ,i); 
   double ema21 = iMA ( NULL , 60 , 21 , 0 , 1 , 0 ,i);   

   double TriggerBarTime = (i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12); // this needs to just tell me where all the MA's fan up and nothing more...
   if (i1 > i12)
   if (TriggerBarTime == true )
       if (Low[ 1 ]<ema21 && i12<Close[ 1 ]) OrderEntry( 0 );
         if (Close[ 1 ]<i12) DeleteOrder( 0 );   
   
   break ;
   }
   return (i- 1 );
   }

Sorunun bu olduğunu biliyorum! Bunu daha önce farklı bir konuda sorduğumu biliyorum, ancak bu sorunun cevabını gerçekten takdir ediyorum (ve evet, kodun özensiz olduğunu biliyorum, sadece doğrama, derleme ve çalıştırma stratejisi için çok zaman harcadım birbirleriyle nasıl iletişim kurduklarını ilk elden görmek için. Gereksiz şekilde yazdığımdan bahsetmiyorum bile… ama görmezden geliyorum…)

S.1) "Double triggerbartime" satırı ve > daha bölümü ile ilgili olarak... Tek anlamak istediğim şey, bu fonksiyona tüm hareketli ortalamaların önceki karşılaştırılan hareketli ortalamadan daha büyük olduğunu bulmasını nasıl söylediğim. , ve sonra doğru sırada kaldıklarından emin olmayı unutun... bunun yerine o noktadan sonra emin olmam gereken tek şey, KAPALI FIYAT'ın "i12"nin (60 EMA) üzerinde kalmasıdır - eğer öyleyse, o zaman olabilir diğer IF ifadeleri ile devam edin ve "OrderEntry(0)" aracılığıyla uzun bir sipariş verin - Aksi takdirde, uzun (i1>i2 && i2>i3...) satırına bakması gerekir ve sonraki satırları düşünmeden önce bunun tekrar doğru olmasını bekleyin ...

Cevabın bana baktığını biliyorum, biraz sinir bozucu olmaya başladı ve bu küçük külçe için gerçekten minnettar olurum.... Teşekkürler!

 
  1. Senin gönderin
     double TriggerBarTime = (i1>i2  && i2>i3   && i3>i4 && i4>i5 && 
                             i5>i6  && i6>i7   && i7>i8 && i8>i9 && 
                             i9>i10 && i10>i11 && i11>i12);
       if (TriggerBarTime == true )
    TrgggerBarTime hangi veri türü olmalıdır?
     double TriggerBarTime = boolean ;
       if ( double == true )

  2. Neden TriggerBarTime için eski çubuklara VE orderEntry için son çubuğa bakıyorsunuz?
  3. Girintiyi düzeltin
    Senin gönderin
       if (i1 > i12)
       if (TriggerBarTime == true )
           if (Low[ 1 ]<ema21 && i12<Close[ 1 ]) OrderEntry( 0 );
             if (Close[ 1 ]<i12) DeleteOrder( 0 );   
    Düzgün girintili. Demek istediğin gerçekten bu mu?
     if (i1 > i12 && TriggerBarTime && Low[ 1 ]<ema21 && i12<Close[ 1 ]){
        OrderEntry( 0 );
    }
    if (Close[ 1 ]<i12){
        DeleteOrder( 0 );
    }
    
 
//TriggerBarTime works in conjunction with:

   int iTBT= iBarShift( NULL , 60 , TriggerBarTime, true ),
        iHH= iHighest( NULL , 60 , MODE_HIGH, iTBT + 1 , 0 ); 
             double buyPrice = High[iHH]+PadAmount*pips;

//I then use this "buyPrice" in conjunction with OrderSend for where the price of the entry order is...

Tüm MA'ların nerede yayıldığını bilmek istiyorum, ama HER ZAMAN doğru olmalarına GEREK YOKTUR... Sadece bunun her şeyden önce doğru olmasını istiyorum... Temelde bu doğrudur, tüm gereken 60 EMA'nın (uzun süre) altına yakın NO çubuklarının, herhangi bir uzun pozisyonun dışarı itilmesi için geçerli kalması...

Tüm hareketli ortalamaların doğru sırada yığıldığı en yüksek noktayı ve ardından 21 EMA'ya dokunmaya devam eden çubuğu bulmak için TriggerBarTime kullanıyorum...

Bu yüzden, girintiyi benim için düzeltmiş olsanız da, bu daha önce yazdıklarımla hemen hemen aynı (bir şeyi kaçırmıyorsam?) Muhtemelen benim hatam, onu doğru şekilde açıklamadım.

(ah evet - bir hata olması gerektiğini biliyorum - sadece oyun oynuyordum ve onları geri değiştirmeyi unuttum.)

 
double TriggerBarTime = (i1>i2 .. 
doğru veya yanlış 0 veya 1 başka bir şey değil
 int iTBT= iBarShift( NULL , 60 , TriggerBarTime, true ),
iBarShift'in üçüncü argümanı bir tarih saat olmalıdır. iBarShift(0) veya (1) DAİMA Çubuk-1 olacaktır.
 
datetime           TriggerBarTime;
Global bölümde bu var...

önceki mesajınızı anlamadım? ^

Sizinkinin üstündeki mesajıma göre If satırını nasıl yazdığımı önermek mümkün mü?
 
DomGilberto : Global bölümde buna sahibim...
VE onu yerel bildirimle gizlediniz.
 
Üzgünüm, ama bu yine, bana hiçbir anlam ifade etmiyor...
 
DomGilberto : Üzgünüm ama bu yine bana anlamsız geliyor...
 int myVariable = 0 ;
int start(){
   double myVariable = 1 ;
   Print (myVariable); // Outputs 1 .0
  myVariable++;
  myFunction(myVariable);
}
void myFunction( double v){
   Print (myVariable, " " ,v); // Outputs 0 2 .0
}