Schreiben Sie ein halbautomatisches Handelswerkzeug mit der Sprache Pine

Schriftsteller:Lydia., Erstellt: 2022-11-08 09:56:48, Aktualisiert: 2023-09-15 20:52:26

img

Obwohl es immer mehr Trader gibt, die Programme für den vollautomatisierten Handel schreiben, ist die größere Gruppe von Tradern immer noch manuelle Trader. In der Tat können manuelle subjektive Trader auch kleine Tools schreiben, um ihnen bei ihrem subjektiven Handel zu helfen. Zum Beispiel finden Sie manchmal eine gute Einstiegsposition und planen, einen festen Stop-Loss und Trailing-Profit auf die Anfangsposition zu setzen. Dann verzichten Sie auf die energieintensiveren Dinge wie nachfolgende Marktüberwachung, folgen Sie Ihrem eigenen etablierten Stop-Loss- und Take-Profit-Plan genau und lassen Sie das Programm die Marktüberwachung für Sie erledigen. Stop-Loss für Verliererwetten, Trailing-Profit für Gewinnerwetten, um manuellen Handel zu unterstützen.

Parameterentwurf

Die Strategie für die Gestaltung solcher Anforderungen mit der Pine-Sprache ist sehr einfach. Die folgenden Parameter müssen entworfen werden, um die Funktion gemäß den Anforderungen zu erreichen:

  1. Offset: Bei Auslösung eines Trailing Stop Profit wird der Offset-Abstand zum Offset des höchsten und des niedrigsten Preises verwendet, um die Stop-Profit-Linie abzugrenzen.
  2. Grenze: Parameter zur Steuerung - A. Anfangsbasis für den direkten Kauf, B. angegebener Preis, auf den man warten muss, um zu kaufen, C. Nichts tun.
  3. Betrag: Betrag der bei Eröffnung der Basisposition platzierten Aufträge.
  4. Verlust: Stoppverlustpunkte.
  5. TargetOffset: Die Preisdifferenz, die den Eröffnungspreis ausgleicht, wenn ein Trailing Stop Profit ausgelöst wird.
  6. MinTick: Die Mindesteinheit der Preisschwankung.
  7. Richtung: Richtung der Öffnung der Basisposition.

Strategieentwurf

/*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("Tracking loss and profit stopping entrustment", 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", "Tracking stop loss and stop profit offset")
varip limit = input(-1, "limit", "Initial opening price: - 1 means no opening, 0 means immediate opening, and other specific values are price limits")
varip amount = input(1, "amount", "amount of opening positions")
varip loss = input(30, "loss", "stop loss")
varip targetOffset = input(30, "targetOffset", "trigger tracking profit and loss stop offset")
varip minTick = input(1, "minTick", "the minimum unit of price fluctuation")
tradeType = input.string("long", "direction", tooltip="order direction, long: go long, short: go short", options=["long", "short"])

if not barstate.ishistory and not isAlertMinTick
    runtime.log("check whether syminfo.mintick is correct! syminfo.mintick:", syminfo.mintick, "#FF0000")
    if syminfo.mintick < minTick 
        runtime.error("system syminfo.mintick < minTick parameter", "#FF0000")
    isAlertMinTick := true 

if not barstate.ishistory and limit == -1 and not isAlert
    runtime.log("No open price is set, current limit is -1 (to prevent false openings, initial default limit is -1), openings are prohibited", "#FF0000")
    isAlert := true 

if isTrade and strategy.position_size == 0 and not isAlertFinished
    runtime.log("All order processes executed, position is 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("The price per point is:", syminfo.mintick, ", current 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 trigger line")    
plot(strategy.position_size!=0 ? high_lowPrice : na, "current highest/lowest price")
plot(strategy.position_size!=0 ? (strategy.position_size > 0 ? high_lowPrice-syminfo.mintick*offset : high_lowPrice+syminfo.mintick*offset) : na, "moving stop loss trigger line")

Die Konzeption der Strategie ist nicht kompliziert, muss aber als Echtzeitpreismodell eingerichtet werden, da der Preis jederzeit überwacht werden sollte.

img

Beachten Sie, dass der Stop-Loss in Punkten (minTick) und der Offset auch in Punkten (minTick) ausgedrückt wird. Der Offset der TargetOffset Trailing Stop-Profit-Trigger-Linie wird in Bezug auf die Preisdistanz ausgedrückt (z. B. auf 30, was RMB30 für die Distanz ist). Wenn der minTick 1 ist, bedeutet 30 RMB30 für die Distanz.

Diese Provisionsstrategie ist so konzipiert, dass nicht nur die anfänglichen Basispositionen lang gehen, sondern auch die anfänglichen Basispositionen kurz gehen.

Wir zeigen die Konstruktion wie folgt:

1. Wenn die Strategie ausgeführt wird, wird die Basisposition sofort geöffnet und eingegeben, und dann wird der Stop-Loss und der Tracking-Stop-Profit entsprechend den Parametern festgelegt.

img

Die Strategie wird auf 1 gesetzt, d. h. die Strategie öffnet eine Position von 1 Vertrag.

img

2. Geben Sie den Grenzparameter an, geben Sie den Einstiegspreis an

Andere Parameter-Einstellungen bleiben unverändert, mit der Ausnahme, dass der angegebene Grenzwert für den Parameter: 1276

img

3. Der Standardlimitparameter ist -1, der nichts betreibt und versehentliche Eröffnung von Positionen verhindert

img

Das Ende

Bei der Verwendung der Pine-Sprachstrategie ist es wichtig, den MinTick-Daten besondere Aufmerksamkeit zu schenken.

img

Der Parameter Pricing Currency Accuracy wird auf 0 gesetzt, was bedeutet, dass der Preisdatenwert auf eine einzelne Ziffer (d.h. 0 Dezimalstellen) genau ist. Dann beträgt die minimale Preisänderungseinheit 1. Da einige Parameter mit der genauen Anzahl von MinTicks zusammenhängen, bedarf dies zusätzlicher Aufmerksamkeit.

OK, oben ist das gesamte Design dieser halbautomatischen Provisionsstrategie, obwohl ich es auch für den echten Bot-Handel verwende. Aber solche Tools müssen auch nach Ihren eigenen Handelsgewohnheiten verwendet werden, um zu verstehen, dass spezifische Modifikationen, Optimierungen von Ihnen selbst durchgeführt werden können. Hier ist der Strategiecode nur für öffentliches Teilen, Austauschlernen Design und Logik.

Wie wir sehen können, ist die Pine-Sprache sehr einfach zu bedienen, und es ist bequem und einfach zu lernen. Wir können die Pine-Sprache verwenden, um die Tools, die wir wollen, schnell zu entwerfen, ohne uns um komplizierte Programmierung kümmern zu müssen, und die Pine-Sprache verwenden, um den quantitativen Handel auf der FMZ Quantitative Trading Platform zu erleichtern.


Verwandt

Mehr