슈퍼트렌드와 피셔 트랜스포름에 기반한 장기 전략에 따른 트렌드

저자:차오장, 날짜: 2023-11-03 15:42:16
태그:

img

전반적인 설명

이 전략은 슈퍼 트렌드 및 피셔 트랜스포름 지표를 결합하여 장기적인 거래 전략을 따라 비교적 안정적인 트렌드를 구현합니다. 슈퍼 트렌드 지표가 구매 신호를 주고 피셔 트랜스포름 지표가 -2.5 이하로 떨어지고 상승할 때 구매 신호를 생성합니다. 전략은 스톱 로스로 포지션을 적절히 관리하고 수익을 취합니다.

전략 논리

  1. 슈퍼트렌드 지표는 가격 트렌드의 방향을 결정하는 데 사용됩니다. 가격이 상단 범위를 넘으면 상승 신호이며 가격이 하단 범위를 넘으면 하향 신호입니다. 이 전략은 슈퍼트렌드가 상승 시 구매 신호를 발산합니다.

  2. 피셔 변환 지표는 소비자 심리학에 대한 가격 변동의 영향을 반영합니다. (-2.5, 2.5) 사이의 피셔 값은 중립 시장을 나타냅니다. -2.5 이하는 공황 시장을 나타냅니다. 2.5 이상은 유포리시장을 나타냅니다. 이 전략은 피셔가 -2.5 이하로 올라갈 때 구매 신호를 발사하여 공황에서 중립으로 전환점을 포착합니다.

  3. 이 전략은 스톱 로스로 포지션을 적절히 관리하고 이윤을 취한다. 스톱 로스는 입상 가격에서 ATR 곱하기 ATR 곱하기 ATR 값을 빼고 입상 가격과 ATR 곱하기 ATR 곱하기 이윤을 취한다. 스톱 로스 진폭은 트렌드를 따르는 전략의 위험 통제 아이디어를 반영하여 이윤을 취하는 진폭보다 크다.

  4. 또한 리스크 금액 관리를 고려합니다. ATR 및 리스크 금액에 기초한 포지션 크기를 계산하여 유닛당 리스크가 설정된 리스크 금액을 초과하지 않도록 합니다.

이점 분석

  1. 여러 지표를 결합하면 단일 지표로 인한 빈번한 거래가 피할 수 있습니다. 슈퍼 트렌드는 트렌드 방향을 결정하고 피셔 트랜스포머는 안정적인 거래 신호를 형성하기 위해 시장 심리학을 결정합니다.

  2. 적절한 스톱 로즈와 수익을 설정하면 장기 보유 트렌드를 파악하고 동시에 위험을 제어 할 수 있습니다.

  3. 리스크 금액 관리와 최소 틱 크기를 사용하면 각 거래의 위험을 제어 할 수 있으며, 감당할 수 없는 큰 손실을 피할 수 있습니다.

  4. 거래 신호는 안정적이며 장기 보유에 적합합니다. 피셔 변환은 시장 소음을 필터하고 잘못된 신호를 피하는 데 도움이되는 부드러운 지표입니다.

  5. 지표 매개 변수에 대한 큰 최적화 공간. 슈퍼 트렌드 ATR 기간 및 곱셈자, 피셔의 부드러움은 최적의 매개 변수 조합을 찾기 위해 다른 제품과 시간 틀에 따라 조정 할 수 있습니다.

위험 분석

  1. 트렌드를 따르는 전략으로서, 범위 제한 기간 동안 작은 손실을 축적합니다. 명백한 트렌드를 가진 제품과 시간 프레임을 선택해야합니다.

  2. 피셔 변환은 극단적인 상황에서는 효과적이지 않습니다. 시장이 오랫동안 한 상태에서 유지되면 피셔 값은 중립 구역에서 계속 벗어나게 될 것입니다. 이 경우 전략을 중단해야합니다.

  3. 너무 가까운 스톱 손실은 조기 종료로 이어질 수 있습니다. 스톱 손실에 대한 충분한 버퍼를 보장하기 위해 ATR 기간과 ATR 곱자는 합리적으로 설정되어야합니다.

  4. 거래 비용을 무시하면 수익성있는 거래가 돈을 잃게됩니다. 제품의 거래 비용이 고려되어 그에 따라 수익을 조정해야합니다.

  5. 이 전략의 이점을 실현하기 위해서는 장기적인 시장 참여가 필요합니다. 장기적인 거래를 지원하고 안정적인 사고 방식을 유지하는 데 충분한 자본을 확보하십시오.

최적화 방향

  1. ATR 기간, ATR 곱셈을 조정하여 스톱 로스를 최적화하고 이익을 취합니다. 백테스팅 또는 동적으로 최적화하십시오.

  2. 더 안정적인 거래 신호를 찾기 위해 부드러운 기간과 같은 다른 피셔 매개 변수를 시도하십시오. 시장 변동성에 따라 동적으로 조정 할 수 있습니다.

  3. 시장이 불확실할 때 잘못된 거래를 피하기 위해 필터로 다른 지표를 추가하십시오. MA, 변동성 등을 사용하여 시장 트렌드를 판단하십시오.

  4. 수익성을 높이기 위해 이동, 부분, ATR 후속 등과 같은 다른 수익 전략을 테스트하십시오.

  5. 고정 분자, 켈리 공식 등과 같은 자본 관리 전략을 최적화하여 수익/위험 비율을 높입니다.

  6. 거래 비용을 최적화하고 작은 포지션을 수익성있게 유지합니다.

결론

이 전략은 슈퍼 트렌드, 피셔 트랜스포름 및 기타 지표의 장점을 통합하여 장기적인 거래 전략을 따라 안정적인 추세를 형성합니다. 스톱 로스, 수익 및 리스크 관리를 통해 좋은 리스크 보상 비율을 달성 할 수 있습니다. 전략은 실제 성능을 향상시키기 위해 매개 변수, 신호 필터링, 자본 관리 등을 추가적으로 최적화해야합니다. 그러나 전반적인 논리는 견고하며 실질적인 검증과 지속적인 최적화를 가치가 있습니다. 수익 및 리스크 마인드를 올바르게 관리하면 전략은 안정적인 장기 수익을 얻을 수 있습니다.


/*backtest
start: 2023-10-26 00:00:00
end: 2023-11-02 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supertrend and Fisher_LONG", 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]

// Buy condition for Fisher transformation.
buy_signal = (fish1 < -2.5) and (fish1 > fish2)
durum = 0 //just for the situation.

if (buy_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
buySignal = trend == 1 and trend[1] == -1 and durum == 1

plotshape(buySignal, title='Buy Signal', location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)

// 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 (buySignal)
    entryPrice := close
    atr1 := atr
    stopLoss := entryPrice - atr1 * Multiplier
    contracts := entryPrice / (entryPrice - stopLoss) * RiskAmount / entryPrice
    takeProfit := entryPrice + atr1 * Multiplier
    takeProfit2 := entryPrice + 2 * atr1 * Multiplier
    takeProfit3 := entryPrice + 3 * atr1 * Multiplier

if (buySignal)
    strategy.entry("Buy", strategy.long, qty=contracts)

// 
if (close <= stopLoss)
    strategy.close("Buy", comment="Stop Loss Hit")
else if (close >= takeProfit)
    strategy.close("Buy", 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)


더 많은