
この戦略は,異なる種類の平均線 ((単純な移動平均SMA,指数移動平均EMA,Hull移動平均HMA,および重力移動平均VWMA) を計算し,その交差点を探すことで,市場動向を判断し,トレンドフォローを行う.より短い平均線がより長い平均線を下から通過すると買入シグナルを生成し,より短い平均線がより長い平均線を上から下から通過すると売り出しシグナルを生成する.
この戦略は,主に2つの異なる均線間の関係を比較することによって,市場動向を判断する.具体的には,入力パラメータを使用して2つの均線のタイプと長さを設定する.そのうちの最初の均線の長さは,長期のトレンドを表す.第二の均線の長さは,現在の短期のトレンドを表す.
短期平均線が長期平均線を下から通過すると,短期傾向が強くなって,価格が上昇傾向に入ると,この交差点で買い信号を発する.逆に,短期平均線が長期平均線を上から通過すると,短期傾向が弱くなって,価格が低下傾向に入ると,この交差点で売り信号を発する.
市場動向に合わせて取引を行うため,このような均線交差判断を行う.
リスク対策:
この戦略は,均線交差判断の主なトレンドの古典的な考えに基づいています.異なる均線の組み合わせによって柔軟に適用されます. 戦略の論理はシンプルで,容易に実装され,自動取引に適しています. 全体的に,この戦略は,ある程度の実用性がありますが,いくつかの改善の最適化スペースもあります.パラメータの最適化,他のフィルター判断の追加などの方法によって,戦略のパフォーマンスを継続的に向上させることができます.
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 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", overlay=true)
src = input(close, title="Source")
price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(25, 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)
strategy.entry("Long", strategy.long)
shortCondition = crossunder(price1, price2)
if (shortCondition)
strategy.entry("Short", strategy.short)