
Хотя все больше трейдеров пишут программы для полностью автоматической торговли, большую часть по-прежнему составляют трейдеры, торгующие вручную. На самом деле, трейдеры, торгующие вручную, также могут написать несколько небольших инструментов, которые помогут им в субъективной торговле. Например, иногда вы находите хорошую позицию для входа и планируете установить фиксированный стоп-лосс и скользящий тейк-профит для начальной позиции. Тогда вы сможете избежать энергозатратных задач, таких как последующий мониторинг рынка. Просто следуйте своим установленным планам стоп-лосс и тейк-профит и позвольте программе мониторить рынок для вас. Если вы проиграете ставку, остановите убыток; если выиграете, отслеживайте целевую прибыль, чтобы облегчить ручную торговлю.
Стратегия проектирования таких требований с использованием языка Pine очень проста. Для реализации функций в соответствии с требованиями необходимо разработать следующие параметры:
/*backtest
start: 2022-09-24 00:00:00
end: 2022-09-27 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
args: [["v_input_1",20],["v_input_2",0],["v_input_4",50],["v_input_5",20],["RunMode",1,358374],["ZPrecision",0,358374],["XPrecision",3,358374]]
*/
strategy("跟踪止损止盈委托", overlay = true)
varip targetPrice = na
varip high_lowPrice = na
varip isTrade = false
varip isAlert = false
varip isAlertMinTick = false
varip isAlertFinished = false
varip offset = input(30, "offset", "跟踪止损止盈偏移")
varip limit = input(-1, "limit", "初始开仓价格,-1为不开仓,0为立即开仓,其它具体数值为限价价格")
varip amount = input(1, "amount", "开仓量")
varip loss = input(30, "loss", "止损")
varip targetOffset = input(30, "targetOffset", "触发跟踪止盈止损偏移量")
varip minTick = input(1, "minTick", "价格一跳")
tradeType = input.string("long", "direction", tooltip="下单方向,long做多,short做空", options=["long", "short"])
if not barstate.ishistory and not isAlertMinTick
runtime.log("检查syminfo.mintick是否正确!syminfo.mintick:", syminfo.mintick, "#FF0000")
if syminfo.mintick < minTick
runtime.error("系统syminfo.mintick < minTick参数", "#FF0000")
isAlertMinTick := true
if not barstate.ishistory and limit == -1 and not isAlert
runtime.log("没有设置开仓价格,当前limit为-1(防止误开仓,初始默认limit为-1),禁止开仓", "#FF0000")
isAlert := true
if isTrade and strategy.position_size == 0 and not isAlertFinished
runtime.log("所有委托流程执行完毕,仓位为0", "#FF0000")
isAlertFinished := true
if not barstate.ishistory and not isTrade and limit != -1
if limit == 0
strategy.entry("open", tradeType == "long" ? strategy.long : strategy.short, amount)
else if limit > 0
strategy.entry("open", tradeType == "long" ? strategy.long : strategy.short, amount, limit=limit)
if tradeType == "long"
targetPrice := (limit == 0 ? close : limit) + targetOffset
else
targetPrice := (limit == 0 ? close : limit) - targetOffset
strategy.exit("exit", "open", amount, loss=loss, trail_price=targetPrice, trail_offset=offset)
runtime.log("每点价格为:", syminfo.mintick, ",当前close:", close)
isTrade := true
if ((close > targetPrice and strategy.position_size > 0) or (close < targetPrice and strategy.position_size < 0)) and not barstate.ishistory
high_lowPrice := na(high_lowPrice) ? close : high_lowPrice
if strategy.position_size > 0
high_lowPrice := close > high_lowPrice ? close : high_lowPrice
else
high_lowPrice := close < high_lowPrice ? close : high_lowPrice
plot(targetPrice, "trail_price 触发线")
plot(strategy.position_size!=0 ? high_lowPrice : na, "当前最高价/最低价")
plot(strategy.position_size!=0 ? (strategy.position_size > 0 ? high_lowPrice-syminfo.mintick*offset : high_lowPrice+syminfo.mintick*offset) : na, "移动止损触发线")
Стратегия не сложная. При ее использовании обычно нужно настроить ее на «модель цены в реальном времени», поскольку цену нужно проверять каждый момент.

Обратите внимание, что стоп-лосс в параметрах выражен в пунктах (один скачок цены), а смещение отслеживания тейк-профита также выражено в пунктах (один скачок цены). targetOffset отслеживает смещение линии срабатывания тейк-профита и выражается в ценовом расстоянии (например, если установить его равным 30, это будет означать расстояние в 30 юаней). Когда скачок цены составляет 1, 30 скачков означают расстояние в 30 юаней.
Данная стратегия доверительного управления разработана не только для того, чтобы допускать первоначальные длинные позиции, но и для того, чтобы допускать первоначальные короткие позиции. Затем стоп-лосс и трейлинг-профит будут обрабатываться в соответствии с направлением короткой продажи.
Продемонстрируем функции, реализованные в конструкции:
1. При запуске этой стратегии немедленно откройте базовую позицию, а затем установите стоп-лосс и трейлинг-тейк-профит в соответствии с параметрами.

Направление установлено на длинную позицию, параметр лимита установлен на 0, что означает, что стратегия выйдет на рынок и откроет длинную позицию немедленно после ее запуска, а сумма установлена на 1, и стратегия откроет позицию в 1. договор.

2. Укажите параметр лимита и цену входа
Остальные параметры остаются неизменными, за исключением того, что предельный параметр price устанавливается на: 1276

3. Параметр лимита по умолчанию равен -1, что означает, что никакие операции не выполняются для предотвращения случайного открытия позиций.

При использовании стратегии Pine Language особое внимание следует уделять данным о скачках цен. Конкретный скачок цен системы связан с «точностью валюты ценообразования» в параметрах.

Параметр «Точность валюты ценообразования» установлен на 0, что означает, что значение данных о цене имеет точность до единицы знака (то есть количество десятичных знаков равно 0). Тогда минимальная единица изменения цены равна 1. Поскольку некоторые параметры связаны с конкретным скачком цен, этому моменту следует уделить особое внимание.
Итак, вышеизложенное представляет собой полное содержание этой полуавтоматической стратегии доверительного управления, хотя я также использую ее в реальной торговле. Однако такие инструменты необходимо понимать и использовать в соответствии с вашими собственными торговыми привычками, и вы можете изменять и оптимизировать их самостоятельно. Приведенный здесь код стратегии предназначен только для публичного распространения, общения и изучения методов и логики проектирования.
Видно, что язык Pine очень прост в использовании, удобен и легок в изучении. Мы можем использовать язык Pine для быстрого проектирования нужных нам инструментов, не беспокоясь о сложном программном дизайне. Использование языка Pine в FMZ Quantitative делает количественную торговлю проще и проще.