アルファトレンドフォローストップロス戦略


作成日: 2023-11-27 15:25:35 最終変更日: 2023-11-27 15:25:35
コピー: 0 クリック数: 835
1
フォロー
1617
フォロワー

アルファトレンドフォローストップロス戦略

概要

アルファトレンドストップ戦略は,アルファトレンド戦略の基礎に追跡ストップメカニズムが加えられ,リスクをより効果的に管理し,全体的なリターン率を向上させる.

戦略原則

この戦略は,まず,アルファ指標を使って価格の傾向を判断し,アルファ指標が上昇すると看板信号で,アルファ指標が下落すると下落信号である.この戦略は,アルファ指標の金叉死叉に基づいて買入と売却の信号を生成する.

同時に,戦略は,ストップ・ロスを追跡するメカニズムを有効にします. ストップ・ロスは,当日の閉店価格の10%をデフォルトで追跡します. 多頭ポジションを保有すると,価格がストップ・ロスを上回ればストップ・ロスが退出します. 空頭ポジションを保有すると,価格がストップ・ロスを上回ればストップ・ロスが退出します.

優位分析

  1. アルファトレンドは価格トレンドを判断する能力が強く,通常の移動平均などの指標よりも優れている.

  2. トラッキング・ストップ・メカニズムの有効化により,単一損失を効果的に制御し,リスクを軽減できます.

  3. この戦略はリスク管理能力が高く,不利な状況でも損失を最小限に抑えることができます.

  4. この戦略はリファレンス数が少なく,計算効率が高く,高頻度取引に適しています.

リスク分析

  1. この戦略は横軸の調整時に不必要な取引信号を多く発生させ,取引コストと滑り場損失を増加させる.

  2. トラッキング・ストップを有効にするには,合理的なストップ割合を設定する必要があります. 大きすぎても小さすぎても,戦略の利益には不利です.

  3. 株価が急激に波動すると,ストップダメージが発動する確率が高くなり,封鎖リスクが増加する.

  4. ストップ・ローズパラメータの最適化には,指標の特性,取引頻度などの複数の要因を総合的に考慮する必要がある.利益の最大化だけを追求することはできません.

上記のリスクは,アルファ指標パラメータの調整,DYNAMICのストップ設定,取引周期の短縮などの方法によって緩和できます.

最適化の方向

  1. 異なる指標パラメータをテストして,より適切なAlpha指標パラメータの組み合わせを探します.

  2. ATRの動的設定によるストップ・ローズ幅を試して,市場の変動に適した状態にします.

  3. MACD,KDなどの他の指標のフィルタリング信号と組み合わせて,いくつかの誤信号をフィルタリングすることができます.

  4. リアルディスクと反測結果に基づいてパラメータを自動的に最適化でき,機械学習などの技術を使用してパラメータ選択を向上させる知的化.

要約する

アルファトレンドフォローストップ戦略は,トレンド判断とリスク管理を融合させ,価格トレンドを効果的に判定し,利潤を低減するリスクをロックすることができます.この戦略は,単純なトレンドフォロー戦略と比較して,より高い安定した利益を得ることができます.多面的な最適化により,より優れたパフォーマンスを期待できます.

ストラテジーソースコード
/*backtest
start: 2023-10-27 00:00:00
end: 2023-11-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// author © KivancOzbilgic
// developer © KivancOzbilgic
//@version=5

strategy("AlphaTrend Strategy", shorttitle='ATst', overlay=true, format=format.price, precision=2, margin_long=100, margin_short=100)
coeff = input.float(1, 'Multiplier', step=0.1)
AP = input(14, 'Common Period')
ATR = ta.sma(ta.tr, AP)
src = input(close)
showsignalsk = input(title='Show Signals?', defval=false)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)
upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(src, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT

color1 = AlphaTrend > AlphaTrend[1] ? #00E60F : AlphaTrend < AlphaTrend[1] ? #80000B : AlphaTrend[1] > AlphaTrend[3] ? #00E60F : #80000B
k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

fill(k1, k2, color=color1)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])


K1 = ta.barssince(buySignalk)
K2 = ta.barssince(sellSignalk)
O1 = ta.barssince(buySignalk[1])
O2 = ta.barssince(sellSignalk[1])

plotshape(buySignalk and showsignalsk and O1 > K2 ? AlphaTrend[2] * 0.9999 : na, title='BUY', text='BUY', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(#0022FC, 0), textcolor=color.new(color.white, 0))

plotshape(sellSignalk and showsignalsk and O2 > K1 ? AlphaTrend[2] * 1.0001 : na, title='SELL', text='SELL', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.maroon, 0), textcolor=color.new(color.white, 0))


// //ENTER SOME SETUP TRADES FOR TSL EXAMPLE
// longCondition = ta.crossover(ta.sma(close, 10), ta.sma(close, 20))
// if longCondition
//     strategy.entry('My Long Entry Id', strategy.long)

// shortCondition = ta.crossunder(ta.sma(close, 10), ta.sma(close, 20))
// if shortCondition
//     strategy.entry('My Short Entry Id', strategy.short)



longCondition = buySignalk
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = sellSignalk
if (shortCondition)
    strategy.entry("Short", strategy.short)
    

enableTrailing = input.bool(title='Enable Trailing Stop (%)',defval = true)
//TRAILING STOP CODE
trailStop = input.float(title='Trailing (%)', minval=0.0, step=0.1, defval=10) * 0.01



longStopPrice = 0.0
shortStopPrice = 0.0
longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - trailStop)
    math.max(stopValue, longStopPrice[1])
else
    0
shortStopPrice := if strategy.position_size < 0
    stopValue = close * (1 + trailStop)
    math.min(stopValue, shortStopPrice[1])
else
    999999

//PLOT TSL LINES
plot(series=strategy.position_size > 0 ? longStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1, title='Long Trail Stop')
plot(series=strategy.position_size < 0 ? shortStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Short Trail Stop', offset=1, title='Short Trail Stop')

    
if enableTrailing
    //EXIT TRADE @ TSL
    if strategy.position_size > 0
        strategy.exit(id='Close Long', stop=longStopPrice)
    if strategy.position_size < 0
        strategy.exit(id='Close Short', stop=shortStopPrice)