Type/to search
8
Follow
1364
Followers
Напишите полуавтоматический торговый инструмент с использованием языка Pine
Discussions
Created 2022-09-29 14:36:32  Updated 2024-11-29 19:01:54
 0
 2858

img

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

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

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

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

  1. Смещение: при срабатывании скользящего тейк-профита самая высокая и самая низкая цена смещаются, чтобы определить расстояние смещения линии тейк-профита.
  2. limit: Параметр используется для управления - A. Покупать напрямую в исходной базовой позиции, B. Ждать покупки по указанной цене, C. Ничего не делать.
  3. Сумма: объем заказа при открытии базового склада.
  4. Убыток: точки стоп-лосса.
  5. targetOffset: разница в цене, которая компенсирует цену открытия при срабатывании скользящего тейк-профита.
  6. minTick: один скачок цены.
  7. Направление: направление открытия базовой позиции.

Стратегия дизайна

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, "移动止损触发线")

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

img

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

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

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

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

img

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

img

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

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

img

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

img

THE END

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

img

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

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

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

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)