이 전략은 슈퍼트렌드와 피셔 전환의 두 지표를 결합하여, 보다 안정적인 추세에 따라 긴 선을 따르는 거래 전략을 구현한다. 슈퍼트렌드 지표가 구매 신호를 발산할 때, 그리고 피셔 전환 지표가 2.5보다 작고 상승할 때 구매 신호를 생성한다. 전략은 합리적인 중지 손실과 중지 방식으로 포지션을 관리한다.
슈퍼트렌드 지표는 가격 트렌드 방향을 판단하기 위해 사용된다. 가격이 위쪽으로 궤도를 뚫을 때, 보이스 신호; 가격이 아래쪽으로 궤도를 뚫을 때, 하위 신호. 이 전략은 슈퍼트렌드가 보이스 신호일 때 구매 신호를 발송한다.
피셔 전환 지표는 가격 변동이 소비자 심리에 미치는 영향의 정도를 반영한다. 피셔 값은 …-2.5, 2.5) 영역에서 시장 중립을 나타내고, 2.5보다 작은 것은 시장 공황을 나타내고, 2.5보다 큰 것은 시장 우호를 나타냅니다. 이 전략은 피셔가 2.5보다 작고 상승하면 구매 신호를 발산하여 공황을 중립으로 전환합니다.
전략은 합리적인 스톱로스 스톱으로 포지션을 관리한다. 스톱로스 포인트는 입문 가격에서 ATR 값을 빼고 ATR 배수의 곱셈으로 설정하고, 스톱로스 포인트는 입문 가격에 ATR 값을 더해 ATR 배수의 곱셈으로 설정한다. 스톱로스 폭은 스톱로스 폭보다 크며, 트렌드가 전략에 따른 위험 제어 사상을 반영한다.
또한 위험 금액 관리도 고려한다. ATR과 위험 금액에 따라 포지션 규모를 계산하여 각 단위 리스크가 설정된 위험 금액을 초과하지 않도록 한다.
여러 지표가 결합하여 단일 지표가 거래 빈도를 초래하지 않습니다. 슈퍼 트렌드는 트렌드 방향을 판단하고, 피셔 변수는 시장의 심리적 측면을 판단합니다. 둘은 안정적인 거래 신호를 형성합니다.
합리적인 스톱 스톱을 설정하여 트렌드를 파악하고 긴 줄을 보유하는 데 도움이 되며, 동시에 위험을 통제한다.
리스크 금액 관리와 최소 거래 단위를 적용하여 거래 당 위험을 통제하고, 감당할 수 있는 것보다 큰 손실을 피합니다.
거래 신호는 안정적이며 긴 줄을 보유하기에 적합하다. 피셔 변수는 부드러운 지표로, 시장 소음을 필터링하고 가짜 신호를 피하는 데 도움이됩니다.
지표 파라미터를 최적화할 수 있는 공간이 넓다. 슈퍼트렌드의 ATR 주기와 곱셈 파라미터를 다른 품종의 다른 주기, 그리고 피셔 변동의 평형 파라미터를 따라 조정하여 최적의 파라미터 조합을 찾을 수 있다.
트렌드를 따르는 전략으로, 충격적 평정 단계에서 소액 손실이 쌓일 것이다. 트렌드가 명백한 품종과 주기적으로 운영되는 전략을 선택해야 한다.
피셔 변수는 극단적인 상황에는 효과적이지 않다. 시장이 장기적으로 특정 상태를 유지하면 피셔 값이 중립 영역에서 계속 이탈하여 전략이 중단되어야 한다.
스톱포인트가 지나치게 가까워지면 너무 자주 탈퇴할 수 있다. ATR 주기 및 ATR 배수 파라미터를 합리적으로 설정하여 스톱포인트 거리에 일정 버퍼링이 있는지 확인한다.
거래비용을 무시하면 소액의 수익 거래 손실이 발생할 수 있다. 품종의 거래비용 수준을 고려하고, 적절히 조정하는 것이 좋습니다.
전략적 우위를 나타내기 위해서는 시장에 오랫동안 참여해야 합니다. 긴 거래에 충분한 자금이 있는지 확인하고 정신적으로 안정해야합니다.
ATR 주기 및 ATR 배수 매개 변수를 조정하여 스톱 로즈 스톱 램프트를 최적화한다. 데이터 재검토를 통해 매개 변수를 최적화할 수 있고, 동적으로 최적화할 수도 있다.
더 안정적인 거래 신호를 찾기 위해 평평한 주기와 같은 다른 피셔 변환 파라미터를 시도하십시오. 시장의 변동률 동적으로 조정하는 파라미터를 결합 할 수 있습니다.
다른 지표와 결합하여 필터로, 대시장 불확실성이 있을 때 잘못된 거래를 피한다. 평균선, 변동률 등의 대시장 움직임을 판단할 수 있다.
다른 정지 전략을 테스트하십시오. 이동 정지, 분기 정지, ATR 추적 정지 등이 수익성을 향상시킵니다.
고정 비율 자금 관리, 케일리 공식 등과 같은 최적화 된 자금 관리 전략은 이익보다 손실이 더 높습니다.
거래비용에 대한 최적화, 소액 포지션 거래 후 수익성을 유지하기 위해.
이 전략은 슈퍼 트렌드 및 피셔 변동과 같은 지표의 장점을 통합하여 안정적인 추세를 형성하고 긴 라인 거래 전략에 따릅니다. 손실 중지 관리 및 위험 제어를 통해 더 나은 위험 수익률을 얻을 수 있습니다. 전략은 더 강력한 실장 성능을 얻기 위해 파라미터, 필터 신호, 자금 관리 등의 측면을 추가로 최적화해야합니다. 그러나 전체적인 아이디어는 튼튼하며, 실장 검증과 지속적인 최적화를 할 가치가 있습니다.
/*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)