
Aunque cada vez hay más traders que escriben programas para realizar operaciones totalmente automáticas, el grupo más grande sigue siendo el de traders manuales. De hecho, los traders subjetivos manuales también pueden escribir algunas pequeñas herramientas para ayudarlos en su trading subjetivo. Por ejemplo, a veces encuentras una buena posición de entrada y planeas establecer un stop loss fijo y un take profit dinámico para la posición inicial. De esta forma, podrá evitar las tareas que consumen mucha energía, como el seguimiento posterior del mercado. Simplemente siga sus planes de stop-loss y take-profit establecidos y deje que el programa controle el mercado por usted. Si pierde la apuesta, haga stop loss; si gana, realice un seguimiento del objetivo de ganancias para facilitar el trading manual.
La estrategia para diseñar dichos requisitos utilizando el lenguaje Pine es muy sencilla. Para implementar las funciones según los requisitos, es necesario diseñar los siguientes parámetros:
/*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, "移动止损触发线")
El diseño de la estrategia no es complicado. Al utilizarla, normalmente es necesario configurarla en el “modelo de precios en tiempo real”, ya que es necesario comprobar el precio en todo momento.

Tenga en cuenta que el stop loss en los parámetros se expresa en puntos (un salto de precio), y el seguimiento de compensación del take profit también se expresa en puntos (un salto de precio). targetOffset rastrea el desplazamiento de la línea de activación de toma de ganancias y se expresa en distancia de precio (por ejemplo, si lo establece en 30, significa una distancia de 30 yuanes). Cuando el salto de precio es de 1, 30 saltos significa una distancia de 30 yuanes.
Esta estrategia de confianza está diseñada no sólo para permitir posiciones largas iniciales, sino también para permitir posiciones cortas iniciales. Luego, el stop loss y el trailing profit se manejarán de acuerdo con la dirección de venta corta.
Demostremos las funciones implementadas por el diseño:
1. Cuando se ejecuta esta estrategia, abra una posición base inmediatamente y luego establezca el stop loss y el trailing take profit según los parámetros.

La dirección se establece en larga, el parámetro de límite se establece en 0, lo que significa que la estrategia ingresará al mercado y se pondrá en largo inmediatamente cuando se ejecute, y la cantidad se establece en 1, y la estrategia abrirá una posición de 1. contrato.

2. Especifique el parámetro límite y el precio de entrada.
Los demás parámetros no se modifican, solo hay que especificar el precio límite del parámetro como: 1276

3. El parámetro de límite predeterminado es -1, lo que significa que no se realiza ninguna operación para evitar la apertura accidental de posiciones.

Al utilizar la estrategia del lenguaje Pine, preste especial atención a los datos de salto de precios. El salto de precio específico del sistema está relacionado con la “precisión de la moneda de precios” en los parámetros.

El parámetro “Precisión de moneda de precios” está establecido en 0, lo que significa que el valor de los datos de precios es preciso hasta el dígito unitario (es decir, el número de decimales es 0). Entonces la unidad mínima de cambio de precio es 1. Debido a que algunos parámetros están relacionados con el salto de precio específico, se debe prestar especial atención a este punto.
Bien, lo anterior es el contenido de diseño completo de esta estrategia de confianza semiautomática, aunque también la uso en operaciones reales. Sin embargo, estas herramientas deben comprenderse y utilizarse de acuerdo con sus propios hábitos comerciales, y usted puede modificarlas y optimizarlas usted mismo. El código de estrategia aquí presentado es únicamente para compartir, comunicar y aprender públicamente los métodos y la lógica del diseño.
Se puede ver que el lenguaje Pine es muy fácil de usar, conveniente y fácil de aprender. Podemos utilizar el lenguaje Pine para diseñar rápidamente las herramientas que queramos sin tener que preocuparnos por el diseño complicado de programas. El uso del lenguaje Pine en FMZ Quantitative hace que el trading cuantitativo sea más fácil y sencillo.