2つの移動平均の逆転ブレイクストラテジー

作者: リン・ハーンチャオチャン,日付: 2023年12月18日 10:24:08
タグ:

img

概要

ダブル・ムービング・平均逆転ブレイクアウト戦略は,123逆転戦略と価格&移動平均差異戦略の両方を併用した組み合わせ戦略である.この戦略の主要なアイデアは,123逆転信号が価格&MA差異信号と一致するときにのみ取引信号を生成することである.

戦略の論理

双向移動平均逆転ブレイクアウト戦略は2つの要素で構成されています.

  1. 123 逆転戦略

    123リバース戦略は,決まったレベル (デフォルト50) の下/上にある9日ストカスタスティックオシレーターK線と組み合わせた,2日連続で閉じる価格逆転 (つまり,閉じる高値が閉じる低値,閉じる低値が閉じる高値) をベースに取引信号を生成する.K線が50以下で購入信号が生成され,K線が50以上で売却信号が生成される.

  2. 価格と移動平均の差異戦略

    価格とMAの格差戦略は,価格と特定の期間の移動平均値 (デフォルト 14) の間の割合差を計算し,格差が値を下回るときに買い信号 (デフォルト 3%) を生成し,格差が値を下回るときに売り信号 (デフォルト 0.54%) を生成します.

双向移動平均逆転ブレイクアウト戦略は,上記の2つの戦略の信号が同じ方向に並ぶときのみ,つまり両方が買いまたは両方が売る信号であるときに実際の取引信号を生成します.

利点分析

双向動向平均逆転ブレイクアウト戦略は,逆転とトレンドフォロー戦略の強みを組み合わせ,シネージを生み出します.

123 リバーサルは,ターンオーバーをキャピタライズするためにリバーサルのシグナルを選択する. 価格&MAディバージェンスは,長期的トレンドを追跡する. 共に,より大きなトレンドに乗っている間,短期的なリバーサルを捕捉し,罠にはまらないようにする.

さらに,両戦略からシグナルが一致することを要求することで,無効な取引の数が大幅に減少し,シグナルとノイズ比を向上させることができます.

リスク分析

両方の戦略の強みを活用する一方で,二重移動平均逆転ブレイクアウト戦略は,それぞれに関連したリスクも継承しています.

123 リバースコンポーネントについては,連続して2回の日々のリバースが実際のトレンドリバースを保証するものではありません.短期的な引き下げによって引き起こされる偽信号かもしれません.また,ストカストティックオシレーターのパラメータ調節が不十分である場合,信号品質が低下する可能性があります.

価格&MAの差異部分では,不適切な移動平均パラメータが遅延信号を引き起こす可能性があります.また,差異自体はトレンド方向を示さないが,機械信号のみを生成します.

概要すると,この戦略の主要なリスクは,パラメータ調節の不良と信号生成の誤りから生じる.パラメータ最適化,ストップ損失/利益取り,手動介入などによってリスクを軽減することができます.

増進 の 機会

双向移動平均逆転ブレイクアウト戦略は,次の側面で強化できる:

  1. より良い信号のためにMAとオシレーターパラメータを最適化
  2. シグナルフィルタリングのための他の指標を追加
  3. ストップ・ロスを組み込み,利益を取ること
  4. トレンド決定を追加して,不適切な取引を避ける
  5. 手動介入と適応パラメータ調整

戦略の安定性や収益性をさらに向上させるには,様々な強化方法が組み合わせられる.

結論

ダブル・ムービング・平均逆転ブレイクアウト戦略は,逆転とトレンドフォロー戦略の強みを組み合わせ,両方の信号タイプが一致するときにのみ取引を生成する. 罠を避けるためにより大きなトレンドに乗っている間に短期的な逆転機会を捕捉する. ダブル・シグナルメカニズムは信頼性を向上させる. 豊富な強化機会を持つため,汎用的で強力な定量化取引戦略である.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 13/04/2021
// 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
// Percent difference between price and MA
//
// 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


DBP_MA(Length,SellZone,BuyZone) =>
    pos = 0.0
    xSMA = sma(close, Length)
    nRes = abs(close - xSMA) * 100 / close
    pos:= iff(nRes < BuyZone, 1,
           iff(nRes > SellZone, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Difference between price and MA", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Difference between price and MA ----")
LengthDBP = input(14, minval=1)
SellZone = input(0.54, minval=0.01, step = 0.01)
BuyZone = input(0.03, minval=0.01, step = 0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posDBP_MA = DBP_MA(LengthDBP,SellZone,BuyZone)
pos = iff(posReversal123 == 1 and posDBP_MA == 1 , 1,
	   iff(posReversal123 == -1 and posDBP_MA == -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 )

もっと