
Die Strategie kombiniert vier Indikatoren RSI, MFI, Stoch RSI und MACD, um den Tageshandel mit Bitcoin zu ermöglichen. Die Strategie wird nur dann angeordnet, wenn mehrere Indikatoren gleichzeitig ein Kauf- oder Verkaufssignal senden, um das Risiko zu kontrollieren.
Der RSI-Indikator wird verwendet, um zu bestimmen, ob ein Markt überkauft oder überverkauft ist. Wenn der RSI unter 40 liegt, erzeugt er ein Kaufsignal, wenn er über 70 ist, erzeugt er ein Verkaufssignal.
Der MFI-Indikator beurteilt die Geldflüsse des Marktes. MFI erzeugt ein Kaufsignal, wenn es unter 23 liegt, und ein Verkaufsignal, wenn es über 80 liegt.
Der Stoch RSI beurteilt, ob der Markt überkauft oder überverkauft ist. Die K-Linie erzeugt ein Kaufsignal, wenn sie unter 34 liegt, und ein Verkaufssignal, wenn sie über 80 liegt.
Der MACD-Indikator beurteilt die Markttrends und -dynamik. Die Schnelllinie erzeugt ein Kaufsignal, wenn sie unter der Schnelllinie liegt und die Säule negativ ist, und dagegen ein Verkaufssignal.
Die Kombination der vier Hauptindikatoren erhöht die Signalgenauigkeit und verhindert Verluste durch Fehlfunktionen eines einzelnen Indikators.
Die Wahrscheinlichkeit von Falschsignalen wird erheblich reduziert, wenn nur mehrere Indikatoren gleichzeitig signalisieren.
Die Einführung von Tagesgeschäften verhindert Übernachtungsrisiken und senkt die Kapitalkosten.
Die Strategie kann mit geringer Frequenz und einem gewissen Zeitrisiko gehandelt werden. Die Parameter des Indikators können entsprechend gelockert werden, um die Anzahl der Geschäfte zu erhöhen.
Die Wahrscheinlichkeit, dass ein Indikator ein falsches Signal aussendet, bleibt bestehen. Machine Learning-Algorithmen können eingeführt werden, um die Zuverlässigkeit des Indikatorsignals zu beurteilen.
Es besteht ein gewisses Risiko von Überkauf und Überverkauf. Die Parameter des Indikators können entsprechend angepasst oder andere Indikatoren-Urteilslogiken hinzugefügt werden.
Hinzugefügt wurde die Funktion zur Anpassung der Indikatorparameter. Die Indikatorparameter werden in Echtzeit entsprechend der Marktfluktuation und der Geschwindigkeit der Veränderung angepasst.
Ein zusätzliches Stop-Loss-Verfahren. Wenn der Verlust einen bestimmten Prozentsatz überschreitet, wird ein Stop-Loss-Exit eingeführt, um den Einzelschaden effektiv zu kontrollieren.
In Kombination mit Emotionsindikatoren erhöht die Markthitze, die Panik und andere mehrdimensionale Beurteilungen, die den strategischen Gewinnraum erhöhen.
Diese Strategie sendet Signale aus, die durch die gegenseitige Bestätigung der vier Hauptindikatoren wirksam sind, um die Falschsignalrate zu reduzieren. Sie ist eine relativ stabile Hochfrequenz-Gewinnstrategie. Mit der ständigen Optimierung der Parameter und Modelle werden die Gewinnrate und die Gewinnfähigkeit der Strategie voraussichtlich weiter verbessert.
/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('John Day Stop Loss', overlay=false, pyramiding=1, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency='USD', precision=2)
strategy.risk.allow_entry_in(strategy.direction.long)
from_day = input.int(defval=1, title='From Day', minval=1)
from_month = input.int(defval=1, title='From Month', minval=1)
from_year = input.int(defval=2021, title='From Year', minval=2020)
to_day = input.int(defval=1, title='To Day', minval=1)
to_month = input.int(defval=1, title='To Month', minval=1)
to_year = input.int(defval=2025, title='To Year', minval=2020)
time_cond = time > timestamp(from_year, from_month, from_day, 00, 00) and time < timestamp(to_year, to_month, to_day, 00, 00)
//time_cond = true
//Stop Loss
longProfitPerc = input.float(title="Stop Loss Profit (%)", defval=2.1) / 100
longExitPrice = strategy.position_avg_price * (1 - longProfitPerc)
//RSI - yellow
up = ta.rma(math.max(ta.change(close), 0), 14)
down = ta.rma(-math.min(ta.change(close), 0), 14)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, "RSI", color=#00FFFF)
buy_rsi = true // rsi < 40
sell_rsi = true //rsi > 70
//MFI - cyan
mf = ta.mfi(hlc3, 14)
plot(mf, "MF", color=#FFFF00)
buy_mfi = mf < input.int(defval=23, title='Max MF', minval=1)
sell_mfi = mf > input.int(defval=80, title='Min MF', minval=1)
//Stoch RSI
OverBought_StochRSI = input(80)
OverSold_StochRSI = input(34)
smoothK = input.int(3, "K", minval=1)
smoothD = input.int(2, "D", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(14, "Stochastic Length", minval=1)
srcRSI = input(close, title="RSI Source")
rsi1 = ta.rsi(srcRSI, lengthRSI)
kStochRSI = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(kStochRSI, smoothD)
co = ta.crossover(kStochRSI,d)
cu = ta.crossunder(kStochRSI,d)
buy_stochRSI = co and kStochRSI < OverSold_StochRSI
sell_stochRSI = cu and kStochRSI > OverBought_StochRSI
plot(kStochRSI, "K", color=#2962FF)
plot(d, "D", color=#FF6D00)
h0 = hline(OverBought_StochRSI, "Upper Band", color=#787B86)
h1 = hline(OverSold_StochRSI, "Lower Band", color=#787B86)
fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")
//MACD
// Getting inputs
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Plot colors
//col_macd = input(#2962FF, "MACD Line ", group="Color Settings", inline="MACD")
//col_signal = input(#FF6D00, "Signal Line ", group="Color Settings", inline="Signal")
//col_grow_above = input(#26A69A, "Above Grow", group="Histogram", inline="Above")
//col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
//col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
//col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
buy_MACD = macd < signal and hist < 0
sell_MACD = macd > signal and hist > 0
//buy_MACD = true
//sell_MACD = true
//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
//plot(macd, title="MACD", color=col_macd)
//plot(signal, title="Signal", color=col_signal)
sessionColor = color(na)
if time_cond
if (not na(kStochRSI) and not na(d))
cmt = str.tostring(close)
if (buy_stochRSI and buy_MACD and buy_mfi and buy_rsi)
strategy.entry("BUY", strategy.long, comment='BUY @ ' + cmt)
if longProfitPerc != 0
strategy.exit(id="x", stop=longExitPrice, comment='EXIT @ ' + str.tostring(longExitPrice))
sessionColor := input.color(#0000FF, "buy") //red
if (sell_stochRSI and sell_MACD and sell_mfi and sell_rsi)
strategy.entry("SELL", strategy.short, comment='SELL @ ' + cmt)
sessionColor := input.color(#FF0000, "sell") //green
bgcolor(sessionColor)