
この戦略は,ブリン帯,RSI,ADX,MACDなどの複数の指標を使用して,市場の傾向を判断し,強いトレンド識別能力を持っています.指標信号が同時にブルイッシュであるとき,追及策略を取ります.指標信号が同時にベアッシュであるとき,平仓ストップします.
複数の指標の組み合わせで判断し,価格トレンドを正確に識別し,トレンドが発生したときにタイムリーで追跡し,余剰収益を達成します.
この戦略の最大の利点は,指標の組み合わせの判断がより包括的で正確であり,価格動向を効果的に識別し,単一の指標によって引き起こされる偽信号を回避することです.
具体的には,次の利点があります.
戦略の安定性を高めるため,偽信号を最大限に減らすために,指標の組み合わせを判断します.
この戦略の主なリスクは以下の通りです.
リスク1では,複数の指標に依存しているため,単一の指標の失敗を一定程度に回避できるが,リスク管理の改善が必要である.
リスク2に合わせて,適切なパラメータを調整して,取引区間を縮小し,取引頻度を減らして,リスクを低減する.
この戦略の改善策は以下の通りです.
継続的な最適化により,戦略パラメータの強さを向上させ,偽信号の可能性を低減する.
この戦略は,全体的にトレンド信号を識別する能力があり,指標の組み合わせによって,価格トレンドを効果的に識別できます.
しかし,一定のリスクも存在し,風力制御機構を継続的に完善し,パラメータを継続的に最適化することで,長期にわたって安定した動作が可能になる.後期に機械学習などの方法が導入されれば,パラメータの自動最適化が可能になり,戦略の性および収益能力が大きく向上する.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 5h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © abilash.s.90
dIMinusCalc(adxLen) =>
smoothedTrueRange = 0.0
smoothedDirectionalMovementMinus = 0.0
dIMinus = 0.0
trueRange = 0.0
directionalMovementMinus = 0.0
trueRange := max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
directionalMovementMinus := nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
smoothedTrueRange := nz(smoothedTrueRange[1]) - (nz(smoothedTrueRange[1])/adxLen) + trueRange
smoothedDirectionalMovementMinus := nz(smoothedDirectionalMovementMinus[1]) - (nz(smoothedDirectionalMovementMinus[1])/adxLen) + directionalMovementMinus
dIMinus := smoothedDirectionalMovementMinus / smoothedTrueRange * 100
dIMinus
dIPlusCalc(adxLen) =>
smoothedTrueRange = 0.0
smoothedDirectionalMovementPlus = 0.0
dIPlus = 0.0
trueRange = 0.0
directionalMovementPlus = 0.0
trueRange := max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
directionalMovementPlus := high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
smoothedTrueRange := nz(smoothedTrueRange[1]) - (nz(smoothedTrueRange[1])/adxLen) + trueRange
smoothedDirectionalMovementPlus := nz(smoothedDirectionalMovementPlus[1]) - (nz(smoothedDirectionalMovementPlus[1])/adxLen) + directionalMovementPlus
dIPlus := smoothedDirectionalMovementPlus / smoothedTrueRange * 100
dIPlus
Adx(adxLen) =>
dIPlus = 0.0
dIMinus = 0.0
dX = 0.0
aDX = 0.0
dIPlus := dIPlusCalc(adxLen)
dIMinus := dIMinusCalc(adxLen)
dX := abs(dIPlus-dIMinus) / (dIPlus+dIMinus)*100
aDX := sma(dX, adxLen)
aDX
BarInSession(sess) => time(timeframe.period, sess) != 0
//@version=4
strategy("Bollinger Band + RSI + ADX + MACD", overlay=true)
//Session
session = input(title="Trading Session", type=input.session, defval="0930-1500")
sessionColor = BarInSession(session) ? color.green : na
bgcolor(color=sessionColor, transp=95)
// Bollinger Bands
src = input(high, title="Bollinger Band Source", type=input.source)
length = input(3, minval=1, type=input.integer, title="Bollinger Band Length")
mult = input(4.989, minval=0.001, maxval=50, step=0.001, type=input.float, title="Bollinger Band Std Dev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
plot(upper, title="Bollinger Band Upper", color=color.red)
plot(lower, title="Bollinger Band Lower", color=color.green)
// RSI
rsiSrc = input(close, title="RSI Source", type=input.source)
rsiLength = input(16, minval=1, type=input.integer, title="RSI Length")
rsiComparator = input(39.2, title="RSI Comparator", type=input.float, step=0.1)
rsi = rsi(rsiSrc, rsiLength)
// ADX
adxLength = input(14, minval=1, type=input.integer, title="ADX Length")
adxComparator = input(14, minval=1, type=input.integer, title="ADX Comparator")
adx = Adx(adxLength)
// Heikinashi
haClose = security(heikinashi(syminfo.ticker), timeframe.period, close)
haOpen = security(heikinashi(syminfo.ticker), timeframe.period, open)
nextHaOpen = (haOpen + haClose) / 2
//MACD
macdCalcTypeProcessed = input(title="MACD Source", type=input.source, defval=high)
fast = input(12, title="MACD Fast")
slow = input(20, title="MACD Slow")
signalLen = input(15, title="MACD Signal")
fastMA = ema(macdCalcTypeProcessed, fast)
slowMA = ema(macdCalcTypeProcessed, slow)
macd = fastMA - slowMA
signal = sma(macd, signalLen)
longCondition() =>
(low < lower) and (rsi[0] > rsiComparator) and (adx > adxComparator) and (close > nextHaOpen) and BarInSession(session) and macd > signal
stop = (close - max((low - (low * 0.0022)), (close - (close * 0.0032)))) / syminfo.mintick
target = (max(upper, (close + (close * 0.0075))) - close) / syminfo.mintick
strategy.entry("SX,LE", strategy.long, when=longCondition(), comment="SX,LE")
strategy.close_all(when=(not BarInSession(session)))
strategy.exit("LX", from_entry="SX,LE", profit=target, loss=stop)