Die Ressourcen sind geladen. Beförderung...

John's Bitcoin Intraday Trading Strategie basierend auf mehreren Indikatoren

Schriftsteller:ChaoZhang, Datum: 23.07.2023
Tags:

img

Übersicht

Diese Strategie kombiniert RSI, MFI, Stoch RSI und MACD vier Indikatoren, um Bitcoin Intraday-Handel umzusetzen.

Strategie Logik

  1. Der RSI-Indikator wird verwendet, um festzustellen, ob der Markt überkauft oder überverkauft ist.

  2. Der MFI-Indikator beurteilt den Kapitalfluss auf dem Markt und erzeugt ein Kaufsignal, wenn der MFI unter 23 liegt, und ein Verkaufssignal, wenn der MFI über 80 liegt.

  3. Der Stoch RSI-Indikator bestimmt, ob der Markt überkauft oder überverkauft ist. Er erzeugt ein Kaufsignal, wenn die K-Linie unter 34 liegt und ein Verkaufssignal, wenn sie über 80 liegt.

  4. Der MACD-Indikator beurteilt den Markttrend und die Dynamik. Er erzeugt ein Kaufsignal, wenn die schnelle Linie unter der langsamen Linie liegt und das Histogramm negativ ist, und ein Verkaufssignal für das entgegengesetzte Szenario.

Analyse der Vorteile

  1. Die Kombination von vier Hauptindikatoren verbessert die Genauigkeit des Signals und vermeidet Verluste, die durch den Ausfall eines einzelnen Indikators verursacht werden.

  2. Aufträge werden nur dann erteilt, wenn mehrere Indikatoren gleichzeitig Signale geben, was die Wahrscheinlichkeit falscher Signale erheblich verringert.

  3. Die Einführung von Intraday-Handelsstrategien vermeidet Übernachtrisiken und senkt die Kapitalkosten.

Risiken und Lösungen

  1. Die Handelsfrequenz der Strategie kann relativ gering sein, mit bestimmten zeitlichen Risiken.

  2. Es besteht immer noch die Wahrscheinlichkeit, dass Indikatoren falsche Signale geben können.

  3. Es gibt einige Überkauf- und Überverkaufsrisiken, wobei die Indikatorparameter entsprechend angepasst oder weitere Indikatorlogik hinzugefügt werden können.

Optimierungsrichtlinien

  1. Hinzufügen von adaptivem Indikatorparameter, Anpassung von Indikatorparametern in Echtzeit basierend auf Marktvolatilität und Veränderungsgeschwindigkeit.

  2. Hinzufügen von Stop-Loss-Logik. Stop-Loss-Ausgang, wenn Verluste einen bestimmten Prozentsatz übersteigen, um einen einzelnen Verlust effektiv zu kontrollieren.

  3. Verstärken Sie multidimensionale Urteile wie Markthitze und Marktangst, um den Strategiegewinnraum zu verbessern.

Schlussfolgerung

Durch die Überprüfung von Signalen anhand von vier wichtigen Indikatoren kann diese Strategie die Falschsignalrate effektiv reduzieren und ist eine relativ stabile Hochfrequenz-Gewinnstrategie.


/*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)

Mehr