市場反転デュアルモメンタム戦略


作成日: 2024-02-29 15:10:11 最終変更日: 2024-02-29 15:10:11
コピー: 9 クリック数: 599
1
フォロー
1617
フォロワー

市場反転デュアルモメンタム戦略

概要

この戦略は,スーパートレンドの指標とフィッシャー変数の使用と組み合わせて,市場が逆転するときにショートラインの空白の機会を探します.これは,スーパートレンドとフィッシャー変数のパラメータを調整することによって,異なる暗号通貨,株式,市場に適用できます. 売り込みシグナルが発生すると,ポジションの規模とストップ・ロスの位置と利益の位置を表示します.

戦略原則

この戦略は,まず10周期のフィッシャー変遷を計算する.フィッシャー変遷線が低点から上方2.5を突破すると,売り込み信号を生成する.同時に,スーパートレンドチャネルとして10周期の平均真波幅を計算する.価格が上から下から走行すると,売り込み信号を生成する.したがって,この戦略は,フィッシャー変遷指標とスーパートレンドチャネルを組み合わせて,市場が逆転したときに空き場を探します.

具体的には,前期の超通路上線の下の現在のK線閉盘価格を計算し,前期が通路下線上にあるときは,市場逆転として判断して,売り込みシグナルを生成する.また,前期のフェーズ・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・スノー・ス

したがって,この戦略は,超トレンドの判断で市場が反転し,フィッシャー変数の判断でトレンドが反転する2つの条件を同時に満たす必要があるので,最終的なセールスシグナルが生成されます.

戦略的優位性

この戦略は,スーパートレンドチャネルとフィッシャー変換の指標を組み合わせて,市場の逆転点をより正確に捉えることができる.スーパートレンドまたはフィッシャー変換を単独で使用するよりも,偽信号を減らすことができ,戦略の安定性を高める.

さらに,この戦略は超トレンドチャネルとフィッシャー変換パラメータの調整の柔軟性を提供します. ユーザーは,異なる市場と品種に応じて,最適のパラメータの組み合わせを選択して,ターゲットに市場を適合させることができます. これは,カスタマイズ可能な最適化戦略です.

この戦略は,リスク金額管理も提供している.ユーザーは,各回のリスク金額を簡単に調整して,自分のリスク管理要求を実現することができる.同時に,それは,自動で,リスクの返済率をより良いリスクの返済率を達成するために,停止損失と利益の目標も計算している.

戦略リスク

この戦略は,主に超トレンドチャネルを判断する市場の構造に依存する.トレンドが長期にわたって継続すると,超トレンドチャネルは失効する可能性がある.この場合,チャネルの周期パラメータまたはATR倍数を適切に拡大する必要があります.

また,フィシェル変数は誤信号や早期信号を発生させる傾向がある.市場の変動が大きいときは,フィシェル変数の周期パラメータを適切に調整し,部分的なノイズをフィルタリングすべきである.

さらに,反転策の総勝率は限られている可能性がある.トレンド追跡指標を組み合わせて,震動区間の間,またはトレンドがより明確になった後に再びポジションを開くのを避けるべきである.移動平均をフィルターとして加え,戦略の安定性を高めることができる.

戦略最適化の方向性

この戦略は以下の点で最適化できます.

  1. 超トレンドチャネルの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)