勾配MACD定量戦略


作成日: 2023-12-19 16:14:50 最終変更日: 2023-12-19 16:14:50
コピー: 0 クリック数: 713
1
フォロー
1621
フォロワー

勾配MACD定量戦略

概要

この戦略は,Heikin-Ashi線,平らなK線価格を計算し,MACD指標と組み合わせて取引信号を発信し,中長線トレンドを追跡する量化取引戦略を実現する.

戦略原則

  1. ハイキン・アシの開値,閉値,最高値,最低値を計算し,ハイキン・アシの線を描き,平らなK線価格動きを図る.

  2. MACDパラメータを設定する:快線長12 ,慢線長26 ,信号線長9。

  3. DEA慢線,DEA快線,MACD差値の計算.MACD柱状図を描画する.

  4. MACD差値が上から0になったとき,多めにする. MACD差値が下から0になったとき,空にする.

  5. 指定された期間内での取引のみに,年,月,日フィルター条件を設定します.

優位分析

  1. Heikin-Ashiの線は,市場騒音を効率的にフィルターし,トレンドを識別します.

  2. MACDは,より明確なトレンドの買取・売買のポイントを提供する.

  3. Heikin-AshiとMACDの組み合わせにより,取引先の質が向上し,取引の収益性が向上します.

  4. タイムフィルター条件を設定し,過去データによるトレードタイムを決定し,率を向上させる.

リスク分析

  1. 市場が逆転すると,大きな損失が予想されます.

  2. MACDパラメータの設定が不適切で,無効信号が過剰に発生する.

  3. タイムフィルター条件が厳しすぎて,良い取引機会が逃れることもある.

対策として

  1. ストップ・ストップ・ストップを設定し,単発損失を制御する.

  2. MACDパラメータを最適化し,最適なパラメータ組み合わせを決定する.

  3. 他の指標と組み合わせると,局所的な傾向を判断する.

最適化の方向

  1. 異なるパラメータの組み合わせをテストし,最適なパラメータを探します.

  2. ストップ・ロスを残す/ストップ・ロスを追跡するなどのストップ・メカニズムを追加する.

  3. EMA,KDJなどの指標を組み合わせて判断する転換点.

  4. 添加量能指数, 量能分散を回避する

要約する

この戦略は,Heikin-Ashi線平滑価格を計算し,MACD Tradingview指標と連携してトレンド方向とエントリーポイントを判断することで,トレンド追跡に基づく定量化戦略を実現している.通常のMACD戦略と比較して,価格曲線を平滑化し,部分的なノイズをフィルターし,トレンド方向をより明確に判断することができる.パラメータ最適化,ストップ・ロース・メカニズム,およびその他の指標の組み合わせにより,戦略の安定性と収益性をさらに高めることができる.

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

//@version=4
strategy("MACD ASHI BARS .v1 ", overlay=false,default_qty_type = strategy.percent_of_equity, default_qty_value = 100,commission_type=strategy.commission.percent,commission_value=0.1,slippage=1)

// Calculation HA Values 
haopen  = 0.0
haclose = (open + high + low + close) / 4
haopen := na(haopen[1]) ? (open + close) / 2 : (haopen[1] + haclose[1]) / 2
hahigh  = max(high, max(haopen, haclose))
halow   = min(low,  min(haopen, haclose))

// HA colors
hacolor = haclose > haopen ? color.green : color.red
src=haclose



fastmacd = input(12,title='MACD Fast  Line Length')
slowmacd = input(26,title='MACD Slow Line Length')
signalmacd = input(9,title='Signal Line Length')

macdslowline1 = sma(src,slowmacd)
macdslowline2 = sma(macdslowline1,slowmacd)
DEMAslow = ((2 * macdslowline1) - macdslowline2 )

macdfastline1 = sma(src,fastmacd)
macdfastline2 = sma(macdfastline1,fastmacd)
DEMAfast = ((2 * macdfastline1) - macdfastline2)

MACDLine = (DEMAfast - DEMAslow)

SignalLine = sma(MACDLine, signalmacd)

delta = MACDLine-SignalLine




swap1 = delta>0?color.green:color.red



plot(delta,color=swap1,style=plot.style_columns,title='Histo',histbase=0,transp=20)
p1 = plot(MACDLine,color=color.blue,title='MACD Line')
p2 = plot(SignalLine,color=color.red,title='Signal')
fill(p1, p2, color=color.blue)
hline(0)



yearfrom = input(2020)
yearuntil =input(2042)
monthfrom =input(1)
monthuntil =input(12)
dayfrom=input(1)
dayuntil=input(31)







if ( crossover(delta,0)  and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil) 
    strategy.entry("MMAL", strategy.long, stop=close, oca_name="TREND",  comment="AL")
    
else
    strategy.cancel(id="MMAL")


if (  crossunder(delta,0) and  year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil ) 

    strategy.entry("MMSAT", strategy.short,stop=close, oca_name="TREND",  comment="SAT")
else
    strategy.cancel(id="MMSAT")