Probleme bei der Prüfung auf offenen Handel - Seite 5

 
BrotherPyrus:
Hallo Daz & Co,

hothand funktioniert auf dem fünfstelligen MT4, aber nicht auf einer vierstelligen Plattform.
Können Sie genauer sein, wie es nicht funktioniert?
 
BrotherPyrus:
hothand funktioniert auf dem fünfstelligen MT4, aber nicht auf einer vierstelligen Plattform. Irgendeine Idee, was dies verursacht, und irgendwelche Hinweise, wie man es beheben?
EA's müssen für 4/5 Ziffern, TP, SL, UND Slippage anpassen. Bei ECN-Brokern müssen Sie zuerst eröffnen und DANN Stops setzen.
//++++ These are adjusted for 5 digit brokers.
int     pips2points;    // slippage  3 pips    3=points    30=points
double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)
int     init(){
    if (Digits == 5 || Digits == 3){    // Adjust for five (5) digit brokers.
                pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
    } else {    pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
 
   if(iBarHour >= iOpenHour && iBarHour <= iOpenHour + iBarsToTrade && Tradeopen()==false) // Check if time is ok to trade & no trade is open
                  {

                          
                              //  if(High[2]>High[1] && Low[2]<Low[1]) // see if we have an inside bar
                                if(iHigh(hothand(), 60, 2)>iHigh(hothand(), 60, 1) && iLow(hothand(), 60, 2) < iLow(hothand(), 60, 1)) // see if we have an inside bar
                                 {                                                                                                     // on the hothand pair
                                           
                                        // IB found 
                                        if(iHigh(hothand(), 60, 1) > dDayOpenPrice) // IB high on hothand pair is greater than day open price bullish signal
                                          {
                                             int    buyspread=MarketInfo(hothand(),MODE_SPREAD);
                              double buyentry =  iHigh(hothand(), 60, 1) + 10 + buyspread;  //Low of prev bar + 1 pip + spread
                              double buystop = iLow(hothand(), 60, 1) - 10;    //Low of prev bar - 1 pip
                              double buytpx1 = iHigh(hothand(), 60, 1)+(iHigh(hothand(), 60, 1)-iLow(hothand(), 60, 1)); //1:1 r:r
                              double buytpx3 = iHigh(hothand(), 60, 1)+(iHigh(hothand(), 60, 1)-iLow(hothand(), 60, 1))*3; // 1:3 r:r
                              
                              
                           OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx1, "DIBSBUY", Mnumber1);  //Open buy order
                           OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx3, "DIBSBUY", Mnumber3);
                            }
                            
                         if(iLow(hothand(), 60, 1) < dDayOpenPrice) // IB low on hothand pair is lower than day open price bearish signal
                            {
                              int    sellspread=MarketInfo(hothand(),MODE_SPREAD);
                              double sellentry = iLow(hothand(), 60, 1)-10; //Low of prev bar - 1 pip 
                              double sellstop = iHigh(hothand(), 60, 1)+ 10 + sellspread; // High of prev bar + 1 pip + Spread
                              double selltpx1 = iLow(hothand(), 60, 1)-(iHigh(hothand(), 60, 1)- iLow(hothand(), 60, 1)); //1:1 r:r
                              double selltpx3 = iLow(hothand(), 60, 1)-(iHigh(hothand(), 60, 1)- iLow(hothand(), 60, 1))*3; // 1:3 r:r
                              
                              
                           OrderSend(Symbol(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order
                           OrderSend(Symbol(),OP_SELL,1 , Ask, 3, sellstop, selltpx3,"DIBSSELL",Mnumber3);  //Open Sell Order
               
                                      } 
                        }
                               
                   }
     //  
  
    
      }

In Ordnung ich bin zurück,


Dies ist der Teil meines Codes, in dem die Trades ausgeführt werden. Ich werde im Moment nur mit 5 Ziffern arbeiten. Die Idee hier ist ich meine hothand Funktion verwendet, um zu wählen, welches Paar am besten für den Handel für den Tag ist. Dieser Code sollte nach einem Inside Bar auf dem 1-Stunden-Chart suchen. (Die hothand Funktion gibt eine Zeichenfolge des Paares btw) Wenn es ein Innen bar findet, habe ich gerade es zu einem Flat-out kaufen oder verkaufen Handel zu Testzwecken zu öffnen. Ich bin mir nicht sicher, ob der Backtester den Handel mit mehreren Paaren von einem Chart aus handhaben kann? Ich habe die 1-Minuten-Historie für alle Paare heruntergeladen, die er verwendet. Aber es scheint nur Trades auf dem Eurusd zu öffnen, der der Chart ist, an den ich ihn angehängt habe,

WHRoeder danke, dass Sie vorbeigekommen sind und mir wieder geholfen haben. So ist der richtige Weg, um einen Handel mit einem ea zu öffnen, um es dann zurück zu gehen und füllen Sie die sl und tp, nachdem es geöffnet hat? Ich bin sicher, Sie können eine Million Dinge falsch mit diesem Code auch vor Ort.

 
  1. OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx1, "DIBSBUY", Mnumber1);  //Open buy order
    

    Keine Anpassung des Schlupfes für 4/5 Ziffern. Nicht ECN-kompatibel

    Testen Sie immer die Rückgabewerte, damit Sie herausfinden, WARUM es nicht funktioniert

    int ticket = OrderSend(Symbol(),OP_BUY,1 , Ask, 3, buystop, buytpx1, "DIBSBUY", Mnumber1);  //Open buy order
    if (ticket < 0) Alert("OrderSend [1] failed: ",GetLastError());

  2. buystop = iLow(hothand()...
    Ihre Stops basieren auf dem Paar hothand(), aber Sie eröffnen eine Order mit Symbol(). Wenn sie nicht identisch sind, sind die Stopps völlig falsch.
 
dazamate:

In Ordnung ich bin zurück,


Dies ist der Teil meines Codes, in dem die Trades ausgeführt werden. Ich werde im Moment nur mit 5 Ziffern arbeiten. Die Idee hier ist ich meine hothand Funktion verwendet, um zu wählen, welches Paar am besten für den Handel für den Tag ist. Dieser Code sollte nach einem Inside Bar auf dem 1-Stunden-Chart suchen. (Die hothand Funktion gibt eine Zeichenfolge des Paares btw) Wenn es ein Innen bar findet, habe ich gerade es zu einem Flat-out kaufen oder verkaufen Handel zu Testzwecken zu öffnen. Ich bin mir nicht sicher, ob der Backtester den Handel mit mehreren Paaren von einem Chart aus handhaben kann? Ich habe die 1-Minuten-Historie für alle Paare heruntergeladen, die er verwendet. Aber es scheint nur zu öffnen Geschäfte auf dem eurusd, die das Diagramm habe ich es angehängt ist,


Einige allgemeine Kommentare:

Sie kaufen zum Ask und verkaufen zum Bid

Wenn Ihr Broker ein ECN-Broker ist, können Sie SL und TP nicht einstellen, wenn Sie die Order platzieren (in diesem Fall setzen Sie sie auf 0), Sie müssen die Order platzieren und dann die Order ändern, um SL und TP hinzuzufügen

Überprüfen Sie immer das Ergebnis der Auftragserteilung und prüfen Sie, ob Fehler zurückgegeben werden; Sie müssen diese entsprechend behandeln

wenn Sie planen, diesen EA auf mehreren Charts einzusetzen, d.h. Orders von mehreren Charts aus zu platzieren, benötigen Sie eine Art Mutex, um Order Context Busy zu vermeiden (siehe WHRoeders Beiträge, er hat einen ausgezeichneten Mutex)

 
Damm WHRoeder, Sie haben Recht: "Unsere Stopps basieren auf dem Paar hothand(), aber Sie eröffnen eine Order mit Symbol()" Das habe ich nicht bemerkt. Wie dumm. Dieses Zeug wird einfach so geistig ermüdend, während man versucht, es zu lernen. Aber ja, dumm. Danke, dass Sie dieses Durcheinander durchgesprochen haben. Ich werde wahrscheinlich eine Pause einlegen und morgen mit freiem Kopf zurückkommen. Ich werde die Dinge in Ordnung bringen, auf die Sie hingewiesen haben.
 
dazamate:

Aber es scheint nur Geschäfte auf dem eurusd zu öffnen, was das Diagramm ist, dem ich es beigefügt habe,

Yep, . . .

OrderSend(Symbol(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order

Symbol () ist das Paar, an das der EA/Indikator angehängt ist, wollten Sie dies stattdessen tun?

OrderSend(hothand(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order
 

Ja, das wollte ich tun, aber jetzt bekomme ich diesen Fehler


http://clip2net.com/s/144hq


Als ob es die Paarausgabe der hothand-Funktion nicht erkennt. Die Ausgabe der hothand-Funktion ist eine Zeichenkette, also verstehe ich nicht, warum es nicht funktioniert.

 
dazamate:
Als ob es die Paarausgabe der hothand-Funktion nicht erkennen würde. Die Ausgabe der hothand-Funktion ist eine Zeichenfolge, so dass ich nicht sehen, was es nicht funktionieren wird
OrderSend(hothand(),OP_SELL,1 , Ask, 3, sellstop, selltpx1,"DIBSSELL",Mnumber1);  //Open Sell Order
  1. Ask/Bid ist der aktuelle Symbol()-Kurs, aber Sie versuchen, ein anderes Paar zu eröffnen. Falscher Preis.
  2. Sie können keine Bar-Null-Werte vom Tester für andere TF/Paare erhalten
  3. Sie können keine Trades für andere Paare im Tester öffnen, IIRC
  4. Unbekannter Symbolname USDCHF für die OrderSend-Funktion
    Woher haben Sie diese Zeichenfolge? Ist der aktuelle Chart das gleiche Muster, oder USD,EUR, oder USD/EUR, oder USDEURm, oder USDEURfxf usw.
  5. Ich schlage vor, dass Sie NUR das aktuelle Paar handeln. Wenn hothand() nicht das aktuelle Paar ist, wird nicht gehandelt. Auf diese Weise funktioniert es im Tester, Sie können den EA immer auf andere Paare setzen und so kontrollieren, welche Paare er handelt, und Sie vermeiden alle Fallstricke.
 

Hallo Leute, ich versuche, einen Code zu erstellen, der folgendes tut


extern string  sComment4                = "Max Hours allowed before pending orders are deleted";
extern int     pendinglimit        = 4;

// * EVERYTIME A TRADE GETS TRIGGERED 

bartraded = TimeHour(TimeCurrent());


// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN 

   if(TimeHour(TimeCurrent()) > bartraded + pendinglimit && Tradeopen()==true) // Check to see if pending orders have expired
     {
        for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--)  //scan through open orders
        {
          if (OrderSelect(tnumber, SELECT_BY_POS) &&   
           OrderType()==(OP_BUYSTOP||OP_SELLSTOP) &&     // The order selected is either a pending buy on stop order or a buy on sell order
            OrderMagicNumber()==(Mnumber1||Mnumber3))    // The orders magic number is the same as the magic number used in this ea
          
               {
                OrderSelect(tnumber, SELECT_BY_POS);     // Select order
                OrderDelete(tnumber);                    // Delete it
               }
        }
     }

Wenn ein schwebender Auftrag seit x Bars offen ist, wird er gelöscht, wenn die Baranzahl x überschritten hat.


Kann es sein, dass etwas mit meiner Logik nicht stimmt?