モメンタムベースのトレンドフォロー戦略


作成日: 2024-03-11 10:53:50 最終変更日: 2024-03-11 10:54:08
コピー: 0 クリック数: 620
1
フォロー
1617
フォロワー

モメンタムベースのトレンドフォロー戦略

概要

この戦略は,Aroon指標と絶対強度指標 (((ASH)) を組み合わせて,市場動向と潜在的な取引機会を識別することを目的としています. Aroonは,トレンドの強さと方向を識別するのに役立ちますが,ASHは,動力の強さに対する洞察を提供します. これらの指標を組み合わせることで,戦略は,Ethereum市場の収益性の高い取引機会を捉えようとします.

戦略原則

この戦略は,Aroon Indicator の2つのパラメータを使用しています.

  • 多頭ポジション:Aroon周期は56 (上線) と20 (下線)
  • 空頭ポジション:Aroon周期は17°上線 (上線) と55°下線)

ASHの長さは9本のK線で,閉店価格をデータ源として使用する.

戦略には特定の入場・退出条件が含まれています.

  1. 多頭ポジションの入場:Aroon指数で軌道下を突破すると,潜在的上昇傾向を示し,多頭ポジションを開きます.
  2. 多頭ポジションの退出: アルーン指標の下位走行時,平多頭ポジション.
  3. 空頭ポジションの入場:Aroon指数の下の軌道に乗ったとき,潜在的下落傾向を示し,空頭ポジションを開けた.
  4. 空頭ポジションの退出:Aroon指数で軌道に乗ったとき,空頭ポジション.

優位分析

この戦略の最大の利点は,2つの指標の組み合わせによるものです. アルーン指標はトレンドの方向と強さを効果的に判断し,ASH指標は追加的な動力の洞察を提供し,入場と退出のタイミングを判断するのに役立ちます.

さらに,二つの異なるパラメータのAroon指標を使用して空白判断を行うことで,市場の状況の変化に柔軟に対応できます.

リスク分析

この戦略の主なリスクは,指標自体の限界にある. アルーン指標は,震動整合市場に対して弱いため,誤ったシグナルを生じやすい.ASH指標は,短期的な過度の反転にもより敏感である.

さらに,パラメータ設定が不適切であれば,戦略のパフォーマンスにも影響する.最適のパラメータ組み合わせを見つけるために,Aroon指標の長短周期とASH指標の長さを最適化してテストする必要があります.

最適化の方向

価格突破や取引量増加などのフィルターを追加することは考えられます.

異なる指標のパラメータの組み合わせと重みをテストして最適なパラメータを見つけることができます. また,RSI,KDなどの他の指標を組み合わせて,より強力な指標の組み合わせを形成して,戦略のパフォーマンスを向上させることができます.

要約する

この戦略は,AroonとASHの2つの指標の使用の利点を統合し,双方の指標によって確認し,トレンドを判断し,転換点を捕捉する際により有効である.しかし,パラメータ設定と指標自体の限界は,最適化が必要である.全体的に,アイデアは新鮮で,さらなる改善と検証に値する.

ストラテジーソースコード
/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © IkkeOmar

//@version=5
strategy("Aroon and ASH strategy - ETHERIUM [IkkeOmar]", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=1, commission_value=0, slippage=2)


// AROON SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

// Inputs for longs 

length_upper_long = input.int(56, minval=15)
length_lower_long = input.int(20, minval=5)

// Inputs for shorts
//Aroon Short Side Inputs
length_upper_short = input.int(17, minval=10)
length_lower_short = input.int(55)

// ABSOLUTE STRENGTH HISTOGRAM SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
length = input(title='Length', defval=9)
src = input(title='Source', defval=close)




// CALCULATIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Aroon
upper_long = 100 * (ta.highestbars(high, length_upper_long + 1) + length_upper_long) / length_upper_long
lower_long = 100 * (ta.lowestbars(low, length_lower_long + 1) + length_lower_long) / length_lower_long

upper_short = 100 * (ta.highestbars(high, length_upper_short + 1) + length_upper_short) / length_upper_short
lower_short = 100 * (ta.lowestbars(low, length_lower_short + 1) + length_lower_short) / length_lower_short

// Ahrens Moving Average
ahma = 0.0
ahma := nz(ahma[1]) + (src - (nz(ahma[1]) + nz(ahma[length])) / 2) / length



// CONDITIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


// Options that configure the backtest start date
startDate = input(title='Start Date', defval=timestamp('01 Jan 2018 00:00'))


// Option to select trade directions
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Long')

// Translate input into trading conditions
longOK = tradeDirection == 'Long' or tradeDirection == 'Both'
shortOK = tradeDirection == 'Short' or tradeDirection == 'Both'


// Check if the close time of the current bar falls inside the date range
inDateRange = true

longCondition = ta.crossover(upper_long, lower_long) and inDateRange and lower_long >= 5 and longOK
longCloseCondition = ta.crossunder(upper_long, lower_long) and inDateRange

shortCondition = ta.crossunder(upper_short, lower_short) and inDateRange and shortOK
shortCloseCondition = ta.crossover(upper_short, lower_short) and inDateRange

// Start off with the initial states for the longs and shorts
var in_short_trade = false
var in_long_trade = false

var long_signal = false
var short_signal = false

if longCondition
    long_signal := true
if longCloseCondition
    long_signal := false
    
if shortCondition
    short_signal := true
if shortCloseCondition
    short_signal := false

// While no trades active and short condition is met, OPEN short
if true and in_short_trade == false and in_long_trade == false and shortCondition
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// While no trades and long condition is met, OPEN LONG
if true and in_short_trade == false and in_long_trade == false and longCondition
    strategy.entry("long", strategy.long, when = longCondition)
    in_long_trade := true
    in_short_trade := false

    
// WHILE short trade and long condition is met, CLOSE SHORT and OPEN LONG
if true and in_short_trade == true and in_long_trade == false and longCondition
    // strategy.close("short", when = longCondition)
    strategy.entry("long", strategy.long, when = longCondition)
    in_short_trade := false
    in_long_trade := true
    
    
// WHILE long trade and short condition is met, CLOSE LONG and OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and shortCondition
    // strategy.close("long", when = shortCondition)
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// WHILE long trade and exit long condition is met, CLOSE LONG
// if short signal is active, OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and longCloseCondition
    if short_signal
        strategy.entry("short", strategy.short, when = short_signal)
        in_long_trade := false
        in_short_trade := true
    else
        strategy.close("long", when = longCloseCondition)
        in_long_trade := false
        in_short_trade := false

// if in short trade only and exit short condition is met, close the short
// if long signal still active, OPEN LONG
if true and in_short_trade == true and in_long_trade == false and shortCloseCondition
    if long_signal
        strategy.entry("long", strategy.long, when = long_signal)
        in_short_trade := false
        in_long_trade := true
    else
        strategy.close("short", when = shortCloseCondition)
        in_short_trade := false
        in_long_trade := false