複数のテクニカル指標を組み合わせる


作成日: 2023-12-20 11:04:15 最終変更日: 2023-12-20 11:04:15
コピー: 0 クリック数: 662
1
フォロー
1621
フォロワー

複数のテクニカル指標を組み合わせる

概要

この戦略は,複数の技術指標を組み合わせた方法で,全力でショートラインの取引戦略を実現する. この戦略は,傾向を追跡,突破取引,反転取引などの複数の取引方法を持ち,ほとんどの市場環境に適応し,非常に一般的で実用的なショートライン戦略である.

戦略原則

  1. この戦略は,最初に,最高価格と最低価格のチャネルを組み合わせた,現在のトレンドの方向と強さを判断する,キャンドルボディチャネル指標を使用します.
  2. 次に,一般的なEMA平均線指標を用いて中長線トレンドの方向を判断する.双EMA指標の組み合わせを用いて偽信号をフィルターする.
  3. この戦略は,次に,現在の価格が超買超売かどうかを判断するために,Hull MA指数を使用する. Hull MA指数は,ターニングポイントをより正確に判断する能力を有する.
  4. 最後に,この戦略は,より高い周期を開く security 関数を使用して,大周期の傾向方向を判断し,取引信号を生成する.

以上の一連の策略が組み合わせることで,この策略は中間周期のトレンドを捉えることができ,また長周期から全体的な動きの方向を判断することができ,全能の汎用取引策を実現します.

優位分析

この戦略の最大の利点は,複数の技術指標を総合的に使用してポートフォリオ取引を行うことであり,トレンド追跡,反転取引,突破取引などの複数の取引方法を同時に実現でき,非常に汎用的で,ほとんどの市場環境に適応することです.

具体的には,この戦略の主な利点は以下の通りです.

  1. candle body channel指標を用いて実体突破を判断し,突破信号を効果的に識別することができる.
  2. 双EMAの組み合わせを用いて偽信号をフィルタリングし,信号の正確性を向上させる.
  3. Hull MA指数を使って,超買超売領域を判断し,ターニングポイントをより正確に判断する能力を持つ.
  4. より高い周期のK線の開値交差で信号を生成することで,ノイズによる誤導を回避できる.
  5. 複数の取引方法を組み合わせることで,戦略はより汎用的で普遍的になる.

リスク分析

この戦略は,複数の指標を組み合わせて,汎用的な取引戦略を実現している.しかし,取引には一定のリスクがあります.主なリスクポイントは以下の通りです.

  1. 突破取引は偽の突破で誤った信号を誘導されやすい.
  2. 逆転取引は不安定な状況で損失を招く可能性があります.
  3. 双 EMA 組み合わせのフィルタリング能力は依然として限られており,正常な信号を排除する可能性がある.
    1. Hull MA指標の曲線適合の精度は不足している.

このリスクに対して,以下のような方法で最適化することができます.

  1. 偽突破を避けるため,より安定した指標を補助判断として採用する.
  2. 単一損失を抑えるためのストップ・ロース戦略を導入する.
  3. 双EMAパラメータを調整して,最適な組み合わせを探します.
  4. 超買いと超売りを判断する指標を統合してみましょう.

最適化の方向

上述の分析によると,この戦略は以下の方向から最適化できる:

  1. カルマン平均線,ブリン帯など,より主流で安定した指標の組み合わせを用いて補助判断を行う.
  2. 単一損失を厳格に管理する.
  3. パラメータを最適化して,最適なパラメータの組み合わせを見つけます.
  4. 機械学習モデルの判断を拡張し,AIで超買超売の判断を行う.
  5. 市場環境の動向に応じて戦略を調整する方法.

要約する

この戦略は,複数の指標を総合的に使用して組合せ取引を行い,トレンド追跡,突破取引,逆転取引の複数の取引方法を有機的に組み合わせることを実現し,非常に汎用的で通用的なショートライン取引戦略である.この戦略の最大の優点は,適用範囲が広いことであり,ほとんどの市場環境に適用でき,比較的に通用的な戦略思考の1つである.もちろん,取引には一定のリスクがあるが,我々は,より安定した指標を導入し,止損を増やし,パラメータ最適化,機械学習を適用するなど,多方面での戦略最適化を行って,この戦略の効果をさらに向上させることができる.全体的に,これは非常に参考に値する,学習する通用ショートライン取引戦略である.

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

//@version=2
//╭╮╱╱╭╮╭╮╱╱╭╮
//┃╰╮╭╯┃┃┃╱╱┃┃
//╰╮┃┃╭┻╯┣╮╭┫╰━┳╮╭┳━━╮
//╱┃╰╯┃╭╮┃┃┃┃╭╮┃┃┃┃━━┫
//╱╰╮╭┫╰╯┃╰╯┃╰╯┃╰╯┣━━┃
//╱╱╰╯╰━━┻━━┻━━┻━━┻━━╯
//╭━━━┳╮╱╱╱╱╱╱╱╭╮
//┃╭━╮┃┃╱╱╱╱╱╱╱┃┃
//┃┃╱╰┫╰━┳━━┳━╮╭━╮╭━━┫┃
//┃┃╱╭┫╭╮┃╭╮┃╭╮┫╭╮┫┃━┫┃
//┃╰━╯┃┃┃┃╭╮┃┃┃┃┃┃┃┃━┫╰╮
//╰━━━┻╯╰┻╯╰┻╯╰┻╯╰┻━━┻━╯
//━╯
// http://www.vdubus.co.uk/
strategy(title='Vdub FX SniperVX3 / Strategy  v3', shorttitle='Vdub_FX_SniperVX3_Strategy', overlay=true, pyramiding=0, initial_capital=1000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
Piriod=input('720')
ch1 = request.security(syminfo.tickerid, Piriod, open)
ch2 = request.security(syminfo.tickerid, Piriod, close)
longCondition = crossover(request.security(syminfo.tickerid, Piriod, close),request.security(syminfo.tickerid, Piriod, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, Piriod, close),request.security(syminfo.tickerid, Piriod, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

///////////////////////////////////////////////////////////////////////////////////////////