Aunque hay más y más comerciantes que escriben programas para el comercio totalmente automatizado, el grupo más grande de comerciantes todavía son comerciantes manuales. De hecho, los comerciantes subjetivos manuales también pueden escribir pequeñas herramientas para ayudarlos en su comercio subjetivo. Por ejemplo, a veces encuentras una buena posición de entrada y planeas establecer una parada de pérdida fija y ganancias de seguimiento en la posición inicial. Luego prescinde de las cosas más intensivas en energía como el monitoreo posterior del mercado, sigue exactamente tu propio plan de pérdida de parada y ganancias de seguimiento, y deja que el programa haga el monitoreo del mercado por ti.
La estrategia para diseñar tales requisitos mediante el lenguaje Pine es muy simple. Los siguientes parámetros deben diseñarse para lograr la función de acuerdo con los requisitos:
/*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")
El diseño de la estrategia no es complicado, pero debe establecerse como un "modelo de precios en tiempo real", ya que el precio debe ser monitoreado en todo momento.
Tenga en cuenta que el stop loss se expresa en puntos (minTick) y el desplazamiento también se expresa en puntos (minTick). El desplazamiento de la línea de activación del stop profit de trailing targetOffset se expresa en términos de distancia de precio (por ejemplo, establecido en 30, que es RMB30 para la distancia). Cuando el minTick es 1, 30 significa RMB30 para la distancia.
Esta estrategia de comisión está diseñada para permitir no solo que las posiciones base iniciales vayan largas, sino también que las posiciones base iniciales vayan cortas.
Demostremos la implementación del diseño de la siguiente manera:
1. Cuando la estrategia se está ejecutando, la posición base se abrirá e ingresará inmediatamente, y luego se establecerá el stop loss y el stop profit de seguimiento de acuerdo con los parámetros.
Dirección se establece en largo, el parámetro límite se establece en 0, es decir, dejar que la estrategia entrar y ir largo inmediatamente cuando se está ejecutando, el monto se establece en 1, es decir, la estrategia abrir una posición de 1 contrato.
2. Especifique el parámetro límite, especifique el precio de entrada
Los demás parámetros se mantienen sin cambios, excepto que el precio límite del parámetro especificado es: 1276
El parámetro límite predeterminado es -1, que no opera nada y evita la apertura accidental de posiciones
Cuando se utiliza la estrategia del lenguaje Pine, es importante prestar especial atención a los datos de minTick. El número exacto de minTick de precios en el sistema está relacionado con la precisión de la moneda de precios en el parámetro.
El parámetro
OK, lo anterior es todo el diseño de esta estrategia de comisión semiautomática, aunque también lo uso para el comercio de robots reales. Pero tales herramientas también deben usarse de acuerdo con sus propios hábitos comerciales para entender, modificaciones específicas, la optimización se puede llevar a cabo por su cuenta. Aquí el código de estrategia es sólo para el intercambio público, diseño de aprendizaje de intercambio y lógica.
Como podemos ver, el lenguaje Pine es muy fácil de usar, y es conveniente y fácil de aprender. Podemos usar el lenguaje Pine para diseñar las herramientas que queremos rápidamente, sin tener que preocuparnos por la programación complicada, y usar el lenguaje Pine para hacer el comercio cuantitativo más fácil en FMZ Quantitative Trading Platform.