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

Автор:Чао Чжан, Дата: 2023-11-24 15:11:18
Тэги:

img

Обзор

Эта стратегия представляет собой систему скользящих средних, основанную на 4 SMMA (Smoothed Moving Average) с различными периодами и 1 индикатором EMA. Она сочетает в себе несколько инструментов технического анализа для формирования торговой стратегии с помощью суждения о тренде. Эта стратегия в основном подходит для внутридневного трейдинга 15-минутных облигаций EURUSD с высоким уровнем кредитной привлекательности.

Принцип стратегии

Стратегия использует 4 SMMA с различными параметрами (3, 6, 9, 50) и 1 EMA (200) для построения многоуровневой системы скользящих средних.

Когда краткосрочная скользящая средняя (например, 3-периодическая SMMA) пересекается выше долгосрочной скользящей средней (например, 200-периодическая EMA), генерируется сигнал покупки. Когда краткосрочная скользящая средняя пересекается ниже долгосрочной скользящей средней, генерируется сигнал продажи. Судя по расположению нескольких скользящих средних, направление тренда определяется.

Кроме того, стратегия также устанавливает точки остановки прибыли и остановки убытков для контроля рисков.

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

Стратегия имеет следующие преимущества:

  1. Многоуровневая структура скользящей средней может эффективно определять направление тренда и уменьшать ложные сигналы.

  2. Индикатор SMMA эффективно фильтрует шум рынка, а индикатор EMA обнаруживает долгосрочные тенденции.

  3. Он подходит для счетов с высоким кредитным плечом для увеличения торговой прибыли.

  4. Точки остановки прибыли и остановки убытков устанавливаются для эффективного контроля рисков.

  5. Оптимизирует торговые варианты (EURUSD) и циклы (15 минут), чтобы сделать его более выгодным.

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

Стратегия также имеет следующие риски:

  1. Большое количество скользящих средних может лишить краткосрочных возможностей для реверсии.

  2. Высокий кредитный рычаг увеличивает убытки и при этом увеличивает прибыль.

  3. Когда скользящая средняя генерирует сигнал, краткосрочная тенденция может уже измениться.

  4. Курс EURUSD может сильно колебаться, что приводит к большим рискам.

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

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

К основным направлениям оптимизации этой стратегии относятся:

  1. Оценить производительность различных сортов и циклов и выбрать оптимальные параметры.

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

  3. Увеличить показатели объема или волатильности для определения краткосрочных точек переворота.

  4. Увеличить динамическую корректировку диапазона остановки прибыли и остановки убытков.

  5. Добавить индикатор ENU для определения точки обратного движения.

Благодаря многогранным испытаниям и оптимизации стабильность и рентабельность стратегии могут быть значительно улучшены.

Резюме

Эта движущаяся средняя стратегия объединяет преимущества движущихся средних индикаторов, чтобы сформировать надежную систему оценки тренда. Она оптимизирует торговые сорта и циклы и очень подходит для внутридневной торговли с высоким рычагом. Благодаря корректировке параметров и тестированию оптимизации эта стратегия может стать эффективной и надежной алгоритмической торговой стратегией.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
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/
// © SoftKill21

//@version=4
strategy("Money maker EURUSD 15min" )
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 = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
 


startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)




len = input(3, minval=1, title="Length")
src = input(hl2, title="Source")
smma = 0.0
sma1 = sma(src, len)
smma := na(smma[1]) ? sma1 : (smma[1] * (len - 1) + src) / len

len2 = input(6, minval=1, title="Length")
src2 = input(hl2, title="Source")
smma2 = 0.0
sma2 = sma(src2, len2)
smma2 := na(smma2[1]) ? sma2 : (smma2[1] * (len2 - 1) + src2) / len2

len3 = input(9, minval=1, title="Length")
src3 = input(hl2, title="Source")
smma3 = 0.0
sma3 = sma(src3, len3)
smma3 := na(smma3[1]) ? sma3 : (smma3[1] * (len3 - 1) + src3) / len3

len4 = input(50, minval=1, title="Length")
src4 = input(close, title="Source")
smma4 = 0.0
sma4 = sma(src4, len4)
smma4 := na(smma4[1]) ? sma4  : (smma4[1] * (len4 - 1) + src4) / len4

len5 = input(200, minval=1, title="Length")
src5 = input(close, title="Source")
out5 = ema(src5, len5)

timeinrange(res, sess) => time(res, sess) != 0
london=timeinrange(timeframe.period, "0300-1045")
londonEntry=timeinrange(timeframe.period, "0300-0845")

extraEntry =timeinrange(timeframe.period, "0745-1030")

time_cond = true
//time_cond2 = time >= startDate and time <= finishDate and extraEntry

//

longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma  and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond
shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma  and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond


//longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma  and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond2
//shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma  and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond2

//longCond2 = crossover(close,out5) and crossover(close,smma4) and crossover(close,smma3) and crossover(close,smma2) and crossover(close,smma) and time_cond
//shortCond2 = crossunder(close,out5) and crossunder(close,smma4) and crossunder(close,smma3) and crossunder(close,smma2) and crossunder(close,smma) and time_cond



tp=input(300,title="tp")
sl=input(300,title="sl")

strategy.initial_capital  = 50000

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk %")/100           //risk % per trade


    //Calculate the size of the next trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1000)
    size := 1000           //Set min. lot size

dataL = (close-out5)*100000
dataS = (out5-close)*100000

minDistanceL = (smma4 - out5)*100000
minDistanceS= (out5 - smma4)*100000


strategy.entry("long",1,1,when=longCond )
strategy.exit("closelong","long", profit=tp,loss=sl)
    
strategy.entry("short",0,1,when=shortCond )
strategy.exit("closeshort","short", profit=tp,loss=sl)



strategy.close_all(when = not london, comment="london finish")
//strategy.close_all(when = not extraEntry, comment="london finish")



// maxEntry=input(2,title="max entries")
// strategy.risk.max_intraday_filled_orders(maxEntry)



Больше