|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Metatrader 4 Bugs
Hallo.
Der Stochastic Indikator scheint nicht der Einzige zu sein, der im MT4 falsch funktioniert. Wie man auf dem Bild sieht, hat der EA um 4:02 einen Sell geöffnet, obwohl der RVI gar nicht das Signal dafür gegeben hat. Das letzte Signal für einen Sell war um 0:00. Da hat er um 1:00 wie er es sollte, auch Welche aufgemacht. Aber um 4 war der RVI-Wert überm RVI-Signal-Wert. Da hätte er gar keinen Sell öffnen dürfen: Der EA ist im Anhang. Sollte doch was an meinem Code nicht stimmen, könnt Ihr es mir sehr gerne erklären. Aber so wie es aussieht, funktionieren einige Indikatoren im MT4 dann und wann nicht korrekt. |
|
|||
Hat Niemand ne Idee, warum der EA nen Sell aufmacht, obwohl die Bedingungen dafür nicht erfüllt sind?
Code:
extern int RVI_Period=40; Code:
double RVI_Ma_B1=iRVI(Symbol(),Timeframe,RVI_Period,MODE_MAIN,1); double RVI_Ma_B0=iRVI(Symbol(),Timeframe,RVI_Period,MODE_MAIN,0); double RVI_Si_B1=iRVI(Symbol(),Timeframe,RVI_Period,MODE_SIGNAL,1); double RVI_Si_B0=iRVI(Symbol(),Timeframe,RVI_Period,MODE_SIGNAL,0); Code:
if(open_Buy==true&& RSI_B1>RSI_IL_1 && RSI_B0>RSI_B1 && RVI_Ma_B1>RVI_Si_B1 && RVI_Ma_B0>RVI_Ma_B1 ){ if(IsTradeAllowed()==true)Ti=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Buy_SL,Buy_TP,NULL,Buy_MN,0,Beige); ... if(open_Sell==true&& RSI_B1<RSI_IL_2 && RSI_B0<RSI_B1 &&RVI_Ma_B1<RVI_Si_B1 && RVI_Ma_B0<RVI_Ma_B1 ){ if(IsTradeAllowed()==true)Ti=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Sel_SL,Sel_TP,NULL,Sell_MN,0,Blue); ... |
|
|||
Der Effekt ist logisch denn ein Indikator der auf den close[0] berechnet wird, "repaintet" sozusagen da close[0] dem sich veränderndem Bid entspricht bis eine neue Kerze kommt. Erst nach der folgenden Kerze ist der Wert fixiert und entspricht dem was man auf dem Chart im nachhinein sieht. Während der Kerze kann der Indi aber die Signale auslösen da close[0] sich währenddessen dem veränderndem Bid entspricht. Was passieren kann ist sozusagen im nachhinein nicht mehr sichbar.
close[0] -> Repaint da == Bid open[0] -> kein Repaint close[1] -> kein Repaint open[1] -> kein Repaint Um diesen Effekt zu vermeiden müsste man jeweils um eins nach hinten shiften oder auf den open-Kurs berechnen. Gruß |
|
|||
Das Problem haben also nur Indikatoren, wenn sie auf Bar 0 angesetzt werden?
Wie ist das bei nem Vergleich mit Open Bar 0 und Bid/Ask? |
|
|||
Ja wenn Close[0] bei der Berechnung eines Indis verarbeitet wird, verändert sich jeden Tick der Output des Indis bis der Bar abgeschlossen wurde da es dem laufenden Bid-Kurs entspricht. Auch High[0] und Low[0] kann sich bis zum Ende des Bars immer wieder ändern.
Open[0] hat als einziger kein "Repaint" da sich dieser Wert nach dem ersten Tick nie mehr ändert. Bid/Ask verändert sich wiederum natürlich bei jedem Tick. Ich würde das Ganze aber nicht als Problem beschreiben sondern als Effekt der eben bei der Zeitchartgenerierung auftritt. Eine Zeit-Kerze/Bar wird nun mal angezeigt bevor der nächste auftritt daher kann sich bis dahin close/high/low immer wieder verändern. |
|
|||
Danke. Die Vergleiche von irgendwelchen Bar 0 Geschichten waren das Problem.
Wie ist das, wenn der EA z.B. RSI Bar 1 und Bar 2 vergleicht? Ob RSI Bar 1 </> RSI Bar 2 ist? |
Lesezeichen |
|
|