市場逆転の勢い戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-29 15:10:11
タグ:

img

概要

この戦略は,スーパートレンドインジケーターとフィッシャー・トランスフォームを組み合わせて,市場が逆転するときにショートチャンスを探します.異なる仮想通貨,株式,市場のためのスーパートレンドとフィッシャー・トランスフォームのパラメータを調整できます.セール信号が表示されると,ポジションサイズ,ストップ・ロスト,収益レベルを示します.また,リスク額を変更することもできます.

戦略の論理

この戦略は,まず10期間のフィッシャー変換を計算する.フィッシャー線が下から2.5を突破すると,セールシグナルが生成される.同時に,スーパートレンドのチャネルとして10期間の平均真要範囲 (ATR) を計算する.価格が上線を下に突破すると,セールシグナルが生成される.したがって,この戦略は,フィッシャー変換とスーパートレンドチャネルを組み合わせて,市場が逆転するときにショートチャンスを捉える.

具体的には,現在の閉鎖が前の上部レールの下にあり,以前の閉鎖がスーパートレンドチャネルの下部レールの上にあるとき,市場は逆転したことを決定し,販売信号を生成する.同時に,フィッシャーラインが下から2.5を突破し,以前のフィッシャー値が現在の値よりも低いとき,トレンドが逆転したことを決定し,販売信号を生成する.

戦略には スーパートレンドとフィッシャー・トランスフォームの逆転の識別が 求められています

利点

この戦略は,スーパートレンドチャネルとフィッシャー・トランスフォームを組み合わせ,市場の逆転点をより正確に把握することができる.スーパートレンドまたはフィッシャー単独を使用すると比較して,誤った信号を削減し,戦略の安定性を向上させることができます.

また,この戦略は,SupertrendとFisherのパラメータを調整する柔軟性を提供している.ユーザーは,市場と製品に目的的に適合するために,異なる市場と製品に最適なパラメータの組み合わせを選択することができます.これはカスタマイズ可能な最適化可能な戦略です.

この戦略は,リスク額管理も提供しています.ユーザーは,それぞれのオーダーに対するリスク資本を自社のリスク管理ニーズを満たすために便利に調整できます.同時に,良いリスク・リターン比を達成するために,ストップ・ロストと利益のレベルを自動的に計算します.

リスク

この戦略は主にスーパートレンドチャネルを基に市場構造を決定する.トレンドが長期間にわたって続く場合,スーパートレンドは失敗する可能性があります.この場合,チャネルの期間または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)


もっと