|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Kerzenwechsel
Hallo,
1. wie kann ich einen Kerzenwechsel d.h. long Kerze nach short Kerze u. umgekehrt abfragen. 2. nach Eröffnen eines Trades soll nach z.B. 4 Kerzen die Position wieder geschlossen werden. Bitte um Hilfe. Gruß Dieter |
|
|||
zu1.)
Long- zu Short-Kerze: if (Close[2] > Open[2] && Close[1] < Open[1]) Short- zu Long-Kerze: if (Close[2] < Open[2] && Close[1] > Open[1]) zu 2.) if (Time[0] > OrderOpenTime() + 4*Period()*60) traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Danke für die schnelle Antwort
LG Dieter |
|
|||
Hab mal versucht das Schließen der Order in den Ea einzubauen. Klappt leider nicht.Wo ist der Fehler?
extern int StopLoss=50; extern int TakeProfit=50; //+------------------------------------------------------------------+ void start() { double SL,TP; int i,Total; int Dig=MarketInfo(Symbol(),MODE_DIGITS); int order_ticket; //+------------------------------------------------------------------+ Total=OrdersTotal(); if(Total>0) { for(i=Total-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) { if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderStopLoss()==0 && OrderTakeProfit()==0) { if(StopLoss>0)SL=OrderOpenPrice()+StopLoss*Point;e lse SL=0; if(TakeProfit>0)TP=OrderOpenPrice()-TakeProfit*Point;else TP=0; OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(SL,Dig),NormalizeDouble(TP,Dig),0,CLR_NON E); if (Time[0] > OrderOpenTime() + 2*Period()*60) OrderClose(OrderTicket(),0.1,Bid,3,0); return(0); } if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderStopLoss()==0 && OrderTakeProfit()==0) { if(StopLoss>0)SL=OrderOpenPrice()-StopLoss*Point;else SL=0; if(TakeProfit>0)TP=OrderOpenPrice()+TakeProfit*Poi nt;else TP=0; OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(SL,Dig),NormalizeDouble(TP,Dig),0,CLR_NON E); if (Time[0] > OrderOpenTime() + 2*Period()*60) OrderClose(OrderTicket(),0.1,Ask,3,0); return(0); } } } } } |
|
|||
"Klappt leider nicht" ist zwar das Endergebnis Deiner Beobachtung, mit der man aber manchmal sehr wenig anfangen kann. In diesem Falle ist der Fehler offensichtlich, dass bei OrderClose() die BuyOrder mit dem Bid und die SellOrder mit dem Ask geschlossen werden muß! Vorausgesetzt die Lotgröße beträgt tatsächlich 0.1.
Also, wenn irgendwas nicht klappt, dann gibt es in der Regel auch eine Fehlermeldung des MT4 im Terminal unter Reiter "Expert". Und in diesem Falle bin ich mir sicher, dass da stand: INVALID_PRICE. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
habe Bid und Ask getauscht, Order wird nicht beendet, läuft einfach weiter .
Beim Kompilieren erscheint keine Fehlermeldung nur Warnings. Gruß Dieter |
|
|||
Nein, ich meine nicht beim Compilieren, sondern wenn der EA im Chart läuft, werden alle Fehlermeldungen im Terminal unter dem Reiter "Expert" aufgelistet. Wenn der EA also zum erwarteten Zeitpunkt nicht schließt könnte da eine Meldung stehen.
Und dann nimm bitte zum Schreiben des Codes den Button # über dem Textfeld. Den Code kann man dann viel besser lesen. Desweiteren wird der EA dann die Orders nicht schließen, weil über if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderStopLoss()==0 && OrderTakeProfit()==0) in diesen Teil nur eingesprungen wird, wenn auch tatsächlich SL und TP 0 sind. Das aber darunter der SL und TP in der Order gesetzt werden, würde beim nächsten Tick nicht mehr die Bedingung erfüllt sein und damit würde die Zeile OrderClose(OrderTicket(),0.1,Bid,3,0); nicht durchlaufen werden - also auch kein Close. Es macht sich gut, immer an bestimmten Stellen ein Print("Irgendetwas"); einzufügen. Dann sieht man im Reiter Expert des Terminals nämlich, wo der EA langgelaufen ist und wo eben nicht. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
ok, hat geklappt. Jetzt noch Punkt 1. Umkehrkerze einbauen. Wo kann man die Abfrage am besten einbauen?
Danke im vorraus Dieter |
|
|||
Am Anfang mittels:
Code:
//global datetime OldBar; deklarieren if (OldBar != Time[0]) { //Abfrage und evtl. Aktion oder Variablensetzung zur späteren Verarbeitung OldBar = Time[0] } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
kerze, kerzen, kerzenwechsel, mql4, programmierung, programmierung metatrader, wechsel kerze |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|