ビットコインの波動帯逆転戦略

作者: リン・ハーンチャオチャン開催日:2023年10月12日 17:38:39
タグ:

概要

この戦略は,高変動性のある証券のために設計された引き戻しシステムである.したがって,Bitcoinは自然にこれを取引するための優れた選択である.これは日々のチャートやより短いタイムフレームの両方で使用できる (私は3時間のタイムフレームで良い結果を見つけたが,1時間未満のものにテストしていない).

戦略の論理

戦略は,前2個のキャンドルの閉値の変化を比較して変動を計算し,この価格変化を使用して移動平均を生成する. inner band の標準偏差1と outer band の標準偏差2で移動平均の周りにバンドが包まれています.価格が事前に設定されたMA (移動平均) フィルター以上であれば,我々は上昇傾向にあることを決定します.したがって,戦略は上昇傾向にあり,引き下がりがあるときに信号を発行し,下の inner deviation band が上昇する原因になります.しかし,価格が継続して外 deviation band を突破した場合,この変動のピークが大きすぎることを損なうため,購入信号が出ないでしょう.このインディケーターで,イベントが緑色のインディケーターで buy が発生することを見ることができます.その後,ショート/セールでは,内面の背景下には上昇するピークがあり,このインディケーターで,このフィルターで,我々は MA を購入する.

ユーザは,テストしたい日付範囲,変動を追跡するための移動平均期間,および内部および外部のバンド偏差を変更することができます. BTCでは,標準設定で内部偏差および外部の偏差帯を残しましたが,3つの期間の変動追跡が1日チャートでの取引に適し,5つの期間の変動追跡が3時間チャートでの取引に適しであることがわかりました. これは購入・保有戦略ではないため,取引にはおそらく最も流動性の高いコインに固執して,任意の取引所で非常に速く入り出したいでしょう. 変動が少ない市場でこれをトレードしたい場合は,内部偏差帯を~0.75に変更すると,さまざまなフューチャー市場でも大丈夫です. 利益とストップ損失のレベルは過去7キャンドルを振り返る複数の取引範囲に基づいています.

戦略 の 利点

  • 市場転換点を把握するために波動性取引を利用する
  • 長期・短期取引,上下市場で利益を得る
  • シンプルな標準パラメータ設定 簡単に使用できます
  • パラメータは,異なる基礎に簡単に最適化することができます
  • 合理的なストップ・ロストと取利益設定は,利益を固定するのに役立ちます.

戦略 の リスク

  • 高波動性のある基債は,より大きな損失のリスクがあります.
  • 長期/短期間の頻繁な切り替えにより,取引コストが高くなります
  • 短期取引は,市場を注意深く監視する必要があります
  • 低流動性の市場では損失を止めることは困難です
  • パラメータの調節が不十分で,過剰な取引につながる.

リスク軽減方法:

  1. 適当な不安定な基金を選択し ポジションのサイズを制御します

  2. 非効率な取引を減らすためにパラメータを最適化します

  3. ストップ・ロストと利益を取って 厳格なマネー管理

  4. 実行効率を重視し 液体基盤を選びます

  5. パラメータを 異なる基礎特性に合わせて調整する

オプティマイゼーションの方向性

戦略は以下の側面で最適化できます.

  1. 移動平均期間の最適化により,異なる基価の変動をより正確に追跡できます.

  2. 変動帯のパラメータを調整し,特定の底辺の変動帯により適するようにします.

  3. 音量ピークなどのフィルターを追加して 信号を検証します

  4. 機械学習技術を使用して 適応性のパラメータを動的に最適化します

  5. より多くの取引機会を掴むために 高周波のタイムフレームでテストします

  6. 移動ストップ・ロスト/テイク・プロフィート・トラッキングを追加して 利益をさらに確保します

  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)




もっと