비트코인 변동성 대역 역전 전략

저자:차오장, 날짜: 2023-10-12 17:38:39
태그:

전반적인 설명

이 전략은 높은 변동성을 가진 증권에 설계된 풀백 시스템이기 때문에 자연스럽게 비트코인은 이를 거래하는 데 탁월한 선택입니다. 이것은 일일 차트 또는 더 낮은 시간 프레임에서 모두 사용할 수 있습니다. (나는 3 시간 시간 프레임에서 좋은 결과를 발견했습니다. 그러나 1 시간 이하의 모든 것에 테스트하지 않았습니다.)

전략 논리

이 전략은 이전 2개의 촛불의 폐쇄 가격의 변화를 비교하여 변동성을 계산하고, 이 가격의 변화를 이용하여 이동 평균을 생성한다. 이 띠는 이동 평균을 중심으로 1의 표준편차로 내부 밴드와 2의 표준편차로 외부 밴드를 둘러싸고 있다. 만약 가격이 미리 설정된 MA (가동 평균) 필터 위에 있다면 우리는 상승 추세에 있다고 결정된다. 따라서 이 전략은 상승 추세에 있을 때 신호를 발산하고, 아래쪽 내부편차 띠가 급격하게 증가하는 추세가 발생하면 시그널을 발급할 것이다. 그러나 가격이 계속되고 외부편차 띠를 통과하면 이 띠가 변동성 스파이크가 너무 크다는 것을 유해하기 때문에 구매 신호가 발생하지 않을 것이다. 이 띠는 초록색의 이벤트가 있는 지표에 구매 스파이크가 발생하는 것을 볼 수 있다. 이 지표에 빨간색이 표시되어 있는 이 필터로 구매/판매를 위한 경우 우리는 상위 배경 아래의 내부 지표에 상승을 보이며 마를 위해 미리 설정된 지표에 표시된다.

사용자가 테스트하고자하는 날짜 범위, 변동성 추적 및 내외선 밴드 오차를위한 이동 평균 기간을 변경할 수 있습니다. BTC에서 나는 내부 오차 및 외부 오차 대역을 표준 설정에 남겨 두었지만 3 기간 변동성 추적을 1 일 차트 거래에 좋으며 5 기간 변동성 추적을 3 시간 차트에 좋다고 발견했습니다. 이것은 구매 및 보유 전략이 아니기 때문에 거래는 아마도 가장 유동적인 코인을 고수하고 싶어 할 것입니다. 그래서 당신은 거의 변동성 없는 시장에서 매우 빨리 들어갈 수 있습니다.

전략 의 장점

  • 시장 전환점을 파악하기 위해 변동성 거래를 이용합니다.
  • 길고 짧은 거래, 상승 및 하락 시장에서 수익
  • 간단한 표준 매개 변수 설정 사용하기 쉽습니다
  • 매개 변수는 다양한 기본에 쉽게 최적화 될 수 있습니다
  • 합리적인 스톱 로스 및 수익 취득 설정은 수익을 확보하는 데 도움이 됩니다.

전략 의 위험

  • 높은 변동성 기반 자산은 더 큰 손실을 초래할 위험이 있습니다.
  • 빈번한 장기/단기 전환은 더 높은 거래 비용을 발생
  • 단기 거래는 시장을 면밀히 감시해야 합니다.
  • 시장 유동성이 낮을 때 손실을 막는 것이 어렵습니다.
  • 매개 변수 조정이 제대로 되지 않으면 거래가 과다해질 수 있습니다.

위험 완화 방법:

  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)




더 많은