資源の読み込みに... 荷物...

トレンドレスMACD戦略

作者: リン・ハーンチャオチャン開催日:2023年10月30日 17:08:16
タグ:

img

概要

この戦略は,MACD指標をより明確に観察するために株価の傾向を排除する方法を用いる.DEMAの速い線とDEMAのスローラインを計算することによって,MACD線とシグナルラインが導かれる.取引シグナルはMACD線とシグナルラインの間の交差によって生成される.この戦略には,日付と月条件フィルターとストップ損失ロジックも組み込まれ,より完全なシステムを形成する.

戦略の論理

まず,価格のEMAは価格トレンドをなくしてデトレンドEDMAを得るために計算される.その後,高速線DEMA,スローラインDEMA,MACD線はEMAに基づいて計算される.高速線DEMAは,まず高速線EMA1を計算し,次にEMA1のEMA2を計算し,最終的にDEMA=(2*EMA1-EMA2を計算することによって計算される.スローラインDEMAとシグナルラインは同様の方法で計算される.MACD線 (高速線DEMA - スローラインDEMA) とシグナルラインを取得した後,MACD線がシグナルラインの上を横切ると買い信号が生成され,MACD線がシグナルラインを下を横切ると売り信号が生成される.最後に,日付と月フィルターを組み合わせ,ストップ損失ロジックを設定する.

この戦略の基本的な論理は

  1. MACD指標をよりはっきりと見るために価格傾向を削除します.

  2. DEMAの高速線,DEMAの遅い線を計算して MACD線と信号線を導き出します

  3. MACDラインと信号ラインのクロスオーバーは取引信号を生成します.

  4. 日付と月度のフィルターを追加します.

  5. ストップ・ロスト・ロジックを設定する

利点分析

この戦略の主な利点は以下の通りです.

  1. 価格動向を排除することで,MACDのクロスオーバー状況がより明確に明らかになり,動向に惑わされない.

  2. DEMAアルゴリズムを使って MACD を計算すると 騒音が減少し 信号がより明確になります

  3. 日付と月のフィルターを組み合わせることで 不必要な取引を減らすことができます

  4. ストップロスの論理は 時間の損失を削減し リスクを制御します

  5. クロスオーバーを使ってシグナルを生成すると不正な取引が減少します

  6. 全体的に,トレンド除去,DEMA計算,状態フィルターを組み合わせることで,この戦略は比較的明確で信頼できる取引信号を生成することができます.

リスク分析

この戦略によるリスクには注意が必要です.

  1. 傾向が消えた後,MACDクロスオーバー信号が増加する可能性があるため,実行可能性を確認するためにライブテストが必要です.

  2. DEMA アルゴリズムがノイズをフィルターするにも関わらず インディケーターの計算には 誤った信号が たくさんあります

  3. 日付と月度のフィルタ条件があまりにも厳格で,取引機会が欠けている可能性があります.

  4. ストップ・ロスのポジションは合理的に設定する必要があります 余りにも緩い場合はリスクが増加し 余りにも厳しい場合は頻繁にストップ・ロスは起こります

  5. この戦略は主にMACDに依存しており,この指標に市場が適していない場合,パフォーマンスは影響を受ける可能性があります.

  6. パラメータの最適化にはまだ大きな余地があり,バックテストとライブ取引を通じてさらなるテストが必要です.

解決策:

  1. 誤った信号を避けるために他の指標の確認を追加します.

  2. 日付フィルター条件を適切に最適化する.

  3. ストップ・ロストポイントを慎重にテストして最適化します

  4. トレンドに対する取引を避けるためにトレンド判断メカニズムを追加します.

  5. バックテストとパラメータの最適化により 安定性が向上します

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

戦略は以下の側面で最適化できます.

  1. EMAのより良い代替を見つけるために異なる価格移動平均をテストします.

  2. MACDの高速線,遅い線,信号線長を最適化するために異なるパラメータ組み合わせを試してください.

  3. 偽信号を避けるために音量などの補助指標を追加します.

  4. ストップ・ロスの戦略を最適化し 合理的な動きやストップ・ロスのオーダーを設定します

  5. 日付と月度のフィルター条件を最適化して 柔軟化します

  6. トレンドに反する取引を避けるためにトレンド判断を追加します

  7. 安定性を向上させるため,パラメータを全面的に最適化します.

  8. 長期間のパフォーマンスを確認するために,より長い期間でのバックテスト.

  9. リアル取引に基づいてパラメータを検証し,さらに修正する

概要

概要すると,この戦略は,トレンドを排除し,日付フィルターと組み合わせたDEMAMACDを計算して取引シグナルを生成するというアイデアを使用しており,これはシンプルでも実行可能な戦略のアイデアです.その最大の利点は,価格トレンドに影響を受けることなくMACDパターンを明確に明らかにすることです.しかし,この戦略にはまだパラメータ最適化とリスク管理措置が実用化するために実装する必要があるいくつかのリスクがあります.最適化にも大きな余地があり,十分な検証と最適化により,この戦略は安定し信頼性の高い短期取引システムになることができます.


/*backtest
start: 2022-10-23 00:00:00
end: 2023-10-29 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "Trendless MACD  Strategy",shorttitle="MACD-T Strategy",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,commission_type=strategy.commission.percent,commission_value=0.01,initial_capital=100000)



maperiod=input(9)
ema=ema(close,maperiod)


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

macdslowline1 = ema(ema,slowmacd)
macdslowline2 = ema(macdslowline1,slowmacd)
DEMAslow = ((2 * macdslowline1) - macdslowline2 )

macdfastline1 = ema(ema,fastmacd)
macdfastline2 = ema(macdfastline1,fastmacd)
DEMAfast = ((2 * macdfastline1) - macdfastline2)

MACDLine = (DEMAfast - DEMAslow)

SignalLine1 = ema(MACDLine, signalmacd)
SignalLine2 = ema(SignalLine1, signalmacd)
SignalLine = ((2 * SignalLine1) - SignalLine2 )


MACDSignal = MACDLine-SignalLine


colorbar= MACDSignal>0?green:red

plot(MACDSignal,color=colorbar,style=columns,title='Histogram',histbase=0)
p1 = plot(MACDLine,color=blue,title='MACDLine')
p2=plot(SignalLine,color=red,title="SignalLine")
fill(p1,p2,color=blue)


longCond =  crossover(MACDLine,SignalLine) 

shortCond =  crossunder(MACDLine,SignalLine) 




monthfrom =input(1)
monthuntil =input(12)
dayfrom=input(1)
dayuntil=input(31)

yearfrom= input(2018)
yearuntil=input(2021)

if (  longCond   ) 
    strategy.entry("LONG", strategy.long, stop=close, oca_name="TREND",  comment="LONG")
    
else
    strategy.cancel(id="LONG")
    



if ( shortCond  ) 

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





もっと