スーパートレンドとフィッシャー変換に基づくトレンドフォロー長期戦略


作成日: 2023-11-03 15:42:16 最終変更日: 2023-11-03 15:42:16
コピー: 0 クリック数: 732
1
フォロー
1621
フォロワー

スーパートレンドとフィッシャー変換に基づくトレンドフォロー長期戦略

概要

この戦略は,スーパートレンドとフィッシャー変換の2つの指標を融合させ,より安定したトレンドをフォローする長線取引戦略を実現する.スーパートレンドの指標が買い信号を発信し,フィッシャー変換の指標が2.5未満で上昇すると,買い信号を生成する.戦略は,合理的なストップ・ロスとストップ・ストップ方式でポジション管理を行う.

戦略原則

  1. スーパートレンド指数は,価格のトレンド方向を判断するために使用される.価格が上線したときに,看板信号;価格が下線したときに,下線信号.この戦略は,スーパートレンドが看板であるときに,買入信号を発する.

  2. フィッシャー変換指数は,価格変動が消費者の心理に与える影響の程度を反映する.フィッシャー値は, (−2.5,2.5) の範囲で,市場中立を表し, (−2.5) 未満は,市場パニックを表し, (−2.5) 以上のものは,市場ユーフォリアを表す.この戦略は,フィッシャーが (−2.5) 未満で上昇するときに,購入シグナルを発信し, (−2.5) までのパニックを捕まえる.

  3. 戦略は合理的なストップ・ストップでポジションを管理する.ストップ・ストップは,入場価格減算ATR値とATR倍数の倍数として設定され,ストップ・ストップは,入場価格加算ATR値とATR倍数の倍数として設定される.ストップ・ストップの幅は,ストップ・ストップの幅よりも大きく,トレンドが戦略に従うリスク管理思想を反映する.

  4. また,リスク金額管理も考慮されている.ATRとリスク金額に基づいてポジションの規模を計算し,各ユニットのリスクが設定されたリスク金額を超えないようにする.

優位分析

  1. 複数の指標を組み合わせて,単一の指標が取引頻度を生じさせないようにする.スーパートレンドはトレンドの方向を判断し,フィッシャー変換は市場の心理面を判断し,両者は安定した取引信号を形成する.

  2. 合理的なストップ・ストップを設定することで,トレンドを把握し,ロングラインを保有し,リスクをコントロールできます.

  3. リスクマネジメントと最小取引単位を使用することで,取引ごとにリスクが制御され,承受可能な以上の大きな損失を避ける.

  4. 取引信号は安定し,長線保持に適している.フィッシャー変換は平滑な指標であり,市場騒音をフィルタリングし,偽信号を避けるのに役立ちます.

  5. 指数パラメータの最適化スペースは大きい。異なる品種の異なる周期に応じて,SuperTrendのATR周期と倍数パラメータ,およびフィッシャー変換の平滑パラメータを調整して,最適なパラメータの組み合わせを探せ。

リスク分析

  1. トレンドフォロー戦略として,震動整合段階で小額の損失を蓄積する.傾向が明らかな品種と周期的な走行戦略を選択する.

  2. フィッシャー変換は,極端な状況に対して効果が悪い. 市場が長期にわたってある状態を維持すると,フィッシャー値は中性区間から偏り続け,この時点で戦略を一時停止すべきである.

  3. 止損点の近すぎは,過度の退出を引き起こす可能性がある.ATR周期とATR倍数パラメータを合理的に設定し,止損距離に一定の緩衝区間があることを保証する.

  4. 取引コストを無視すると,小規模な利益の取引損失が起こる.品種の取引費用のレベルを考慮し,止まり幅を適切に調整する必要があります.

  5. 戦略的優位性を発揮するには,市場への長期参加が必要である. 十分な資金が長期取引をサポートすることを保証し,精神的に安定する必要があります.

最適化の方向

  1. ATR周期とATR倍数パラメータを調整し,ストップ・ローズ・ストップ幅を最適化する. データを回測してパラメータを最適化することも,動的に最適化することもできる.

  2. 異なるフィッシャー変換パラメータ (平滑周期など) を試し,より安定した取引信号を探します. 市場の変動率の動的調整パラメータと組み合わせることができます.

  3. 他の指標と組み合わせてフィルターとして,大盤の不確実性時に誤った取引を避ける.平均線,波動率などの大盤の動きを判断するために使用できます.

  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)