アルファトレンドストラテジー

作者: リン・ハーンチャオチャン,日付: 2023年11月27日 15:25:35
タグ:

img

概要

アルファトレンドストラテジーは,リスクをより効果的に制御し,全体的なリターンを向上させるための,トレーリングストロスのメカニズムを組み込むことで,アルファトレンドストラテジーの強化バージョンです.

戦略の論理

この戦略は,まずアルファ指標を使用して価格動向を決定する.アルファ指標が上昇すると,それは上昇シグナルである.アルファ指標が低下すると,それは下落シグナルである.この戦略は,アルファ指標の黄金十字と死十字に基づいた買い売りシグナルを生成する.

ストップ・ロスのメカニズムが有効になっている.ストップ・ロスのレベルは,その日の閉店価格の10%に設定されている.ロングポジションを保持する際に,価格がストップ・ロスのレベルを下回ると,ストラテジーはストップ・ロスを停止するためにポジションを退場する.ショートポジションも同じです.これは利益をより良くロックし,リスクを減らすのに役立ちます.

利点分析

  1. アルファトレンドは,単純な移動平均値や他の指標よりも価格トレンドを決定する能力が強い.

  2. トレーリングストップ損失を有効にすることで,単一の取引損失を効果的に制御し,リスクを低減することができます.

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

  4. 基準入力数が少ないため,この戦略は計算が効率的で,高周波取引に適しています.

リスク分析

  1. 横向のレンジバインド市場では,戦略は多くの不必要な取引信号を生成し,取引コストと滑り損を増加させる可能性があります.

  2. トレイリングストップロスの有効化には,ストップロスの割合を適切に設定する必要があります.過度に高いまたは低い割合は,戦略の収益性にとって不利です.

  3. 激しく変動する価格では,ストップロスの発生の確率は著しく上昇し,ポジションに閉じ込まれるリスクが増加します.

  4. ストップ・ロスのパラメータを最適化する際には,最大利益を追求するだけでなく,裏付けの特徴や取引頻度を含む様々な要因を考慮する必要があります.

上記のリスクは,アルファ指標のパラメータを調整し,DYNAMICストップロスを設定し,取引サイクル長さを短縮することで軽減できる.

オプティマイゼーションの方向性

  1. 異なる指標パラメータをテストして,より適切なアルファ指標パラメータ組み合わせを見つけることができる.

  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)


 

もっと