この取引システムは,過去平均値に対する現在の市場変動に基づいて取引を管理することを目的としています.このシステムは,ATR指標に基づいてオープン取引の目標数を計算し,それに応じてレバレッジを調整します.ピラミッド型アプローチを使用して取引を開閉し,複数のポジションを同時に許可します.
システムには以下の手順があります
14 期間の ATR を計算し,閉じる価格で割って正規化します.
標準化ATRの100日間の単純な移動平均値 (SMA) を計算する.
標準化ATRと100日SMAの比率を計算する.
目標レバレッジを比率の逆 (2/比率) に基づいて決定する.
目標レバレッジを5で掛けることで オープン取引の目標数を計算します
グラフの目標と現在のオープン取引です
購入 (現在のオープン取引がターゲットより少ない場合) または取引を閉じる (現在のオープン取引がターゲットプラス1より大きい場合) のチャンスがあるかどうかを確認します.
購入する機会があれば,ロングトレードを開いて openTrades配列に追加します.
openTrades配列に取引と取引を閉じるチャンスがある場合,配列を参照して最新の取引を閉じて配列から削除します.
このシステムは,市場変動に基づいてオープントレードとレバレッジを動的に調整することで,トレンドを把握することを目的としています. より良い制御のために,オープントレードを追跡するためにアレイを使用します.
この戦略の利点は
市場変動の変化に基づくレバレッジとポジションサイズを動的に調整することで,リスクを効果的に管理できます.
市場変動を反映する目標ポジションサイズを計算するためにATR指標を使用することは合理的な選択です.
複数のポジションでピラミッドを組み立てることで 傾向から利益を得ることができます
配列内の各取引を記録することで,取引の開封と終了を明確に制御できます.
戦略にはパラメータが少なく,実行と運用が簡単です.
論理は明確で コード構造は容易な最適化と反復のために 適切に組織されています
この戦略のリスクは
ATRは過去の変動のみを反映し,将来の変化を予測できないため,不正なレバレッジ調整につながる可能性があります.
傾向が逆転すると 損失が蓄積する可能性があります
配列記録取引は,単純なオープン/閉鎖操作のみに適用されます.複雑な論理のためにより複雑なデータ構造が必要です.
目標レバレッジとポジションサイズ設定は,固定パラメータではなく,シンボルの特性に基づいて調整する必要があります.
単一の指標に頼ることは誤解を招く可能性があります.他の変動指標や機械学習アルゴリズムは安定性を向上させることができます.
戦略は以下の側面で最適化できます.
ストップ・ロスは,ストップ・ロスのレベルに達すると,積極的にカット・ロスを追加します.
異なるATR期間をテストすることによって指標パラメータを最適化する.
定量エントリのような他のエントリー戦略を試し 結果をテストします
他の波動性メトリクス,例えばボリンジャーバンドの幅,KD,RSIなどを組み合わせ使用するために追加します.
単純にスムーズ化するのではなく 変動を予測するために 機械学習モデルを使用します
ATR倍数や変動関数など,ポジションサイズを最適化する.
戦略分析と最適化のためのエントリー価格,時間などより多くのエントリー詳細を記録します.
オートオプティマイゼーションのためのパラメータ最適化を追加して最適なパラメータセットを見つけます.
この戦略は,トレンド中にリスク露出を管理するためにATRに基づいてレバレッジとポジションサイズを動的に調整し,一定の利点があります.しかし,パラメータ設定の難易度や指標最適化スペースなどの課題は,さらなる改善のために残っています.全体として,論理は明確で,操作し最適化するのが簡単で,深層の研究と適用に値します.
/*backtest start: 2022-10-09 00:00:00 end: 2023-10-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("I11L - Risk Adjusted Leveraging", overlay=false, pyramiding=25, default_qty_value=20, initial_capital=20000, default_qty_type=strategy.percent_of_equity,process_orders_on_close=false, calc_on_every_tick=false) atr = ta.atr(14) / close avg_atr = ta.sma(atr,100) ratio = atr / avg_atr targetLeverage = 2 / ratio targetOpentrades = 5 * targetLeverage plot(targetOpentrades) plot(strategy.opentrades) isBuy = strategy.opentrades < targetOpentrades isClose = strategy.opentrades > targetOpentrades + 1 var string[] openTrades = array.new_string(0) if(isBuy) strategy.entry("Buy"+str.tostring(array.size(openTrades)),strategy.long) array.push(openTrades, "Buy" + str.tostring(array.size(openTrades))) if(isClose) if array.size(openTrades) > 0 strategy.close(array.get(openTrades, array.size(openTrades) - 1)) array.pop(openTrades)