avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

Schreiben Sie ein halbautomatisches Handelstool mit der Sprache Pine

Erstellt in: 2022-09-29 14:36:32, aktualisiert am: 2024-11-29 19:01:54
comments   0
hits   2561

Schreiben Sie ein halbautomatisches Handelstool mit der Sprache Pine

Schreiben Sie ein halbautomatisches Handelstool mit der Sprache Pine

Obwohl immer mehr Händler Programme für den vollautomatischen Handel schreiben, handelt es sich bei der größeren Gruppe immer noch um manuelle Händler. Tatsächlich können manuelle subjektive Händler auch einige kleine Tools schreiben, die sie bei ihrem subjektiven Handel unterstützen. Beispielsweise finden Sie manchmal eine gute Einstiegsposition und planen, einen festen Stop-Loss und einen nachfolgenden Take-Profit für die Anfangsposition festzulegen. Dann können Sie sich die energieaufwendigen Aufgaben wie die anschließende Überwachung des Marktes ersparen. Folgen Sie einfach Ihren festgelegten Stop-Loss- und Take-Profit-Plänen und überlassen Sie dem Programm die Überwachung des Marktes. Wenn Sie die Wette verlieren, stoppen Sie den Verlust; wenn Sie gewinnen, verfolgen Sie das Gewinnziel, um den manuellen Handel zu unterstützen.

Parameterdesign

Die Strategie zum Entwerfen solcher Anforderungen mit der Sprache Pine ist sehr einfach. Die folgenden Parameter müssen entworfen werden, um die Funktionen gemäß den Anforderungen zu implementieren:

  1. Offset: Wenn der Trailing Take Profit ausgelöst wird, werden der höchste Preis und der niedrigste Preis gegeneinander abgewogen, um den Offset-Abstand der Take-Profit-Linie zu bestimmen.
  2. Limit: Der Parameter wird zur Steuerung verwendet: A. Direkt an der anfänglichen Basisposition kaufen, B. Auf den Kauf zu einem bestimmten Preis warten, C. Nichts tun.
  3. Menge: Die Bestellmenge bei Eröffnung des Basislagers.
  4. Verlust: Stop-Loss-Punkte.
  5. targetOffset: Die Preisdifferenz, die den Eröffnungspreis ausgleicht, wenn der Trailing Take Profit ausgelöst wird.
  6. minTick: ein Preissprung.
  7. Richtung: die Richtung der Öffnung der Basisposition.

Design-Strategie

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

Der Strategieentwurf ist nicht kompliziert. Bei der Verwendung muss er normalerweise auf das „Echtzeitpreismodell“ eingestellt werden, da der Preis in jedem Moment überprüft werden muss.

Schreiben Sie ein halbautomatisches Handelstool mit der Sprache Pine

Beachten Sie, dass der Stop-Loss in den Parametern in Punkten (einem Preissprung) ausgedrückt wird und dass der Offset-Tracking-Take-Profit-Offset ebenfalls in Punkten (einem Preissprung) ausgedrückt wird. targetOffset verfolgt den Versatz der Take-Profit-Triggerlinie und wird in Preisdistanz ausgedrückt (wenn Sie ihn beispielsweise auf 30 setzen, bedeutet das eine Distanz von 30 Yuan). Bei einem Preissprung von 1 bedeuten 30 Sprünge eine Distanz von 30 Yuan.

Diese Vertrauensstrategie ist so konzipiert, dass nicht nur anfängliche Long-Positionen, sondern auch anfängliche Short-Positionen möglich sind. Anschließend werden Stop-Loss und Trailing-Profit entsprechend der Leerverkaufsrichtung gehandhabt.

Lassen Sie uns die vom Design implementierten Funktionen demonstrieren:

1. Wenn diese Strategie läuft, eröffnen Sie sofort eine Basisposition und legen Sie dann den Stop-Loss und den Trailing-Take-Profit entsprechend den Parametern fest.

Schreiben Sie ein halbautomatisches Handelstool mit der Sprache Pine

Die Richtung ist auf „Long“ eingestellt, der Limit-Parameter ist auf 0 eingestellt, was bedeutet, dass die Strategie in den Markt eintritt und sofort „Long“ geht, wenn sie ausgeführt wird, und der Betrag ist auf 1 eingestellt, und die Strategie öffnet eine Position von 1 Vertrag.

Schreiben Sie ein halbautomatisches Handelstool mit der Sprache Pine

2. Geben Sie den Limitparameter und den Einstiegspreis an

Andere Parametereinstellungen bleiben unverändert, geben Sie einfach den Grenzparameterpreis als 1276 an

Schreiben Sie ein halbautomatisches Handelstool mit der Sprache Pine

3. Der Standard-Limit-Parameter ist -1, was bedeutet, dass keine Operation ausgeführt wird, um das versehentliche Öffnen von Positionen zu verhindern.

Schreiben Sie ein halbautomatisches Handelstool mit der Sprache Pine

THE END

Achten Sie bei der Verwendung der Pine-Sprachstrategie besonders auf die Preissprungdaten. Der spezifische Preissprung des Systems hängt mit der „Preiswährungspräzision“ in den Parametern zusammen.

Schreiben Sie ein halbautomatisches Handelstool mit der Sprache Pine

Der Parameter „Präzision der Preiswährung“ ist auf 0 gesetzt, was bedeutet, dass der Preisdatenwert auf die Einerstelle genau ist (d. h. die Anzahl der Dezimalstellen beträgt 0). Dann beträgt die kleinste Einheit der Preisänderung 1. Da einige Parameter mit dem jeweiligen Preissprung in Zusammenhang stehen, sollte diesem Punkt besondere Aufmerksamkeit gewidmet werden.

OK, das Obige ist der vollständige Entwurfsinhalt dieser halbautomatischen Anvertrauensstrategie, obwohl ich sie auch im realen Handel verwende. Allerdings müssen solche Tools verstanden und entsprechend den eigenen Handelsgewohnheiten verwendet werden, und Sie können sie selbst ändern und optimieren. Der Strategiecode hier dient nur dem öffentlichen Teilen, Kommunizieren und Erlernen von Designmethoden und -logik.

Es ist ersichtlich, dass die Pine-Sprache sehr benutzerfreundlich, praktisch und leicht zu erlernen ist. Mit der Sprache Pine können wir schnell die gewünschten Tools entwickeln, ohne uns um komplizierte Programmgestaltung kümmern zu müssen. Die Verwendung der Sprache Pine in FMZ Quantitative macht quantitatives Trading einfacher und unkomplizierter.