Die Ressourcen sind geladen. Beförderung...

Schreiben Sie ein halbautomatisches Handelstool in der Sprache Pine

Schriftsteller:Die Erfinder quantifizieren - Kleine Träume, Erstellt: 2022-09-29 14:36:32, Aktualisiert: 2023-09-15 20:53:45

img

Schreiben Sie ein halbautomatisches Handelstool in der Sprache Pine

Obwohl mehr und mehr Handler Programmierte Trades vollständig automatisch machen, sind es immer noch größere Gruppen von Handhändlern. In der Tat können manuelle subjektive Handler auch ihre subjektive Handlung unterstützen, indem sie einige Tools schreiben. Zum Beispiel finden sie manchmal eine gute Eintrittsposition, planen den Festverlust für die anfängliche Position festzulegen, Stopp-Tracking.

Parametergestaltung

Die Strategie für die Gestaltung solcher Bedürfnisse in der Pine-Sprache ist sehr einfach und erfordert die Gestaltung folgender Parameter, je nachdem, welche Funktionen für die Umsetzung der Bedürfnisse erforderlich sind:

1. Offset: Bei Auslösern des Tracking-Stopps wird der höchste Preis und der niedrigste Preis verschoben, um den Abstand zur Stopplinie zu bestimmen. 2. Limit: Parameter zur Steuerung von A. Direktes Kauf der Anfangsbasis; B. Bestimmung des Kaufpreises; C. Nichts tun. 3. Amount: Einheitsmenge bei Eröffnung der Basisposition. 4. Verlust: Anzahl der Stop-Loss-Punkte. 5. TargetOffset: Preisdifferenz, die bei der Verfolgung des Stopps ausgelöst wird, um den Kurs zu verschieben. 6 min Tick: Der Preis springt. 7. Direction: Richtung der Unterlage und der Öffnung der Unterlage.

Designstrategie

/*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, "移动止损触发线")

Die Strategie ist auch nicht kompliziert und muss in der Regel als "Real-Time-Price-Modell" eingerichtet werden, um die Preise jederzeit zu erkennen.

img

Beachten Sie, dass Stop-Loss in den Parametern mit einem Punkt (Price one jump) und Offset-Tracking-Stopp-Trigger-Distribution mit einem Punkt (Price one jump) angegeben wird.

Diese Auftragsstrategie ist nicht nur so konzipiert, dass die ursprüngliche Unterposition mehr gemacht werden kann, sondern auch, dass die ursprüngliche Unterposition leer gemacht wird.

Hier zeigen wir Ihnen die Funktionen der Design-Implementierung:

1. Wenn diese Strategie ausgeführt wird, wird der Handel sofort eingestellt, und danach wird ein Stop-Loss, ein Tracking-Stopp eingestellt, entsprechend den Parametern.

img

direction ist auf long, limit ist auf 0 gesetzt, d.h. die Strategie kann sofort mehr eingehen, wenn sie ausgeführt wird, amount ist auf 1 gesetzt, Strategie ist auf 1 Kontrakt gesetzt.

img

2, Limit-Parameter angeben, Einstiegspreis angeben

Die anderen Parameter sind unverändert, nur der Preis für den Limit-Parameter ist festgelegt: 1276

img

3. Default Limit-Parameter ist -1, nichts funktioniert, um falsche Positionen zu vermeiden

img

Das Ende

Bei der Verwendung der Strategie der Sprache Pine ist es wichtig, auf diese Daten zu achten. Wie viel der Preis pro Sprung des Systems ist, hängt mit der "Preisungspräzision" in den Parametern zusammen.

img

Der Parameter "Preissteuerungsgenauigkeit" ist auf 0 gesetzt, was bedeutet, dass die Preissteuerungsdaten bis zu einem Punkt genau sind (d. h. die Kleinstzahl ist 0).

OK, das ist die gesamte Konzeption dieser semi-automatischen Auftragsstrategie, obwohl ich sie auch für den echten Einsatz habe. Aber solche Tools müssen auch nach eigenen Handelsgewohnheiten verstanden werden und können selbst modifiziert und optimiert werden.

Es ist einfach zu erlernen. Wir können mit der Sprache Pine schnell die Tools entwerfen, die wir wollen, ohne uns mit komplexem Programmierungskonzept zu beschäftigen.


Verwandt

Mehr