Fehlercode "0"? - Seite 2

 
DomGilberto:
Oh, Entschuldigung - ich erhalte keinen Fehler mehr, was auch immer. Ich erhalte nur Kaufaufträge, die durchgehen und keine Verkaufsaufträge...

Es ist in Bezug auf meine früheren Thread in Bezug auf MA Cross Overs - Ich verstehe es immer noch nicht! Aber ich möchte niemanden aufziehen und ein totes Pferd schlagen, während mir die Leute die Antwort geben (obwohl ich die Antwort nicht verstehe, lol)! Vielen Dank RaptorUK für deine Hilfe!

Ich kann nicht für andere sprechen, ich will mich nicht einmischen.

Wenn Sie keine Fehler erhalten und keine Verkaufsorder platziert wurde, dann ist OpenOrdersThisPair(Symbol()) nicht gleich 0, welcher Typ ist diese Funktion? ist es ein int oder ein double? oder vielleicht ein 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);
  }
Ich kann eigentlich nicht verstehen, was das Problem ist. Ich habe die MA wenn Anweisungen so viele Möglichkeiten mein begrenztes Wissen sagt mir (eindeutig begrenzt, da es nicht auf der kurzen Seite arbeiten...)

Ich denke, es ist, weil die Aufträge nicht einfach auf, wo das Kreuz der gleitenden Durchschnitte stattfinden, aber an einem anderen Punkt platziert werden.
 
//+----------------------------------------------------------------------------------------------------------------------------------------+   
//| 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);
   }

Ich weiß, dass dies das Problem ist! Ich weiß, dass ich bereits in einem anderen Thema danach gefragt habe, aber ich würde die Antwort auf diese Frage wirklich zu schätzen wissen (und ja, ich weiß, dass der Code schlampig ist, ich habe nur viel Zeit damit verbracht, die Strategie zu hacken, zu kompilieren und auszuführen, um aus erster Hand zu sehen, wie sie miteinander kommunizieren. Ganz zu schweigen von der unnötigen Art und Weise, wie ich ihn geschrieben habe... aber das ist ja egal...)

Q.1) In Bezug auf die Zeile "double triggerbartime" und die > als Abschnitt.... Alles, was ich verstehen möchte, ist, wie ich dieser Funktion sage, dass sie herausfinden soll, wann alle gleitenden Durchschnitte größer sind als der zuvor verglichene gleitende Durchschnitt, und dann vergessen soll, dafür zu sorgen, dass sie in der richtigen Reihenfolge bleiben... stattdessen von diesem Punkt alles, was ich brauche, um sicherzustellen, ist, mit PRICE CLOSE bleiben über der "i12" (60 EMA) - wenn es tut, dann kann es folgen mit den anderen IF-Anweisungen und werfen eine lange Ordnung über "OrderEntry(0)" - Wenn es nicht, dann muss es dann auf die lange (i1>i2 && i2>i3...) Linie und warten, bis dies wieder wahr sein, bevor die nächsten Zeilen...

Ich weiß, dass die Antwort direkt vor mir liegt, aber es ist ein wenig frustrierend und ich wäre wirklich dankbar für diesen einen kleinen Hinweis.... Vielen Dank!

 
  1. Ihr Beitrag
    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)
    Welcher Datentyp sollte TrgggerBarTime sein?
    double  TriggerBarTime = boolean;
       if (double == true)

  2. Warum betrachten Sie alte Balken für TriggerBarTime UND den letzten Balken für orderEntry?
  3. Korrigieren Sie Ihre Einrückung
    Ihr Beitrag
       if(i1 > i12)
       if (TriggerBarTime == true)
           if(Low[1]<ema21 && i12<Close[1]) OrderEntry(0);
             if(Close[1]<i12) DeleteOrder(0);   
    Ordnungsgemäß eingerückt. Ist das wirklich das, was Sie gemeint haben?
    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...

Ich möchte wissen, wo alle MA's aufgefächert sind, aber sie müssen nicht die ganze Zeit wahr sein... Ich will nur, dass dies vor allem wahr sein... Auf der Grundlage dieser ist wahr, alles, was muss passieren, von diesem Preis ist, dass KEINE Bars schließen unter dem 60 EMA (für eine lange), um gültig zu bleiben, für jede Long-Position herausgedrückt werden...

Ich verwende TriggerBarTime, um den höchsten Punkt zu finden, an dem sich alle gleitenden Durchschnitte in der richtigen Reihenfolge gestapelt haben, und den Balken, der dann den 21 EMA berührt...

Also, obwohl Sie die Einrückung für mich begradigt haben, die ziemlich genau das tut, was ich vorher geschrieben hatte (es sei denn, ich bin etwas fehlt?) Probs mein Fehler ich didnt es richtig erklären.

(ah ja - ich weiß, es sollte bool sein, das war ein Fehler - ich war einfach herumspielen und vergessen, sie zurück zu schalten.)

 
double TriggerBarTime = (i1>i2 .. 
es ist true oder false 0 oder 1 nichts anderes
 int iTBT= iBarShift(NULL,60, TriggerBarTime, true),
Das dritte Argument von iBarShift muss eine Datetime sein. iBarShift(0) oder (1) ist IMMER Bars-1.
 
datetime          TriggerBarTime;
Ich habe dies im globalen Bereich...

Ich verstehe deinen vorherigen Beitrag nicht? ^

Ist es möglich, einen Vorschlag zu machen, wie ich die If-Zeile in Bezug auf meinen Beitrag über Ihrem Beitrag schreibe?
 
DomGilberto: Ich habe dies im globalen Abschnitt...
UND Sie haben es mit der lokalen Deklaration versteckt.
 
Tut mir leid, aber das wiederum ergibt für mich einfach keinen Sinn...
 
DomGilberto: Tut mir leid, aber das wiederum ergibt für mich einfach keinen Sinn...
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
}