시장 반전 듀얼 모멘텀 전략


생성 날짜: 2024-02-29 15:10:11 마지막으로 수정됨: 2024-02-29 15:10:11
복사: 9 클릭수: 599
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

시장 반전 듀얼 모멘텀 전략

개요

이 전략은 슈퍼 트렌드 지표와 피셔 전환을 사용하여 시장이 역전될 때 단선 상장 기회를 찾습니다. 슈퍼 트렌드 및 피셔 전환의 매개 변수를 조정하여 다양한 암호화폐, 주식 및 시장에 적용 할 수 있습니다. 판매 신호가 발생하면 지위 규모와 중지 손실 지점 및 수익률을 표시합니다. 또한 위험 금액을 조정할 수 있습니다.

전략 원칙

이 전략은 먼저 10주기의 피스보이 변동을 계산한다. 피스보이 변동선이 하위점으로부터 2.5을 돌파할 때, 판매 신호를 발생시킨다. 동시에, 10주기의 평균 실제 파장을 슈퍼 트렌드 채널로 계산한다. 가격이 상위 궤도를 통과할 때, 판매 신호를 발생시킨다. 따라서, 이 전략은 피스보이 변동 지표와 슈퍼 트렌드 채널을 결합하여 시장이 역전될 때 공백 기회를 찾는다.

구체적으로, 그것은 전주기의 슈퍼 통로 위 궤도 아래의 현재 K 라인 종료 가격을 계산하고 전주기가 통로 하위 궤도 위에있는 경우, 시장 역전으로 판단하여 판매 신호를 발생시킨다. 동시에, 피스피스 변동 지표를 계산하고, 피스피스 변동 라인이 하위에서 2.5을 돌파하고, 전주기의 피스피스 변동 값이 현재 값보다 낮은 경우, 트렌드 역전으로 판단하여 판매 신호를 발생시킨다.

따라서, 이 전략은 슈퍼 트렌드가 시장 반전을 판단하는 것과 피쉬 변동이 트렌드가 반전을 판단하는 두 가지 조건을 동시에 충족시켜야 최종 판매 신호를 생성한다.

전략적 이점

이 전략은 슈퍼 트렌드 채널과 피쉬 전환 지표와 결합하여 시장의 전환점을 더 정확하게 포착할 수 있다. 슈퍼 트렌드 또는 피쉬 전환을 단독으로 사용하는 것에 비해, 가짜 신호를 줄여서 전략의 안정성을 높일 수 있다.

또한, 이 전략은 슈퍼 트렌드 채널과 피셔 변동 파라미터를 조정할 수 있는 유연성을 제공한다. 사용자는 서로 다른 시장과 품종에 따라 최적의 파라미터 조합을 선택할 수 있으며, 이를 통해 시장에 타깃적으로 맞출 수 있다. 이것은 사용자 정의 가능한 최적화 전략이다.

이 전략은 또한 위험 금액 관리를 제공합니다. 사용자는 자신의 위험 관리 요구 사항을 달성하기 위해 각 리스크 금액을 편리하게 조정할 수 있습니다. 동시에, 그것은 또한 자동으로 더 나은 위험 수익률을 달성 할 수있는 중지 손실과 수익 목표를 계산합니다.

전략적 위험

이 전략은 주로 슈퍼 트렌드 채널을 판단하는 시장 구조에 의존한다. 트렌드가 지속되는 단계가 길어지면 슈퍼 채널은 무효가 될 수 있다. 이 경우 채널의 주기 변수 또는 ATR 배수를 적절히 확대해야 한다.

또한, 피세 변동은 잘못된 신호 또는 조기 신호를 생성하는 데 더 취약하다. 시장의 변동이 큰 경우 피세 변동의 주기 파라미터를 적절히 조정하여 일부 소음을 필터링해야합니다.

또한, 역류 전략의 전반적인 승률은 상대적으로 제한적일 수 있다. 트렌드 추적 지표와 결합하여, 흔들림 구역 사이에 포지션을 열거나, 트렌드가 더 명확한 후에 다시 참여하는 것을 피해야 한다. 이동 평균을 필터로 추가하여 전략의 안정성을 높일 수 있다.

전략 최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 슈퍼 트렌드 채널의 ATR 주기 수와 ATR 배수를 최적화하고, 다양한 품종과 시장 조건에 대한 최적의 파라미터 조합을 선택합니다.

  2. 피세 변동의 주기 변수를 최적화하고, 곡선을 평형화하여 잘못된 신호를 방지한다.

  3. 이동 평균 또는 브린 띠를 보조 지표로 추가하여 흔들림 시장의 입장을 피하십시오.

  4. 다른 시간 주기의 피스피어 변환과 결합하여 보다 안정적이고 신뢰할 수 있는 역추론 판단을 달성합니다.

  5. 리버리지 비율, 포지션 수, 부가 규칙 등과 같은 포지션 관리 모듈을 추가하여 위험을 제어합니다.

  6. 기계 학습과 같은 방법을 결합하여 매개 변수의 자동 최적화 및 전략 적합성을 구현합니다.

요약하다

이 전략은 슈퍼 트렌드와 피셔 변동 지표를 결합하여 시장의 반전을 판단하는 동시에 약간의 유연성을 가지고 있으며, 매개 변수를 통해 다양한 품종에 적응할 수 있다. 단일 지표에 비해 더 신뢰할 수 있는 신호 판단과 위험 관리를 실현한다. 지속적인 최적화를 통해 이 전략은 안정성을 더욱 강화하고 수익성을 향상시킬 수 있다.

전략 소스 코드
/*backtest
start: 2024-02-21 00:00:00
end: 2024-02-27 03:00:00
period: 2m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supertrend and Fisher_SHORT", overlay=true)

//This block is for  Fisher Transformation Calculation.
len = input.int(10, minval=1, title="Length") // Length is optional. 10 is good but is up to you.
high_ = ta.highest(hl2, len)
low_ = ta.lowest(hl2, len)
round_(val) => val > .99 ? .999 : val < -.99 ? -.999 : val
value = 0.0
value := round_(.66 * ((hl2 - low_) / (high_ - low_) - .5) + .67 * nz(value[1]))
fish1 = 0.0
fish1 := .5 * math.log((1 + value) / (1 - value)) + .5 * nz(fish1[1])
fish2 = fish1[1]

// Sell condition for Fisher transformation.
sell_signal = (fish1 > 2.5) and (fish2 > fish1)
durum = 0 //just for the situation.

if (sell_signal)
    durum := -1 // now it changes from 0 to -1.

// Supertrend indicator inputs and calculations (same as in the indicator)
Periods = input(title='ATR Period', defval=10) // period is 10, but you can change it
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=2) //atr multiplier is important. it is 2 for this strategy but you can find another for best performance 
RiskAmount = input.float(title='Risk Amount ($)', defval=10.0, minval=0.0, step=1.0) // ıf you use risk-reward method, risk is 10$ for each position. you can also change it
changeATR = input(title='Change ATR Calculation Method ?', defval=true)

atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Calculate position size based on risk amount
riskPerContract = atr * Multiplier
contracts = RiskAmount / (riskPerContract * syminfo.mintick)

//short signal condition
sellSignal = trend == -1 and trend[1] == 1 and durum == -1

plotshape(sellSignal, title='Sell Signal', location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) //shows the signal.

// variables
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
var float atr1 = na
var float takeProfit2 = na
var float takeProfit3 = na

//it calculates the stop level and reward profit levels using atr.
if (sellSignal)
    entryPrice := close
    atr1 := atr
    stopLoss := entryPrice + atr1 * Multiplier
    contracts := entryPrice / (stopLoss - entryPrice) * RiskAmount / entryPrice
    takeProfit := entryPrice - atr1 * Multiplier
    takeProfit2 := entryPrice - 2 * atr1 * Multiplier
    takeProfit3 := entryPrice - 3 * atr1 * Multiplier

if (sellSignal)
    strategy.entry("Sell", strategy.short, qty=1)

// 
if (close >= stopLoss)
    strategy.close("Sell", comment="Stop Loss Hit")
else if (close <= takeProfit)
    strategy.close("Sell", comment="Take Profit Hit")

// draw the stop, entry and profit levels
plot(stopLoss, title="Stop Loss", color=color.red, linewidth=1, style=plot.style_linebr)
plot(entryPrice, title="Entry Price", color=color.orange, linewidth=1, style=plot.style_linebr)
plot(takeProfit, title="Take Profit", color=color.green, linewidth=1, style=plot.style_linebr)
plot(takeProfit2, title="Take Profit 2", color=color.blue, linewidth=1, style=plot.style_linebr)
plot(takeProfit3, title="Take Profit 3", color=color.purple, linewidth=1, style=plot.style_linebr)