
Строка пересечения скользящих средних - очень классическая и часто используемая стратегия технического анализа. Основная идея этой стратегии заключается в том, чтобы использовать пересечение между скользящими средними разных периодов в качестве сигнала для покупки и продажи. Сигнал покупки возникает, когда короткосрочная скользящая средняя пересекает более длительную скользящую среднюю снизу; сигнал продажи возникает, когда короткосрочная скользящая средняя пересекает более длительную скользящую среднюю снизу.
Стратегия вводит типы (SMA, EMA, WMA, RMA) и длительность циклов, а также временные рамки для отсчета.
Вычисление различных типов скользящих средних в вариантных функциях. Вычисленные скользящие средние сохраняются с помощью переменной ma.
Когда цена закрытия превышает ма, создается сигнал покупки; когда цена закрытия превышает ма, создается сигнал продажи.
Для установки стоп-убытков, черезatr рассчитывается средняя истинная частота колебаний за 14 циклов. С точки прохождения в качестве отсчета, вверх или вниз плюс уменьшение в 2 разаatr в качестве пределов стоп-убытков.
Конкретная логика вступления и выхода из турнира:
Многоголовый вход: close наносится на ma и в течение отсчета времени, точка остановки является точкой входа close Многоголовый выезд: закрытие при прохождении ma минус 2xatr, или остановка при максимальной цене, превышающей точку входа close плюс 2xatr Вход в пустоту: close под прохождением ma и в течение отсчета времени, точка остановки как точка входа close Пустой выход: закрытие на ма плюс 2xatr, или минимальная цена ниже точки входа, закрытие минус 2xatr, остановка выхода
Оптимизация рисков может быть осуществлена в следующих направлениях:
Эта стратегия может быть оптимизирована в следующих аспектах:
Стратегия пересечения движущейся средней является очень типичной и часто используемой стратегией технического анализа. Основная идея этой стратегии проста, легко реализуема, применима к различным рынкам и является одной из входных стратегий количественного трейдинга. Однако у этой стратегии есть некоторые проблемы, такие как частое появление сигналов, легкая остановка и т. Д. При соответствующей оптимизации можно значительно повысить реальную производительность этой стратегии.
/*backtest
start: 2023-10-03 00:00:00
end: 2023-11-02 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("MA Cross Strategy", overlay=true,commission_value = 0.1)
type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"])
length = input(28)
source = close
// === INPUT BACKTEST RANGE ===
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear = input(defval = 2000, title = "From Year", minval = 2000)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(9999, 1, 1, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
variant(type, src, len) =>
v1 = sma(src, len) // Simple
v2 = ema(src, len) // Exponential
v5 = wma(src, len) // Weighted
v7 = rma(src, len) // Smoothed
type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1
ma = variant(type,source, length)
atr = security(syminfo.tickerid, "D", atr(14))
range = valuewhen(cross(close,ma), (atr*2), na)
ep = valuewhen(cross(close,ma), close, na)
plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1)
plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999)
strategy.entry("Long Entry", true, when = crossover(close,ma) and window() , stop = ep )
strategy.exit("Long Exit", "Long Entry", stop = ep-range)
strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] )
strategy.entry("Short Entry", false, when = crossunder(close,ma) and window() , stop = ep )
strategy.exit("Short Exit", "Short Entry", stop = ep+range)
strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] )