
この策略は,高速EMA線と遅いEMA線の交差を買入と出売の信号として使用し,均線交差に基づいて自動取引を実現する.高速EMA線は,価格変化を緊縮し,遅いEMA線は価格変化を平らにする.高速EMA線が,下方から遅いEMA線を横断すると,買入の信号が生じ,高速EMA線が,上方から下方から遅いEMA線を横断すると,売り出売の信号が生じます.この策略は,柔軟に調整でき,高速EMAのパラメータを調整することで,購入と出売の信号をカスタマイズすることができます.
この戦略は,主に高速EMA線と遅いEMA線を計算し,2つの均等線の関係を比較して取引信号を生成する.
まず,入力のパラメータに高速EMAの周期emaFastを1に設定し,高速EMAが価格変化に緊密に対応できるようにする.同時に,遅いEMAの周期を設定し,emaSlowBuyは買取シグナルを生成し,emaSlowSellは販売シグナルを生成する.
次に,入力された周期に応じて,高速EMAと遅いEMAを計算する.高速EMAは1の固定周期で,価格を緊密に追跡し,遅いEMAは調節可能なパラメータで,価格データを平らにする.
次に,より速いEMAと遅いEMAの大きさの関係を比較して,交差状況を判断する. 速いEMAが下方向から遅いEMAを通過すると,金叉が生じ,買取条件を満たす. 速いEMAが上方向から下落すると,遅いEMAを破ると,デッドフォークが生じ,売り条件を満たす.
最後に,買取と販売条件を満たしたときに,相応の開設と収納指示を実行し,取引を完了する.同時に,現在の時刻が再測時間範囲にあるかどうかをチェックし,日付範囲を超えて誤った取引を避ける.
リスクに合わせて,以下の最適化策を考える:
他の指標と組み合わせた EMA 交差信号をフィルタリングし,誤信号を避ける
市場変動に応じてEMAパラメータを調整し,取引頻度を低下させる
ストップ・アンド・ストップの考慮を高め,リスクをコントロールする
特定の市場状況に適したパラメータを使用して,高速EMAの周期を最適化
トレンド判断を高め,波動的な市場から脱出する
この戦略は,以下の方向からさらに最適化できます.
異なるemaFastとemaSlowのパラメータを巡って,ステップアップ・最適化またはランダム・最適化による方法を使用して,歴史データ回測で最高のパフォーマンスを示すパラメータの組み合わせを見つけることができます.
例えば,MACD,KDJ,ブリン帯などの指標を組み合わせて,EMA交差から誤信号が生じないようにすることができる.
平均的なリアル波幅などの指標を計算して,強弱な動きを判断し,震動市場に陥らないようにしてください.
損失のリスクを制御するための最適のストップポイントを研究し,利益を最大化するための合理的なストップポイントを決定する.
快慢EMA組み合わせだけでなく,双EMA,三EMA,あるいは多EMA組み合わせもテストして,より優越したパラメータを探せます.
傾向が強い市場にはEMAサイクルを適当に加速させ,揺れ動いている市場にはEMAサイクルを遅らせることができる.
このEMAクロス戦略の全体的な考え方は,明快で分かりやすく,成熟した技術指標を用いて売買のタイミングを判断する.戦略は,カスタマイズ性があり,EMAパラメータを調整することで最適化され,異なる市場環境に対応して取引戦略を策定することができる.しかしEMA信号は,遅滞性があり,最適なパラメータの組み合わせを見つけるために繰り返しテストする必要がある.さらに,リスクに合わせて最適化され,他の指標と組み合わせて信号を検証し,止損停止方法を最適化して,引き戻し撤回を軽減し,収益性を向上させる必要がある.この戦略は,テストを継続的に最適化すれば,良好な取引業績を期待できる.
/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(
"EMA Cross Strategy with Custom Buy/Sell Conditions",
overlay=true
)
// INPUT:
// Options to enter fast Exponential Moving Average (EMA) value
emaFast = 1
// Options to enter slow EMAs for buy and sell signals
slowEMABuy = input(title="Slow EMA for Buy Signals", defval=20, minval=1, maxval=9999)
slowEMASell = input(title="Slow EMA for Sell Signals", defval=30, minval=1, maxval=9999)
// Option to select trade directions
tradeDirection = input(title="Trade Direction", options=["Long", "Short", "Both"], defval="Both")
// Options that configure the backtest date range
startDate = input(title="Start Date", type=input.time, defval=timestamp("01 Jan 2018 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2025 23:59"))
// CALCULATIONS:
// Use a fixed fast EMA of 1 and calculate slow EMAs for buy and sell signals
fastEMA = ema(close, emaFast)
slowEMABuyValue = ema(close, slowEMABuy)
slowEMASellValue = ema(close, slowEMASell)
// PLOT:
// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.orange, linewidth=2)
plot(series=slowEMABuyValue, color=color.blue, linewidth=2, title="Slow EMA for Buy Signals")
plot(series=slowEMASellValue, color=color.red, linewidth=2, title="Slow EMA for Sell Signals")
// CONDITIONS:
// Check if the close time of the current bar falls inside the date range
inDateRange = true
// Translate input into trading conditions for buy and sell signals
buyCondition = crossunder(slowEMABuyValue, fastEMA)
sellCondition = crossover(slowEMASellValue, fastEMA)
// Translate input into overall trading conditions
longOK = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")
// ORDERS:
// Submit entry (or reverse) orders based on buy and sell conditions
if (buyCondition and inDateRange)
strategy.entry("Buy", strategy.long)
if (sellCondition and inDateRange)
strategy.close("Buy")
// Submit exit orders based on opposite trade conditions
if (strategy.position_size > 0 and sellCondition)
strategy.close("Sell")
if (strategy.position_size < 0 and buyCondition)
strategy.close("Sell")