
概要:この戦略は,均線交差に基づくクラシック取引戦略であり,指標は,単純移動平均 ((SMA),指数移動平均 ((EMA),線形加重移動平均 ((VWMA) と振動加重移動平均 ((HMA) を含む二重平均線を選択した.
原則: 戦略の核心論理は双均線交差である. 平均線を2つの異なるパラメータで計算することで,速い平均線上を通過すると買入シグナルが生じ,速い平均線下を通過すると売りシグナルが生じます. 均線交差は,価格の短期と長期のトレンドの転換を表します.
優位分析:双均線交差戦略の優位性は,操作が簡単で,一つの信号から最も基本的なトレンド判断が得られ,パラメータの選択と調整があまり必要なく,初心者トレーダーに適しています.また,異なるタイプの均線はテストされ,異なる組み合わせを選択して最適化することができます.
リスク分析:この戦略の主なリスクは,一般的な均線交差戦略に大量の偽信号があり,小利多平置の問題を引き起こし,全体的な収益に影響するということです.さらに,固定速慢平均線長さの設定は,特定の周期で無効になります.
最適化方向:1) 異なる周期テストを試み,最適な平均線交差周期组合を決定する。2) 2番目の平均線のパラメータを導入することを考慮し,RSI指標の補助判断を偽信号を減らす。3) 単純な交差ではなく,MA指標の増量変化に基づく条件判断を導入し,より信頼性の高い交差判断を得る。
概要:この戦略は,従来の均線交差策の枠組みを採用し,均線周期の最適な組み合わせを探すために双均線テストを行い,均線ROCと価格に基づくストップを追加した.全体的に,簡単で使いやすい,量化取引の論理に適合する双均線戦略である.さらに,豊富な最適化思考は,この戦略の次続開発に余地を提供している.
/*backtest
start: 2023-11-27 00:00:00
end: 2023-12-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(close, title="Source")
price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])
ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])
f_hma(_src, _length)=>
_return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
sma(price, ma1)
else
if (type1 == "EMA")
ema(price, ma1)
else
if (type1 == "VWMA")
vwma(price, ma1)
else
f_hma(price, ma1)
price2 = if (type2 == "SMA")
sma(price, ma2)
else
if (type2 == "EMA")
ema(price, ma2)
else
if (type2 == "VWMA")
vwma(price, ma2)
else
f_hma(price, ma2)
//plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)
longCondition = crossover(price1, price2)
if (longCondition) // and time>timestamp(2018,6,1,9,30)
strategy.entry("Long", strategy.long)
shortCondition = crossunder(price1, price2)
if (shortCondition) // and time>timestamp(2018,6,1,9,30)
strategy.entry("Short", strategy.short)
lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)
ma1up = false
ma1down = false
ma2up = false
ma2down = false
ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])
trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01
if crossover(roc1, trendStrength1)
ma1up := true
ma1down := false
if crossunder(roc1, -trendStrength1)
ma1up := false
ma1down := true
shortexitCondition = ma1up and ma1down[1]
if (shortexitCondition)
strategy.close("Short")
longexitCondition = ma1down and ma1up[1]
if (longexitCondition)
strategy.close("Long")