
이 전략은 RSI, MFI, Stoch RSI, MACD의 네 가지 지표를 결합하여 비트코인의 일일 거래를 가능하게 한다. 여러 지표가 동시에 구매 또는 판매 신호를 발산할 때만 전략은 주문을 하여 위험을 통제한다.
RSI 지표는 시장이 과매매되고 과매매되는지 판단하는 데 사용됩니다. RSI가 40보다 낮으면 구매 신호가 발생하고 70보다 높으면 판매 신호가 발생한다.
MFI 지표는 시장의 자금 흐름을 판단한다. MFI는 23보다 낮으면 구매 신호를 발생시키고, 80보다 높으면 판매 신호를 발생시킨다.
Stoch RSI 지표는 시장이 과매매를 하고 있는지 판단한다. K선 아래 34은 구매 신호를 발생시키고, 80 이상은 판매 신호를 발생시킨다.
MACD 지표는 시장의 추세와 동력을 판단한다. 빠른 선이 느린 선보다 낮고 기둥이 마이너스일 때 구매 신호를 발생시키고, 반대로 판매 신호를 발생시킨다.
4개의 지표가 결합되어 신호의 정확성을 높여 단일 지표의 실패로 인한 손실을 방지한다.
여러 지표가 동시에 신호를 발산할 때만 주문을 할 수 있으며, 이는 가짜 신호의 가능성을 크게 줄일 수 있다.
일일 거래 전략을 채택하여, 밤새의 위험을 피하고, 자본 비용을 절감하십시오.
전략 거래 빈도가 낮아질 수 있고, 일정 시간 위험이 있다. 지표 매개 변수를 적절히 완화하여 거래 횟수를 증가시킬 수 있다.
지표가 잘못된 신호를 보내는 확률은 여전히 존재한다. 기계 학습 알고리즘을 도입하여 지표 신호의 신뢰성을 판단할 수 있다.
특정 과매매 과매매 위험이 있습니다. 지표 매개 변수를 적절히 조정하거나 다른 지표 판단 논리를 추가 할 수 있습니다.
시장의 변동성과 변화 속도에 따라 실시간 미세 조정하는 지표 매개 변수 기능이 추가되었다.
추가된 스톱로스 논리. 손실이 일정 비율을 초과하면 스톱로스 탈퇴, 단독 손실을 효과적으로 제어한다.
감정 지표와 결합하여. 시장의 열기와 시장의 공포와 같은 다차원 판단을 증가시키고, 전략의 수익 공간을 향상시킵니다.
이 전략은 4개의 큰 지표가 상호 검증하는 방식으로 신호를 발사하여, 가짜 신호율을 효과적으로 감소시킬 수 있으며, 비교적 안정적인 고주파 수익 전략이다. 매개 변수와 모델의 지속적인 최적화와 함께 전략의 승률과 수익성이 더욱 향상될 것으로 예상된다.
/*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)