Compras cuando cumple condicion

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #236391 quote
    mamees
    Participant
    New

    Tengo el siguiente codigo:

    DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
    Minimorelevante=0
    posicionMinRel=0
    for i=0 to 251
    if i>=3 then
    minRel = (low[i] < low[i-3]) AND (low[i] < low[i-2]) AND (low[i] < low[i-1]) AND (low[i] < low[i+1]) AND (low[i] < low[i+2]) AND (low[i] < low[i+3])
    if minRel then
    Minimorelevante=1
    posicionMinRel=i
    endif
    endif
    next

    if Minimorelevante then
    BUY 1 SHARES AT MARKET
    endif

     

    Y no quiero que compre en la vela actual, sino en la vela que cumple la condición, es decir, en la vela posicionMinRel.

     

    Como puedo hacerlo? Aporto grafico.

    En el grafico, donde tengo las flechas rosas, es un indicador que cree en su momento y indica los minimos donde quiero hacer las compras.

    Muchas gracias.

    Un saludo.

    compras-min.png compras-min.png compras-min-1.png compras-min-1.png
    #236398 quote
    Iván González
    Moderator
    Master

    Buenas!
    ten encuenta que según tu código estás buscando un mínimo relevante. según tu condición de mínimo relevante se verifica en la tercera vela después de haber alcanzado el mínimo, hasta entonces no.
    Por este motivo tienes que esperar 3 velas hasta que se cumpla la condición de mínimo relevante. Si ahora le añades la orden de compra, como no lo hace hasta la apertura de la vela siguiente pues te encuentras con que han pasado 4 velas desde que se dio ese mínimo relevante…
    Por otro lado, quizás, mejor que un bucle podrías utilizar esto:

    minRel = (low[3] < low) AND (low[3] < low[1]) AND (low[3] < low[2]) AND (low[3] < low[4]) AND (low[3] < low[5]) AND (low[3] < low[6])
    if minRel then
    drawarrowup(barindex[3],low[3]-tr)coloured("red")
    endif
    
    return

    Se trata de un indicador que marca los mínimos relevantes según tus requisitos.
    Por otro lado, el sistema comprará en la 4 vela:

    DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
    
    minRel = (low[3] < low) AND (low[3] < low[1]) AND (low[3] < low[2]) AND (low[3] < low[4]) AND (low[3] < low[5]) AND (low[3] < low[6])
    
    if not onmarket and minRel then
    buy 1 contract at market
    set stop %loss 2
    set target %profit 2
    endif

    Una opción para garantizar que entras al precio del mínimo relevante es lanzar una orden de tipo límite que te asegure la entrada a partir de la tercera vela siempre y cuando el precio toque el mínimo relevante:

    DEFPARAM CumulateOrders = False // Acumulación de posiciones desactivada
    
    minRel = (low[3] < low) AND (low[3] < low[1]) AND (low[3] < low[2]) AND (low[3] < low[4]) AND (low[3] < low[5]) AND (low[3] < low[6])
    
    if not onmarket then
    if minRel then
    precio=low[3]
    endif
    buy 1 contract at precio limit
    set stop %loss 2
    set target %profit 2
    else
    precio=0 //Reiniciar el precio para la orden límite
    endif

    En fin, que puedes trastear con los códigos que te he pasado para sacar un sistema que se ajuste a lo que buscas…

    #236428 quote
    mamees
    Participant
    New

    He puesto al final este codigo y hace que lo que quiero, lo que no entiendo es porque solo hace 1 compra, te señalo donde deberia hacer la 2a compra.

    Lo que busco en este backtest, es que una vez identifico que es el minimo relevante (3 minimos a su izquierda mas elevados y a su derecha), que la vela que pierde ese minimo y lo recupere, se haga la compra.

    Lo he conseguido pero solo me hace 1, quiero saber que me falta para que cada vez que cumpla, haga la compra.

    DEFPARAM CumulateOrders = false // Acumulación de posiciones desactivada

    compra=0
    minimorelevante=0
    for i=4 to 251
    minRel = (low[i] < low[i-3]) AND (low[i] < low[i-2]) AND (low[i] < low[i-1]) AND (low[i] < low[i+1]) AND (low[i] < low[i+2]) AND (low[i] < low[i+3])
    if minRel then
    minimorelevante=low[i]
    break
    endif
    next

    if low<minimorelevante and close>minimorelevante then
    compra=1
    endif

    if compra then
    BUY 1 SHARES AT MARKET
    endif

    // Contador para la venta
    if longonmarket then
    contadorVela = contadorVela + 1
    endif

    // Venta después de 2 velas
    if contadorVela >= 2 then
    SELL AT MARKET
    endif

     

    Muchas gracias,

    compras-min-2.png compras-min-2.png
    #236430 quote
    mamees
    Participant
    New

    Lo he solucionado, era por la venta.

     

    DEFPARAM CumulateOrders = false // Acumulación de posiciones desactivada

    compra=0
    minimorelevante=0
    for i=4 to 251
    minRel = (low[i] < low[i-3]) AND (low[i] < low[i-2]) AND (low[i] < low[i-1]) AND (low[i] < low[i+1]) AND (low[i] < low[i+2]) AND (low[i] < low[i+3])
    if minRel then
    minimorelevante=low[i]
    break
    endif
    next

    if low<minimorelevante and close>minimorelevante then
    compra=1
    endif

    if compra then
    BUY 1 SHARES AT MARKET
    endif

    if longonmarket and close < minimorelevante then
    SELL AT MARKET
    endif

Viewing 4 posts - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.

Compras cuando cumple condicion


ProOrder: Trading Automático y Backtesting

New Reply
Author
author-avatar
mamees @mamees Participant
Summary

This topic contains 3 replies,
has 2 voices, and was last updated by mamees
1 year, 6 months ago.

Topic Details
Forum: ProOrder: Trading Automático y Backtesting
Language: Spanish
Started: 08/14/2024
Status: Active
Attachments: 3 files
Logo Logo
Loading...