시장 역전 동력 전략

저자:차오장, 날짜: 2024-02-29 15:10:11
태그:

img

전반적인 설명

이 전략은 슈퍼트렌드 지표와 피셔 트랜스포먼트를 결합하여 시장이 역전될 때 짧은 기회를 찾습니다. 다른 암호화폐, 주식 및 시장에 대한 슈퍼트렌드 및 피셔 트랜스포먼트의 매개 변수를 조정할 수 있습니다. 판매 신호가 표시되면 위치 크기, 손실 중지 및 수익 수준을 보여줍니다. 또한 위험 금액을 변경할 수 있습니다.

전략 논리

이 전략은 먼저 피셔 변형을 10 기간으로 계산합니다. 피셔 라인이 아래에서 2.5를 넘으면 판매 신호가 생성됩니다. 동시에 10 기간 평균 진정한 범위 (ATR) 를 슈퍼 트렌드의 채널로 계산합니다. 가격이 상단 레일 아래에 넘으면 판매 신호가 생성됩니다. 따라서 전략은 피셔 변수와 슈퍼 트렌드 채널을 결합하여 시장이 역전될 때 짧은 기회를 잡습니다.

특히, 현재의 클로즈는 이전 상부 레일 아래에 있고 이전 클로즈는 슈퍼트렌드 채널의 하부 레일 위에 있을 때, 시장이 역전되었다는 것을 결정하고 판매 신호를 생성합니다. 동시에, 피셔 라인이 아래에서 2.5를 넘어서 이전 피셔 값이 현재보다 낮을 때, 트렌드가 역전되었다는 것을 결정하고 판매 신호를 생성합니다.

그래서 전략은 최종 판매 신호를 생성하기 위해 슈퍼트렌드와 피셔 트랜스포머의 반전 식별을 필요로 합니다.

장점

이 전략은 슈퍼트렌드 채널과 피셔 트랜스포먼트를 결합하여 시장의 반전 지점을 더 정확하게 파악할 수 있습니다. 슈퍼트렌드 또는 피셔만 사용하는 것과 비교하면 잘못된 신호를 줄이고 전략의 안정성을 향상시킬 수 있습니다.

또한 전략은 슈퍼트렌드 및 피셔의 매개 변수를 조정할 수 있는 유연성을 제공합니다. 사용자는 시장에 맞게 다양한 시장과 제품에 최적화된 매개 변수 조합을 선택할 수 있습니다. 이것은 사용자 정의 가능한 최적화 가능한 전략입니다.

이 전략은 또한 위험 금액 관리를 제공합니다. 사용자는 자신의 위험 관리 요구를 충족시키기 위해 각 주문에 대한 위험 자본을 편리하게 조정 할 수 있습니다. 동시에 좋은 위험 보상 비율을 달성하기 위해 자동으로 스톱 로스 및 수익 취득 수준을 계산합니다.

위험성

이 전략은 주로 슈퍼트렌드 채널에 의존하여 시장 구조를 결정합니다. 트렌드가 장기간 지속되면 슈퍼트렌드가 실패 할 수 있습니다. 이 경우 채널의 기간 또는 ATR 인수는 적절히 증가해야합니다.

또한 피셔 변환은 잘못된 신호 또는 조기 신호를 쉽게 생성하는 경향이 있습니다. 시장 변동이 높을 때 피셔 기간은 소음을 필터링하기 위해 조정해야합니다.

또한, 역전 전략의 전반적인 승률은 제한될 수 있다. 이는 범위 경계 지역에서 포지션을 개척하지 않거나 추세가 명확해지면 참여하지 않도록 트렌드 다음 지표와 결합되어야 한다. 이동 평균은 안정성을 높이기 위해 필터로 추가될 수 있다.

개선 방향

이 전략은 다음과 같은 측면에서 향상될 수 있습니다.

  1. 다른 제품과 시장 조건에 기초한 최고의 매개 변수 조합을 위해 Supertrend의 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)


더 많은