4
Подписаться
1271
Подписчики

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

Создано: 2022-09-29 14:36:32, Обновлено: 2024-11-29 19:01:54
comments   0
hits   2561

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

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

Хотя все больше трейдеров пишут программы для полностью автоматической торговли, большую часть по-прежнему составляют трейдеры, торгующие вручную. На самом деле, трейдеры, торгующие вручную, также могут написать несколько небольших инструментов, которые помогут им в субъективной торговле. Например, иногда вы находите хорошую позицию для входа и планируете установить фиксированный стоп-лосс и скользящий тейк-профит для начальной позиции. Тогда вы сможете избежать энергозатратных задач, таких как последующий мониторинг рынка. Просто следуйте своим установленным планам стоп-лосс и тейк-профит и позвольте программе мониторить рынок для вас. Если вы проиграете ставку, остановите убыток; если выиграете, отслеживайте целевую прибыль, чтобы облегчить ручную торговлю.

Параметрический дизайн

Стратегия проектирования таких требований с использованием языка Pine очень проста. Для реализации функций в соответствии с требованиями необходимо разработать следующие параметры:

  1. Смещение: при срабатывании скользящего тейк-профита самая высокая и самая низкая цена смещаются, чтобы определить расстояние смещения линии тейк-профита.
  2. limit: Параметр используется для управления - A. Покупать напрямую в исходной базовой позиции, B. Ждать покупки по указанной цене, C. Ничего не делать.
  3. Сумма: объем заказа при открытии базового склада.
  4. Убыток: точки стоп-лосса.
  5. targetOffset: разница в цене, которая компенсирует цену открытия при срабатывании скользящего тейк-профита.
  6. minTick: один скачок цены.
  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, "移动止损触发线")

Стратегия не сложная. При ее использовании обычно нужно настроить ее на «модель цены в реальном времени», поскольку цену нужно проверять каждый момент.

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

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

Данная стратегия доверительного управления разработана не только для того, чтобы допускать первоначальные длинные позиции, но и для того, чтобы допускать первоначальные короткие позиции. Затем стоп-лосс и трейлинг-профит будут обрабатываться в соответствии с направлением короткой продажи.

Продемонстрируем функции, реализованные в конструкции:

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

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

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

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

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

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

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

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

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

THE END

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

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

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

Итак, вышеизложенное представляет собой полное содержание этой полуавтоматической стратегии доверительного управления, хотя я также использую ее в реальной торговле. Однако такие инструменты необходимо понимать и использовать в соответствии с вашими собственными торговыми привычками, и вы можете изменять и оптимизировать их самостоятельно. Приведенный здесь код стратегии предназначен только для публичного распространения, общения и изучения методов и логики проектирования.

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