avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Escriba una herramienta de trading semiautomática utilizando el lenguaje Pine

Creado el: 2022-09-29 14:36:32, Actualizado el: 2024-11-29 19:01:54
comments   0
hits   2561

Escriba una herramienta de trading semiautomática utilizando el lenguaje Pine

Escriba una herramienta de trading semiautomática utilizando el lenguaje Pine

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.

Diseño de parámetros

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:

  1. Desplazamiento: cuando se activa el take profit final, el precio más alto y el precio más bajo se compensan para determinar la distancia de desplazamiento de la línea de take profit.
  2. límite: El parámetro se utiliza para controlar: A. Comprar directamente en la posición base inicial, B. Esperar a comprar a un precio específico, C. No hacer nada.
  3. Cantidad: La cantidad del pedido cuando se abre el almacén base.
  4. Pérdida: puntos de stop loss.
  5. targetOffset: La diferencia de precio que compensa el precio de apertura cuando se activa el trailing take profit.
  6. minTick: un salto de precio.
  7. Dirección: la dirección de apertura de la posición base.

Estrategia de diseño

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

Escriba una herramienta de trading semiautomática utilizando el lenguaje Pine

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.

Escriba una herramienta de trading semiautomática utilizando el lenguaje Pine

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.

Escriba una herramienta de trading semiautomática utilizando el lenguaje Pine

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

Escriba una herramienta de trading semiautomática utilizando el lenguaje Pine

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.

Escriba una herramienta de trading semiautomática utilizando el lenguaje Pine

THE END

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.

Escriba una herramienta de trading semiautomática utilizando el lenguaje Pine

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.