매끄러운 이동 평균 스톱 로스 전략

저자:차오장, 날짜: 2024-01-31 14:25:29
태그:

img

전반적인 설명

이 전략은 두 개의 스톱 로스 가격 수준을 계산하기 위해 매끄러운 이동 평균 라인과 평균 진정한 범위를 사용합니다. 트렌드의 스톱 로스 트레일링을 달성하기 위해 가격이 스톱 로스 수준을 넘어서면 역 포지션을 열 수 있습니다. 이 전략은 매우 변동적인 암호화폐 거래에 적합하며 수익을 효과적으로 잠금하고 손실을 피할 수 있습니다.

전략 논리

  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) 

더 많은