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


Дата создания: 2023-09-22 14:16:20 Последнее изменение: 2023-09-22 14:16:20
Копировать: 0 Количество просмотров: 641
1
Подписаться
1617
Подписчики

Обзор

Эта стратегия - это стратегия торговли, основанная на множестве ордеров, устанавливающих лимит. Она устанавливает различное количество ордеров на покупку или продажу в зависимости от того, превышает ли цены различные ордеры.

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

Эта стратегия использует среднелинейный индикатор для определения направления тренда. В частности, количество ордеров на установление лимита на основе того, превзошла ли цена верхнюю среднюю линию из 3 строк. Количество ордеров на установление лимита на отсутствие на основе того, превзошла ли цена нижнюю среднюю линию из 3 строк.

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

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

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

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

  1. Используйте среднюю линию, чтобы оценить тенденцию, простой и интуитивный.

  2. Пирамидальные позиции позволяют получить более высокую стоимость в начале тренда.

  3. Среднеосевая равновесная остановка, может быть своевременно остановлена, чтобы контролировать риск.

  4. Позиции по лимитированной цене позволяют избежать проскальзывания.

  5. Настраиваемые параметры для различных сортов.

  6. Явная структура, легкость понимания и расширения.

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

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

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

  2. Неудача билета может привести к пропуску времени входа в зал.

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

  4. Неправильная настройка параметров может привести к гиперпозиции пирамиды.

  5. Недостаточный диапазон времени отслеживания может привести к пересоответствию кривой.

  6. Не учитывается фактор комиссионных.

Решение риска:

  1. Параметры подтверждения и оптимизации в сочетании с другими показателями.

  2. Установите срок действия и измените цену лимита.

  3. Настройка остановки на средней оси, или добавление логики прорыва.

  4. Оптимизация параметров, оценка прибыли и убытка.

  5. Расширение временного диапазона отзывов, многорыночные отзывы.

  6. Добавление платы и логики скольжения.

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

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Оптимизация параметров для большего количества сортов.

  2. Добавление фильтров для подтверждения других показателей, таких как MACD, KDJ и т. д.

  3. Добавление логики остановки на средней оси равновесия.

  4. Динамическая коррекция коэффициента открытия позиции и позиции стоп-лосса.

  5. Оптимизация ценовых ограничений, улучшение затрат. Например, установка цены в зависимости от колебаний.

  6. Повышение эффективности управления расходами и предотвращение чрезмерного возврата.

  7. Тестирование эффективности параметров различных сортов, создание пула параметров.

Подвести итог

Стратегия открывает позиции с помощью установки пирамиды лимитных цен с целью получения оптимальных затрат. Используется стоп-линия для контроля риска. Структура стратегии проста, ясна, легко понятна и расширяется. Однако, можно улучшить стратегию, вводя другие показатели, оптимизируя параметры, улучшая логику лимитных цен и т. Д.

Исходный код стратегии
/*backtest
start: 2022-09-15 00:00:00
end: 2023-09-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Robot WhiteBox MultiMA", shorttitle = "Robot WhiteBox MultiMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
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")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)

//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult

//Levels
longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()