この戦略は,典型的な移動平均線交差戦略であり,同時に2つの均線,一組の快均線,一組の遅均線を使用する. 快均線上をゆっくり均線を横切ると買いの信号が生じる; 快均線下をゆっくり均線を横切ると売りの信号が生じる. この戦略は,同時にEMAとSMAの2つの均線を使用し,2つの快緩均線を構成し,快均線はEMAを計算し,遅均線はSMAを計算する. 多組の均線を確認することで,いくつかの偽信号をフィルターして,信号の信頼性を高めることができる.
この戦略の主な論理は,2組の快速平均線の交差を基に,入場と出場のタイミングを判断することである.
まず,平均線を2つに分け算出します.
速度のEMAが金叉か死叉か遅いSMAか判断する.
偽信号をフィルターするために,EMAとSMAの確認の2つ目のグループが追加されました.
このように,2組の快速均線確認によって,多くの偽信号をフィルターでき,信号の信頼性を高めることができる.
判断が買入シグナルを生じるときは,多入場する.判断が売り出場シグナルを生じるときは,空き入場する.
さらに,この戦略は,ストップ・ストップ・ロズ論理を設定している. ポジションを保有するときは,設定された損益率に基づいてストップ・ストップ・価格を追跡する.
この戦略には以下の利点があります.
この戦略にはいくつかのリスクがあります.
危険を抑えるために,以下のことをお勧めします.
この戦略は,以下の点で最適化できます.
全体として,この双均線金叉死叉戦略は,快慢均線の交差によって取引信号を形成し,ストップ・ストップ・損失制御のリスクを設定し,シンプルで直感的で,容易に実行できるという特徴がある.この戦略は,市場と需要に応じてパラメータを最適化することができ,他の技術指標または戦略の組み合わせでも使用でき,量化取引において優れた実用性がある.
/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 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/
// © JMLSlop
//@version=4
src = close
strategy("Crossover moving averages", shorttitle="Cross MA-EMA", overlay=true, calc_on_order_fills=false)
// first fast EMA
len = input(8, "Length", type=input.integer, minval=1)
doma1 = input(true, title="EMA")
out1 = ema(src, len)
//Second fast EMA
len2 = input(21, minval=1, title="Length")
doma2 = input(true, title="EMA")
out2 = ema(src, len2)
//First slow MA
len3 = input(50, minval=1, title="Length")
doma3 = input(true, title="SMA")
out3 = sma(src, len3)
//Second slow MA
len4 = input(200, minval=1, title="Length")
doma4 = input(true, title="SMA")
out4 = sma(src, len4)
// Profit
profit = input(8, "Profit/lost %", type=input.float, minval=1) * 0.01
plot(doma1 and out1 ? out1: na, color=color.blue, linewidth=1, title="1st EMA")
plot(doma2 and out2 ? out2: na, color=color.red, linewidth=1, title="2nd EMA")
plot(doma3 and out3 ? out3: na, color=color.green, linewidth=2, title="1st MA")
plot(doma4 and out4 ? out4: na, color=color.orange, linewidth=3, title="2nd MA")
// Orders config
takeProfitPrice =
(strategy.position_size > 0) ? strategy.position_avg_price + open*profit : (strategy.position_size < 0) ? strategy.position_avg_price - (open*profit) : na
longStopPrice = strategy.position_avg_price * (1 - profit)
shortStopPrice = strategy.position_avg_price * (1 + profit)
longCondition2 = (out2>out3 and (crossover(out1, out4) or crossover(out1[1], out4[1]) or crossover(out1[2], out4[2]) or (crossover(out1[3], out4[3]))) or (out2>out3 and (crossover(out1, out3) or crossover(out1[1], out3[1]) or crossover(out1[2], out3[2]) or crossover(out1[3], out3[3]))))
if (longCondition2)
strategy.entry("Enter L", strategy.long)
shortCondition2 = (out2<out3 and (crossunder(out1, out4) or crossunder(out1[1], out4[1]) or crossunder(out1[2], out4[2]) or crossunder(out1[3], out4[3]))) or (out2<out3 and (crossunder(out1, out3) or crossunder(out1[1], out3[1]) or crossunder(out1[2], out3[2]) or crossunder(out1[3], out3[3])))
if (shortCondition2)
strategy.entry("Enter S", strategy.short)
if (strategy.position_size > 0)
strategy.exit("Exit L", limit=takeProfitPrice, stop=longStopPrice)
if (strategy.position_size < 0)
strategy.exit("Exit S", limit=takeProfitPrice, stop=shortStopPrice)