Написать полуавтоматический инструмент для торговли на языке Pine

Автор:Маленькие мечты, Создано: 2022-09-29 14:36:32, Обновлено: 2023-09-15 20:53:45

img

Написать полуавтоматический инструмент для торговли на языке Pine

Несмотря на то, что все больше и больше трейдеров выполняют торговые операции полностью автоматически, большая группа остается ручной торговлей. Фактически, ручные субъективные трейдеры также могут помочь своей субъективной торговле, написав несколько инструментов. Например, иногда они находят хорошую позицию входа, планируют фиксированные убытки на начальных позициях, отслеживают убытки.

Дизайн параметров

Стратегия разработки таких потребностей с помощью языка 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, "移动止损触发线")

Не сложно и при разработке стратегии, которая обычно должна быть настроена на "модель цены в реальном времени", так как нужно постоянно отслеживать цены.

img

Обратите внимание, что в параметрах стоп-лосс обозначается точкой (прискорб) и отклонением стоп-оффсета (прискорб) (прискорб); targetOffset (прискорб) обозначает отклонение линии (прискорб) (например, отклонение от расстояния до расстояния до расстояния до расстояния до расстояния до расстояния до расстояния до расстояния до расстояния до расстояния до расстояния).

Эта стратегия поручения разработана не только для того, чтобы сделать больше первоначального базового состояния, но и для того, чтобы сделать первоначальное базовое состояние пустым. Тогда остановка убытков и отслеживание остановки убытков обрабатываются в соответствии с направлением пустоты.

В следующей статье мы покажем, как реализуется дизайн:

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

img

direction на long, limit на 0, что означает, что при запуске стратегии нужно сразу же ввести больше, amount на 1, стратегия на 1 контракт.

img

2, Укажите параметры лимита, укажите цену входа

Другие параметры не изменяются, только параметр limit устанавливается как цена: 1276

img

3, параметр лимита по умолчанию -1, ничего не работает, чтобы предотвратить ошибочное открытие

img

КОНЦЕНТ

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

img

Параметр "прецизионная валюта" установлен на 0, то есть числовые значения цены точны до одного бита (то есть дроби - 0). Тогда минимальная единица изменения цены - 1. Поскольку некоторые параметры связаны с тем, насколько конкретно цены скачут, здесь требуется особое внимание.

ОК, это весь дизайн этой стратегии полуавтоматического поручения, хотя я также использую ее в реальном мире. Но такие инструменты также обязательно должны быть поняты для использования в соответствии со своими торговыми привычками, которые можно модифицировать и оптимизировать самостоятельно.

Видно, что язык Pine очень удобен в использовании, удобен и прост в изучении. Мы можем использовать язык Pine для быстрой разработки инструментов, которые нам нужны, без необходимости беспокоиться о сложном программировании.


Связанные

Больше