
この戦略は,4要素動量追跡戦略 (四要素動量追跡戦略) と呼ばれています.この戦略は,平均方向運動指数 (ADX) を使ってトレンドの方向を判断し,ブリン帯比率B波段 (BB %B) を使って株の相対的に強い弱さを判断し,マジック均等線 (AO) を使って動量と異なる周期の指数移動平均 (EMA) を使って多空を判断し,株価の動態を追跡し,強株を追跡し,弱株の効果を回避します.
この戦略は,4つの異なる技術指標を用いて,購入と売却のタイミングを判断する.具体的判断の論理は以下の通りである.
多頭入場条件:5日EMAに21日EMA,50日EMAに200日EMA,BB %Bは設定オーバーバイラインより大きい,AOは設定正値より大きい,ADXは設定値より大きい。
空頭入場条件: 5日EMA下を通過21日EMA,50日EMA下を通過200日EMA,BB %Bが設定された超売りラインより小さい,AOが設定された負値より小さい,ADXが設定された値より大きい。
戦略的優位分析
この戦略は,トレンドの方向とストックスの相対的な強さを判断する複数の指標を統合し,偽の突破を効果的にフィルターすることができます.具体的には以下の利点があります.
ADXはトレンドの存在と強さを効果的に判断し,波動的な市場で頻繁にポジションを開くのを防ぐことができます.
BB %B指数は,株が高位または低位にあるかどうかを判断し,高位を追うのを効果的に回避します.
AO指標は,購入時に強力な動力のサポートが存在するか判断し,突破の有効性を保証する.
EMA指標の金叉/死叉は,市場の主流方向を判断し,逆転の開口を避ける.
この戦略は,市場における強な個人を追跡し,取引リスクを効果的に管理する.
この戦略は複数の指標を統合して リスク管理を行っていますが リスクはあるのです
複数の指数型指標組合せが使用され,パラメータ調整に敏感であり,不適切なパラメータ組合せは効果を上げられない可能性があります.
市場が本当に逆転するポイントを逃すかもしれない. 持仓周期を適切に制御し,時宜にストップ・ストップ・損失を行う.
EMAなどの指標は遅れがあり,突発的な出来事の影響を及ばなく反映することがあります. 他の指標と適切に連携するか,MA周期を適切に短縮する必要があります.
突発的な重大事件により指数散布が起こりうるため,基本面分析と組み合わせて,必要に応じて戦略を一時的に停止することができる.
この戦略は,以下の点で最適化できます.
機械学習などの手法を使って最適なパラメータの組み合わせを探します.
CCI,MACDなどの他の判断トレンド指標を加え,指数组合を形成し,判断の正確性を向上させる.
ストップ・ストップ・ストラスト戦略に参加し,単発損失をコントロールする.
持株期間を設定して,過度の貪欲を避けましょう.
この戦略は,4要素動向追跡戦略と呼ばれています.ADX,BB %B,AOおよびEMAの4つの指標を用い,買い売りのタイミングを判断し,強い個別の株の動態を追跡します.この戦略は,トレンドの方向と株の相対的な強さを効果的に判断し,取引リスクを制御します.次のステップは,パラメータの最適化,他の指標の追加,およびポジションの時間設定などの方法で,この戦略をさらに完善することができます.
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//ADX + BB %B + AO + EMA
strategy("ADX + BB %B + AO + EMA", overlay=true, initial_capital=10000)
take_profit_perc = input(title="Take Profit %", type=input.integer, defval=10, minval=1, maxval=100)
stop_loss_perc = input(title="Stop Loss %", type=input.integer, defval=5, minval=1, maxval=100)
bb_overbought = input(title="BB %B Overbought", type=input.integer, defval=75, minval=1, maxval=100)
bb_oversold = input(title="BB %B Oversold", type=input.integer, defval=25, minval=1, maxval=100)
ao_value = input(title="Awesome Oscillator", type=input.integer, defval=2)
adx_value = input(title="ADX", type=input.integer, defval=15)
startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer, defval=2018, minval=2008, maxval=2200)
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))
ema5 = ema(close, 5)
ema21 = ema(close, 21)
ema50 = ema(close, 50)
ema200 = ema(close, 200)
//BB %B
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)
//Awesome Oscillator
ao = sma(hl2,5) - sma(hl2,34)
// ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
long_strategy = ema5>ema21 and ema50>ema200 and bbr>(bb_overbought/100) and ao>ao_value and sig>adx_value
short_strategy = ema5<ema21 and ema50<ema200 and bbr<(bb_oversold/100) and ao<-ao_value and sig>adx_value
plot(ema5, color=color.blue)
plot(ema21, color=color.aqua)
plot(ema50, color=color.purple)
plot(ema200, color=color.red)
bgcolor(color=long_strategy ? color.green : na, transp=80)
bgcolor(color=short_strategy ? color.purple : na, transp=80)
if inDateRange and long_strategy
strategy.entry("long", strategy.long)
strategy.exit("exit", "long", stop=close*(100-stop_loss_perc)/100, limit=close*(100+take_profit_perc)/100)
if inDateRange and short_strategy
strategy.entry("short", strategy.short)
strategy.exit("exit", "short", stop=close*(100+stop_loss_perc)/100, limit=close*(100-take_profit_perc)/100)