이 전략은 높은 변동성을 가진 증권에 설계된 풀백 시스템이기 때문에 자연스럽게 비트코인은 이를 거래하는 데 탁월한 선택입니다. 이것은 일일 차트 또는 더 낮은 시간 프레임에서 모두 사용할 수 있습니다. (나는 3 시간 시간 프레임에서 좋은 결과를 발견했습니다. 그러나 1 시간 이하의 모든 것에 테스트하지 않았습니다.)
이 전략은 이전 2개의 촛불의 폐쇄 가격의 변화를 비교하여 변동성을 계산하고, 이 가격의 변화를 이용하여 이동 평균을 생성한다. 이 띠는 이동 평균을 중심으로 1의 표준편차로 내부 밴드와 2의 표준편차로 외부 밴드를 둘러싸고 있다. 만약 가격이 미리 설정된 MA (가동 평균) 필터 위에 있다면 우리는 상승 추세에 있다고 결정된다. 따라서 이 전략은 상승 추세에 있을 때 신호를 발산하고, 아래쪽 내부편차 띠가 급격하게 증가하는 추세가 발생하면 시그널을 발급할 것이다. 그러나 가격이 계속되고 외부편차 띠를 통과하면 이 띠가 변동성 스파이크가 너무 크다는 것을 유해하기 때문에 구매 신호가 발생하지 않을 것이다. 이 띠는 초록색의 이벤트가 있는 지표에
사용자가 테스트하고자하는 날짜 범위, 변동성 추적 및 내외선 밴드 오차를위한 이동 평균 기간을 변경할 수 있습니다. BTC에서 나는 내부 오차 및 외부 오차 대역을 표준 설정에 남겨 두었지만 3 기간 변동성 추적을 1 일 차트 거래에 좋으며 5 기간 변동성 추적을 3 시간 차트에 좋다고 발견했습니다. 이것은 구매 및 보유 전략이 아니기 때문에 거래는 아마도 가장 유동적인 코인을 고수하고 싶어 할 것입니다. 그래서 당신은 거의 변동성 없는 시장에서 매우 빨리 들어갈 수 있습니다.
위험 완화 방법:
적절한 휘발성 하위 자산을 선택하고, 위치 크기를 제어합니다.
비효율적인 거래를 줄이기 위해 매개 변수를 최적화합니다.
손해를 막고 수익을 취하고 엄격한 돈 관리
실행 효율에 집중하고 액체 기반을 선택하세요.
다른 기본 특성에 맞게 매개 변수를 조정합니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
이동 평균 기간을 최적화하여 다른 기본 자산의 변동성을 더 잘 추적합니다.
변동성 대역 매개 변수를 조정하여 특정 기본 변동성 범위에 더 잘 맞출 수 있습니다.
신호를 더 검증하기 위해 볼륨 스파이크 같은 다른 필터를 추가합니다.
기계 학습 기술을 사용하여 적응성을 위한 매개 변수를 동적으로 최적화합니다.
더 많은 거래 기회를 잡기 위해 더 높은 주파수 시간 프레임에서 테스트합니다.
이윤을 더 많이 확보하기 위해 이동 스톱 로스/이익 추적을 추가합니다.
양적 포트폴리오 전략을 만들기 위해 다른 지표나 모델과 결합합니다.
이 전략은 전반적으로 매우 간단하고 직관적이며, 시장 전환점을 포착하기 위해 변동성 지표를 통해 반전을 식별합니다. 매개 변수를 조정하고 안정성과 수익성을 더욱 향상시키기 위해 다른 기술적 지표를 통합하여 최적화 할 수있는 큰 공간이 있습니다. 그러나 거래자는 과잉 적합 및 곡선 적합 문제에 대해 알아야합니다. 이 전략은 단기 거래에 더 적합하며 위험을 제어하기 위해 엄격한 돈 관리가 필요합니다. 올바르게 마스터하면 높은 변동성 암호화폐 거래에 강력한 도구가 될 수 있습니다.
/*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)