この戦略は,市場動向と過買い/過売状況を決定するために,動力指標 ADX,RSI,ボリンジャー帯を使用し,低価格で購入し高価格で販売するための自動取引を実施します.
ADX指標はトレンドを決定します.ADXが32を超えると,トレンド市場を示します.
RSIインジケーターは,過剰購入/過剰販売レベルを決定する.RSIが30を超えると,過剰販売市場をシグナルする.RSIが70を下回ると,過剰購入市場をシグナルする.
ボリンジャー帯は統合とブレイクを決定する. 閉じる価格が上部帯を超えると,統合の終わりと上部ブレイクをシグナルします. 閉じる価格が下部帯を下回ると,統合の終わりと下部ブレイクをシグナルします.
上記の指標に基づいて,取引戦略は次のように定義されます.
購入条件:
販売条件:
この戦略は,複数の指標を使用して市場状況を決定し,単一の指標に依存するときにエラーの可能性を回避する.トレンドと過買い/過売れ状態を決定することにより,市場のターニングポイントを効果的に把握し,低価格の購入高値を達成することができます.
この戦略は,トレンドインジケーターのみを使用すると比較して,短期間の機会をより迅速に把握することができます. オシレーターのみを使用すると比較して,この戦略はトレンド方向をよりよく把握することができます. したがって,トレンドを追跡する利点が保ち,同時に平均逆転取引の柔軟性があります. これは潜在的に効率的な定量戦略です.
この戦略の主なリスクは以下のとおりです.
インディケーターからの誤った信号のリスクです.市場が極端な出来事を経験すると,インディケーターが失敗する可能性があります.
ストップが狭すぎるリスク ストップが狭すぎる場合,短期的な市場の変動がポジションを損なう可能性があります.
過剰調整のリスク:指標パラメータを単なる過去データに合わせれば,安定性は疑わしいものであり,変化する市場動態に適応できない可能性があります.
リスク管理対策
戦略を一時停止し,誤った信号による損失を回避するために,異常な市場状況下で手動的に介入します.
合理的な停止距離を設定し,移動平均値と組み合わせて停止レベルを決定し,早速停止を避ける.
パラメーターチューニングモジュールを導入し 安定性を確保するために ウォーク・フォワード・アナリストを使用して パラメータを動的に最適化します
この戦略の改善の主な側面は以下の通りである.
各市場に合わせた機械学習アルゴリズムを使用して指標パラメータを最適化します
機能工学により,より多くの技術指標と訓練モデルを導入し,SVMのような信号精度を向上させる.
安定性を高めるため,価格チャネル,サポート/レジスタンスなどを使用して,各市場の特徴に基づいたブレークアウト戦略を組み込む.
利潤を最大化しリスクを効果的に制御するために,トライリングストップ,ムービングストップなどを導入することで,利益とストップ損失のメカニズムを最適化します.
この中期量的な取引戦略は,ADX,RSI,ボリンジャーバンドなどの複数の技術指標を利用し,重要な構造変化が確認されたときに市場状況を決定し,取引を行う.論理は明確で解釈可能で,単一の指標への依存を大幅に削減する.一方,誤った信号,過度に緊密なストップ,パラメータオーバーフィッティングなどのリスクは,リスク管理とモデル最適化を通じて,安定性と効率性を高める必要があります.
/*backtest start: 2023-11-10 00:00:00 end: 2023-12-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("DAX Shooter 5M Strategy", overlay=true) //Creo ADX adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") th = input(title="threshold", type=input.integer, defval=20) 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) adx [plus, minus] = dirmov(dilen) sig = adx(dilen, adxlen) //Creo RSI src = close len = input(7, minval=1, title="Periodo RSI") up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) bandainf = input(30, title="Livello Ipervenduto") bandasup = input(70, title="Livello Ipercomprato") //Creo Bande di Bollinger source = close length = input(50, minval=1, title="Periodo BB") mult = input(2.0, minval=0.001, maxval=50, title="Dev BB") basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev plot(basis, color=color.white) p1 = plot(upper, color=color.aqua) p2 = plot(lower, color=color.aqua) fill(p1, p2) //Stabilisco regole di ingresso if crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower strategy.entry("COMPRA", strategy.long, limit=upper, oca_name="DaxShooter", comment="COMPRA") else //strategy.exit("exit", "COMPRA", loss = 90) strategy.cancel(id="COMPRA") if crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper strategy.entry("VENDI", strategy.short, limit=lower, oca_name="DaxShooter",comment="VENDI") else //strategy.exit("exit", "VENDI", loss = 90) strategy.cancel(id="VENDI") //Imposto gli alert buy= crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower sell= crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper alertcondition(buy, title='Segnale Acquisto', message='Compra DAX') alertcondition(sell, title='Segnale Vendita', message='Vendi DAX') //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)