低ボラティリティの方向性買いストップ利益とストップ損失戦略


作成日: 2023-12-18 12:00:07 最終変更日: 2023-12-18 12:00:07
コピー: 1 クリック数: 573
1
フォロー
1621
フォロワー

低ボラティリティの方向性買いストップ利益とストップ損失戦略

概要

この策略は,低波動方向の買入ストップ・損失策略と呼ばれています.これは,移動平均の交差を買入信号として使用し,ストップ・損失と組み合わせて利益をロックし,低波動区間の通貨に適用されます.

戦略原則

この戦略は3つの異なる周期の移動平均を使用します:50周期,100周期,200周期. 購入の論理は,50周期ラインが100周期ラインを横切ると,そして100周期ラインが200周期ラインを横切ると,追加入場を行います.

この信号は,市場が低波動区間から突破し,トレンド状態に入ろうとしていることを示している.50周期の急速な上昇は,短期間の内部力の突然の強化を意味し,中長線を上方へ駆動し始めていることを示している.100周期の線も,中期的な力の加入を意味し,安定した上向きの動きを示している.

入場後,ストップ・ストップ・ロスの方法で利潤をロックする戦略. ストップ・ストップ・目標は入場価格の8%,ストップ・ロスのラインは入場価格の4%である. ストップ・ストップをストップよりも大きく設定し,損失を上回る利得を有利に設定し,戦略の全体的な収益性を確保する.

優位分析

この戦略の利点は以下の通りです.

  1. 低波動区間の突破によってもたらされるトレンドの機会を正確に捉えることができます.
  2. 移動平均は簡単に計算し,反省し,論理はシンプルで明確である.
  3. ストップ・ストップ・ロスの設定は合理的で,安定した利益を得るのに有利である.
  4. 設定可能なパラメータは柔軟で簡単に最適化できます.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. 誤った突破信号は損失を招く可能性があります.
  2. 市場が逆転すると 損をするのは難しい.
  3. ストップ・ロスのパラメータを誤って設定すると,利益に影響する.

対策として

  1. 他の指標と組み合わせたフィルタリング信号は,突破の有効性を保証する.
  2. 停止損失周期を適切に短縮し,逆転による損失を減らす.
  3. 異なるストップ・ストップダスト比率をテストし,最適なパラメータを探します.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 異なる移動平均周期パラメータをテストし,最適な組み合わせを見つける.
  2. トレンドブレイクを確認するために取引量などの指標を追加する.
  3. ストップ・ストップ・損失幅を動的に調整する.
  4. 突破率を予測する機械学習などの手法
  5. 異なる市場条件や通貨に合わせてパラメータを調整する.

概要として,この戦略は,全体的な運行論理が明確であり,移動平均周期とストップ・ストップ・損失幅を配置することで,低リスクの利益を得ることができ,量化取引に柔軟に適用できます.その後,入場信号,ストップ・損失方法などから最適化することができ,パラメータ調整に合わせて最適な効果を探します.

ストラテジーソースコード
/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle='Low volatility Buy w/ TP & SL (by Coinrule)',title='Low volatility Buy w/ TP & SL', overlay=true, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 10,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2019, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

//MA inputs and calculations
movingaverage_fast = sma(close, input(50))
movingaverage_slow = sma(close, input(200))
movingaverage_normal= sma(close, input(100))



//Entry 
strategy.entry(id="long", long = true, when = movingaverage_slow > movingaverage_normal and movingaverage_fast > movingaverage_normal)

//Exit
longStopPrice  = strategy.position_avg_price * (1 - 0.04)
longTakeProfit = strategy.position_avg_price * (1 + 0.08)

strategy.close("long", when = close < longStopPrice or close > longTakeProfit and window())

//PLOT

plot(movingaverage_fast, color=color.orange, linewidth=2)
plot(movingaverage_slow, color=color.purple, linewidth=3)
plot(movingaverage_normal, color=color.blue, linewidth=2)