Хотя все больше и больше трейдеров пишут программы для полностью автоматизированной торговли, большая группа трейдеров по-прежнему являются ручными трейдерами. На самом деле ручные субъективные трейдеры также могут писать небольшие инструменты, которые помогут им в их субъективной торговле. Например, иногда вы находите хорошую позицию входа и планируете установить фиксированную стоп-лосс и отслеживать прибыль на начальной позиции.
Стратегия разработки таких требований с использованием языка 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("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")
Конструкция стратегии не является сложной, но она должна быть создана как "модель цены в реальном времени", поскольку цены должны контролироваться в любой момент.
Обратите внимание, что стоп-лосс выражается в точках (minTick) и смещение также выражается в точках (minTick). смещение линии триггера стоп-прибыли TargetOffset выражается с точки зрения расстояния цены (например, установлено на 30, что составляет 30 юаней для расстояния).
Эта стратегия комиссионной расчетов предназначена для того, чтобы не только первоначальные базовые позиции были длинными, но и первоначальные базовые позиции были короткими.
Давайте продемонстрируем реализацию проекта следующим образом:
1. Когда стратегия работает, базовая позиция будет открыта и введена немедленно, а затем стоп-лосс и отслеживание стоп-прибыли будут установлены в соответствии с параметрами.
направление установлено на long, лимитный параметр установлен на 0, т.е. пусть стратегия входит и идет long сразу после ее запуска, сумма установлена на 1, т.е. стратегия открывает позицию на 1 контракт.
2. Укажите предельный параметр, указать цену входа
Другие параметры остаются неизменными, за исключением того, что предельная цена параметра: 1276
По умолчанию параметр лимита -1, который ничего не работает и предотвращает случайное открытие позиций.
При использовании стратегии языка Pine важно уделять особое внимание данным minTick.
Параметр
ОК, выше приведены все конструкции этой полуавтоматической стратегии комиссии, хотя я также использую ее для реальной торговли ботом. Но такие инструменты также должны использоваться в соответствии с вашими собственными торговыми привычками, чтобы понять, конкретные модификации, оптимизация могут быть проведены самостоятельно. Здесь код стратегии предназначен только для общественного обмена, дизайна обучения обмена и логики.
Как мы можем видеть, язык Pine очень прост в использовании, и он удобный и легкий в изучении. Мы можем использовать язык Pine для разработки инструментов, которые мы хотим быстро, не беспокоясь о сложном программировании, и использовать язык Pine для упрощения количественной торговли на FMZ Quantitative Trading Platform.