ハニートレンドATRブレイクアウト戦略は,ATR指標とボリンジャーバンドをベースとした中期ブレイクアウト戦略で,取引シグナル生成を目的とする.主に上下ATRチャネルの一定の幅内の株価の傾向変化をモニターする.価格が下下線を突破すると,トレンドフィルタリングと組み合わせて取引決定を下す.
戦略は主に3つの部分で構成されています.
ATRチャネル:ATRインジケーターを使用して株式価格の変動範囲を計算し,この範囲内で上下チャネルを形成します.チャネルの幅はATR回顧期とATRdivisor因子によって制御されます.
ミードライン: 株式価格の中間線をベースラインとする.中間線の計算方法は,昨日の高値,低値,閉値の平均値である.
トレンドフィルタリング:DMIインジケーターを使用して価格傾向を計算し,シグナルサイクルを設定する. 価格シグ
トレーディング・シグナルを生成する具体的な論理は,
長信号: pricesig
ショート信号: pricesig
他の状況では取引はできません
ストップ・プロフィートとストップ・ロスの条件も設定し,取引リスクをコントロールします.
ハニートレンド ATR ブレイクアウト戦略には以下の利点があります.
市場変動を動的に把握できる ATR インディケーターを使用して株式価格の変動範囲を計算する.
中間線を組み合わせて 株価の横向を評価し チャンネルブレイクアウト取引ポイントを設定して 高値を追いかけて 低値殺すのを避けます
DMI インディケーターは,トレンドを決定し,トレンドに反する取引を回避し,勝率を改善するために使用されます.
単一取引のリスクを制御するために,ストップ・プロフィートとストップ・ロスの条件を設定する.
戦略パラメータは,チャネル幅,ATRサイクル,その他の要因を調整することによって戦略を最適化するのに十分な柔軟性があります.
この戦略にはいくつかのリスクもあります:
中期取引には比較的大きな変動と高いリスクがあります.慎重なマネー管理が必要です.
ATRチャネル範囲の計算は,株価が急激に変動するときに不正確になり,誤った取引に容易な結果をもたらす可能性があります.
DMIインジケーターは,トレンド判断に誤りがあり,取引シグナルの正確さに影響する可能性があります.
上記のリスクに対応して,ATRチャンネルのようなパラメータを調整し,最適化や改善のために信号サイクルを増加させることができます.
戦略は以下の側面で最適化できます.
ATRチャネル幅を調整するには,チャネル範囲を圧縮または拡大するために atrDivisor を上下修正する.
ATR ルーックバック サイクルのパラメータを調整し,最近の変動に対するチャネルの感度を変更する.
トレンド・シグナル・サイクルのパラメータを調整し,上昇傾向と下落傾向判断の精度を向上させる.
信号の質を改善するために,多要素検証のための他の指標を追加します.
ストップ・プロフィートとストップ・ロスのアルゴリズムを最適化して リスク管理を改善する
ハニートレンドATRブレイクアウト戦略は,価格変動範囲とトレンド判断指標の分析を統合している.市場のホットスポットを把握しながら,取引リスクを制御する.これは柔軟で適応性の高い定量戦略である.この戦略は,パラメータ調整と信号最適化によって継続的に改善され,幅広い応用見通しがある.
/*backtest start: 2023-11-01 00:00:00 end: 2023-11-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title="Strategy - Bobo PATR Swing", overlay=true, default_qty_type = strategy.fixed, default_qty_value = 1, initial_capital = 10000) // === STRATEGY RELATED INPUTS AND LOGIC === PivottimeFrame = input(title="Pivot Timeframe", defval="D") ATRSDtimeFrame = input(title="ATR Band Timeframe (Lower timeframe = wider bands)", defval="D") len = input(title="ATR lookback (Lower = bands more responsive to recent price action)", defval=13) myatr = atr(len) dailyatr = request.security(syminfo.tickerid, ATRSDtimeFrame, myatr[1]) atrdiv = input(title="ATR divisor (Lower = wider bands)", type=float, defval=2) pivot0 = (high[1] + low[1] + close[1]) / 3 pivot = request.security(syminfo.tickerid, PivottimeFrame, pivot0) upperband1 = (dailyatr / atrdiv) + pivot lowerband1 = pivot - (dailyatr / atrdiv) middleband = pivot // == TREND CALC === i1=input(2, "Momentum Period", minval=1) //Keep at 2 usually i2=input(20, "Slow Period", minval=1) i3=input(5, "Fast Period", minval=1) i4=input(3, "Smoothing Period", minval=1) i5=input(4, "Signal Period", minval=1) i6=input(50, "Extreme Value", minval=1) hiDif = high - high[1] loDif = low[1] - low uDM = hiDif > loDif and hiDif > 0 ? hiDif : 0 dDM = loDif > hiDif and loDif > 0 ? loDif : 0 ATR = rma(tr(true), i1) DIu = 100 * rma(uDM, i1) / ATR DId = 100 * rma(dDM, i1) / ATR HLM2 = DIu - DId DTI = (100 * ema(ema(ema(HLM2, i2), i3), i4)) / ema(ema(ema(abs(HLM2), i2), i3), i4) signal = ema(DTI, i5) // === RISK MANAGEMENT INPUTS === inpTakeProfit = input(defval = 0, title = "Take Profit (In Market MinTick Value)", minval = 0) inpStopLoss = input(defval = 100, title = "Stop Loss (In Market MinTick Value)", minval = 0) // === RISK MANAGEMENT VALUE PREP === // if an input is less than 1, assuming not wanted so we assign 'na' value to disable it. useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na // === STRATEGY - LONG POSITION EXECUTION === enterLong = (((low<=lowerband1) and (close >lowerband1)) or ((open <= lowerband1) and (close > lowerband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal>signal[3]) exitLong = (high > middleband) strategy.entry(id = "Long", long = true, when = enterLong) strategy.close(id = "Long", when = exitLong) // === STRATEGY - SHORT POSITION EXECUTION === enterShort = (((high>=upperband1) and (close < upperband1)) or ((open >= upperband1) and (close < upperband1))) and (strategy.opentrades <1) and (atr(3) > atr(50)) and (signal<signal[3]) exitShort = (low < middleband) strategy.entry(id = "Short", long = false, when = enterShort) strategy.close(id = "Short", when = exitShort) // === STRATEGY RISK MANAGEMENT EXECUTION === strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss) strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss) // === CHART OVERLAY === plot(upperband1, color=#C10C00, linewidth=3) plot(lowerband1, color=#23E019, linewidth=3) plot(middleband, color=#00E2E2, linewidth=3) //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)