
この戦略は,EMA指数に基づくクロスサイクルの取引戦略である.この戦略は,2つの異なる周期のEMAを買入シグナルとして使用し,短周期EMAで長周期EMAを横切るときに多行し,短周期EMAの下で長周期EMAを横切るときに空行し,トレンドフォロー戦略に属している.この戦略は,リスクを管理するために,同時にもストップ・ロストとストップ・ポジションを設定している.
この戦略は,EMA指標の金叉死叉を取引信号として使用する.具体的には,短期EMAと長期EMAをそれぞれ計算し,短期EMAの上から長期EMAを突破すると買入信号が作られ,短期EMA下から長期EMAを突破すると売り信号が作られ,空売り信号が作られる.こうしてEMAの移動傾向によって買入方向が決定される.
ポジションに入ると,戦略は同時にストップ・ロスの値とストップ・ロスの値を設定する.ストップ・ロスは入場価格の一定パーセントをストップ・ラインとして,価格がストップ・ロスのラインに触れたら平仓ストップする.ストップ・ロスは入場価格の一定パーセントをストップ・ラインとして,価格がストップ・ラインに触れたら平仓ストップする.
この戦略はまた,多額または空白のみの選択,および日内取引または持仓取引の選択を可能にします. 日内取引については,米国株の終了前に平仓を強制します.
この戦略の利点は以下の通りです.
EMA指数を使用して曲線をフィルタリングし,高周波波動に誤導されないようにし,中長線トレンドを順番に捉えることができます.
短期EMAと長期EMAの交差を取引シグナルとして採用し,頻繁に取引を避ける.
ストップ・ストップを設定して,各注文のリスク・リターン比率を制御し,資金管理に役立ちます.
複数のタイプのトレーダーに適した,多額の取引や空白の取引,日中取引,またはポジション取引の選択が可能です.
株式,外貨,デジタル通貨など,様々な取引形態に対応しています.
この戦略にはいくつかの潜在的リスクがあります.
EMA指数は遅滞しており,短期トレンド転換点を逃している可能性がある.
長期・短期EMAの誤った選択は,取引シグナルを混乱させる可能性があります.
長期にわたる保有は,より大きな市場の揺れに耐えかねない.
機械的に止損を止めることは,早退や利益の減少につながる.
対応するリスク管理策は
EMAパラメータを最適化して,最適な周期組み合わせを見つけます.
他の指標を追加して判断する.
動的に調整する止損停止位置.
人工干渉の異常な状況について
この戦略は以下の方向から最適化できます.
EMAパラメータを最適化して,異なる品種に適した長短周期の組み合わせを見つけます.
MACD,KDなどの他の指標判断を追加し,多指標共鳴を実現する.
機械学習モデルのトレーニングを増加させ,動的停止ダメージを発生させる.
より高度なRISK指標にアクセスして特性を設計する.
調整可能な取引要素を追加し,パラメータを自主的に最適化します.
この戦略は全体的に優れたトレンド追跡戦略のテンプレートであり,その核心的な優位性は,EMA指標のフィルターノイズを使用して安定した利益を達成し,完全なリスク/利益管理を備えていることです.この戦略は,継続的な最適化により,市場全体に共通する量化戦略になり,トレーダーが学び,実践する価値があります.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Crossover Strategy by Vikrant Singh", overlay=true)
// Input for EMA Lengths
var bool runningPOS = false
var float stopLossLevel = na
var float targetLevel = na
shortLength = input(11, title="Short EMA Length")
longLength = input(21, title="Long EMA Length")
// Input for Stop-Loss and Target
stopLossPct = input(1, title="Stop-Loss (%)")
targetPct = input(3, title="Target (%)")
longOnly = input(true, title="Long Only")
intraDay = input(true, title="intraday?")
// Calculate EMAs
emaShort = ta.ema(close, shortLength)
emaLong = ta.ema(close, longLength)
// Calculate crossover conditions
crossoverCondition = ta.crossover(emaShort, emaLong)
crossunderCondition = ta.crossunder(emaShort, emaLong)
// Entry condition (long position just before crossover)
if crossoverCondition and not runningPOS and longOnly and (hour <= 15)
strategy.entry("Long", strategy.long)
runningPOS := true
stopLossLevel := close * (1 - stopLossPct / 100)
targetLevel := close * (1 + targetPct / 100)
//Entry condition (short position just before crossover)
if crossunderCondition and not runningPOS and not longOnly and (hour <= 15)
strategy.entry("Short", strategy.short)
runningPOS := true
stopLossLevel := close * (1 + stopLossPct / 100)
targetLevel := close * (1 - targetPct / 100)
// Exit conditions (square off on reverse crossover)
//Exit long
if (crossunderCondition or (low < stopLossLevel) or (high > targetLevel) ) and longOnly and runningPOS
strategy.close("Long",comment = "Exit long")// ("Long", from_entry="Long",stop=stopLossLevel, limit=targetLevel)
runningPOS := false
//Exit short
if (crossoverCondition or (high > stopLossLevel) or (low < targetLevel) ) and not longOnly and runningPOS
strategy.close("Short", comment = "Exit Short")
runningPOS := false
if intraDay and runningPOS
if (hour >= 15)
strategy.close_all(comment = "Intraday square off")
//strategy.close("Long",comment = "intraday square off")
runningPOS := false
// Plot EMAs
plot(emaShort, color=color.blue, title="Short EMA")
plot(emaLong, color=color.red, title="Long EMA")