移動平均戦略に基づく統合されたイチモク・ケルトナー取引システム

作者: リン・ハーンチャオチャン開催日:2023年12月20日 13:40:08
タグ:

img

概要

この戦略は移動平均戦略,イチモク雲チャート,ケルトナーチャネル技術指標を統合し,高周波アルゴリズム取引に適したトレンドフォローとブレークスルー取引を達成します.

戦略原則

  1. 取引先を開設するための信号として,株価がチャネル上下線を超えているかどうかを判断するために,ケルトナーチャネルを使用します.
  2. イチモク雲グラフはトレンド方向を判断し,ケルトナーチャンネルを使用します
  3. 移動平均戦略は閉じる信号を送る

利点分析

  1. 決定の正確性を向上させるため,包括的な判断のための複数の技術指標を統合する
  2. Keltnerチャネルは,ポジションを開くときに高値を追いかけて低値を殺すのを避けるために,過買い・過売り条件を判断します.
  3. イチモク・クラウド・チャートは,トレンドに反する取引を避けるために,主要なトレンドを判断します.
  4. 移動平均戦略はショックをフィルタリングし,過度に敏感性を防ぐ

リスク分析

  1. 複数の指標の統合により,パラメータ設定は複雑になり,注意深くテストする必要があります
  2. クラウドチャートの変換線とベースラインの交差は必ずしも信頼できる取引信号ではありません
  3. ケルトナー運河は,異なる資源の特徴に合わせてパラメータを調整する必要があります

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

  1. サーバーのパフォーマンスを評価し,取引頻度を増やすために移動平均周期を適切に短縮する
  2. 異なる株のパラメータに対する感受性をテストし,適応パラメータを設定する
  3. 単一の損失を減らすためのストップ損失戦略を拡大する

概要

この戦略は,イチモク・クラウド・チャート,ケルトナー・チャネル,移動平均戦略を複数の技術指標と統合し,トレンド・トラッキングと効率的な突破トレードを実現する.単一の指標と比較して,この戦略の判断はより包括的で正確で,特定の誤った信号を回避する.同時に,パラメータ設定がより複雑で,個々の株に最適化する必要がある問題もあります.一般的に,この戦略は,有意な効果を持つ高周波アルゴリズム取引に適しています.


/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Author: Persio Flexa
// Description: Ichimoku Clouds with Keltner Channel, perfect for margin trading 
strategy("Ichimoku Keltner Strategy", overlay=true) 

// -- Keltner ------------------------------------------------------------------
source = close

useTrueRange = input(true)
length = input(18, minval=1) 
mult = input(1.8)

ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

plot(ma, title="BASE", color=orange,transp=85)
plot(upper, title="UPPER", color=red)
plot(lower, title="LOWER", color=green)

//crossUpper = crossover(source, upper)
//crossLower = crossunder(source, lower)
crossUpper = source > upper
crossLower = source  < lower

bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])

sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1]) 

crossBcond = false
crossBcond := crossUpper ? true 
 : na(crossBcond[1]) ? false : crossBcond[1]

crossScond = false
crossScond := crossLower ? true 
 : na(crossScond[1]) ? false : crossScond[1]

cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

// ---------------------------------------------------------------------


// -- Ichimoku

ATRlength = input(200, minval=1)
ATRMult = input(2.272, minval=1)

ATR = rma(tr(true), ATRlength)

len = input(26, minval=1, title="EMA Length")
src = input(close, title="Source")
out = ema(src, len)

emaup = out+(ATR*ATRMult)
emadw = out-(ATR*ATRMult)

conversionPeriods = input(15, minval=1),
basePeriods = input(35, minval=1)
laggingSpan2Periods = input(52, minval=1),
displacement = input(26, minval=1)

donchian(len) => avg(lowest(len), highest(len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

p1 = plot(leadLine1, offset = displacement, color=green,transp=85, title="Lead 1")
p2 = plot(leadLine2, offset = displacement, color=red,transp=85, title="Lead 2")
fill(p1, p2,silver) 

longCond    = crossover(conversionLine, baseLine)
shortCond   = crossunder(conversionLine, baseLine)
// -------------------------------------------------------------------------

if (crossUpper and (conversionLine > baseLine))
    strategy.entry("long", strategy.long, stop=bprice, comment="LONG")

if (crossLower and (conversionLine < baseLine))
    strategy.entry("short", strategy.short, stop=sprice, comment="SHORT")
    
strategy.close("long", when = (shortCond and source < lower))
strategy.close("short", when = (longCond and source > upper))

もっと