平滑移動平均ストップロス戦略


作成日: 2024-01-31 14:25:29 最終変更日: 2024-01-31 14:25:29
コピー: 0 クリック数: 325
1
フォロー
1166
フォロワー

平滑移動平均ストップロス戦略

概要

この戦略は,平らな移動平均と平均実物価格範囲を使用して2つのストップ・プライスを計算し,ストップ・プライスを破るときに逆転開場を行い,トレンド・トラッキング・ストップ・プライスを実現する.この戦略は,高変動の仮想通貨取引に適しており,利益を効果的にロックし,損失の拡大を防ぐことができる.

戦略原則

  1. 最新のn周期の平均実物価格変動範囲atrを計算し,RMA法で平滑化
  2. 多頭ストップは最高値減atr,空頭ストップは最低値加atr
  3. 価格がストップラインを上方突破すると空白し,ストップラインを下方突破すると多額になります.
  4. ストップラインは価格の動きに合わせて更新され,ダイナミックな追跡が可能になります.

この戦略はATRを計算して合理的なストップ範囲を決定し,RMA方法と組み合わせてストップラインを平らにする.これは,価格の小さな揺れによってストップが引き起こすのを避けるための戦略である.トレンドが転じるとき,信号を素早く認識し,逆転価格でストップラインを破る方法でポジションを構築することができる.

優位分析

  1. スムーズな移動停止線,効果的フィルターノイズ,偽信号を避ける
  2. ダイナミックなストップ・ロスを追跡し,トレンドのほとんどをロックします.
  3. 中長線保持に適したパラメータ安定
  4. 自動化され,人間による介入も必要ありません

リスク分析

  1. ATR周期と倍数を適切に調整する
  2. トレンドがはっきりしない場合,より多くのクローズアップが発生する可能性があります.
  3. 合理的な入場条件を設定して,追いつくのを避ける.

適切なATR周期の短縮またはATR倍数の減少によって,ストロップ幅を縮小するか,または他のフィルタリング条件を追加して,不必要なポジション開設を減らすことができます.実際のレバレッジとポジションのサイズを注意して制御し,市場の急激な変動に対応してください.

最適化の方向

  1. ATRのパラメータに基づいて,他の指数でトレンドを判断できます.
  2. ポジション開設論理を最適化し,より厳しい突破フィルタリング条件を設定する
  3. モバイル停止機能を追加
  4. 機械学習アルゴリズムと組み合わせたストップラインの最適化

他のオシレータ指標を統合してトレンドの方向を判断し,震動期に無効なポジション開設を避ける. 入場論理を最適化し,ストップラインを突破した後に価格が一定幅で継続的に稼働できるようにする. 移動ストップラインを追加し,より多くの利益をロックする. 機械学習の訓練により優れたストップ関数を使用する.

要約する

この戦略は,平らな移動平均のストップラインを計算することによって,高波動の仮想通貨市場のダイナミック・トラッキング・ストップを実現し,リスクを効果的に制御できます.戦略のパラメータは安定しており,自動取引に適しています.この基礎で多次元的な最適化を行い,より多くの指標とアルゴリズムと組み合わせて効果を上げることができます.

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

//@version=4
//
//  作品: [LunaOwl] 超級趨勢2
//
////////////////////////////////
//     ~~!!*(๑╹◡╹๑) **       //
//  製作: @LunaOwl 彭彭       //
//  第1版: 2019年05月29日     //
//  第2版: 2019年06月12日     //
//  微調:  2019年10月26日     //
//  第3版: 2020年02月12日     //
////////////////////////////////
//
//
//超級趨勢的缺點:
//--1.止損距離可能相當大, 請自己調整週期
//--2.市場沒有存在明顯趨勢的時候表現不佳
//
//超級趨勢的優點:
//--1.具有可以參考的移動止損線, 適合新手
//--2.市場存在明顯趨勢的時候表現會很不錯
//
//使用須知:
//--1.每筆交易都需要下移動止損單, 絕對要下
//--2.中途被針掃出場時不要急著再進去
//--3.當錯失機會不要追高追低, 等待下次機會
//--4.實質槓桿比率不要太高, 不要輕忽市場變化
//--5.訂單進出場都建議分成五份、十份區間掛單
//--6.不要妄圖賺到市場上的每一分錢
//
//稍做更新:
//--1.平均真實區間利用了遞迴均線減少雜訊
//--2.針對高波動率的小幣市場,中期順勢策略應該以減少雜訊為重點
//--3.研究國外交易策略後,它們常用平滑因子過濾隨機走勢
//--4.績效上和其它平均法比較並沒有突出,但優點是參數變動穩定性
//--5.我選擇四小時線回測小幣市場,並且選擇經歷過牛熊市的以太坊

//==設定研究==//

//study(title = "[LunaOwl] 超級趨勢2", shorttitle = "[LunaOwl] 超級趨勢2", overlay = true)

//==設定策略==//

strategy(
     title               = "[LunaOwl] 超級趨勢2",
     shorttitle          = "[LunaOwl] 超級趨勢2",
     format              = format.inherit,
     overlay             = true,
     calc_on_order_fills = true,
     calc_on_every_tick  = false,
     pyramiding          =  0,      
     currency            = currency.USD,    
     initial_capital     = 10000,
     slippage            = 10,
     default_qty_value   = 100,
     default_qty_type    = strategy.percent_of_equity,
     commission_value    = 0.1
     )

//==設定參數==//

src = input(close, "數據來源")

length = input(
     title  = "ATR 周期", 
     type   = input.integer,
     minval = 1,
     maxval = 4,
     defval = 1
     )

//可以設定的精度為小數點後三位

mult = input(
     title  = "ATR 乘數", 
     type   = input.float,
     minval = 1.000, 
     maxval = 9.000,
     defval = 2.618,
     step   = 0.001
     )
     
atr = mult * atr(length) 
atr_rma = rma(atr, 14)  //平均真實區間添加遞回均線

//==算法邏輯==//

LongStop      = hl2 - atr_rma
LongStopPrev  = nz(LongStop[1], LongStop)
LongStop     := close[1] > LongStopPrev ? max(LongStop, LongStopPrev) : LongStop
 
ShortStop     = hl2 + atr_rma
ShortStopPrev = nz(ShortStop[1], ShortStop)
ShortStop    := close[1] < ShortStopPrev ? min(ShortStop, ShortStopPrev) : ShortStop

dir  = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > ShortStopPrev ? 1 :
       dir ==  1 and close < LongStopPrev ? -1 : 
       dir

LongStop_data  = dir == 1 ? LongStop : na
ShortStop_data = dir == 1 ? na : ShortStop

LongMark  = dir ==  1 and dir[1] == -1 ? LongStop : na
ShortMark = dir == -1 and dir[1] == 1 ? ShortStop : na

LongColor  = #0D47A1  //普魯士藍
ShortColor = #B71C1C  //酒紅色

//==設置止損線==//

plot(LongStop_data,
     title     = "移動止損線",
     style     = plot.style_linebr,
     color     = LongColor,
     linewidth = 1
     )
     
plot(ShortStop_data,
     title     = "移動止損線",
     style     = plot.style_linebr,
     color     = ShortColor,
     linewidth = 1 
     )

//==設定K線顏色==//

barcolor(dir == 1 ? LongColor : ShortColor, title = "K線顏色")

//==設定快訊通知==//

alertcondition(LongMark,
     title   = "多頭標記", 
     message = "多頭標記: 行情可能出現潛在變化,請注意個人的對沖或空頭部位,留意風險。")
     
alertcondition(ShortMark,
     title   = "空頭標記", 
     message = "空頭標記: 行情可能出現潛在變化,請注意個人的現貨或多單持倉狀況,留意風險。")

// - 設定日期範圍 - //

test_Year   = input(2017, title = "設定範圍:年", minval = 1, maxval = 2140) 
test_Month  = input(  11, title = "_____月", minval = 1, maxval =   12)
test_Day    = input(  01, title = "_____日", minval = 1, maxval =   31)
test_Period = timestamp( test_Year, test_Month, test_Day, 0, 0)

// - 買賣條件 - //

Long = src > LongStop_data
strategy.entry("多頭進場", strategy.long, when = Long)
strategy.close("多頭出場", when = Long) 

Short = src < ShortStop_data
strategy.entry("空頭進場", strategy.short, when = Short)
strategy.close("空頭回補", when = Short)