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

Auteur:Le petit rêve, Créé: 2022-09-29 14:36:32, Mis à jour: 2023-09-15 20:53:45

img

Écrire un outil de transaction 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, un groupe plus important de traders sont toujours des traders manuels. En fait, les traders subjectifs manuels peuvent également aider leurs propres transactions subjectives en écrivant des outils. Par exemple, ils peuvent parfois trouver une bonne position d'entrée, planifier des positions de perte fixe et de suivi des positions.

Conception de paramètres

La stratégie pour concevoir de telles exigences en utilisant le langage Pine est assez simple, en fonction de la nécessité de concevoir les paramètres suivants:

1, décalage: lorsque la trace de l'arrêt est déclenchée, 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 d'arrêt. 2, limit: paramètre utilisé pour contrôler A. L'achat direct de la position initiale; B. Le prix spécifié en attente de l'achat; C. Rien n'est fait. 3, quantité: quantité d'unité à la date d'ouverture de la position initiale. 4, loss: le nombre de points de stop-loss. 5 TargetOffset: différence de prix qui déplace le prix de l'ouverture lorsque le stop de suivi est déclenché. 6 min Tick: Le prix a bondi. 7, direction: direction du bas de l'emplacement et de l'emplacement ouvert.

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 et doit généralement être configurée comme un "modèle de prix en temps réel", car il est nécessaire de détecter les prix à tout moment.

img

Notez que dans le paramètre, le stop loss est indiqué par un point (un saut de prix) et l'offset suit le décalage de la barre de frein est également indiqué par un point (un saut de prix).

Cette stratégie de commande est conçue pour permettre non seulement de faire plus de positions de base initiales, mais aussi de vider les positions de base initiales.

Voici une démonstration des fonctionnalités mises en œuvre par le design:

1, Laissez cette stratégie fonctionner immédiatement lorsque vous ouvrez une position en bas de l'endroit où vous l'avez placée, puis définissez un stop-loss, un stop-track selon les paramètres.

img

La direction est définie sur long, le paramètre limit est définie sur 0, c'est-à-dire que la stratégie s'exécute immédiatement, la quantité est définie sur 1, la stratégie est définie sur 1 contrat.

img

2, spécifier le paramètre limite, spécifier le prix d'entrée

Les autres paramètres sont inchangés, mais le prix du paramètre limit est spécifié: 1276

img

3, paramètre de limite par défaut est -1, rien ne fonctionne pour éviter les mauvaises positions

img

La fin

Lors de l'utilisation de la stratégie du langage Pine, une attention particulière doit être accordée à ce chiffre. Le prix d'un saut dans le système est spécifiquement lié à la "precision de la monnaie de prix" dans le paramètre.

img

Le paramètre "Price Currency Accuracy" est défini à 0, ce qui signifie que les données de prix sont précises à un seul chiffre (c'est-à-dire que les nombres minimes sont 0). L'unité minimale de variation du prix est alors 1. Puisque certains paramètres sont liés à la précision du prix, cet endroit nécessite une attention particulière.

OK, ce qui précède est la totalité de la conception de cette stratégie de mandat semi-automatique, bien que je l'ai également utilisé sur le disque. Mais ces outils doivent également être compris pour être utilisés en fonction de leurs habitudes de trading et peuvent être modifiés et optimisés. Le code de cette stratégie est simplement partagé publiquement, pour échanger des conceptions et des logiques d'apprentissage.

On voit que le langage Pine est très facile à utiliser, pratique et facile à apprendre. Nous pouvons rapidement concevoir les outils que nous voulons en utilisant le langage Pine sans avoir à nous soucier de la conception de programmes complexes.


Relationnée

Plus de