スーパートレンドとフィッシャー・トランスフォーメーションに基づく長期戦略をフォローする傾向

作者: リン・ハーンチャオチャン,日付: 2023年11月3日 15:42:16
タグ:

img

概要

この戦略は,スーパートレンドとフィッシャー・トランスフォームの指標を組み合わせて,長期的取引戦略の後に比較的安定したトレンドを実装する.スーパートレンド指標が購入信号を与え,フィッシャー・トランスフォームの指標が-2.5を下回って上昇するときに購入信号を生成する.この戦略はストップ・ロストとテイク・プロフィートでポジションを適切に管理する.

戦略の論理

  1. スーパートレンドインジケーターは,価格傾向の方向性を決定するために使用されます.価格が上部帯を超えると,それは上昇信号です.価格が下部帯を超えると,それは下落信号です.この戦略は,スーパートレンドが上昇しているときに購入信号を発信します.

  2. フィッシャー・トランスフォーマー指標は,価格変動が消費者の心理に与える影響を反映する. (-2.5,2.5) のフィッシャー値は中立市場を表し,-2.5以下はパニック市場を表し,2.5以上はユーフォリック市場を表します.この戦略は,フィッシャーが-2.5を下回り,上昇するときに購入信号を発信し,パニックから中立への転換点を捕捉します.

  3. ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,ストップ・ロスは,エントリー価格マイナス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)


もっと