
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.
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:
/*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.

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.

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.

2. Geben Sie den Limitparameter und den Einstiegspreis an
Andere Parametereinstellungen bleiben unverändert, geben Sie einfach den Grenzparameterpreis als 1276 an

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

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.

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.