В процессе загрузки ресурсов... загрузка...

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

Автор:FMZ~Lydia, Создано: 2022-11-08 09:56:48, Обновлено: 2023-09-15 20:52:26

img

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

Конструкция параметров

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

  1. Оттеснение: когда запускается остановка прибыли, расстояние отсчета для оттеснения наивысшей и самой низкой цены определяет линию остановки прибыли.
  2. Предел: параметры, используемые для контроля - А. Начальная базавая позиция для непосредственной покупки, В. Указанная цена для ожидания покупки, В. Ничего не делать.
  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("Tracking loss and profit stopping entrustment", 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", "Tracking stop loss and stop profit offset")
varip limit = input(-1, "limit", "Initial opening price: - 1 means no opening, 0 means immediate opening, and other specific values are price limits")
varip amount = input(1, "amount", "amount of opening positions")
varip loss = input(30, "loss", "stop loss")
varip targetOffset = input(30, "targetOffset", "trigger tracking profit and loss stop offset")
varip minTick = input(1, "minTick", "the minimum unit of price fluctuation")
tradeType = input.string("long", "direction", tooltip="order direction, long: go long, short: go short", options=["long", "short"])

if not barstate.ishistory and not isAlertMinTick
    runtime.log("check whether syminfo.mintick is correct! syminfo.mintick:", syminfo.mintick, "#FF0000")
    if syminfo.mintick < minTick 
        runtime.error("system syminfo.mintick < minTick parameter", "#FF0000")
    isAlertMinTick := true 

if not barstate.ishistory and limit == -1 and not isAlert
    runtime.log("No open price is set, current limit is -1 (to prevent false openings, initial default limit is -1), openings are prohibited", "#FF0000")
    isAlert := true 

if isTrade and strategy.position_size == 0 and not isAlertFinished
    runtime.log("All order processes executed, position is 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("The price per point is:", syminfo.mintick, ", current 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 trigger line")    
plot(strategy.position_size!=0 ? high_lowPrice : na, "current highest/lowest price")
plot(strategy.position_size!=0 ? (strategy.position_size > 0 ? high_lowPrice-syminfo.mintick*offset : high_lowPrice+syminfo.mintick*offset) : na, "moving stop loss trigger line")

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

img

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

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

Давайте продемонстрируем реализацию проекта следующим образом:

1. Когда стратегия работает, базовая позиция будет открыта и введена немедленно, а затем стоп-лосс и отслеживание стоп-прибыли будут установлены в соответствии с параметрами.

img

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

img

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

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

img

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

img

КОНЦЕНТ

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

img

Параметр Pricing Currency Accuracy устанавливается на 0, что означает, что значение данных о ценах точно до одной цифры (т.е. 0 за десятичной).

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

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


Связанные

Больше