Стратегия двойного движущегося среднего контртенда предназначена в основном для свинговой торговли, применяемой на рынке FOREX. Эта стратегия генерирует торговые сигналы с использованием двух движущихся средних разных временных рамок. Когда быстрый движущийся средний пересекает длину над медленным движущимся средним, принимается короткая позиция для поиска обратного движения; когда быстрый движущийся средний пересекает длину ниже медленного движущегося среднего, принимается длинная позиция для поиска обратного движения.
Эта стратегия использует скользящие средние за 1 час и 1 день. 1-часовая скользящая средняя более чувствительно отражает изменения цен и может служить быстрой скользящей средней; 1-дневная скользящая средняя реагирует на изменения цен медленнее и может служить медленной скользящей средней. Когда быстрая скользящая средняя пересекает медленную скользящую среднюю, считается, что текущий рынок быстрый и будет генерироваться короткий сигнал; когда быстрая скользящая средняя пересекает ниже медленной скользящей средней, считается, что текущий рынок медленный и будет генерироваться длинный сигнал.
Принцип входа в длинный или короткий для поиска реверсии, когда быстрые и медленные скользящие средние имеют золотые кресты или мертвые кресты, заключается в том, что когда быстрые и медленные скользящие средние пересекаются, это указывает на то, что рынок, возможно, перевернулся, а пересечения быстрой линии и медленной линии являются сроком генерации сигналов реверсии. Согласно теории реверсионной торговли, цены обычно не растут или падают в одном направлении, и это, вероятно, время реверсии цены, когда есть прорыв важных уровней поддержки и сопротивления. Поэтому эта стратегия использует двойные сигналы реверсии скользящих средних для захвата возможностей реверсии.
Эта стратегия также устанавливает условия для проверки времени и даты торговли.
Стратегия двойной скользящей средней контртенд-стратегии имеет следующие преимущества:
Реверсионная торговля может получить более высокую прибыль в волатильных рыночных условиях путем проведения контраопераций в ключевых точках.
Использование двойных скользящих средних комбинаций фильтрует сигналы и избегает ложных сигналов.
Установление условий торговли в часы и даты позволяет избежать неактивных периодов рынка и не попасть в ловушку.
Стратегии реверсии подходят для среднесрочной торговли. По сравнению с высокочастотным трейдингом, среднесрочные торговые стратегии более стабильны, избегая чрезмерно частых покупок и продаж.
Максимальный контроль за привлечением средств полезен для управления капиталом.
Стратегия противопоказания двойной скользящей средней также имеет следующие риски:
Сигналы обратного движения могут не привести к убыткам. Сигналы обратного движения цены не всегда являются надежными. Существует риск потери, когда цены продолжают тенденцию без обратного движения. Убытки можно контролировать, установив стоп-лосс.
Отклонение от тренда приводит к потерям. Когда две скользящие средние значительно отделились до обратного движения, может возникнуть риск потери. Время обратного движения может быть определено путем наблюдения за расстоянием между скользящими средними.
Неправильные настройки торговых часов могут упустить возможности. Если торговые часы установлены слишком строго, некоторые торговые возможности могут быть упуститы. Торговые часы могут быть должным образом расширены.
После переворота, потери должны быть немедленно остановлены, когда цены продолжают первоначальную тенденцию, чтобы контролировать потери.
Стратегия противопоказания двойной скользящей средней также может быть оптимизирована в следующих аспектах:
Тестирование комбинаций более показателей для поиска лучших торговых сигналов.
Оптимизировать параметры скользящих средних циклов для поиска оптимальных параметров.
Расширить или сузить часы торговли, чтобы найти оптимальные часы торговли.
Добавьте условия фильтрации тренда, чтобы избежать отклонения.
Добавьте модели машинного обучения для проверки сигнала. Модели могут быть обучены для оценки надежности сигналов обратного действия и фильтрации некоторых сигналов низкого качества.
Стратегия двойного движущегося среднего контртенда подходит для среднесрочной торговли на рынке форекс. Она использует золотые кресты и мертвые кресты между быстрыми и медленными движущимися средними для генерации сигналов обратного движения, делая контроперации в ключевых точках рынка, что имеет преимущество большого пространства прибыли. В то же время она также использует такие настройки, как часы торговли и максимальное снижение для контроля рисков. Это относительно стабильная система обратного движения, которая может генерировать высокую доходность, контролируя риски. В будущем эта стратегия может быть улучшена и оптимизирована с помощью таких методов, как оптимизация индикаторов и параметров и применение моделей машинного обучения.
/*backtest start: 2023-12-08 00:00:00 end: 2024-01-07 00:00:00 period: 2h 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("gbpnzd 1h", overlay=true) src = close useCurrentRes = input(true, title="Use Current Chart Resolution?") resCustom = input(title="Use Different Timeframe? Uncheck Box Above", type=input.resolution, defval="60") len = input(28, title="Moving Average Length - LookBack Period") //periodT3 = input(defval=7, title="Tilson T3 Period", minval=1) factorT3 = input(defval=7, title="Tilson T3 Factor - *.10 - so 7 = .7 etc.", minval=0) atype = input(2,minval=1,maxval=8,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA, 8=Tilson T3") 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) //monday and session // To Date Inputs toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true res = useCurrentRes ? timeframe.period : resCustom resCustom2 = input(title="plm", type=input.resolution, defval="D") res2 = resCustom2 //hull ma definition hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len))) //TEMA definition ema1 = ema(src, len) ema2 = ema(ema1, len) ema3 = ema(ema2, len) tema = 3 * (ema1 - ema2) + ema3 //Tilson T3 factor = factorT3 *.10 gd(src, len, factor) => ema(src, len) * (1 + factor) - ema(ema(src, len), len) * factor t3(src, len, factor) => gd(gd(gd(src, len, factor), len, factor), len, factor) tilT3 = t3(src, len, factor) avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : atype == 7 ? 3 * (ema1 - ema2) + ema3 : tilT3 out = avg ema20 = security(syminfo.tickerid, res, out) plot3 = security(syminfo.tickerid, res2, ema20) plot33 = security(syminfo.tickerid, res, ema20) plot(plot3,linewidth=2,color=color.red) plot(plot33,linewidth=2,color=color.white) // longC = crossover(close[2], plot3) and close[1] > close[2] and close > close[1] // shortc = crossunder(close[2],plot3) and close[1] < close[2] and close < close[1] volumeMA=input(24) ema_1 = ema(volume, volumeMA) timeinrange(res, sess) => time(res, sess) != 0 //entrytime = timeinrange(timeframe.period, "0900-0915") myspecifictradingtimes = input('0900-2300', type=input.session, title="My Defined Hours") entrytime = time(timeframe.period, myspecifictradingtimes) != 0 longC = crossover(plot33,plot3) and time_cond and entrytime shortc = crossunder(plot33,plot3) and time_cond and entrytime // exitlong = crossunder(plot33,plot3) // exitshort = crossover(plot33,plot3) distanta=input(1.0025) exitshort = plot33/plot3 > distanta exitlong = plot3/plot33 > distanta inverse = input(true) exit = input(false) if(inverse==false) strategy.entry("long",1,when=longC) strategy.entry("short",0,when=shortc) if(inverse) strategy.entry("long",1,when=shortc) strategy.entry("short",0,when=longC) if(exit) strategy.close("long",when=exitlong) strategy.close("short",when=exitshort) // if(dayofweek==dayofweek.friday) // strategy.close_all() // risk = input(25) // strategy.risk.max_intraday_loss(risk, strategy.percent_of_equity)