この戦略は,高変動性のある証券のために設計された引き戻しシステムである.したがって,Bitcoinは自然にこれを取引するための優れた選択である.これは日々のチャートやより短いタイムフレームの両方で使用できる (私は3時間のタイムフレームで良い結果を見つけたが,1時間未満のものにテストしていない).
戦略は,前2個のキャンドルの閉値の変化を比較して変動を計算し,この価格変化を使用して移動平均を生成する. inner band の標準偏差1と outer band の標準偏差2で移動平均の周りにバンドが包まれています.価格が事前に設定されたMA (移動平均) フィルター以上であれば,我々は上昇傾向にあることを決定します.したがって,戦略は上昇傾向にあり,引き下がりがあるときに信号を発行し,下の inner deviation band が上昇する原因になります.しかし,価格が継続して外 deviation band を突破した場合,この変動のピークが大きすぎることを損なうため,購入信号が出ないでしょう.このインディケーターで,イベントが緑色のインディケーターで
ユーザは,テストしたい日付範囲,変動を追跡するための移動平均期間,および内部および外部のバンド偏差を変更することができます. BTCでは,標準設定で内部偏差および外部の偏差帯を残しましたが,3つの期間の変動追跡が1日チャートでの取引に適し,5つの期間の変動追跡が3時間チャートでの取引に適しであることがわかりました. これは購入・保有戦略ではないため,取引にはおそらく最も流動性の高いコインに固執して,任意の取引所で非常に速く入り出したいでしょう. 変動が少ない市場でこれをトレードしたい場合は,内部偏差帯を~0.75に変更すると,さまざまなフューチャー市場でも大丈夫です. 利益とストップ損失のレベルは過去7キャンドルを振り返る複数の取引範囲に基づいています.
リスク軽減方法:
適当な不安定な基金を選択し ポジションのサイズを制御します
非効率な取引を減らすためにパラメータを最適化します
ストップ・ロストと利益を取って 厳格なマネー管理
実行効率を重視し 液体基盤を選びます
パラメータを 異なる基礎特性に合わせて調整する
戦略は以下の側面で最適化できます.
移動平均期間の最適化により,異なる基価の変動をより正確に追跡できます.
変動帯のパラメータを調整し,特定の底辺の変動帯により適するようにします.
音量ピークなどのフィルターを追加して 信号を検証します
機械学習技術を使用して 適応性のパラメータを動的に最適化します
より多くの取引機会を掴むために 高周波のタイムフレームでテストします
移動ストップ・ロスト/テイク・プロフィート・トラッキングを追加して 利益をさらに確保します
他の指標やモデルと組み合わせて定量的なポートフォリオ戦略を構築する.
この戦略は,市場転換点を把握するために波動性指標を通じて逆転を特定し,全体的に比較的シンプルで直感的です.パラメータを調整し,安定性と収益性をさらに高めるために他の技術指標を組み込むことで,大きな最適化スペースがあります.しかし,トレーダーはオーバーフィットとカーブフィットの問題に気づかなければなりません.この戦略は短期取引に適しており,リスクを制御するために厳格なマネーマネジメントが必要です.適切にマスターすれば,高波動性暗号通貨の取引のための強力なツールになることができます.
/*backtest start: 2023-09-11 00:00:00 end: 2023-10-11 00:00:00 period: 4h 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/ // © gary_trades //This script is designed to be used on volatile securities/tickers so is best suited for day charts on Crypto (particularly good for BTC). //It takes both long and short trades and the main indicator settings can be changed by the use so they can test for ideal settings for ticker of interest. //@version=4 strategy("BTC Volatility Band Strategy", shorttitle="Vol Band Strategy", overlay=false, margin_long=100, margin_short=100) //VOLATILTY CandleChange = ((close - close[1])/close)*100 //OR CandleChange = ((close[2] - close[1])/close)*100 plot(CandleChange, color=color.red, linewidth = 1) //VOLATILITY BANDS MAlen = input(7, minval=3, maxval=30, title=" MA Length") MAout = sma(CandleChange, MAlen) plot(MAout, color=color.black, display=display.none) InnerBand = input(1.0, minval=0.5, maxval=5, title="Inner Band") OuterBand = input(2.00, minval=0.5, maxval=10, title="Outer Band") devInner = InnerBand * stdev(CandleChange, MAlen) devOuter = OuterBand * stdev(CandleChange, MAlen) upper1 = MAout + devInner lower1 = MAout - devInner b1 = plot(upper1, "Upper Inner", color=color.gray) b2 = plot(lower1, "Lower Inner", color=color.gray) upper2 = MAout + devOuter lower2 = MAout - devOuter b3 = plot(upper2, "Upper Outer", color=color.gray) b4 = plot(lower2, "Lower Outer", color=color.gray) fill(b1, b3, color.rgb(250,145,175,70), title="Background") fill(b2, b4, color.rgb(250,145,175,70), title="Background") band1 = hline(25, "Upper Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2) band0 = hline(-25, "Lower Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2) //LONG FILTER VolFilterL = CandleChange <= lower1 and CandleChange > lower2 SMAFilterL = close[1] > sma(close[1], 50) PriceFilterL = close > lowest(close,7) LongFilter = VolFilterL and SMAFilterL and PriceFilterL bgcolor(LongFilter ? color.new(color.green, 80) : na) //SHORT FILTER VolFilterS = CandleChange >= upper1 and CandleChange < upper2 SMAFilterS = close[1] < sma(close[1], 50) PriceFilterS = close < highest(close,7) ShortFilter = VolFilterS and SMAFilterS and PriceFilterS bgcolor(ShortFilter ? color.new(color.red, 80) : na) //SETTING BACK TEST INPUTS fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2000, title = "From Year", minval = 1970) toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2100, title = "To Year", minval = 1970) startDate = timestamp("America/New_York", fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp("America/New_York", toYear, toMonth, toDay, 00, 00) time_condition = time >= startDate and time <= finishDate //ORDER DETAILS Risk = (high[7] - low[7])/ 7 Profit = Risk*1.15 Loss = Risk*0.65 AlertMSG = "New stategy position" + tostring(strategy.position_size) if (time_condition) strategy.entry("Long", strategy.long, when = LongFilter, alert_message=AlertMSG) if (LongFilter) LongStop = strategy.position_avg_price - Loss LongProfit = strategy.position_avg_price + Profit strategy.exit("TP/SL", "Long", stop=LongStop, limit=LongProfit) if (time_condition) strategy.entry("Short", strategy.short, when = ShortFilter, alert_message=AlertMSG) if (ShortFilter) ShortStop = strategy.position_avg_price + Loss ShortProfit = strategy.position_avg_price - Profit strategy.exit("TP/SL", "Short", stop=ShortStop, limit=ShortProfit)