この戦略は,モメンタム指標に基づいた適応型株取引戦略である.自動取引のためのトレンド判断,突破点識別,ストップロスの出口を達成するために,ボリンジャーバンド,ケルターチャネル,価格圧縮指標を統合する.
この戦略の核心は,ボリンジャーバンドとケルターチャネルを通じて価格チャネルを構築し,価格がチャネルを突破したときの取引信号を特定することです.価格がチャネルを突破したときのロングポジションと,価格がチャネルを突破したときのショートポジションを取ります.また,価格がチャネルに圧縮されたとき,戦略は価格圧縮指標の正と負の値に基づいてオペレーション方向を決定します.
具体的には,ボリンジャー帯は上下線をグラフ化するために価格の標準偏差を計算し,ケルトナーチャネルは平均価格 ±平均変動範囲に基づいて上下線をグラフ化する.チャネル融合が2つの間で起こる場合,次のブレイクを待っている間に市場は統合に入ると考えられる.価格圧縮指標は価格が2つのチャネルの間に圧縮されているかどうかを反映する.戦略は圧縮指標の正と負の値に基づいて市場の方向性を決定する.
要するにこの戦略は,価格動きを判断するための複数の指標を統合し,偽のブレイクを効果的にフィルタリングし,高い確率の取引機会を特定できる明確な長期と短期論理を形成します.
判断力のある複数の指標を統合します 指標の組み合わせにより精度が向上します
インディケーターの差を絞り,誤ったブレイクアウトを減らす. インディケーターの差は,不必要な取引を避けるための補助条件として機能します.
適応チャネルストップ・ロスはリスクを効果的に管理します.チャネルはストップ・ロスの位置として機能し,市場変動に基づいて自動的に調整して損失を減らすことができます.
シンプルなパラメータ設定,自動化に適しています.ほんの数つのキーパラメータだけで,テスト,最適化,自動化取引システムに統合することが簡単です.
市場が急激に波動するときに頻繁に長短に切り替えるため,取引数が増加します.
不適切な指標パラメータは,良い取引機会を逃す可能性があります.最適なパラメータを見つけるには十分なテストと最適化が必要です.
明らかに方向性のある株のみに適用され,非常に不安定な市場には適さない.指標は容易に誤導され,誤った信号を生む可能性があります.
ポジション制御モジュールを増やして 資本利用効率を最適化します 例えば 突破強度に基づいて資本を配分します
機械学習モデルを拡張し,インディケーターのパラメータを動的に調整し,インディケーターが異なるサイクルと異なるストックに自動的に適応できるようにします.
ストップ・ロスのタイミングを決定するための補助指標を導入することでストップ・ロスの戦略を強化する.改善された戦略は,キーポイントでのストップ・ロスの数を減らすことができます.
この戦略は,ボリンジャーバンド,ケルターチャネル,価格圧縮指標を統合して判断とリスク管理システムの明確な論理を形成する.トレンド判断とブレイクアウトオペレーションを組み合わせ,市場状況に自動的に適応し,高い確率の取引機会を特定することができます.さらなるパラメータ最適化と補助条件の改善により,この戦略は定量取引のための重要なツールにさらに強化することができます.
/*backtest start: 2022-12-29 00:00:00 end: 2024-01-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © juliopetronilo //@version=4 strategy("DMI/ADX/Squeeze Robot", shorttitle="DMI/ADX/SQZ", overlay=true) // Squeeze Momentum Indicator length = input(20, title="BB Length") mult = input(2.0, title="BB MultFactor") lengthKC = input(20, title="KC Length") multKC = input(1.5, title="KC MultFactor") useTrueRange = input(true, title="Use TrueRange (KC)") source = close basis = sma(source, length) dev = multKC * stdev(source, length) upperBB = basis + dev lowerBB = basis - dev ma = sma(source, lengthKC) rangeKC = useTrueRange ? tr : (high - low) rangema = sma(rangeKC, lengthKC) upperKC = ma + rangema * multKC lowerKC = ma - rangema * multKC sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC) sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC) noSqz = not (sqzOn or sqzOff) val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)), sma(close, lengthKC)), lengthKC, 0) // DMI/ADX Plot adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") keyLevel = input(23, title="Key Level for ADX") dirmov(len) => up = change(high) down = -change(low) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx_val = abs(plus - minus) / (sum == 0 ? 1 : sum) * 100 [adx_val, plus, minus] [sig, up, down] = adx(dilen, adxlen) // Estrategia de Trading strategy.entry("Buy", strategy.long, when=sqzOn and crossover(up, down) and crossover(val, 0)) strategy.entry("Sell", strategy.short, when=sqzOn and crossunder(up, down) and crossunder(val, 0)) strategy.close("Buy", when=sqzOff) strategy.close("Sell", when=sqzOff) // Plot de los indicadores plot(val, color=color.blue, style=plot.style_histogram, linewidth=4) plot(0, color=noSqz ? color.blue : sqzOn ? color.black : color.rgb(236, 238, 247), style=plot.style_cross, linewidth=2) plot(up, color=color.blue, title="+DI") plot(down, color=color.gray, title="-DI") plot(keyLevel, color=color.white, title="Key Level")