
この戦略は、二重移動平均クロスオーバー信号に基づく動的トレンド追跡システムです。短期20日間指数移動平均(EMA)と長期50日間指数移動平均( EMA(EMA)に基づいて売買操作を自動で実行します。この戦略は、トレンド追跡と動的ポジション管理の特徴を組み合わせた成熟したテクニカル分析手法を採用しており、ボラティリティの高い市場環境に適しています。
戦略の中核となるロジックは、次の主要要素に基づいています。
この戦略は、古典的なトレンド追跡システムを現代的に実装したものです。プログラムによる取引を通じて、従来の二重移動平均クロスオーバー戦略が体系化され、標準化されています。固有のリスクはあるものの、継続的な最適化と改善を通じて、この戦略は優れた応用の見込みがあります。実際の使用前に十分なパラメータの最適化とバックテスト検証を行うことをお勧めします。
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Crossover Buy/Sell Signals", overlay=true)
// Input parameters for EMAs
emaShortLength = input.int(20, title="Short EMA Length")
emaLongLength = input.int(50, title="Long EMA Length")
// Calculating EMAs
emaShort = ta.ema(close, emaShortLength)
emaLong = ta.ema(close, emaLongLength)
// Plotting EMA crossover lines
plot(emaShort, color=color.green, title="20 EMA")
plot(emaLong, color=color.red, title="50 EMA")
// Buy and Sell signal logic
longCondition = ta.crossover(emaShort, emaLong)
exitLongCondition = ta.crossunder(emaShort, emaLong)
shortCondition = ta.crossunder(emaShort, emaLong)
exitShortCondition = ta.crossover(emaShort, emaLong)
// Plot buy and sell signals on the chart
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal")
plotshape(series=exitLongCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Exit")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")
plotshape(series=exitShortCondition, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Exit")
// Backtesting strategy logic
var float entryPrice = na
var int position = 0 // 1 for long, -1 for short, 0 for no position
if (longCondition and position == 0)
entryPrice := close
position := 1
if (shortCondition and position == 0)
entryPrice := close
position := -1
if (exitLongCondition and position == 1)
strategy.exit("Exit Long", from_entry="Long", limit=close)
position := 0
if (exitShortCondition and position == -1)
strategy.exit("Exit Short", from_entry="Short", limit=close)
position := 0
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)