
Эта стратегия реализует функцию установки нескольких стоп-процентов для выхода. Сначала стратегия определяет длинные и короткие условия, вход делает больше свободных мест. Затем через пользовательскую функцию percentAsPoints преобразует проценты в ценовые баллы.
Эта стратегия основана на многопространственном пересечении средней линии сма. В частности, когда быстрая линия сма 14 проходит медленную линию сма 28 , она становится больше; когда быстрая линия сма 14 проходит медленную линию сма 28 , она становится пустой.
Вопрос в том, как настроить несколько стопроцентных точек выхода. Здесь используется пользовательская функция percentAsPoints, которая преобразует проценты в ценовые пункты.
percentAsPoints(pcnt) =>
strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
Функция получает число ценовых точек, используя процентное число, умноженное на среднюю цену задержки и разделенное на наименьшую цену задержки, если сумма задержки не равна 0. Если сумма задержки равна 0, то возвращается na.
С помощью этой функции мы можем легко преобразовать процентные доли. Затем программа выполняет настройки с остановками в 1%, 2%, 3% и 4%, и устанавливает 4 выхода:
lossPnt = percentAsPoints(2)
strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt)
strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt)
strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt)
strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt)
При этом все exit используют общий 2% стоп-лосс. Таким образом, достигается эффект нескольких процентов стоп-лосса.
Такой подход имеет следующие преимущества:
Помимо того, что в некоторых странах, например, в Китае и Китае, существуют различные методы борьбы с коррупцией, однако в некоторых странах, например, в Китае и Китае, существуют различные методы борьбы с коррупцией, которые используются для борьбы с коррупцией.
Например, установка 25% партии, когда прибыль достигает 1%, можно получить обратно 1⁄4, после чего позиция будет работать на прибыль.
Снижение на 2% может предотвратить крупные убытки, вызванные экстремальными ситуациями.
Код должен быть простым, понятным, легко изменяемым и оптимизируемым. Функция преобразует проценты в пункты, а затем в несколько строк кода можно установить несколько стоп.
Однако эта стратегия несет в себе некоторые риски:
Процентная остановка может привести к поперечным колебаниям, когда цена колеблется вблизи остановки. Это часто вызывает остановку, увеличивая частоту торгов и увеличивая нагрузку на комиссионные.
Разделение сборов увеличивает количество сделок, а также увеличивает нагрузку на комиссионные. Если комиссионные слишком высоки, то частичная прибыль от сборов будет компенсирована.
Неправильная установка предела также влияет на доходность. Если установка слишком консервативна, трудно получить удовлетворительную прибыль; а если установка слишком радикальна, то риск слишком велик.
фиксированный процентный стоп, без учета рыночной волатильности и тенденции. в шокирующих ситуациях следует снизить стоп, а в трендовых ситуациях следует увеличить стоп.
Учитывая вышеуказанные риски, можно продолжить оптимизацию в следующих направлениях:
Оптимизация стоп-стратегии, позволяющая автоматически корректировать ее в зависимости от рыночных колебаний и тенденций. Например, включение стоп-стратегии ATR, ужесточение стоп-стратегии при колебаниях и расслабление стоп-стратегии в тренде.
Оптимизируйте соотношение и величину задержек по партиям, чтобы достичь оптимального сочетания риска и прибыли. Добавьте функцию оптимизации параметров, чтобы найти оптимальные параметры.
Снижение количества остановок, избегание слишком частых сделок. Например, установление цены в буферных зонах, только после того, как они превысят определенный диапазон.
Принимать во внимание фактор комиссионных, когда ожидаемая прибыль от остановки не превышает комиссионных. Или оптимизировать прибыль от остановки в соответствии с комиссионными.
Используйте букмекерские стопы. Не используйте движущуюся стоп-цену в зависимости от приоритета цены по глубине.
Эта стратегия обеспечивает эффект нескольких стоп-стоп, устанавливая четыре стоп-экзита на уровне 1%, 2%, 3% и 4%, которые могут быть остановлены в зависимости от отряда, а также использовать 2% для предотвращения огромных убытков в случае аномального поведения. Эта стратегия может сбалансировать риск-прибыль и предотвратить упущенные более прибыльные возможности. Но также существуют определенные риски, такие как склонность к формированию поперечных колебаний, увеличение частоты торгов и т. Д. Все эти рекомендации следует учитывать при оптимизации стратегии, чтобы она могла стабильно работать на большем количестве рынков.
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 3h
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/
// © adolgov
//@version=4
strategy("Multiple %% profit exits example", overlay=false, default_qty_value = 10)
longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
percentAsPoints(pcnt) =>
strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
lossPnt = percentAsPoints(2)
strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt)
strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt)
strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt)
strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt)
profitPercent(price) =>
posSign = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0
(price - strategy.position_avg_price) / strategy.position_avg_price * posSign * 100
p1 = plot(profitPercent(high), style=plot.style_linebr, title = "open profit % upper bound")
p2 = plot(profitPercent(low), style=plot.style_linebr, title = "open profit % lower bound")
fill(p1, p2, color = color.red)