
Bien que de plus en plus de traders écrivent des programmes pour effectuer des transactions entièrement automatiques, le groupe le plus important est toujours celui des traders manuels. En fait, les traders subjectifs manuels peuvent également écrire quelques petits outils pour les aider dans leur trading subjectif. Par exemple, vous trouvez parfois une bonne position d’entrée et prévoyez de définir un stop loss fixe et un take profit suiveur pour la position initiale. Vous pouvez alors éviter les tâches fastidieuses telles que la surveillance ultérieure du marché. Suivez simplement vos plans de stop-loss et de take-profit établis et laissez le programme surveiller le marché pour vous. Si vous perdez le pari, arrêtez la perte ; si vous gagnez, suivez l’objectif de profit pour faciliter le trading manuel.
La stratégie de conception de telles exigences à l’aide du langage Pine est très simple. Les paramètres suivants doivent être conçus pour implémenter les fonctions en fonction des exigences :
/*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, "移动止损触发线")
La conception de la stratégie n’est pas compliquée. Lors de son utilisation, il faut généralement la définir sur le « modèle de prix en temps réel », car le prix doit être vérifié à chaque instant.

Notez que le stop loss dans les paramètres est exprimé en points (un saut de prix), et le décalage du take profit de suivi est également exprimé en points (un saut de prix). targetOffset suit le décalage de la ligne de déclenchement du take-profit et est exprimé en distance de prix (par exemple, si vous le définissez sur 30, cela signifie une distance de 30 yuans). Lorsque le saut de prix est de 1, 30 sauts signifient une distance de 30 yuans.
Cette stratégie de confiance est conçue non seulement pour permettre des positions longues initiales, mais également pour permettre des positions courtes initiales. Ensuite, le stop loss et le profit suiveur seront traités en fonction de la direction de la vente à découvert.
Démontrons les fonctions implémentées par la conception :
1. Lorsque cette stratégie est en cours d’exécution, ouvrez immédiatement une position de base, puis définissez le stop loss et le take profit suiveur en fonction des paramètres.

La direction est définie sur long, le paramètre limite est défini sur 0, ce qui signifie que la stratégie entrera sur le marché et deviendra longue immédiatement lorsqu’elle sera exécutée, et le montant est défini sur 1, et la stratégie ouvrira une position de 1 contracter.

2. Spécifiez le paramètre limite et le prix d’entrée
Les autres paramètres restent inchangés, spécifiez simplement le prix du paramètre limite comme suit : 1276

3. Le paramètre de limite par défaut est -1, ce qui signifie qu’aucune opération n’est effectuée pour empêcher l’ouverture accidentelle de positions.

Lorsque vous utilisez la stratégie linguistique Pine, portez une attention particulière aux données de saut de prix. Le saut de prix spécifique du système est lié à la « précision de la devise de tarification » dans les paramètres.

Le paramètre « Précision de la devise de tarification » est défini sur 0, ce qui signifie que la valeur des données de prix est précise au chiffre près (c’est-à-dire que le nombre de décimales est de 0). L’unité minimale de variation de prix est alors 1. Étant donné que certains paramètres sont liés à la hausse spécifique des prix, une attention particulière doit être accordée à ce point.
OK, ce qui précède est le contenu de conception complet de cette stratégie de confiance semi-automatique, bien que je l’utilise également dans le trading réel. Cependant, ces outils doivent être compris et utilisés en fonction de vos propres habitudes de trading, et vous pouvez les modifier et les optimiser vous-même. Le code stratégique ici est uniquement destiné au partage public, à la communication et à l’apprentissage des méthodes et de la logique de conception.
On peut constater que le langage Pine est très facile à utiliser, pratique et facile à apprendre. Nous pouvons utiliser le langage Pine pour concevoir rapidement les outils que nous souhaitons sans avoir à nous soucier de la conception de programmes compliqués. L’utilisation du langage Pine dans FMZ Quantitative rend le trading quantitatif plus facile et plus simple.