Ich habe eine Frage und zwar habe ich einen eigenen ZigZag Indikator gebaut der aber noch den ATR beinhaltet. Sobald der Close Preis das letzte Hoch des Zig Zags überkreuzt, habe ich es programmiert, dass ich ein Signal bekomme. Da ich aber nur das erste Signal haben möchte es danach aber noch öfter passiert, dass der Close ein Signal abgibt sind die folgenden Signale überfällig. Dieses erste Signal soll solange bestehen bleiben bis der Close unter das letzte Tief des ZigZags fällt. Wie programmiere ich das? Ein anderes Beispiel ist z.b der Rsi kreuzt über 25 und das dadurch entstehende Signal soll erst dann verschwinden, wenn der RSI über 80 steigt.
Hallo! Ich gebe Ihnen ein Beispiel mit dem RSI. Beim Zickzack wäre es ähnlich.
RSILen = 14
RSIValue = RSI[RSILen](Close)
ONCE rsiSignalActive = 0
IF rsiSignalActive = 0 AND RSIValue crosses over 25 THEN
rsiSignalActive = 1
ENDIF
IF rsiSignalActive = 1 AND RSIValue crosses over 80 THEN
rsiSignalActive = 0
ENDIF
RETURN rsiSignalActive
Danke ich habe es nun so programmiert, es klappt aber nur wenn ich es mir im Chart anzeigen lasse. Wenn ich nach dem Signal im Backtest handeln möchte werden aber trotzdem alle Trades berücksichtigt, auch die die eigentlichg wegfalölen sollten. Ich schicke mal meinen Code hier rein. Dieser enthält den ZigZagATR. Meine Idee ist es nur in einem Aufwärtstrend wenn der RSI [Periode 5] über 25 steigt long zu handeln. Den Aufwärtstrend habe ich so definiert, dass er beginnt wenn der Close über das letzte Hoch des ZigZagsATRs steigt. Beendet wir der Aufwärtstrend wenn der Close unter das letzte Tief des ZigZagATR fällt. Ein Abwärtstrend liegt vor sobald der Close unter das letzte Tief des ZigZagATR fällt und endet wenn der Close über das letzte Hoch des ZigZagATR steigt. Wäre nett wenn mir jemand helfen könne oder mir sagt warum das nicht klappt.
myRSI = rsi [5]
maRSI = average [1] (myRSI)
percent = 7
multi = 1
if maRSI crosses over 25 then
bullish = 1
else
bullish = 0
endif
ONCE Zigzagsignalactive = 0
IF Zigzagsignalactive = 0 AND close crosses over lasthigher then
ZigzagsignalActive = 1
ENDIF
IF ZigzagsignalActive = 1 AND close crosses under lastlower THEN
ZigZagSignalActive = 0
ENDIF
If barindex < 13 then
Tief = 0
else
Tief = low-multi*AverageTrueRange[14](close)
endif
If barindex < 13 then
hoch =0
else
Hoch = high+multi*AverageTrueRange[14](close)
endif
If lastpoint <=0 then
Higher = max(higher,Hoch)
if higher <>higher[1] then
highbar = barindex
endif
endif
Peakpercent = (higher-Hoch)/higher
Newpeak = peakpercent >= percent/100
if newpeak then
lasthighbar = highbar
lasthigher = higher
higher = 0
lastpoint = 1
endif
once lower = Tief
if lastpoint >=0 then
lower = min(lower,Tief)
if lower <> lower[1] then
lowbar = barindex
endif
endif
troughpercent = (Tief-lower)/lower
newtrough = troughpercent>=percent/100
if newtrough then
lastlowbar = lowbar
lastlower = lower
lower =Tief*100
lastpoint = -1
endif
if ZigzagsignalActive = 1 and bullish = 1 then
buy 1 lot at market
endif
Hallo gut! Der Grund dafür ist, dass der Backtester vor dem Start standardmäßig 1000 Balken lädt und dadurch Zigzagsignalactive sofort nach dem Start den Wert 1 hat. Eine mögliche Lösung besteht darin, die Balken vor dem Start des Backtests standardmäßig nicht zu laden. defparam preloadbars=0