この戦略は,2つの異なる周期の移動平均を計算し,それらの金叉死叉に基づいて買入と売却のシグナルを形成する.
この戦略は,まず,ユーザが移動平均のタイプと長さを選択することを許可する.タイプはSMA,EMA,VWMAなどを含み,長さは平均線の周期を決定する.
その後,ユーザの選択に応じて2つの移動平均を計算する.もし速線が下の方からゆっくり線を貫通して金叉を形成すると,買入シグナルが生成する.もし速線が上の方から下の方からゆっくり線を貫通して死叉を形成すると,売出シグナルが生成する.
このように,短期平均価格が長期平均価格より高いとき,市場が上昇傾向にあると考えられ,購入するべきである.短期価格が長期価格より低いとき,市場が低下傾向にあると考えられ,販売すべきである.
適切な最適化パラメータ,他の指標の組み合わせ,シグナル生成,ストップ・ストップの設定などの方法でリスクを制御することができる.
この戦略の全体的な構想はシンプルで明確で,双均線を計算することで取引信号を形成し,市場環境に応じて柔軟にパラメータを調整し,その他の戦略の組み合わせを最適化することができるが,震動市場のリスクを防ぎ,合理的な資金管理を行うことに注意する必要がある.全体的に検討に値する選択肢である.
/*backtest
start: 2023-09-09 00:00:00
end: 2023-09-13 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's MAs Tests", shorttitle = "MAs tests", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
len = input(30, defval = 30, minval = 2, maxval = 1000, title = "MA length")
type = input(1, defval = 1, minval = 1, maxval = 7, title = "Type")
src = input(close, defval = close, title = "Source")
//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)
//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3
//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
kama = nz(kama[1]) + nsmooth * (src - nz(kama[1]))
//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2
ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0
plot(ma, color = blue, linewidth = 3, transp = 0)
trend = low > ma ? 1 : high < ma ? -1 : trend[1]
longCondition = trend == 1 and trend[1] == -1
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = trend == -1 and trend[1] == 1
if (shortCondition)
strategy.entry("Short", strategy.short)