비트코인 변동성 밴드 반전 전략


생성 날짜: 2023-10-12 17:38:39 마지막으로 수정됨: 2023-10-12 17:38:39
복사: 0 클릭수: 823
avatar of ChaoZhang ChaoZhang
1
집중하다
1702
수행원

개요

이 전략은 높은 변동성을 가진 증권들을 위해 고안된 회수 시스템이며, 따라서 비트코인은 매우 이상적인 거래 품종이다. 이 전략은 일일 도표 또는 더 낮은 시간 프레임 (나는 3시간 시간 프레임에서 좋은 결과를 찾았지만 1시간 이하의 테스트를 하지 않았다) 에서 사용할 수 있다.

전략 원칙

이 전략은 앞의 두 K 선의 종전 가격의 변화를 비교하여 변동성을 계산하고, 이 가격의 변화를 사용하여 이동 평균을 생성한다. 이동 평균에 표준 격차 대역을 감싸, 내부는 1 표준 격차, 외부는 2 표준 격차이다. 가격이 기본 이동 평균 필터보다 높다면, 우리가 상승 추세에 있다는 것을 확인한다. 따라서 상승 추세에서, 내부 표준 격차 대역이 파열되는 데로 인턴이 있다면, 구매 신호를 발송한다. 그러나 가격이 계속 하락하여 외부 표준 격차 대역이 파열되는 경우, 구매 신호를 발송하지 않습니다.

사용자는 자신이 테스트하려는 날짜 범위를 변경하여 이동 평균 주기와 내외의 변동률의 표준 격차를 계산할 수 있습니다. 비트코인에서는 내부 및 외부 표준 격차 주파수를 표준 설정으로 유지하지만, 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)