DMIと移動平均の組み合わせ戦略

作者: リン・ハーンチャオチャン,日付: 2023-09-19 21:51:14
タグ:

概要

この戦略は,123逆転戦略,DMI戦略,移動平均戦略を組み合わせて効果的な組み合わせ戦略を形成する.トレンド逆転点で逆転操作を行い,トレンドが続くときにトレンドを追跡することができます.一方,戦略の勝利率を改善するために市場傾向の方向性をフィルタリングおよび特定するために移動平均を使用します.

戦略の論理

  1. 123 逆転戦略: 閉じる価格が前回の閉じる価格より2連日高くなって,9日間のスローKラインが50を下回るとロング; 閉じる価格が前回の閉じる価格より2連日低くなって,9日間のスローKラインが50を超えるとショート.

  2. DMI 戦略: +DI が -DI を越えると長引く. -DI が +DI を越えると短引く.

  3. 移動平均戦略: 閉じる価格がMAを超えるとロング; 閉じる価格がMAを下回るとショート.

  4. 3つの戦略が一致する信号を出すとき ポジションを開く.そうでなければ,ポジションを閉じます.

この戦略は,トレンド戦略と逆転戦略を組み合わせ,逆転機会とトレンドフォロー機会を捉える.移動平均フィルターは誤った信号を減らすことができる.複数の戦略は互いに検証し,信号の信頼性を向上させる.

利点分析

  1. 複数の戦略を組み合わせることで 勝利率が向上します. ターニングポイントを捉えるための 123 逆転,トレンドを捉えるための DMI,シグナルをフィルタリングするための MA フィルター.

  2. 逆転とトレンド戦略を組み合わせることで,逆転とトレンドを柔軟に把握できます.

  3. MAフィルターは短期の変動からの偽信号を減らす.

  4. 複数の戦略を組み合わせることで 信号を検証し 単一の戦略の失敗を回避できます

  5. 複数のパラメータにより,最適なパラメータ組み合わせとより高い安定性のために最適化できます.

リスク分析

  1. 逆転戦略は,範囲限定のトレンドに囚われる傾向があります.トレンド戦略と組み合わせることで,避けることができます.

  2. DMIは初期トレンドの機会を逃す可能性があります. 敏感性を向上させるためにDMIパラメータを短縮することができます.

  3. MAは遅延効果があり,信号生成を遅らせ,反応を加速するためにMA期間を短縮することができる.

  4. 戦略 を 組み合わせる こと に よっ て 勝率 が 向上 する の が,複雑さ も 増加 し ます.パラメータ の 慎重 な テスト が 必要 です.

  5. この戦略は取引コストに敏感で 過剰な取引を避けるため ストップロスを緩和すべきです

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

  1. 戦略のパラメータを最適化して 最適な組み合わせを見つけます

  2. MACDやRSIなどの指標を追加して信号をフィルターし 安定性を向上させます

  3. リスクをコントロールするために ストップ・ロスのストラテジーを追加します

  4. 固定/動的サイズのようにポジションサイズを最適化してリターンを向上させる.

  5. 適応性を向上させるため 特定の製品のための精細な調整パラメータ

  6. 意思決定を支援し,パフォーマンスを向上させるための機械学習モデルを追加します

結論

この戦略は,逆転,トレンド,MAフィルター戦略を効果的に組み合わせることで柔軟な組み合わせシステムを形成する.逆転とトレンドフォローの機会の両方を捉えることができ,複数の戦略を通じて信号信頼性を向上させる.パラメータ,ストップ損失,ポジションサイズなど,さらなる改善の余地がある.熟練した応用により,この実践的で拡張可能な戦略はライブ取引でかなりの利益を生むことができます.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-18 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 15/10/2019
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The related article is copyrighted material from Stocks & Commodities Aug 2009 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

fFilter(xSeriesSum, xSeriesV, Filter) =>
    iff(xSeriesV > Filter, xSeriesSum, 0)

DMIMA(Length_MA, Length_DMI) =>
    pos = 0.0
    xMA = sma(close, Length_MA)
    up = change(high)
    down = -change(low)
    trur = rma(tr, Length_DMI)
    xPDI = fixnan(100 * rma(up > down and up > 0 ? up : 0, Length_DMI) / trur)
    xNDI = fixnan(100 * rma(down > up and down > 0 ? down : 0, Length_DMI) / trur)
    nPDI = xPDI
    nNDI = xNDI
    nMA = xMA
    nPDI_1 = xPDI[1]
    nNDI_1 = xNDI[1]
    nMA_1 = xMA[1]
    bMDILong = iff(nPDI > nNDI and nPDI_1 < nNDI_1, true, 
                 iff(nPDI < nNDI and nPDI_1 > nNDI_1, false, false)) 
    bMDIShort = iff(nPDI > nNDI and nPDI_1 < nNDI_1, false, 
                  iff(nPDI < nNDI and nPDI_1 > nNDI_1, true, false)) 
    bMALong = iff(close > nMA and close[1] < nMA_1, true, 
                 iff(close < nMA and close[1] > nMA_1, false, false))
    bMAShort = iff(close > nMA and close[1] < nMA_1, false, 
                 iff(close < nMA and close[1] > nMA_1, true, false))
    pos := iff(bMDILong and bMALong, 1, 
         iff(bMDIShort and bMAShort, -1, nz(pos[1], 0)))
    pos

strategy(title="Combo Backtest 123 Reversal & DMI & Moving Average", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
Length_MA = input(30, minval=1)
Length_DMI = input(14, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posDMIMA = DMIMA(Length_MA,Length_DMI)
pos = iff(posReversal123 == 1 and posDMIMA == 1 , 1,
	   iff(posReversal123 == -1 and posDMIMA == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

もっと