Несмотря на то, что все больше и больше трейдеров выполняют торговые операции полностью автоматически, большая группа остается ручной торговлей. Фактически, ручные субъективные трейдеры также могут помочь своей субъективной торговле, написав несколько инструментов. Например, иногда они находят хорошую позицию входа, планируют фиксированные убытки на начальных позициях, отслеживают убытки.
Стратегия разработки таких потребностей с помощью языка Pine довольно проста, и в зависимости от потребностей для реализации функции необходимо разработать следующие параметры:
1, офсет: при запуске слежения за остановкой, смещение максимальной цены, минимальной цены для обозначения расстояния смещения линии остановки. 2,limit: параметры, используемые для управления A. Первоначальный конечный позиции прямой покупки; B. Укажите цену ожидания покупки; C. Ничего не делать. 3,amount: количество, которое выгружается при открытии позиции на нижнем уровне. 4, loss: количество стоп-лосс. 5, targetOffset: разница в цене, которая отклоняется от цены открытия позиции при запуске отслеживания остановки. 6 мин.Tick: Цены вверх. 7, направление: направление нижнего и открытого позиций.
/*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 (прискорб) обозначает отклонение линии (прискорб) (например, отклонение от расстояния до расстояния до расстояния до расстояния до расстояния до расстояния до расстояния до расстояния до расстояния до расстояния до расстояния).
Эта стратегия поручения разработана не только для того, чтобы сделать больше первоначального базового состояния, но и для того, чтобы сделать первоначальное базовое состояние пустым. Тогда остановка убытков и отслеживание остановки убытков обрабатываются в соответствии с направлением пустоты.
В следующей статье мы покажем, как реализуется дизайн:
1, Пусть эта стратегия работает сразу после того, как он открыл позицию, после чего в соответствии с параметрами настроить стоп-потери, следить за стоп-облигациями.
direction на long, limit на 0, что означает, что при запуске стратегии нужно сразу же ввести больше, amount на 1, стратегия на 1 контракт.
2, Укажите параметры лимита, укажите цену входа
Другие параметры не изменяются, только параметр limit устанавливается как цена: 1276
3, параметр лимита по умолчанию -1, ничего не работает, чтобы предотвратить ошибочное открытие
При использовании стратегии языка Pine следует обратить особое внимание на данные о цене на один прыжок.
Параметр "прецизионная валюта" установлен на 0, то есть числовые значения цены точны до одного бита (то есть дроби - 0). Тогда минимальная единица изменения цены - 1. Поскольку некоторые параметры связаны с тем, насколько конкретно цены скачут, здесь требуется особое внимание.
ОК, это весь дизайн этой стратегии полуавтоматического поручения, хотя я также использую ее в реальном мире. Но такие инструменты также обязательно должны быть поняты для использования в соответствии со своими торговыми привычками, которые можно модифицировать и оптимизировать самостоятельно.
Видно, что язык Pine очень удобен в использовании, удобен и прост в изучении. Мы можем использовать язык Pine для быстрой разработки инструментов, которые нам нужны, без необходимости беспокоиться о сложном программировании.