大悦マルチファクター定量戦略


作成日: 2023-12-04 13:04:03 最終変更日: 2023-12-04 13:04:03
コピー: 0 クリック数: 622
1
フォロー
1619
フォロワー

大悦マルチファクター定量戦略

概要

大悦多因数量化策略は,平均線,MACD,イチモク雲図など複数の技術指標を同時に組み合わせた長線追尾策である.これは,主に200日単調移動平均線を使用して,全体的な市場の方向性を判断し,さらに20日指数移動平均線,MACD指標およびイチモク雲図を組み合わせて,より詳細な信号を提供することで,特定のストップ・ストロップ・ポイントを決定する.

この戦略は,長期短期トレンドと多要素検証を考慮しながら,偽の突破による騒音取引を効果的にフィルターできます.これは,優れた機会を追求しながらリスクを制御し,経験豊富な投資家が中長期線を保持するのに適しています.

戦略原則

価格が200日移動平均線上にあるとき,戦略は牛市であると考えられ,このとき20日移動平均線とMACD指標が同時に買い信号を発し,価格が雲図の最高価格よりも高く,または雲図の中に位置するならば,買い信号が生じます.

価格が200日移動平均線を下回ったとき,戦略は熊市に入ると考え,このとき要求する信号はより厳格である:20日移動平均線とMACD指標が同時に買い信号を発信しなければならない,そしてイチモク雲図は同じ方向で買い信号を発信しなければならない (緑の雲または雲図の最高価格より高い価格),買い信号を生成するためである.

売り信号の判断論理は,買い信号に類似しているが,方向は逆である.牛市では,価格が雲図の底に落ちたか雲図が逆転したか,熊市では,価格が赤い雲図に入るか20日平均線とMACD指標が売り信号を発したか,売りが発生する.

優位分析

この戦略の最大の利点は,市場構造を判断する多種多様な指標を同時に組み合わせることで,偽信号を効果的に排除できる点にある.具体的には,以下の点がある.

  1. 200日移動平均線は,市場全体のトレンドを判断し,逆行操作を避ける.
  2. 20日平均線は,近年の動向を観察し,転換の機会を捉える.
  3. MACD指標は,トレンドが変化しているかどうかを検証する.
  4. 誤った信号の発生を防ぐため,イチモク雲図を再確認した.

複数の指標の検証により,収益の確率を大幅に向上させることができます.また,長期短期指標の配合も,戦略を短線と中長期線の両方の操作に適しています.

リスク分析

この戦略の主なリスクは,複数の指標が同時に誤信号を発する確率である.山水が尽きると,この確率は極めて低いが,長期にわたる操作では依然として避けられない.主な対応方法は以下の通りである.

  1. 適切なパラメータの調整,例えば平均線期数を採用し,最適なパラメータの組み合わせを探します.

  2. 厳格な止損,誤った信号後に間に合う止損の切り替え方向。戦略自体には止損が設定されず,実盤で補足することができる。

  3. 期貨セット期間の保值などの方法により利益をロックする.

  4. 大周期レベルのサポート位に応じて適切なポジション調整.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 異なるパラメータの効果をテストする:平均線周期,雲図パラメータなどを変え,最適なパラメータの組み合わせを見つける.

  2. ストップモジュールを追加:適切な移動ストップにより,リスクがよりよく制御されます.

  3. 関連性指数 (例えば,上昇/下降率) と組み合わせることで,高低の追及を避けることができます.

  4. 機械学習の導入: ニューラルネットワークなどの方法で指標の重さを訓練する.

  5. マルチマーケット検証:異なる市場での戦略の健全性を検証する.

要約する

大悦多因子定量化戦略は,科学的指標の組み合わせによってノイズ信号をフィルタリングし,リスクを制御した前提で継続的に収益を上げます.大周期的な傾向を考慮するとともに,短期的な機会を重視し,中長期投資で広く使用できます.パラメータ最適化,ストップストーズ最適化,機械学習の導入などの方法により,この戦略は,より優れた効果をもたらす可能性があります.

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

//@version=2
strategy(title="MACD/EMA/SMA/Ichimoku Long Strategy",overlay=true)




// Ichimoku

conversionPeriods = input(9, minval=1, title="Conversion Line Periods"),
basePeriods = input(26, minval=1, title="Base Line Periods")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Periods"),
displacement = input(26, minval=1, title="Displacement")

donchian(len) => avg(lowest(len), highest(len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)


p1 = plot(leadLine1, offset = displacement, color=green,
 title="Lead 1")
p2 = plot(leadLine2, offset = displacement, color=red, 
 title="Lead 2")
fill(p1, p2, color = leadLine1 > leadLine2 ? color(green,50) : color(red,50))



bottomcloud=leadLine2[displacement-1]
uppercloud=leadLine1[displacement-1]




// SMA Indicator - Are we in a Bull or Bear market according to 200 SMA?
SMA200 = sma(close, input(200))
EMA = ema(close,input(20))


//MACD Indicator - Is the MACD bullish or bearish?

fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)

MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

// Set Buy/Sell conditions

[main,signal,histo]=macd(close,fastLength,slowlength,MACDLength)

buy_entry = if ((uppercloud>bottomcloud or close>max(uppercloud,bottomcloud)) and close>EMA and (delta>0 and close>min(uppercloud,bottomcloud))) or (close<SMA200 and delta>0 and close>EMA and (uppercloud>bottomcloud or close>max(uppercloud,bottomcloud)))
    true
if close<EMA and ((delta<0 and close<min(uppercloud,bottomcloud)) or (uppercloud<bottomcloud and close>max(uppercloud,bottomcloud)))
    buy_entry = false


strategy.entry("Buy",true , when=buy_entry)
alertcondition(buy_entry, title='Long', message='Chart Bullish')


sell_entry = if ((uppercloud<bottomcloud or close<min(uppercloud,bottomcloud)) and close<EMA and (delta<0 and close<max(uppercloud,bottomcloud))) or (close>SMA200 and delta<0 and close<EMA and (uppercloud<bottomcloud or close<min(uppercloud,bottomcloud)))
    true
if close>EMA and ((delta>0 and close>max(uppercloud,bottomcloud)) or (uppercloud>bottomcloud and close<min(uppercloud,bottomcloud)))
    sell_entry = false



strategy.close("Buy",when= sell_entry)


alertcondition(sell_entry, title='Short', message='Chart Bearish')

//plot(delta, title="Delta", style=cross, color=delta>=0 ? green : red )