avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Écrire un outil de trading semi-automatique en utilisant le langage Pine

Créé le: 2022-09-29 14:36:32, Mis à jour le: 2024-11-29 19:01:54
comments   0
hits   2561

Écrire un outil de trading semi-automatique en utilisant le langage Pine

Écrire un outil de trading semi-automatique en utilisant le langage Pine

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.

Conception des paramètres

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 :

  1. Décalage : lorsque le take profit suiveur est déclenché, le prix le plus élevé et le prix le plus bas sont décalés pour déterminer la distance de décalage de la ligne de take profit.
  2. limite : Le paramètre est utilisé pour contrôler - A. Acheter directement à la position de base initiale, B. Attendre l’achat à un prix spécifié, C. Ne rien faire.
  3. Montant : la quantité commandée lors de l’ouverture de l’entrepôt de base.
  4. Perte : points d’arrêt des pertes.
  5. targetOffset : la différence de prix qui compense le prix d’ouverture lors du déclenchement du take profit suiveur.
  6. minTick : un saut de prix.
  7. Direction : le sens d’ouverture de la position de base.

Stratégie de conception

/*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.

Écrire un outil de trading semi-automatique en utilisant le langage Pine

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.

Écrire un outil de trading semi-automatique en utilisant le langage Pine

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.

Écrire un outil de trading semi-automatique en utilisant le langage Pine

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

Écrire un outil de trading semi-automatique en utilisant le langage Pine

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.

Écrire un outil de trading semi-automatique en utilisant le langage Pine

THE END

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.

Écrire un outil de trading semi-automatique en utilisant le langage Pine

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.