この戦略は,主にアルゴリズム取引を目的とした偽グリッドボットである.RSIが特定の条件を満たす場合にのみ更新されるダイナミックなボットを使用する.また,通常のグリッドボットとは異なり,ブレイクアウト戦略である (典型的なグリッドボットはより高いグリッドに達すると販売するが,この戦略は特定の条件下でより低いグリッドが侵害されたときに販売する).この戦略は,すべてのピラミッドオーダーを閉じる.
ストラテジーは,RSIがオーバーバイト/オーバーセールレベルを下り/上を横切るたびに,そのグリッドを指定されたソースのボリューム・ウェイトされた最高/最低値 (設定で
設定でショート,ソース,RSI長度,超買/超売レベルを設定できます
戦略の基本的な論理は
RSI指標を使用して,傾向転換点を決定し,過買い/過売りレベルのRSIラインクロスオーバーを確認信号として使用する.
RSI信号が発生すると,グリッドの上限/下限として,一期間の最高/最低価格を記録する.
5つの格子線に区切る. 価格が最も近い線をリアルタイムで確認する.
価格が上方線を突破すると,ロングで,下方線を突破すると,ロングをフラットにしてショートします.
触れる代わりに ブレイクアウトを使うことで 傾向の逆転を より良く把握できます
一夜間のリスクを避けるために 閉じる前にすべてのピラミッド命令を閉じる.
戦略は以下の内容で構成されています.
入力設定:ソース,RSIパラメータ,ロング/ショートなど
RSI計算: RSIを計算し,クロスオーバー信号を確認する.
ダイナミックグリッド: RSI信号の価格範囲を記録しグリッドラインを計算します.
シグナルチェック: 長/短信号の価格ブレイキンググリッドラインを検出する.
オーダー管理: オーダーを送信し,閉じる前に平らにする.
グラフ:グラフのグリッド線,長い/短いゾーンなど
格子を動的に更新し,トレンドコンテキストとブレイクアウト信号のためにRSIを使用することで,この戦略はトレンドを効果的に追跡し,トレンドが変化すると逆転することができます. 閉じる前に平ら化することで,一夜間のリスクが管理されます.
この戦略の主な利点は以下の通りです.
動的グリッドは固定グリッドとは異なり 傾向に適応します
RSIの確認で 格子調整するだけで 騒音を減らす
突破信号は 触覚よりも 逆転を捉える
夜間ギャップのリスクを避けるために,閉じる前に平らにする.
RSIは過買い/過売の検出に有効です
ブレイクモードは,逆転と比較して早期トレンドエントリーを提供します.
格子間隔とサイズを調整することでリスク調整が可能になります
視覚グリッドと長/短ゾーン
選べるショートパンツは 異なるトレーダーに合わせて
アルゴ取引に適した単純な論理です
リアルタイムの取引のリスクコントロールで自動トレンド追跡が可能です.
また,注意すべき潜在的なリスクもいくつかあります.
ストップ・損失を引き起こしたり ストップを拡大したり 取引を一時停止したりします
夜間のギャップは 大きなギャップを残し ポジションのサイズを減らすことができます
パラメータの調節が悪ければ,取引や信号の誤差が増加します.慎重に最適化する必要があります.
高料金によりグリッド取引の利益が損なわれ,取引規模を減らしたり,低料金取引所を使用すべきです.
突破信号は少し遅れる 突破の
安定した上昇傾向では劣る可能性があります.他の指標と組み合わせることを検討してください.
資本の大きさに合わせて 十分な資本が必要で 投資のピラミッド化も必要です そうでなければ 結果は悪くなります
緩和策
取引頻度や過剰取引を減らすためにパラメータを最適化する.
トレンドインジケーターと組み合わせて 取引期間を避けましょう
トレーディングサイズ%と トレーディングリスクを減らす
タイミングと安定性のバランスを確保するために 異なるブレイクアウトの限界値をテストします
罠にはまらないように 明確なトレンドだけ入力してください
パラメータの安定性を評価するために長期間バックテストを行う.
機械学習に基づく動的パラメータ最適化を調査し,市場の適応性を向上させる.
ポジションリスクをカバーするためにオプション戦略を組み合わせることを検討する.
戦略の有効性を維持するために 最近の市場状況に基づいてパラメータを調整します
視覚的な最適化プラットフォームを構築し 迅速なテストを支援します
パラメータの最適化,信号の組み合わせ, そしてより多くの市場情報により リスクは削減され 本当に信頼できる アルゴ戦略が作れます
戦略は以下によってさらに強化される:
RSIのパラメータを最適化して 最良のコンボを探します
リスク・リターンの最適化のために 異なるグリッド間隔をテストします
フィルター信号に他の指標を追加し,例えばMACD,KDなど,精度を向上させる.
市場変動に基づいて 適応的なストップを開発する
入り口条件を高め 罠を避けるために 明らかな傾向だけ入力します
パラメータの安定性を評価するために長期間バックテストを行う.
機械学習ベースのダイナミック最適化を 探索し,適応性を向上させる.
リスクをカバーするためにオプション戦略を組み込むこと
最近の市場状況に基づいてパラメータを調整し,有効性を維持する.
視覚的な最適化プラットフォームを 迅速なテストのために構築する
自動化最適化,戦略コンボ,より多くの市場情報などにより,真の取引戦略として より良い安定と利益を得ることができます.
要するに,RSI Box Grid戦略は,RSIを使用してトレンド逆転確認を特定し,ダイナミックな価格レンジグリッド,トレードブレイクアウトを設定し,日内を平ら化し,アルゴ取引戦略に従って柔軟なトレンドを形成します.固定グリッドと比較して,市場変化により順応します.
この戦略には,トレンドコンテキスト,ダイナミックグリッド,ブレイクアウト取引,およびフルフラットニング・イントラデイなどの利点があります. これにより,リスクコントロールでトレンドを効果的に追跡することができます.しかし,ウィップソーストップ損失,オバーナイトギャップなどのリスクは存在し,最適化,シグナルを
強化の機会は多く,より多くの指標,ML最適化,ビジュアルバックテストなどを組み込むことで,より堅牢な高リターンアルゴ取引戦略になることができます. 全体的に,量子取引のための信頼性のある,実装しやすいトレンド追跡アルゴリズムフレームワークを提供します.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © wbburgin //@version=5 // strategy("RSI Box Strategy (pseudo-Grid Bot)", overlay=true, initial_capital = 10000, // default_qty_type = strategy.percent_of_equity, default_qty_value = 1, pyramiding = 33, commission_value=0.10) src = input.source(close,"Source") rsiLength = input.int(14,"RSI Length") oblvl = input.int(70,"Overbought Level") oslvl = input.int(30,"Oversold Level") useShorts = input.bool(false,"Use Shorts",inline="B") showGrid = input.bool(false,"Show Grid",inline="B") rsi = ta.rsi(src,rsiLength) rsi_crossdn = ta.crossunder(rsi,oblvl) rsi_crossup = ta.crossover(rsi,oslvl) highest = ta.vwma(ta.highest(src,rsiLength),rsiLength) lowest = ta.vwma(ta.lowest(src,rsiLength), rsiLength) gridTop = ta.valuewhen(rsi_crossdn,highest,0) gridBottom = ta.valuewhen(rsi_crossup,lowest,0) gridMiddle = math.avg(gridTop,gridBottom) gridMidTop = math.avg(gridMiddle,gridTop) gridMidBottom = math.avg(gridMiddle,gridBottom) diff1 = math.abs(src - gridTop) diff2 = math.abs(src - gridBottom) diff3 = math.abs(src - gridMiddle) diff4 = math.abs(src - gridMidTop) diff5 = math.abs(src - gridMidBottom) minDiff = math.min(diff1, diff2, diff3, diff4, diff5) // Determine which line is the closest float closestLine = na if minDiff == diff1 closestLine := gridTop else if minDiff == diff2 closestLine := gridBottom else if minDiff == diff3 closestLine := gridMiddle else if minDiff == diff4 closestLine := gridMidTop else if minDiff == diff5 closestLine := gridMidBottom buyCrosses = ta.crossover(src,gridTop) or ta.crossover(src,gridBottom) or ta.crossover(src,gridMiddle) or ta.crossover(src,gridMidTop) or ta.crossover(src,gridMidBottom) sellCrosses= ta.crossunder(src,gridTop) or ta.crossunder(src,gridBottom) or ta.crossunder(src,gridMiddle) or ta.crossunder(src,gridMidTop) or ta.crossunder(src,gridMidBottom) condition_bull = buyCrosses condition_bear = sellCrosses var float bull_status_line = na var float bear_status_line = na var float bull_buy_line = na var float bear_sell_line = na if condition_bull bull_status_line := closestLine if condition_bear bear_status_line := closestLine if bull_status_line == gridBottom bull_buy_line := gridMidBottom if bull_status_line == gridMidBottom bull_buy_line := gridMiddle if bull_status_line == gridMiddle bull_buy_line := gridMidTop if bull_status_line == gridMidTop bull_buy_line := gridTop if bear_status_line == gridTop bear_sell_line := gridMidTop if bear_status_line == gridMidTop bear_sell_line := gridMiddle if bear_status_line == gridMiddle bear_sell_line := gridMidBottom if bear_status_line == gridMidBottom bear_sell_line := gridBottom l = ta.crossover(src,bull_buy_line) s = ta.crossunder(src,bear_sell_line) if l strategy.entry("Long",strategy.long) if s strategy.close("Long") if useShorts strategy.entry("Short",strategy.short) // Plotting in_buy = ta.barssince(l) < ta.barssince(s) u=plot(bull_buy_line,color=na,title="Buy Plot") d=plot(bear_sell_line,color=na,title="Sell Plot") plot(not showGrid?na:gridBottom,color=color.new(color.white,75),title="Grid Line -2") plot(not showGrid?na:gridMidBottom,color=color.new(color.white,75),title="Grid Line -1") plot(not showGrid?na:gridMiddle,color=color.new(color.white,75),title="Grid Line 0") plot(not showGrid?na:gridMidTop,color=color.new(color.white,75),title="Grid Line 1") plot(not showGrid?na:gridTop,color=color.new(color.white,75),title="Grid Line 2") fill(u,d,color=in_buy ? color.new(color.lime,75) : color.new(color.red,75))