Эта стратегия представляет собой систему скользящих средних, основанную на 4 SMMA (Smoothed Moving Average) с различными периодами и 1 индикатором EMA. Она сочетает в себе несколько инструментов технического анализа для формирования торговой стратегии с помощью суждения о тренде. Эта стратегия в основном подходит для внутридневного трейдинга 15-минутных облигаций EURUSD с высоким уровнем кредитной привлекательности.
Стратегия использует 4 SMMA с различными параметрами (3, 6, 9, 50) и 1 EMA (200) для построения многоуровневой системы скользящих средних.
Когда краткосрочная скользящая средняя (например, 3-периодическая SMMA) пересекается выше долгосрочной скользящей средней (например, 200-периодическая EMA), генерируется сигнал покупки. Когда краткосрочная скользящая средняя пересекается ниже долгосрочной скользящей средней, генерируется сигнал продажи. Судя по расположению нескольких скользящих средних, направление тренда определяется.
Кроме того, стратегия также устанавливает точки остановки прибыли и остановки убытков для контроля рисков.
Стратегия имеет следующие преимущества:
Многоуровневая структура скользящей средней может эффективно определять направление тренда и уменьшать ложные сигналы.
Индикатор SMMA эффективно фильтрует шум рынка, а индикатор EMA обнаруживает долгосрочные тенденции.
Он подходит для счетов с высоким кредитным плечом для увеличения торговой прибыли.
Точки остановки прибыли и остановки убытков устанавливаются для эффективного контроля рисков.
Оптимизирует торговые варианты (EURUSD) и циклы (15 минут), чтобы сделать его более выгодным.
Стратегия также имеет следующие риски:
Большое количество скользящих средних может лишить краткосрочных возможностей для реверсии.
Высокий кредитный рычаг увеличивает убытки и при этом увеличивает прибыль.
Когда скользящая средняя генерирует сигнал, краткосрочная тенденция может уже измениться.
Курс EURUSD может сильно колебаться, что приводит к большим рискам.
В ответ на эти риски мы можем соответствующим образом скорректировать коэффициент рычага, оптимизировать параметры скользящей средней, ввести другие показатели для оценки переворота тренда и т. Д. Для оптимизации.
К основным направлениям оптимизации этой стратегии относятся:
Оценить производительность различных сортов и циклов и выбрать оптимальные параметры.
Испытайте различные комбинации и количества скользящих средних.
Увеличить показатели объема или волатильности для определения краткосрочных точек переворота.
Увеличить динамическую корректировку диапазона остановки прибыли и остановки убытков.
Добавить индикатор 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)