ダブル移動平均クロスオーバーとウィリアムズ指標の組み合わせ戦略


作成日: 2024-02-01 15:04:51 最終変更日: 2024-02-01 15:04:51
コピー: 0 クリック数: 520
1
フォロー
1617
フォロワー

ダブル移動平均クロスオーバーとウィリアムズ指標の組み合わせ戦略

概要

この戦略は2つの異なる戦略の組み合わせであり,最初の戦略は,株価の双動平均を横切ってシグナルを形成する;第二の戦略は,ウィリアムズ指数に含まれる魔法の振動指数に基づいている.最終的なシグナルは,2つの戦略のシグナルを交差させ,最終的な取引シグナルを形成する.

戦略原則

最初の戦略の原理は,昨日の閉盘価格が前日の閉盘価格より高く,快速K線9日のランダム指標が遅いD線3日のランダム指標より低ければ買入シグナルが生成され,昨日の閉盘価格が前日の閉盘価格より低く,快速K線9日のランダム指標が遅いD線3日のランダム指標より高ければ売出シグナルが生成される.

2つ目の戦略の原理は,5日と34日の価格変動の差値を計算し,その差値の移動平均を計算することです.現在の値が前のサイクルより高いときは買入シグナル,現在の値が前のサイクルより低いときは売りシグナルです.

2つの戦略を組み合わせて,最終的な信号は2つの戦略信号の交差をとる. 2つの戦略が同時に買い信号を発信するときは,多めにする. 2つの戦略が同時に売り信号を発信するときは,空いてする.

優位分析

この戦略は,双移動平均戦略とウィリアムズ指数戦略の2つの戦略の優位性を組み合わせている.双移動平均戦略は,中長線トレンドを捕捉し,ウィリアムズ指数戦略は,短線取引の機会を捕捉する.両戦略を組み合わせると,利益を考慮し,偽の突破を防止することができます.

さらに,この戦略は複数のパラメータの入力設定を採用し,異なる株式や市場状況に応じてパラメータを最適化して,より広範な市場環境に適応することができる.

リスク分析

この戦略の最大のリスクは,2つの戦略信号が一致しないことにある. 戦略の1つが買い信号を発信し,もう1つが売る信号を発信すると,戦略は有効な信号を生成できず,取引の機会を逃す可能性があります.

さらに,この戦略には複数のパラメータが含まれているため,パラメータの最適化には一定の困難が生じます.不適切なパラメータの組み合わせは,戦略の不良なパフォーマンスを引き起こす可能性があります.

リスクを下げるために,戦略信号の1つだけを採用することを検討するか,異なる市場環境に適したパラメータの範囲を研究する.

最適化の方向

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

  1. 2つの戦略信号の一致性を評価し,異なるパラメータの下でその信号のマッチング程度を研究し,最適なパラメータの組み合わせを決定する.

  2. この戦略を様々な品種と周期でテストし,最適の適用範囲を探します.

  3. 二重移動平均策略を他の指標,例えばKDJ指標などに変えて,富裕な策略のポートフォリオを検討することができる.

  4. 危険を制御するストップ・メカニズムを追加する.例えば,最大撤回ストップを設定する.

要約する

この戦略は,双動平均戦略とウィリアムズ指標戦略を組み合わせ,傾向追跡とショートライン信号捕捉の両方を兼ねている.パラメータの最適化は,より広範な市場環境に適応することができる.しかし,それには,信号マッチングの不一致と複雑なパラメータの最適化の難しさが伴うリスクもあります.全体的に,この戦略は,量化取引のための有効な考え方を提供し,リスクを軽減し,安定性を高めるためにさらなる最適化の研究に値します.

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

//@version=3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 20/06/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
//    This indicator plots the oscillator as a histogram where blue denotes 
//    periods suited for buying and red . for selling. If the current value 
//    of AO (Awesome Oscillator) is above previous, the period is considered 
//    suited for buying and the period is marked blue. If the AO value is not 
//    above previous, the period is considered suited for selling and the 
//    indicator marks it as red.
//  You can make changes in the property for set calculating strategy MA, EMA, WMA
//
// 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

BillWilliamsAC(nLengthSlow, nLengthFast,nLengthMA, nLengthEMA, nLengthWMA, bShowWMA, bShowMA, bShowEMA) =>
    pos = 0
    xSMA1_hl2 = sma(hl2, nLengthFast)
    xSMA2_hl2 = sma(hl2, nLengthSlow)
    xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
    xSMA_hl2 = sma(xSMA1_SMA2, nLengthFast)
    nRes =  xSMA1_SMA2 - xSMA_hl2
    xResWMA = wma(nRes, nLengthWMA)
    xResMA = sma(nRes, nLengthMA)
    xResEMA = ema(nRes, nLengthEMA)
    xSignalSeries = iff(bShowWMA, xResWMA,
                     iff(bShowMA, xResMA, 
                      iff(bShowEMA, xResEMA, na)))
    cClr = nRes > nRes[1] ? blue : red
    pos := iff(xSignalSeries[2] < 0 and xSignalSeries[1] > 0, 1,
	         iff(xSignalSeries[2] > 0 and xSignalSeries[1] < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Bill Williams. Awesome Oscillator (AC) with Signal Line", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
nLengthSlow = input(34, minval=1, title="Length Slow")
nLengthFast = input(5, minval=1, title="Length Fast")
nLengthMA = input(15, minval=1, title="MA")
nLengthEMA = input(15, minval=1, title="EMA")
nLengthWMA = input(15, minval=1, title="WMA")
bShowWMA = input(type=bool, defval=true, title="Show and trading WMA")
bShowMA = input(type=bool, defval=false, title="Show and trading MA")
bShowEMA = input(type=bool, defval=false, title="Show and trading EMA")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posBillWilliamsAC = BillWilliamsAC(nLengthSlow, nLengthFast,nLengthMA, nLengthEMA, nLengthWMA, bShowWMA, bShowMA, bShowEMA)
pos = iff(posReversal123 == 1 and posBillWilliamsAC == 1 , 1,
	   iff(posReversal123 == -1 and posBillWilliamsAC == -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 ? red: possig == 1 ? green : blue )