複合量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2023年12月13日 16時44分46秒
タグ:

img

概要

これはMACD指標に基づいた複合的定量取引戦略である.MACDとKDJなどの複数の指標を組み合わせ,指標の組み合わせを通じて取引信号を生成する.

戦略原則

この戦略のコア指標はMACDである.MACDは動向平均収束の差を表す.これはトレンドをフォローする指標である.それは高速移動平均 (EMA) と遅い移動平均 (EMA) で構成される.デフォルトパラメータは,高速線は12で,遅い線は26である.この戦略は,DIFと呼ばれる2つのEMA線間の差を計算する.その後,DIFで9日間のEMAが計算され,DEAインジケーターを得られる.DIFがDEAを超えると,購入信号が生成される.下を通ると,販売信号が生成される.

この戦略には,KDJ指標も含まれています.KDJ指標には,K値,D値,J値が含まれています.それらのうち,K値はランダム値,D値はK値の移動平均値,J値は決定値を指します.KDJ指標は,市場の過剰購入と過剰販売レベルを反映しています.J値が100を超えると,過剰購入状態を表します.10未満の場合,過剰販売状態を表します.この戦略は,市場ターニングポイントで間違った信号を生成しないようにKDJ指標を組み合わせています.

戦略 の 利点

この戦略は,MACDとKDJなどの複数の指標を組み合わせ,市場のノイズを効果的にフィルタリングし,トレンド方向性を特定することができます.MACD指標は短期間の価格変化を適時に把握することができ,KDJ指標は中期および長期間のトレンドを確認できます.両者の組み合わせは,敏捷性と安定性の追求をバランスできます.

さらに,戦略には時間範囲選択機能が組み込まれ,戦略の業績評価に柔軟性があります.

リスク と 解決策

  • 市場が長期間にわたって変動すると,MACDは複数の誤った信号を表示します.この時点で,EMAラインのパラメータを適切に調整してノイズをフィルタリングすることができます.

  • 誤ったKDJパラメータ設定も結果に影響します.複数のパラメータグループをテストし,より安定したパラメータ組み合わせを選択できます.

  • バックテストのタイムフレームの不適切な選択は,戦略の収益性を過大評価または過小評価する.テストのために代表的なタイムフレームを選択する必要があります.

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

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

  1. ストップ・ロスのメカニズムを追加します.価格がストップ・ロスのラインをトリガーすると,ストップ・ロスの目的でポジション出口を強制します.

  2. RSIやボリンジャー帯などの指標を組み合わせて 信号の精度を向上させるため,より多くの指標フィルターを組み込む.

  3. インディケーターパラメータを最適化 EMAとKDJパラメータの組み合わせを変更して最適な設定を見つける.

  4. 自動最適化のための機械学習技術を使用します パラメータ訓練と最適化のための神経ネットワークを使用します

結論

この戦略は,過買い・過売りの制御によって補完され,主にトレンドをフォローする典型的な定量戦略である.複数の指標の利点を組み合わせ,安定性と敏感性を効果的にバランスする.継続的な最適化と調整を通じて,戦略の適用性は長期的に安定した利益を得るためにさらに拡大することができる.


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

//@version=4
strategy(title="New Renaissance", shorttitle="New Renaissance", overlay=true,initial_capital=10000)

source = close

fastlength=input(12, minval=1)
slowlength=input(26,minval=1)
signallength=input(9,minval=1)

// === Defining the MACD oscillator
fastMA=ema(source,fastlength)
slowMA=ema(source,slowlength)
MACD=fastMA-slowMA
signal=sma(MACD,signallength)
delta=MACD-signal

// === Buy and Sell Signals ===
buy=crossover(MACD, signal)
sell=crossunder(MACD, signal)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2018, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 12,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 31,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2020, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)    // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                   // exit long when "within window of time" AND crossunder      

もっと