複数の指標を組み合わせたビットコインデイトレード戦略


作成日: 2023-12-07 15:23:44 最終変更日: 2023-12-07 15:23:44
コピー: 1 クリック数: 692
1
フォロー
1621
フォロワー

複数の指標を組み合わせたビットコインデイトレード戦略

概要

この戦略は,RSI,MFI,Stoch RSI,MACDの4つの指標を組み合わせて,ビットコインの1日間の取引を実現する.複数の指標が同時に買入または売却のシグナルを発信するときに,戦略は,リスクを制御するために注文する.

戦略原則

  1. RSI指標は,市場が超買い超売りかどうかを判断するために使用される.RSIは40を下回ると買入シグナルを生じ,70を超えると売出シグナルを生じます.

  2. MFI指標は市場の資金流動を判断する.MFIは23を下回ると買取シグナルを生じ,80を超えると売出シグナルを生じする.

  3. Stoch RSIは,市場が超買超売りかどうかを判断する.K線が34を下回ると買入シグナルが生じ,80を超えると売出シグナルが生じます.

  4. MACD指標は市場の傾向と動力を判断する.快線が慢線より低く,柱が負であるとき,買入シグナルを生じ,逆に,売出シグナルを生じする.

優位分析

  1. 4つの指標を組み合わせて,信号の正確性を高め,単一の指標の故障による損失を避ける.

  2. 複数の指標が同時に信号を発信するときにのみ注文を行うことで,偽信号の確率を大幅に減らすことができる.

  3. 昼間取引戦略を採用し,夜間リスクを回避し,資金コストを削減します.

リスクと解決策

  1. 戦略取引頻度は低い可能性があり,一定の時間リスクがある.指標パラメータを適切に緩和して取引回数を増加させることができる.

  2. 指標が誤信号を発する確率は依然として存在します. 機械学習アルゴリズムを導入して,指標信号の信頼性を判断するのに役立ちます.

  3. ある程度の超買超売リスクが存在する.指標のパラメータを適切に調整するか,他の指標判断論理を追加することができる.

最適化の方向

  1. 市場変動と変化速度に応じてリアルタイムで微調整する指標パラメータ機能を追加.

  2. ストップロズロジックを追加. 損失が一定比率を超えるとストップロズ退出,単一損失を効果的に制御する.

  3. 感情指標と組み合わせて. 市場熱度,市場パニック度などの多次元判断を高め,戦略の利得空間を向上させる.

要約する

この戦略は,四大指標の相互検証によって信号を発信し,偽信号率を効果的に低減させ,比較的安定した高周波収益戦略である.パラメータとモデルの継続的な最適化とともに,戦略の勝利率と収益能力がさらに向上する見込みである.

ストラテジーソースコード
/*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)