Стратегия перекрестки двойных скользящих средних с многотипными скользящими средними

Автор:Чао Чжан, Дата: 2023-09-19 21:27:31
Тэги:

Обзор

Эта стратегия генерирует торговые сигналы путем расчета кроссовера нескольких типов скользящих средних, реализуя двойной кроссовер MA длинный и короткий.

Логика стратегии

  1. Вычислить два МА: MA1 и MA2, которые могут выбирать из SMA, EMA, VWMA и т. д. Длины могут быть настроены.

  2. Определить перекресток MA: перейти в длинную позицию, когда MA1 пересекается с MA2, закрыть позицию, когда MA1 пересекается ниже MA2.

  3. (Необязательно) Вычислить третий MA - MA3, обычно с более длительным периодом, например 50. Выше MA3 - восходящий тренд, ниже - нисходящий тренд.

  4. Объедините правила с временными рамками обратного тестирования для генерации торговых сигналов.

  5. Заполните цвета на перекрестных участках для визуальной помощи.

Стратегия сочетает в себе следующее тренду МА и перекрестный длинный/короткий, с третьим МА для контроля риска.

Анализ преимуществ

  1. Кроссовер с двойным MA фактически следует этой тенденции.

  2. Поддерживает множество комбинаций типов MA, может быть оптимизирована для разных периодов.

  3. Третий MA контролирует риски и уменьшает ненужные потери.

  4. Визуальная помощь улучшает опыт торговли графиками.

  5. Регулируемые параметры могут быть оптимизированы для различных циклов.

  6. Простая и понятная логика, легко понятная и понятная.

Анализ рисков

  1. Двойная MA борется со сценариями с изменением диапазона и тенденции.

  2. Двойная MA может порой генерировать ложные сигналы или чрезмерную реакцию.

  3. Третий MA может упустить сильные трендовые возможности. может испытать сокращение своего периода, чтобы получить больше прибыли.

  4. Не могу гарантировать выигрыш за каждую сделку, нужно правильное управление стоп-лосс.

Руководство по оптимизации

  1. Проверяют различные типы и периоды МО для лучшей пары параметров.

  2. Оптимизировать третий период ОП, чтобы сбалансировать контроль рисков и получение прибыли.

  3. Добавьте стратегию стоп-лосса для контроля суммы потерь от одной сделки.

  4. Рассмотрим алгоритмы машинного обучения, чтобы найти оптимальные параметры на основе больших данных.

  5. Комбинируйте с другими индикаторами, такими как KD, MACD для фильтрации и подтверждения сигналов.

Резюме

Эта двойная стратегия перекрестка скользящих средних с многотипными МА включает в себя следующее за трендом, контроль рисков, оптимизацию параметров, визуальную помощь и многое другое. С постоянным тестированием и оптимизацией, внедрением других индикаторов или машинного обучения и т. Д. Она может лучше адаптироваться к рынку и имеет большую практическую ценность. Вкратце, это простая, практичная и легко оптимизируемая стратегия, что делает ее отличной отправной точкой для алгоритмической торговли.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 22:00:00
period: 1m
basePeriod: 1m
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/
// © HAMIDBOX

//@version=4
strategy("Multi-X by HAMID-BOX", overlay=true)

maType(source , length, type)   =>
    type    == "SMA"            ? sma(source , length)  :
     type   == "EMA"            ? ema(source , length)  :
     type   == "RMA"            ? rma(source, length)   : 
     type   == "WMA"            ? wma(source, length)   :
     type   == "VWMA"           ? vwma(source, length)  :
     na
     
////////////////////////////////////////////////////////////////////////////////
colorup             = #11ff00
colordn             = #e91e63

/////////////////////////// MOVING AVERAGE №1 INPUTS ///////////////////////////
ma1_show            = input(title="MA №1", defval=true, type=input.bool, inline="ma1")
ma1type             = input(title="", defval="EMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma1")
ma1src              = input(title="", defval=close, type=input.source, inline="ma1")
ma1Len              = input(title="", defval=9, type=input.integer, inline="ma1")
ma1col              = input(colorup, "", type=input.color, inline="ma1")

ma1                 = maType(ma1src, ma1Len, ma1type)

ma1p = plot(ma1_show ? ma1 : na, linewidth=1, color=color.new(ma1col , 50))

/////////////////////////// MOVING AVERAGE №2 INPUTS ///////////////////////////
ma2_show            = input(title="MA №2", defval=true, type=input.bool, inline="ma2")
ma2type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma2")
ma2src              = input(title="", defval=close, type=input.source, inline="ma2")
ma2Len              = input(title="", defval=21, type=input.integer, inline="ma2")
ma2col              = input(colordn, "", type=input.color, inline="ma2")

ma2                 = maType(ma2src, ma2Len, ma2type)

ma2p = plot(ma2_show ? ma2 : na, linewidth=1, color=color.new(ma2col , 50))

/////////////////////////// MOVING AVERAGE №3 INPUTS ///////////////////////////

read                = input(title="For Safe Side = Read This >>>", defval=true, tooltip="If you want to play on the safe side, Check ON Moving Average № 3, MA №3 shows the major trend, its work as a Trend-Zone,\nRule: Do not open trades if the market is below MA № 3, WHY? because Trend is Bearish and it will make more Down, NOTE:: It is possible after adding MA № 3, it will give you a small profit. But the great advantage of that, it will reduce your loss and it will also increase your Profit Factor.\nAnd if you not have any issue with Risk then you can Leave Moving Average No 3")
ma3_show            = input(title="MA №3", defval=false, type=input.bool, inline="ma3")
ma3type             = input(title="", defval="SMA", options=["SMA","EMA","RMA","WMA","VWMA"], inline="ma3")
// ma3srcH          = input(title="", defval=high, type=input.source, inline="ma3")
// ma3srcL          = input(title="", defval=low, type=input.source, inline="ma3")
ma3Len              = input(title="", defval=50, type=input.integer, inline="ma3")
ma3col              = input(colordn, "", type=input.color, inline="ma3")

ma3H                = maType(high, ma3Len, ma3type)
ma3L                = maType(low, ma3Len, ma3type)

ma3p                = plot(ma3_show ? ma3H : na, linewidth=1, color=color.new(ma3col , 50))
ma3p2               = plot(ma3_show ? ma3L : na, linewidth=1, color=color.new(ma3col , 50))

Bigcross_zone_color = if ma3_show and close > ma3H
    color.new(colorup , 90)
else
    if ma3_show and close < ma3L
        color.new(colordn , 90)
fill(ma3p , ma3p2, color=Bigcross_zone_color, title="Cross Background Color")

BigCrossSignal      = close > ma3H
ZoneCrossover       = crossover(close , ma3H)
///////////////////////////// BACK TESTING INPUTS //////////////////////////////
startTime           = input(title="Start Time", type=input.time, defval= timestamp("01 Jan 2021"))
endTime             = input(title="End Time", type=input.time, defval= timestamp("01 Jan 2100"))
inDateRange         = true

//////////////////////////// PLOTING AND COOLORING /////////////////////////////
Cross               = input(true, "Cross Sign ON/OFF") 
maCrossOver         = crossover(ma1 , ma2)
maCrossUnder        = crossunder(ma1 , ma2)
cross_zone_color    = ma1 > ma2 ? color.new(colorup , 85) : color.new(colordn , 85)

plotshape(Cross ? maCrossOver : na, title="CrossUP Sign", style=shape.triangleup, location=location.belowbar, color=color.white, size=size.tiny)
plotshape(Cross ? maCrossUnder : na, title="CrossDN Sign", style=shape.xcross, location=location.abovebar, color=#e91e63, size=size.tiny)

fill(ma1p , ma2p, color=cross_zone_color, title="Cross Background Color")

///////////////////////////////// (CONDITIONS) /////////////////////////////////

if maCrossOver and inDateRange
    if ma3_show
        strategy.entry("BUY", strategy.long, when=BigCrossSignal)
    else    
        strategy.entry("BUY", strategy.long)

if  ma3_show
    strategy.entry("BUY", strategy.long, when=ZoneCrossover)

if maCrossUnder and inDateRange
    strategy.close("BUY", comment="Exit")
if (not inDateRange)
    strategy.close_all()





Больше