|
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 |
|
|||
Ja klar. Da nur nach einem Kerzenwechsel die letzte und vorletzte Kerze abgefragt werden muß, braucht diese Abfrage auch nur einmalig pro Kerze sein.
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
hab mal die Long Routine soweit hingebracht, daß das Opening bei Kerzenwechsel funktioniert, nur das Schließen geht nicht, d. h. die Position wird sofort geschlossen. Im Terminal wird angezeigt: invalid ticket for OrderClose function.
Code: extern double Lot=0.01; extern int StopLoss=6; extern int TakeProfit=10; int Multiplier; int i=0; int zaehler; int MagicNumber=1234; double TPValue,SLValue; //+------------------------------------------------------------------+ void OnInit() { Multiplier = 1; if(Digits == 3 || Digits == 5) Multiplier = 10; if(Digits == 6) Multiplier = 100; if(Digits == 7) Multiplier = 1000; TakeProfit *= Multiplier; StopLoss *= Multiplier; TPValue = NormalizeDouble(TakeProfit * Point, Digits); SLValue = NormalizeDouble(StopLoss * Point, Digits); } void start() { int ticket; string comment="Expiration v2 (Long)"; //+------------------------------------------------------------------+ int offeneorders=0; int anzahlorders=OrdersTotal(); if (Close[2] < Open[2] && Close[1] > Open[1]) { for(zaehler=0; zaehler<anzahlorders; zaehler++) { OrderSelect(zaehler, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol()) { offeneorders++; } } if(offeneorders==0) { ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SLValue,Ask+TPValue,comment,0,0,Blue); } if (Time[0] > OrderOpenTime() + 4*Period()*60) { OrderClose(ticket,Lot,Bid,3,0); } } return(0); } |
|
|||
Ich habe mir mal erlaubt, den Code per #-Button so darzustellen, dass man ihn auch lesen kann. So sollte das in Zukunft immer geschrieben werden, sonst kann ihn keiner helfen!
Code:
extern double Lot=0.01; extern int StopLoss=6; extern int TakeProfit=10; int Multiplier; int i=0; int zaehler; int MagicNumber=1234; double TPValue,SLValue; //+------------------------------------------------------------------+ void OnInit() { Multiplier = 1; if(Digits == 3 || Digits == 5) Multiplier = 10; if(Digits == 6) Multiplier = 100; if(Digits == 7) Multiplier = 1000; TakeProfit *= Multiplier; StopLoss *= Multiplier; TPValue = NormalizeDouble(TakeProfit * Point, Digits); SLValue = NormalizeDouble(StopLoss * Point, Digits); } void start() { int ticket; string comment="Expiration v2 (Long)"; //+------------------------------------------------------------------+ int offeneorders=0; int anzahlorders=OrdersTotal(); if (Close[2] < Open[2] && Close[1] > Open[1]) { for(zaehler=0; zaehler<anzahlorders; zaehler++) { OrderSelect(zaehler, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()==Symbol()) { offeneorders++; } } if(offeneorders==0) { ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask- SLValue,Ask+TPValue,comment,0,0,Blue); } if (Time[0] > OrderOpenTime() + 4*Period()*60) { OrderClose(ticket,Lot,Bid,3,0); } } return(0); } Ich habe Einiges umgestellt und v.a. über Funktionsaufrufe den Code strukturiert und die SellOpen-Funktion eingebaut. Code:
extern double Lot=0.01; extern int StopLoss=6; extern int TakeProfit=10; int Multiplier; int i=0; int OffeneOrders; int MagicNumber=1234; double TPValue, SLValue; string Comment = "Expiration v2 (Long)"; //+------------------------------------------------------------------+ int OnInit() { Multiplier = 1; if(Digits == 3 || Digits == 5) Multiplier = 10; if(Digits == 6) Multiplier = 100; if(Digits == 7) Multiplier = 1000; TakeProfit *= Multiplier; StopLoss *= Multiplier; TPValue = NormalizeDouble(TakeProfit * Point, Digits); SLValue = NormalizeDouble(StopLoss * Point, Digits); return(INIT_SUCCEEDED); } void OnTick() { CheckOrders(); CheckOpening(); } void CheckOrders() { bool ret; OffeneOrders = 0; for(int i = OrdersTotal()-1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol()) { if (OrderType() == OP_BUY) { if (Time[0] > OrderOpenTime() + 4*Period()*60) { ret = OrderClose(OrderTicket(), OrderLots(), Bid, 3, 0); if (ret) continue; } } if (OrderType() == OP_SELL) { if (Time[0] > OrderOpenTime() + 4*Period()*60) { ret = OrderClose(OrderTicket(), OrderLots(), Ask, 3, 0); if (ret) continue; } } OffeneOrders++; } } } } void CheckOpening() { if (Close[2] < Open[2] && Close[1] > Open[1]) { if(OffeneOrders == 0) { int ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, Ask-SLValue, Ask+TPValue, Comment, 0, 0, Blue); } } if (Close[2] > Open[2] && Close[1] < Open[1]) { if(OffeneOrders == 0) { int ticket = OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, Bid+SLValue, Bid-TPValue, Comment, 0, 0, Green); } } } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
DANKE ! !
werde es gleich ausprobieren. LG Dieter |
|
|||
Hallo traderdoc,
klappt prima, jetzt wollte ich noch, daß wenn die Position geschlossen wird, er nicht sofort in die laufende Kerze wieder eröffnet. Gruß Dieter23 |
|
|||
Code:
datetime OldBar; void OnTick() { if (OldBar != Time[0]) { CheckOpening(); OldBar = Time[0]; } CheckOrders(); } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
vielleicht erinnern Sie sich noch an mich, Sie haben mir vor ca. 2 Jahre einen Bot programmiert. Name devisen-scalper, der martingalmäßig nachkauft über RSI Signal. Lief eine Weile sehr gut, dann hat er mir mein Konto geplättet.
Gruß Dieter23 |
|
|||
Ja natürlich. Das ist natürlich sehr schade, lag jedoch nicht an meinem Teil der Programmierung. Der Hauptteil des EAs war fremdgecodet, was auch nicht bedeutet, dass da die Ursache zu suchen sei. Ein Handelssystem auf Martingale-Basis ist immer ein heißes Eisen, mit viel Potential nach oben, aber eben auch nach unten.
Wenn es wieder mal was zu programmieren gibt, dann sagen Sie einfach Bescheid. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. Geändert von traderdoc (10.06.16 um 18:10 Uhr) |
Lesezeichen |
Stichworte |
kerze, kerzen, kerzenwechsel, mql4, programmierung, programmierung metatrader, wechsel kerze |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|