양적 웨이브 스퀴즈 전략


생성 날짜: 2023-11-14 14:04:24 마지막으로 수정됨: 2023-11-14 14:04:24
복사: 0 클릭수: 641
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

양적 웨이브 스퀴즈 전략

개요

이 전략의 주요 아이디어는 Lazy Bear의 동적 지표와 Crypto Face의 MFI 지표를 결합하여 추세가 상승할 때 구매하고 추세가 하락할 때 판매하여 시장 추세를 추적하는 양적 거래 전략을 구현하는 것입니다.

전략 원칙

  1. Lazy Bear의 동적 지표인 BlueWave를 사용하여, 20일 고점, 낮은 점, 그리고 가까운 가격과 가까운 가격의 선형 회귀를 계산하여, 트렌드 방향을 판단한다. BlueWave 위에 0을 통과하면, 트렌드를 나타냅니다. BlueWave 아래에 0을 통과하면, 트렌드를 나타냅니다.

  2. Crypto Face가 개량한 MFI 지표를 사용하여 58 일간의 상승과 거래량을 계산하여 자금 흐름을 판단합니다. MFI가 0보다 크면 자금의 유입을 나타냅니다. MFI가 0보다 작으면 자금의 유출을 나타냅니다.

  3. 블루웨이브 위가 0을 넘어서 MFI가 0보다 크면 구매 신호를 발신하여 더 많은 포지션을 열고, 블루웨이브 아래가 0을 넘어서 MFI가 0보다 작으면 판매 신호를 발신하여 포지션을 공백으로 열고 있다.

  4. 스톱 로즈 스톱 조건을 설정하고, 시장 추세를 추적하여 수익을 창출하면서 위험을 통제하십시오.

전략적 이점

  1. 두 가지 지표를 조합하여 시장의 추세 방향을 더 정확하게 판단할 수 있습니다.

  2. 블루웨이브 지표는 곡선을 평평하게 하고, 비정상적인 데이터에 의해 편향되는 것을 피하고, 시장의 추세를 판단하는 데 더 신뢰할 수 있다.

  3. MFI 지표는 자금의 흐름을 판단하여 가짜 돌파가 손실을 초래하지 않도록합니다.

  4. 정책의 매개 변수가 적고, 구현과 조작이 쉽다.

  5. 유연하게 스톱로스 스톱 조건을 설정하여 거래 위험을 조절할 수 있다.

  6. 특정 시점의 시장의 변동성을 피하기 위해 구매 및 판매 기간을 설정할 수 있습니다.

전략적 위험

  1. 이 전략은 시가격이 계속 하락할 경우 하락을 추격하여 손실을 초래할 수 있습니다.

  2. 지표가 잘못된 신호를 냈을 때, 입구에 들어온 후에 틀어질 수 있다.

  3. 스톱포인트 설정이 너무 커서 손실이 커질 위험이 있습니다.

  4. 시장의 변동이 너무 커서 스톱피드가 넘어갈 확률이 높습니다.

  5. 변수 최적화가 제대로 되지 않아서 전략이 제대로 작동하지 않을 수 있습니다.

  6. 전략은 거래 신호를 너무 자주 생성하여 거래 수수료와 슬라이드 포인트 비용을 증가시킵니다.

최적화 방향

  1. 블루웨이브와 MFI의 매개 변수를 최적화하여 지표를 더 안정적이고 신뢰할 수 있도록 한다.

  2. 트렌드 지표와 결합하여 지속적인 상쇄 손실을 피하십시오.

  3. 동적으로 스톱 손실 스톱 비율을 조정하여 포착 확률을 낮춘다.

  4. 포지션 개시 조건을 최적화하여 잘못된 신호를 줄여줍니다.

  5. 포지션 컨트롤을 추가하는 것을 고려하여 추락을 막는 것을 피하십시오.

  6. 기계 학습 알고리즘과 결합하여 구매 및 판매 지점을 더욱 정밀하게 만듭니다.

요약하다

이 전략은 BlueWave와 MFI의 두 지표를 조합하여 트렌드 방향을 판단하고, 트렌드 상승 시 더 많이 하고, 하향 시 공백을 하고, 시장 트렌드를 효과적으로 추적할 수 있다. 그러나 또한 몇 가지 파라미터 설정, 손해 중지, 지속적인 하락 등의 위험도 존재하며, 전략의 효과와 안정성을 높이기 위해 파라미터 설정, 손해 중지 장치, 필터 조건 등을 추가로 최적화 할 필요가 있다.

전략 소스 코드
/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bunghole 2021
strategy(title="Crypto Squeeze Strategy", initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, currency = 'USD', overlay=true)

//// Stoploss and Take Profit Parameters
// Enable Long Strategy
enable_long_strategy = input(true, title="Enable Long Strategy", group="SL/TP For Long Strategy",inline="1")
long_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_stoploss_percentage = (close * (long_stoploss_value / 100)) / syminfo.mintick
long_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_takeprofit_percentage = (close * (long_takeprofit_value / 100)) / syminfo.mintick

// Enable Short Strategy
enable_short_strategy = input(true, title="Enable Short Strategy", group="SL/TP For Short Strategy",inline="3")
short_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group= "SL/TP For Short Strategy",inline="4")
short_stoploss_percentage = (close * (short_stoploss_value / 100)) / syminfo.mintick
short_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Short Strategy",inline="4")
short_takeprofit_percentage = (close * (short_takeprofit_value / 100)) / syminfo.mintick

// Plot Stoploss & Take Profit Levels
long_stoploss_price = strategy.position_avg_price * (1 - long_stoploss_value/100)
long_takeprofit_price = strategy.position_avg_price * (1 + long_takeprofit_value/100)
short_stoploss_price = strategy.position_avg_price * (1 + short_stoploss_value/100)
short_takeprofit_price = strategy.position_avg_price * (1 - short_takeprofit_value/100)
plot(enable_long_strategy and not enable_short_strategy ? long_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Long SL Level")
plot(enable_long_strategy and not enable_short_strategy ? long_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Long TP Level")
plot(enable_short_strategy and not enable_long_strategy ? short_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Short SL Level")
plot(enable_short_strategy and not enable_long_strategy ? short_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Short TP Level")

// Date Range
start_date = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="Date Range")
start_month = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
start_year = input(title="Start Year", type=input.integer, defval=1804, minval=1800, maxval=3000, group="Date Range")
end_date = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=3, group="Date Range")
end_month = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
end_year = input(title="End Year", type=input.integer, defval=2077, minval=1800, maxval=3000, group="Date Range")
in_date_range = (time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0)) and (time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0))


//// Indicator Inputs
// Lazy Bear's Momentum Indicator
BlueWave = linreg(close - avg(avg(highest(high, 20), lowest(low, 20)), sma(close, 20)), 20, 0)

// Replicated version of Crypto Face's MFI Indicator
mfiUpper = sum(volume * (change(hlc3) <= 0 ? 0 : hlc3), 58)
mfiLower = sum(volume * (change(hlc3) >= 0 ? 0 : hlc3), 58)
_mfiRsi(mfiUpper, mfiLower) =>
    if mfiLower == 0
        100
    if mfiUpper == 0
        0
	100.0 - (100.0 / (1.0 + mfiUpper / mfiLower))

mf = _mfiRsi(mfiUpper, mfiLower)
mfi = (mf - 50) * 3


//// Strategy
// Creating Long and Short Strategy
buy_signal = crossover(BlueWave, 0) and mfi > 0 
sell_signal = crossunder(BlueWave, 0) and mfi < 0 

// Long Strategy
if buy_signal and in_date_range and enable_long_strategy == true
    strategy.entry("Long", true, when=buy_signal, alert_message="Open Long Position")
    strategy.exit("Long  SL/TP", from_entry="Long", loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message="Your Long SL/TP Limit As Been Triggered.")
    strategy.close("Long", when=sell_signal, alert_message="Close Long Position")

// Short Strategy
if sell_signal and in_date_range and enable_short_strategy == true
    strategy.entry("Short", false, when = sell_signal, alert_message="Open Short Position")
    strategy.exit("Short SL/TP", from_entry="Short", loss=short_stoploss_percentage, profit=short_takeprofit_percentage, alert_message="Your Short SL/TP Limit As Been Triggered.")
    strategy.close("Short", when=buy_signal, alert_message="Close Short Position")