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

Inventor de la introducción al lenguaje PINE cuantificado

El autor:Los inventores cuantifican - sueños pequeños, Creado: 2022-05-30 16:23:43, Actualizado: 2022-09-28 17:10:21

No hay nada que hacer. 2 y 3.trail_offsetParámetro: después de ejecutar el seguimiento de la acción de stop loss, la distancia entre el precio más alto (cuando se hace más) o el precio más bajo (cuando se hace menos) de la unidad de liquidación colocada. 3 y 4.trail_pointsLos parámetros son:trail_priceLos parámetros, no son más que el número de puntos de ventaja de los puntos de ventaja.

Si no es fácil de entender, no importa. Vamos a entender el aprendizaje a través de una estrategia de repetición de escenarios, que en realidad es muy simple.

/*backtest
start: 2022-09-23 00:00:00
end: 2022-09-23 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/

strategy("test", overlay = true)

varip a = na
varip highPrice = na
varip isTrade = false 
varip offset = 30

if not barstate.ishistory and not isTrade
    strategy.entry("test 1", strategy.long, 1)
    strategy.exit("exit 1", "test 1", 1, trail_price=close+offset, trail_offset=offset)
    a := close + offset
    runtime.log("每点价格为:", syminfo.mintick, ",当前close:", close)
    isTrade := true 

if close > a and not barstate.ishistory
    highPrice := na(highPrice) ? close : highPrice
    highPrice := close > highPrice ? close : highPrice

plot(a, "trail_price 触发线")    
plot(strategy.position_size>0 ? highPrice : na, "当前最高价")
plot(strategy.position_size>0 ? highPrice-syminfo.mintick*offset : na, "移动止损触发线")

img

img

img

La estrategia se inicia con la entrada de múltiples cabezas, y luego inmediatamente con la siguiente.strategy.exitLas órdenes de salida (especifica el parámetro de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis de parálisis

Entonces usamos esta función para optimizar una estrategia de supertrend, y solo le damos una orden de entrada a la estrategia.strategy.exitLa lista de agenda de salida puede añadir esta función de seguimiento para detener la pérdida y el bloqueo.

if not barstate.ishistory and findOrderIdx("open") >= 0 and state == 1
    trail_price := strategy.position_size > 0 ? close + offset : close - offset
    strategy.exit("exit", "open", 1, trail_price=trail_price, trail_offset=offset)
    runtime.log("每点价格为:", syminfo.mintick, ",当前close:", close, ",trail_price:", trail_price)
    state := 2 
    tradeBarIndex := bar_index

El código completo de la estrategia:

/*backtest
start: 2022-05-01 00:00:00
end: 2022-09-27 00:00:00
period: 1d
basePeriod: 5m
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/

varip trail_price = na
varip offset = input(50, "offset")
varip tradeBarIndex = 0
// 0 : idle , 1 current_open , 2 current_close
varip state = 0  

findOrderIdx(idx) =>
    ret = -1 
    if strategy.opentrades == 0 
        ret
    else 
        for i = 0 to strategy.opentrades - 1 
            if strategy.opentrades.entry_id(i) == idx
                ret := i 
                break
        ret

if strategy.position_size == 0 
    trail_price := na 
    state := 0

[superTrendPrice, dir] = ta.supertrend(input(2, "atr系数"), input(20, "atr周期"))

if ((dir[1] < 0 and dir[2] > 0) or (superTrendPrice[1] > superTrendPrice[2])) and state == 0 and tradeBarIndex != bar_index
    strategy.entry("open", strategy.long, 1)
    state := 1
else if ((dir[1] > 0 and dir[2] < 0) or (superTrendPrice[1] < superTrendPrice[2])) and state == 0 and tradeBarIndex != bar_index
    strategy.entry("open", strategy.short, 1)
    state := 1


// 反向信号,全平
if strategy.position_size > 0 and dir[2] < 0 and dir[1] > 0
    strategy.cancel_all()
    strategy.close_all()
    runtime.log("趋势反转,多头全平")
else if strategy.position_size < 0 and dir[2] > 0 and dir[1] < 0
    strategy.cancel_all()
    strategy.close_all()
    runtime.log("趋势反转,空头全平")


if not barstate.ishistory and findOrderIdx("open") >= 0 and state == 1
    trail_price := strategy.position_size > 0 ? close + offset : close - offset
    strategy.exit("exit", "open", 1, trail_price=trail_price, trail_offset=offset)
    runtime.log("每点价格为:", syminfo.mintick, ",当前close:", close, ",trail_price:", trail_price)
    state := 2 
    tradeBarIndex := bar_index


plot(superTrendPrice, "superTrendPrice", color=dir>0 ? color.red : color.green, overlay=true)

Más.