Надежная и прочная стратегия системы скользящей средней


Дата создания: 2023-11-24 15:11:18 Последнее изменение: 2023-11-24 15:11:18
Копировать: 0 Количество просмотров: 587
1
Подписаться
1617
Подписчики

Надежная и прочная стратегия системы скользящей средней

Обзор

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

Стратегический принцип

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

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

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

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

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

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

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

  3. Применение высоколиверинговых счетов позволяет увеличить прибыль от торгов.

  4. Установленная точка остановки убытков позволяет эффективно контролировать риск.

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

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

Также существуют следующие риски:

  1. При использовании большого количества скользящих средних, можно упустить возможность краткосрочного обратного хода.

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

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

  4. На фоне резких колебаний курса EUR/USD возникает еще большая опасность.

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

Направление оптимизации

Основными направлениями оптимизации стратегии являются:

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

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

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

  4. Динамическая настройка для увеличения stop loss amplitude.

  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)