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.
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:
/*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
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.
Die Strategie wird auf 1 gesetzt, d. h. die Strategie öffnet eine Position von 1 Vertrag.
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
3. Der Standardlimitparameter ist -1, der nichts betreibt und versehentliche Eröffnung von Positionen verhindert
Bei der Verwendung der Pine-Sprachstrategie ist es wichtig, den MinTick-Daten besondere Aufmerksamkeit zu schenken.
Der Parameter
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.