En la carga de los recursos... Cargando...

Escribir una herramienta de transacción semiautomática en el lenguaje Pine

El autor:Los inventores cuantifican - sueños pequeños, Creado: 2022-09-29 14:36:32, Actualizado: 2024-11-29 19:01:54

img

Escribir una herramienta de transacción semiautomática en el lenguaje Pine

Aunque cada vez son más los operadores que componen programas para hacer operaciones totalmente automáticas, el grupo más grande sigue siendo un grupo de operadores manuales. De hecho, los comerciantes sujetos manuales también pueden ayudar a sus propios operadores mediante la redacción de algunas herramientas. Por ejemplo, a veces se encuentra una buena posición de entrada, se establece un plan de stop loss fijo para la posición inicial, el seguimiento del stop loss.

Diseño de parámetros

La estrategia para diseñar estas necesidades con el lenguaje Pine es muy simple, y se requiere diseñar los siguientes parámetros para implementar las funciones de acuerdo con las necesidades:

1, offset: cuando se activa el seguimiento de la línea de frenado, se desvía el precio más alto, el precio más bajo para definir la distancia de desviación de la línea de frenado. 2, limit: Parámetros para controlar el A. Compra directa de la base inicial; B. Especifica el precio de espera de la compra; C. No haga nada. 3, monto: cantidad de unidad que se reduce cuando se abre el fondo de la bolsa. 4, loss: el número de puntos de stop loss. 5 TargetOffset: Diferencia de precio que desvía el precio de la posición abierta cuando se activa el seguimiento de la suspensión. 6 minTick: El precio está subiendo. 7, dirección: dirección de la parte inferior del emplazamiento y del emplazamiento.

Estrategias 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 y, cuando se usa, generalmente se debe configurar como un "modelo de precios en tiempo real", ya que se debe detectar el precio en todo momento.

img

Observe que en los parámetros de stop loss se indica con un punto (un salto de precio) y el desvío de la línea de detonadores de seguimiento de offset también se indica con un punto (un salto de precio). La desviación de la línea de detonadores de seguimiento de tarjetOffset se indica con una distancia de precio (por ejemplo, si se establece 30, es decir, una distancia de 30 yuanes). Cuando el precio es un salto de 1 es 30 o una distancia de 30 yuanes.

Esta estrategia de asignación está diseñada para no solo hacer más de la base inicial, sino también para hacer vacío la base inicial. Entonces el stop loss y el track stop stop se tratan de acuerdo con la dirección de vacío.

A continuación, vamos a mostrar las funciones de las implementaciones de diseño:

1, para que esta estrategia funcione, comience a operar de inmediato, y luego establezca los parámetros de stop loss y stop tracking.

img

La dirección está configurada como long, el parámetro de límite está configurado como 0, es decir, para que la estrategia se ejecute de inmediato, la cantidad está configurada como 1, la estrategia está configurada como 1 contrato.

img

2, especifique el límite, especifique el precio de entrada

Los otros parámetros no cambian, solo se especifica el precio del parámetro límite: 1276

img

3, el parámetro de límite por defecto es -1, nada funciona para evitar posiciones equivocadas.

img

El fin.

Cuando se utiliza la estrategia del lenguaje Pine, se debe prestar especial atención a esta información. El precio de un salto en el sistema está relacionado con la "precisión monetaria del precio" en el parámetro.

img

El parámetro "precisión monetaria fija" está configurado en 0, es decir, el valor numérico de los datos de precios es exacto a un dígito (es decir, el dígito es 0). Entonces, la unidad mínima de cambio del precio es 1. Debido a que algunos parámetros están relacionados con la precisión del precio, este lugar requiere especial atención.

OK, esto es todo el contenido del diseño de esta estrategia de comisión semiautomática, aunque también la uso en vivo. Pero estas herramientas también deben entenderse según sus propios hábitos de negociación y pueden modificarse u optimizarse.

Como se puede ver, el lenguaje Pine es muy fácil de usar, fácil y fácil de aprender. Podemos usar el lenguaje Pine para diseñar rápidamente las herramientas que queremos sin tener que preocuparnos por el diseño de programas complejos.


Relacionados

Más.