sill3000 Posted October 14, 2010 Report Share Posted October 14, 2010 (edited) Einen schönen guten Tag, Abend. Ich habe da einige Probleme mit dem Zusammenspiel von OrderSelect() und Order Modify(). Habe da so ca. 10 Trades offen und möchte sie anhand eines Trailing-Stops überwachen. Hier ist der Code: total=OrdersTotal(); //Hier ist der Trailing Stop for(int cnt=0;cnt<total;cnt++) { OrderSelect(cnt, OrderTicket(),MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) // long position is opened { // check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); return(0); } } } } else // go to short position { // check for trailing stop if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop))||(OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop, OrderTakeProfit(),0,Red); return(0); } } } } } } return(0); Ich bekomme hier dauernd den Fehlercode: OrderModify Error 130 d.h. invalid stops "ungültiger Stop" ?? Ich kann damit nichts anfangen, für eure Hilfe im Voraus besten Dank ! Edited October 14, 2010 by whipsaw whipsaw Quote Link to comment Share on other sites More sharing options...
WOGO Posted October 14, 2010 Report Share Posted October 14, 2010 Probiers mal so: NormalizeDouble(Bid-Point*TrailingStop,Digits) ...und als Tip:Wenn den Code zwischen die Code-Steuerzeichen einfügst, dann sieht das auch noch schön aus. Quote Link to comment Share on other sites More sharing options...
sill3000 Posted October 15, 2010 Author Report Share Posted October 15, 2010 Ja, aber wie soll das dann helfen, NormalizeDouble(Bid-Point*TrailingStop,Digits) ? Wenn den Code zwischen die Code-Steuerzeichen einfügst, dann sieht das auch noch schön aus. was meinst du damit ? Sorry, verstehe ich nicht so genau. Quote Link to comment Share on other sites More sharing options...
WOGO Posted October 15, 2010 Report Share Posted October 15, 2010 Ja, aber wie soll das dann helfen, NormalizeDouble(Bid-Point*TrailingStop,Digits) ?z.B. so: OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Green) Du mußt bei OrderModify immer die richtige Anzahl von Digits eingeben, bei manchen Brokern 4, bei manchen 5. Über das Schlüsselwort "Digit" erkennt das dein Programm automatisch. Wenn den Code zwischen die Code-Steuerzeichen einfügst, dann sieht das auch noch schön aus. was meinst du damit ?Du schreibst vor deinen Code in eckigen Klammern das Wort code und dahinter wieder in Eckigen Klammern /code, dann wird der Code, den du hier im Forum postest formatiert und man kann ihn richtig lesen Quote Link to comment Share on other sites More sharing options...
Vola Posted October 15, 2010 Report Share Posted October 15, 2010 Es geht auch den Code einzufügen, anschließend zu markieren und dann oben im Editor die Code Tags anklicken. Zitieren/Code Quote Link to comment Share on other sites More sharing options...
sill3000 Posted October 15, 2010 Author Report Share Posted October 15, 2010 ah ok, weil, wenn ich 40 Trades offen haben, kommt der PC(Das Programm) nicht so richtig nach, mit dem Trailing-Stop. Kann es sein, dass die Start()-Funktion dazwischenfunkt, weil das Programm immer wieder bei Start() anfängt. Im Voraus besten Dank. Quote Link to comment Share on other sites More sharing options...
RAiNWORM Posted October 16, 2010 Report Share Posted October 16, 2010 Kann es sein, dass die Start()-Funktion dazwischenfunkt, weil das Programm immer wieder bei Start() anfängt.Nein, während du in der Start()-Funktion bist, wird diese nicht erneut aufgerufen. Quote Link to comment Share on other sites More sharing options...
sill3000 Posted October 17, 2010 Author Report Share Posted October 17, 2010 Nein, während du in der Start()-Funktion bist, wird diese nicht erneut aufgerufen. Ich habe gelesen, wenn ein Ticksignal kommt, dann wird die Start-Funktion aufgerufen, oder ? Bin ein bisschen verwirrt. Gruss an alle Quote Link to comment Share on other sites More sharing options...
RAiNWORM Posted October 17, 2010 Report Share Posted October 17, 2010 Ich habe gelesen, wenn ein Ticksignal kommt, dann wird die Start-Funktion aufgerufen, oder ?Das ist korrekt und widerspricht auch nicht meiner Aussage. Die start()-Funktion wird mit jedem Tick aufgerufen, allerdings nur, wenn sich dein EA nicht gerade darin (oder in Unterfunktionen) befindet. Das heißt: kommen viele Ticks schnell hintereinander und dein EA ist "noch nicht fertig" wenn der nächste Tick eintrifft, dann wird start() nicht nochmals aufgerufen! Eigentlich kommt dies eher selten vor, außer dein EA ist langsam (weil du vielleicht viele Indikatoren im Programmcode auf unterschiedlichsten Zeitebenen berechnen lässt - o.ä.). Quote Link to comment Share on other sites More sharing options...
WOGO Posted October 17, 2010 Report Share Posted October 17, 2010 Ich habe gelesen, wenn ein Ticksignal kommt, dann wird die Start-Funktion aufgerufen, oder ?Das ist richtig, läuft allerdings die Start-Funktion noch während bereits ein neuer Tick reinkommt, dann wird dieser neue Tick ignoriert, unterbricht also nicht Start()! Edit: Bin einfach zu langsam auf meine alten Tage Quote Link to comment Share on other sites More sharing options...
RAiNWORM Posted October 17, 2010 Report Share Posted October 17, 2010 Edit: Bin einfach zu langsam auf meine alten Tage Ach was, zwei gleiche Antworten klingen einfach überzeugender Quote Link to comment Share on other sites More sharing options...
NikkChade Posted October 17, 2010 Report Share Posted October 17, 2010 NormalizeDouble(Bid-Point*TrailingStop,Digits) ...also wenn ich das jetzt richtig verstanden habe, dann kann ich die Variante einsetzen... OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Green) ...und die mit PointX aussetzen... double PointX() { if (Digits==5 || Digits ==3) return(Point*10); else return(Point); } //--------------------------- if(OrderType()==OP_BUY) { OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-PointX()*Stopp,OrderOpenPrice()+PointX()*Profit,0,Blue); } oder interpretiere ich das falsch?! lg NC PS: Nochmal kurz am Rande:Kann es sein, dass die PointX-Funktion irgendwie falsch ist. Denn egal ob 3 oder 5 Digits, der Wert wird immer x10(mal zehn)genommen... Quote Link to comment Share on other sites More sharing options...
WOGO Posted October 17, 2010 Report Share Posted October 17, 2010 oder interpretiere ich das falsch?! Nein, siehst du genau richtig Kann es sein, dass die PointX-Funktion irgendwie falsch ist. Denn egal ob 3 oder 5 Digits, der Wert wird immer x10(mal zehn)genommen... Ich kenne zwar keinen 3-Digit Broker, aber ich hab diese Implementierung schon an verschiedenen Stellen gesehen. Scheint also richtig zu sein. Quote Link to comment Share on other sites More sharing options...
NikkChade Posted October 17, 2010 Report Share Posted October 17, 2010 Dann werde ich wohl meine EAs sorgfälltig auf "die neue Funktion" umstellen. lg NC Quote Link to comment Share on other sites More sharing options...
Quickbeam2k1 Posted October 17, 2010 Report Share Posted October 17, 2010 ich glaube de 3 digits beziehen sich z.B auf die Yen Wechselkurse zum USD oder? Quote Link to comment Share on other sites More sharing options...
RAiNWORM Posted October 17, 2010 Report Share Posted October 17, 2010 Kann es sein, dass die PointX-Funktion irgendwie falsch ist. Denn egal ob 3 oder 5 Digits, der Wert wird immer x10(mal zehn)genommen... Bitte korrigiert mich, wenn ich falsch liege, aber kann das x10 nicht mit CFDs zusammenhängen? Bei einem CFD auf den DE30 beträgt Point (je nach Broker) den Wert 0,1. Wenn ich nun 10 Indexpunkte entfernt meinen TP setzen möchte, dann muss ich 100xPoint rechnen. Zwischen 6490 und 6500 liegen also 10x10xPoint. Was für Werte enthält denn die Variable Profit? Quote Link to comment Share on other sites More sharing options...
WOGO Posted October 17, 2010 Report Share Posted October 17, 2010 Bitte korrigiert mich, wenn ich falsch liege, aber kann das x10 nicht mit CFDs zusammenhängen?Das x10 bezieht sich auf das 5. bzw. 3. Digit bei EURJPY, wie Quickbeam2k1 richtig sagt.Bei Indikatoren/EAs wird es häufig so gemacht, dass die Parameter, die man einstellt, sich auf einen 4 Digit-Broker beziehen. Setzt man bei EURUSD einen SL von 50 Punkten, so sind das bei einem 5-Digit Broker (z.B. MBT) 500. Um nicht ständig umrechnen zu müßen, kann man den EA/Indikator automatisch diesen Korrekturfaktor abhängig vom Digit-Wert berücksichtigen lassen. Quote Link to comment Share on other sites More sharing options...
sill3000 Posted October 18, 2010 Author Report Share Posted October 18, 2010 Wie kann man eigentlich einen TRade aufmachen, ohne S/L und T/P. WEnn ich die Variablen mit Werten versehe, dann macht er die Trades. Aber, wenn ich die WErte mit "0" setze, dann macht er keinen einzigen Trade. Warum ? Lieben Gruss Quote Link to comment Share on other sites More sharing options...
NikkChade Posted October 18, 2010 Report Share Posted October 18, 2010 Wie kann man eigentlich einen TRade aufmachen, ohne S/L und T/P. WEnn ich die Variablen mit Werten versehe, dann macht er die Trades. Aber, wenn ich die WErte mit "0" setze, dann macht er keinen einzigen Trade. Warum ? Lieben GrussHast Du in deiner OrderSend() die Null mit "" oder ohne "" geschrieben?Bei mir funktioniert es... OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,"long",MagicNumber,0,White) lg NC Quote Link to comment Share on other sites More sharing options...
sill3000 Posted October 18, 2010 Author Report Share Posted October 18, 2010 danke, jetzt geht es auch. Quote Link to comment Share on other sites More sharing options...
sill3000 Posted October 23, 2010 Author Report Share Posted October 23, 2010 Ich habe da mal noch ne andere Frage, ich öffne buy-Order mit dem "Ask"-Preis und öffne short-Order mit dem "Bid"-Preis. Meine Order für long: ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"My EA",12345,0,Green); Meine Order für short: ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"My EA",12345,0,Red); Kann ich auch buy-Orders und short-Orders nur mit dem "Bid"-Preis öffnen, sozusagen zu dem Kurswert, den man auf dem Chart sieht ? Quote Link to comment Share on other sites More sharing options...
WOGO Posted October 23, 2010 Report Share Posted October 23, 2010 Wenn du einen Broker ohne Spread findest ansonsten nicht. Quote Link to comment Share on other sites More sharing options...
sill3000 Posted March 9, 2011 Author Report Share Posted March 9, 2011 Habe da mal folgenden Code aufgebaut, scheint aber nicht zu funktionieren. Kennt sich da jemand mit aus ? Wäre sehr dankbar für eure Hilfe. int total=OrdersTotal(); for(int cnt=0;cnt<total;cnt++) { OrderSelect(cnt,SELECT_BY_TICKET,MODE_TRADES); if(OrderType()==OP_BUY) // long position is opened { Print("Hallole BUY"); checkBUY=TRUE; checkSELL=FALSE; } else // go to short position { Print(" Hallole SELL"); checkBUY=FALSE; checkSELL=TRUE; } } Im voraus schon mal besten Dank ! Quote Link to comment Share on other sites More sharing options...
Bull68 Posted March 9, 2011 Report Share Posted March 9, 2011 (edited) int total=OrdersTotal(); for(int cnt=0;cnt<total;cnt++) { if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) == false) continue; if(OrderType()==OP_BUY) // long position is opened { Print("Hallole BUY"); checkBUY=TRUE; checkSELL=FALSE; } else // go to short position { Print(" Hallole SELL"); checkBUY=FALSE; checkSELL=TRUE; } } Hi Sil, so müßte es laufen. Edited March 9, 2011 by Mythos quote in code geändert 1 Quote Link to comment Share on other sites More sharing options...
Vola Posted March 9, 2011 Report Share Posted March 9, 2011 @sill3000Gucken sie eigentlich ab und zu in ihren Briefkasten ? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.