##概要 この戦略は"4つの要素モメンタムトラッキング戦略"と呼ばれる.トレンド方向を決定するために平均方向運動指数 (ADX),ボリンジャーバンド百分比B (BB %B),モメンタムを決定するためにアwesomeオシレーター (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などの傾向を決定する他の指標を追加して,判断の精度を向上させる"指標組み合わせ"を形成します.
単一の損失を制御するためにストップ損失戦略を追加します.
過剰な貪欲さを避けるために 待機時間を設定します
##要約 この戦略は"四要素モメンタムトラッキング戦略"と呼ばれる. ADX,BB %B,AO,EMA4つの指標を使用して,強固な株を動的に追跡するためのエントリー&エグジットポイントを決定する. この戦略は,トレンド方向と相対的な株の強さを効果的に決定し,取引リスクを制御することができます. 次に,パラメータの最適化,他の指標を追加,保持時間を設定し,他の方法を使用して戦略をさらに改善することができます.
/*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)