クロスオーバー移動平均ゴールデンクロスとデスクロス戦略


作成日: 2023-12-05 11:11:02 最終変更日: 2023-12-05 11:11:02
コピー: 0 クリック数: 716
1
フォロー
1621
フォロワー

クロスオーバー移動平均ゴールデンクロスとデスクロス戦略

これは非常に古典的な移動平均金叉死叉戦略である.この戦略は,TENKANとKIJUNの2つの異なる周期の移動平均を利用して金叉と死叉の信号を形成し,長短操作を行う.

戦略原則

この戦略は主に,一目瞭然の均衡表と呼ばれる日本株の技術分析方法に基づいており,TENKAN線やKIJUN線などの複数の移動平均を使って市場の傾向の方向を判断する.

まず,TENKAN線は9日線で,短期トレンドを表し,KIJUN線は26日線で,中期トレンドを表します.短期上を中期に突破すると,買入シグナルを生じ,短期下を中期に突破すると,売り出そうシグナルを生じます.このようにして,クラシックな移動平均線金叉死叉戦略を構成します.

その後,この戦略は空線と光雲線も導入する.空線は短期および中期移動平均の平均数であり,光雲線Bは52日移動平均である.それらは雲帯のを形成し,長期のトレンドの方向を判断する.光雲の上の空間は多頭市場であり,光雲の下の空間は空頭市場である.

最後に,偽信号をフィルターするために,この策略は,価格がOTO線 ((26日の価格の遅延線) と関係しているかどうかを検出します. OTO線の下での価格が買い信号を生じるときのみ; OTO線上での価格が売り信号を生じるときのみ.

戦略的優位性

これは典型的な移動平均戦略で,その優位性は主に次の3つの点で表れています.

  1. 2つの異なる周期の平均線を使用して,短期および中期2つの時間次元におけるトレンド方向を効果的に判断できます.

  2. 長期のトレンドを判断して,長期の下落市場の中で見上げを避けるために,光雲線を利用する.

  3. 価格と遅延価格の関係を検知することで,多くの偽信号をフィルターし,不要な取引を減らすことができます.

この戦略は,平均線の複数の機能を統合して,短期,中期,長期の3次元のトレンドの機会を把握することができます.

戦略リスク

この戦略の主なリスクは,

  1. 均線戦略は大量に偽信号を生成しやすい.もしパラメータをうまく設定できなければ,頻繁な取引のために投獄される.

  2. この戦略は,基本的な要素を考慮せず,技術的な側面を重んじています. 会社の業績や市場政策が大きく変化した場合,技術的な信号は失効する可能性もあります.

  3. この戦略は,購入・売却の決定のみを考慮し,止損メカニズムを設定していません. 判断が間違えば,損失が増加する可能性があります.

だから,我々は,より高度な均等なシステムを探し,合理的な止損設定,または基本的信号を追加し,この戦略をさらに完善し,リスクを減らす必要があります.

戦略最適化の方向性

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

  1. より安定的で効率的なパラメータの組み合わせを探します. より多くのデータで,戦略のパフォーマンスを向上させるパラメータの値を見つけることができます.

  2. 合理的なストップは,戦略の最大損失を効果的に制御する.

  3. 基本的シグナルを追加する.例えば,業績予想のrevisionのデータは,会社の見通しを判断し,戦略の効果を向上させる.

  4. OTOライン戦略の最適化 既存の実装は単純で,価格と歴史価格の関係をより安定かつ正確に判断する方法を模索できます

  5. 選択株の信号と組み合わせて,PE,ROEなどの要因の評価を加え,質が低い指標をフィルターすることができます.

要約する

これは非常に典型的で実用的な移動平均戦略である.それは,短,中,長3時間次元のトレンドを同時に注目し,均線の異なる機能を利用して取引シグナルを設計し,良い効果をもたらしている.我々は,この基礎で,パラメータ最適化,停止損失,株式選択などの方法によって改善し,そのパフォーマンスをより優れたものにすることができます.全体的に,これは研究に重点を置く価値のある長期追跡の量化戦略である.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mdeous

//@version=4
strategy(
     title="Ichimoku Kinko Hyo Strategy", 
     shorttitle="Ichimoku Strategy", 
     overlay=true,
     pyramiding=0,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     initial_capital=1000,
     currency="USD",
     commission_type=strategy.commission.percent,
     commission_value=0.0
     )

//
// SETTINGS
//

// Ichimoku

int TENKAN_LEN = input(title="Tenkan-Sen Length", defval=9, minval=1, step=1)
int KIJUN_LEN = input(title="Kijun-Sen Length", defval=26, minval=1, step=1)
int SSB_LEN = input(title="Senkou Span B Length", defval=52, minval=1, step=1)
int OFFSET = input(title="Offset For Chikou Span / Kumo", defval=26, minval=1, step=1)

// Strategy

int COOLDOWN = input(title="Orders Cooldown Period", defval=5, minval=0, step=1)
bool USE_CHIKOU = input(title="Use Imperfect Chikou Position Detection", defval=false)

//
// HELPERS
//

color _red = color.red
color _blue = color.blue
color _lime = color.lime
color _fuchsia = color.fuchsia
color _silver = color.silver
color _aqua = color.aqua

f_donchian(_len) => avg(lowest(_len), highest(_len))

//
// ICHIMOKU INDICATOR
//

float tenkan = f_donchian(TENKAN_LEN)
float kijun = f_donchian(KIJUN_LEN)
float ssa = avg(tenkan, kijun)
float ssb = f_donchian(SSB_LEN)

plot(tenkan, title="Tenkan", color=_silver)
plot(close, title="Chikou", offset=-OFFSET+1, color=_aqua)
_ssa = plot(ssa, title="SSA", offset=OFFSET-1, color=_lime)
_ssb = plot(ssb, title="SSB", offset=OFFSET-1, color=_red)
fill(_ssa, _ssb, color=ssa > ssb ? _lime : _fuchsia, transp=90)

//
// STRATEGY
//

// Check if price is "above or below" Chikou (i.e. historic price line):
// This detection is highly imperfect, as it can only know what Chikou position
// was 2*offset candles in the past, therefore if Chikou crossed the price
// line in the last 2*offset periods it won't be detected.
// Use of this detection is disabled by default,

float _chikou_val = close[OFFSET*2+1]
float _last_val = close[OFFSET+1]
bool above_chikou = USE_CHIKOU ? _last_val > _chikou_val : true
bool below_chikou = USE_CHIKOU ? _last_val < _chikou_val : true

// Identify short-term trend with Tenkan

bool _above_tenkan = min(open, close) > tenkan
bool _below_tenkan = max(open, close) < tenkan

// Check price position compared to Kumo

bool _above_kumo = min(open, close) > ssa
bool _below_kumo = max(open, close) < ssb

// Check if Kumo is bullish or bearish

bool bullish_kumo = ssa > ssb
bool bearish_kumo = ssa < ssb

// Correlate indicators to confirm the trend

bool bullish_trend = _above_tenkan and _above_kumo and bullish_kumo
bool bearish_trend = _below_tenkan and _below_kumo and bearish_kumo

// Build signals

bool buy1 = (close > open) and ((close > ssa) and (open < ssa)) // green candle crossing over SSA
bool buy2 = bullish_kumo and bearish_kumo[1] // bullish Kumo twist

bool sell1 = (close < open) and ((close < ssb) and (open > ssb)) // red candle crossing under SSB
bool sell2 = bearish_kumo and bullish_kumo[1] // bearish Kumo twist

bool go_long = below_chikou and (bullish_trend and (buy1 or buy2))
bool exit_long = above_chikou and (bearish_trend and (sell1 or sell2))

//
// COOLDOWN
//

f_cooldown() =>
    _cd_needed = false
    for i = 1 to COOLDOWN by 1
        if go_long[i]
            _cd_needed := true
            break
    _cd_needed

go_long := f_cooldown() ? false : go_long

//
// ORDERS
//

strategy.entry("buy", strategy.long, when=go_long)
strategy.close_all(when=exit_long)

//
// ALERTS
//

alertcondition(
     condition=go_long,
     title="Buy Signal",
     message="{{exchange}}:{{ticker}}: A buy signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})."
     )
alertcondition(
     condition=exit_long,
     title="Sell Signal",
     message="{{exchange}}:{{ticker}}: A sell signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})."
     )