|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Wenn Wert bei X war und Y durchkreuzt
Hallo,
ich habe mir einen CCI EA erstellt und habe damit ein kleines Problem. Mein Wunsch: Wenn zB. der CCI bei -120 war und -100 durchkreuzt soll ein Trade eröffnet werden. Geschrieben ist es jetzt so wenn der CCI den Wert -100 durchkreuzt (von Unten nach Oben) wird ein Trade eröffnet. Doch hier entsteht schon das erste Problem: Manchmal wird sogor bereits ein Trade eröffnet wenn der Wert -100 von Oben nach Unten durchkreuzt wird. (Beispiel: CCI geht von +1 auf -100 und bereits hier wird schon ein Trade eröffnet, obwohl der Trade erst eröffnen soll, wenn der CCI von zB -120 durch -100 geht) Die Lösung wäre wahrscheinlich eine Schleife einzubauen, leider bekomme ich das einfach nicht Fehlerfrei hin, könnte mir da wer helfen? Hier wäre der Code: Code:
//Open Buy Order, instant signal is tested first RefreshRates(); if(Cross(6, iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) > Buy_wenn_X_durchkreuzt) //Commodity Channel Index crosses above fixed value && Bid > iMA(NULL, PERIOD_CURRENT, MA_Period, MA_Shift, MODE_EMA, PRICE_CLOSE, Shift) + OpenTrade_EntfernungMA * Point() //Price > Moving Average + fixed value ) { RefreshRates(); price = Ask; SL = StopLoss * Point(); //Stop Loss = value in points (relative to price) if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterMinutes * 60) return; //next open trade after time if(!inTimeInterval(TimeCurrent(), TOD_From_Hour, TOD_From_Min, TOD_To_Hour, TOD_To_Min)) return; //open trades only at specific times of the day if(IsTradeAllowed()) { ticket = myOrderSend(OP_BUY, price, TradeSize, ""); if(ticket <= 0) return; } else //not autotrading => only send alert myAlert("order", ""); LastTradeTime = TimeCurrent(); myOrderModifyRel(ticket, SL, 0); } //Open Sell Order, instant signal is tested first RefreshRates(); if(Cross(7, iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) < Sell_wenn_X_durchkreuzt) //Commodity Channel Index crosses below fixed value && Bid < iMA(NULL, PERIOD_CURRENT, MA_Period, MA_Shift, MODE_EMA, PRICE_CLOSE, Shift) - OpenTrade_EntfernungMA * Point() //Price < Moving Average - fixed value ) { RefreshRates(); price = Bid; SL = StopLoss * Point(); //Stop Loss = value in points (relative to price) if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterMinutes * 60) return; //next open trade after time if(!inTimeInterval(TimeCurrent(), TOD_From_Hour, TOD_From_Min, TOD_To_Hour, TOD_To_Min)) return; //open trades only at specific times of the day if(IsTradeAllowed()) { ticket = myOrderSend(OP_SELL, price, TradeSize, ""); if(ticket <= 0) return; } else //not autotrading => only send alert myAlert("order", ""); LastTradeTime = TimeCurrent(); myOrderModifyRel(ticket, SL, 0); } |
|
|||
Ich glaube, Du musst ihm nur besser erklären, was er machen soll.
Nimm BID raus und benutz nur die Werte, die der CCI liefert. Parameter: extern double CCI_indicator_level1=-100.0; extern double CCI_indicator_level2=100.0; extern int InpCCIPeriod=14; input ENUM_APPLIED_PRICE CCI_Price=PRICE_TYPICAL; CCI Deklaration: double CCI=iCCI(_Symbol,_Period,InpCCIPeriod,CCI_Price,1) ; (//CCI_IL1=-100.0 / CCI_IL2=(+)100.0 ? ) Bedingungen: if (CCI > CCI_indicator_level1 && CCI < 0.0) long gehn if (CCI < CCI_indicator_level2 && CCI > 0.0) short gehn Hab aber ewig nix mit dem CCI am Hut gehabt. Vielleicht verwechsel ich die Lines. Musst mal schaun bzw. testen. Edit:Erzähl dann bitte mal, wie er so abschneidet. |
|
|||
Zitat:
Hab ich versucht, funktioniert leider so nicht. Jemand eine Lösung? PS: Ich berichte gerne, wenn ich den EA mal zum laufen bekomme lg thmatzer |
|
|||
In dem von Dir geposteten Code, ersieht man überhaupt nicht, wann der Trade bei welchem CCI geöffnet wird. D.h. der Code ist so nicht nachvollziehbar. Und solange er das nicht ist, brauchen wir hier auch nicht weiterrätseln.
@MA-EA, das wundert mich, denn Du hast uns monatelang mit Deinem CCI drangsaliert. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
Buy_wenn_X_durchkreuzt = -120 Sell_wenn_X_durchkreuz = +120 Was ich gerne haben will: Buy: Sobald der CCI von unten (zb. -150) durch -120 geht, soll ein Buy-Order eröffnet werden Sell: Sobald der CCI von oben (zB. +150) durch +120 geht, soll ein Sell-Order eröffnet werden |
|
|||
OK und was ist das für eine Funktion?:
Cross(6, iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) > Buy_wenn_X_durchkreuzt) Was bewirkt die 6 und was wird in dieser Funktion berechnet? So, wenn Buy_wenn_X_durchkreuzt = -120 sein soll, dann würde iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) > Buy_wenn_X_durchkreuzt immer dann true werden, solange!! der CCI > Buy_wenn_X_durchkreuzt ist. Richtig wäre hier: double CCI_1 = iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, 1); double CCI_2 = iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, 2); if (CCI_2 < Buy_wenn_X_durchkreuzt && CCI_1 > Buy_wenn_X_durchkreuzt) { ... } D.h. es muss beim Kreuzen immer der Zustand der vorletzen zur letzten geschlossenen Kerze oder der letzten geschlossenen zur aktuellen Kerze (0) betrachtet werden. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
Als double deklarieren. Gibts da überhaupt 150? Wenn dann allerhöchstens 150.0 Erklär mal ganz genau was das Gerät machen soll. Edit:Und wenn die (vor-) letzte Kerze z.B. nicht 150 sondern kleiner als Deine 120 war? Und warum eigentlich bei 120? Gut möglich dass da noch ungünstiger oder nen Seitwärtstrend herrscht. |
|
|||
@MA-EA, lies Dir mal mein Post genau durch.
Das hatten wir bei Deinem CCI-Thread alles schon einmal! traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Zitat:
Danke für deine schnelle Hilfe! Das ist aber leider nicht genau das, was ich wollte. Bei dem Code wird der Trade ja nur um 1 Kerze verschoben, also sobald der CCI -120 kreuzt (egal ob von oben oder von unten) wird ab der nächsten Kerze ein Trade eröffnet. Mein Vorhaben wäre ja, wenn der CCI sich beispielsweiße von -150 sich in Richtung andere Seite bewegt (sagen wir mal zu +100) und sobald der CCI -120 durchkreuzt, soll der Trade eröffnet werden, und wirklich genau dann und nicht 1 Kerze später etc. Ist sowas umsetzbar? lg thmatzer |
|
|||
Zitat:
Nein, der Trade würde nur eröffnet werden, wenn der CCI von unten nach oben die -120 kreuzt. Deshalb habe ich ja such geschrieben, dass Shift = 2 und Shift = 1 benutzt werden soll, wenn auf den Kerzenwechsel geöffnet werden soll oder Shift = 1 und Shift = 0, wenn der CCI der letzten geschlossenen Kerze und der CCI der aktuellen Kerze zum Öffnen dienen soll. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
|
|