
Эта стратегия является стратегией торговли с отслеживанием тенденций, которая использует простые движущиеся средние, чтобы определить направление тенденции рынка и разместить ограничительную цену в соответствии с направлением тенденции на движущихся средних, чтобы реализовать торговлю с отслеживанием тенденции.
Вычисление простой скользящей средней SMA, а также расчет направления тренда.
Если включена обратная фильтрация, используйте низкие точки выше SMA для определения восходящей тенденции, используйте высокие точки ниже SMA для определения нисходящей тенденции. Если обратная фильтрация не включена, используйте закрывающую цену выше SMA для определения восходящей тенденции, закрывающую цену ниже SMA для определения нисходящей тенденции.
В зависимости от направления тренда и задействованных параметров направления торговли needlong, needshort, на цены SMA размещается ограничительная цена, конкретная логика которой заключается в следующем:
Если требуется сделать больше (needlong является истинным) и находится в восходящей тенденции, разместить в SMA цены, чтобы сделать лимитированный заказ
Если требуется short (needshort = true) и находится в нисходящем тренде, размещение ордера на short-limit в цене SMA
Настройка логики стоп-лосса, если направление удержания позиции не соответствует направлению тренда, то стоп-лосса выходит.
Согласно параметру диапазона дат, торгуйте только в пределах указанных дат.
Используя SMA для определения трендов, можно эффективно отфильтровывать рыночный шум и блокировать более длинные тренды.
Размещение лимитированного предложения в цены SMA позволяет получить лучшие входные точки в начале тренда.
Вы можете выбрать только плюс или минус, гибко приспосабливаясь к личному стилю торговли.
Можно установить механизм остановки убытков, чтобы предотвратить их увеличение.
Поддержка установки временного диапазона торговли, чтобы избежать резких колебаний, вызванных крупными событиями.
SMA используется как индикатор тренда, существуют проблемы с отставанием, может пропустить поворот тренда, что приведет к убыткам.
Примечательно, что в этом случае вход на площадку может быть ограничен, так как существуют ограничения по цене и вход может быть закрыт из-за краткосрочного изменения тенденций.
Требуется разумная настройка параметров цикла SMA, если она будет неправильной, то будет получена ошибочная оценка тренда.
Необходимо учитывать обоснованность параметров временного отрезка торговли, чтобы избежать пропущенных торговых возможностей или рискованных периодов времени.
Можно рассмотреть вопрос о включении других показателей в оценку, проверить несколько показателей, чтобы избежать проблем с отставанием SMA.
Можно установить режим отслеживания конечных цен, который при прорыве цены через SMA переходит на отслеживание рыночных цен, повышая гибкость отслеживания.
Динамическая оптимизация параметров цикла SMA, позволяющая ему адаптироваться к рыночным условиям различных циклов.
Установка стоп-позиции в виде минимальной/высокой цены в тренде, а не строгой SMA-позиции, позволяет более гибкой стоп-позиции.
Добавление элементов алгоритмической торговли, чтобы сделать торговые периоды более интеллектуальными и гибкими, чтобы избежать периодов значительного риска.
В целом, эта стратегия является относительно простой стратегией отслеживания тенденций. Основная идея заключается в том, чтобы использовать SMA для определения направления тенденции и размещения ограничительных цен на SMA для отслеживания сделок. Благодаря определенной оптимизации можно повысить гибкость, адаптивность и интеллект стратегии.
/*backtest
start: 2022-10-27 00:00:00
end: 2023-03-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2020
//@version=4
strategy(title = "Noro's CrossLimit", shorttitle = "CrossLimit", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.0)
needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
src = input(close, defval = close, title = "MA Source")
len = input(5, defval = 5, minval = 1, title = "SMA length")
off = input(0, defval = 0, minval = 0, title = "SMA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
rev = input(false, defval = false, title = "Reverse")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//MA
ma = sma(src, len)[off]
macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)
//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = (trend == 1 and rev == false) or (trend == -1 and rev == true)
dn = (trend == -1 and rev == false) or (trend == 1 and rev == true)
//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend != 0
strategy.entry("Long", strategy.long, lot, limit = ma, when = needlong and truetime and up)
strategy.entry("Short", strategy.short, lot, limit = ma, when = needshort and truetime and dn)
if size > 0 and needshort == false and trend == -1
strategy.exit("Stop Long", "Long", limit = ma)
if size < 0 and needlong == false and trend == 1
strategy.exit("Stop Short", "Short", limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("Long")
strategy.cancel("Short")