낮은 변동성 방향 구매와 수익 취득 및 손실 중지

저자:차오장, 날짜: 2023-12-18 12:00:07
태그:

img

전반적인 설명

이 전략은 Low Volatility Directional Buy with Profit Taking and Stop Loss라고 불린다. 이 전략은 이동 평균 크로스오버를 구매 신호로 활용하고, 수익을 확보하기 위해 수익을 취하고 손실을 멈추는 것을 결합한다. 이 전략은 낮은 변동성 코인에 적합하다.

전략 논리

이 전략은 다른 기간과 함께 3 개의 이동 평균을 사용합니다: 50 기간, 100 기간 및 200 기간. 구매 논리는: 50 기간 MA가 100 기간 MA를 넘어서고 100 기간 MA가 200 기간 MA를 넘어서면, 길게 이동합니다.

이것은 낮은 변동성 범위에서 벗어나는 신호이며 트렌드의 시작입니다. 50 기간 MA의 빠른 상승은 단기 추진력의 강화를 나타냅니다. 100 기간 MA 또한 상승하는 것은 중기 힘의 참여를 나타냅니다. 상승 추세를 안정화하기 위해.

엔트리 이후, 전략은 이윤을 확보하기 위해 이윤을 취득하고 손실을 중지합니다. 이윤을 취득하는 것은 엔트리 가격의 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)


더 많은