Aclaraciones sobre una estrategia propuesta por quo en el forum en inglés

Forums ProRealTime foro Español Soporte ProOrder Aclaraciones sobre una estrategia propuesta por quo en el forum en inglés

  • This topic has 21 replies, 2 voices, and was last updated 7 years ago by avatarquo.
Viewing 7 posts - 16 through 22 (of 22 total)
  • #17626
    quo

    Gracias tikitaka, funciona perfectamente. Me alegro que haya sido sencillo añadir el engulfing alcista. Si alguna vez puedo hacer algo por ti ya sabes.

    Respecto a que añada otra operación cada vez que rompa máximo tienes razón en que lo lógico es limitar el número de órdenes de compra y también afectaría al breakeven pero podemos obviarlo, con que añadiera una orden cada vez que rompa máximo (y por tanto subamos el stop) sería suficiente para hacer cálculos. Sin embargo al quitar de la línea 115 el if not onmarket el sistema compra en cada apertura cuando sube y no solo cuando se sube el stop. He probado quitándolo también de otras líneas pero el resultado es el mismo. Seguro que es mas sencillo de lo que parece pero no doy con la tecla. Adjunto foto. Solo debería añadir posición en los círculos, no en cada una de las velas.

    #17632

    En efecto, el código actual no está preparado para las multicompras: prepararé una versión a tal efecto.

    Mientras tanto, te preanuncio que lo que te voy a pedir que hagas por mí, es facilitar más información sobre el método o sistema. Qué info? En breve y lógicamente, todo lo que no está en el código y se pueda comunicar: prepararé un post a tal efecto 🙂

    Saludos

    1 user thanked author for this post.
    avatar quo
    #17755

    Buen día a la buena gente,

    lista la versión multicompra v.05.1.

    Comentarios:

    • se elimina la variable buyPrice por redundancia con historicalMax. Un cambio estético.
    • en las órdenes stop de compra, se utiliza la constante ticksize, que debería darnos, si está bien mantenida por PRT, la unidad mínima de variación de precio para cada acción particular, normalmente 0.01.
    • en la parte del breakeven, en lugar de TradePrice se utiliza la función PositionPrice que da el precio medio de entrada de la posición y que coincide naturalmente con TradePrice para posiciones con una sola compra.
    • se declara explícitamente la instrucción DEFPARAM CumulateOrders = TRUE, para poder pasar a modo unicompra haciéndola igual a FALSE, sin más cambios necesarios.
    • como acordado, no se ponen límites al número de compras por posición, con el consiguiente posible apalancamiento (y ruina).

    Como un aparte, sobre las insidiosas envolventes (brrrr!!!): me ha surgido la duda de si se debe modificar el stop cuando una envolvente bajista es barra de entrada en posición (ejemplo, BILDU mar2014). Ahora mismo (v. 04.2) no se modifica y, por más que lo estudio, no llego a ninguna conclusión, veo pros y cons, así que lo dejo a tu criterio: cambiar, no cambiar u olvidar el tema y descansar 🙂 (es muy fácil de cambiar, de modo que el trabajo que me lleve no debe ser tu criterio de elección).

    Saludos
    <pre class=”line-numbers”><code class=”language-prorealtime”>// TS name: Historical Maximum Breakout
    // Description: Buy at pivot highs breakouts.
    // Sell at relative minimums (or lows) between the
    // breakout of a pivot high and that pivot high
    // A pivot high is confirmed by a correction in the low
    // of the bar(s) after a new historical maximum
    // Instruments: Stocks/ETFs
    // Time frame: Daily / Weekly / Monthly (preferred)
    // Features: Only long system. Risk and money management. Cumulate orders
    // Version: 05.1
    // ****************************************************************************//

    DEFPARAM CumulateOrders = TRUE

    REM Customizable and optional parameters
    once initialCapital= 50000 // initial capital
    once exitFilter = 3 // % below relative minimum to exit
    once risk = 0.6 // % equity risk
    once minimalCashSize = 1000 // minimal cash position size
    once upForBreakeven = 10 // % price gain to move stop to breakeven
    once gainAtBreakeven = 1 // % marginal profit at breakeven
    // end of customizable and optional parameters

    REM Variables declaration
    once historicalMax = 0 // pivot high and buy stop price
    once currentMax = 0 // current maximum candidate to pivot high
    once exitPrice = 0 // sell stop price
    once currentMin = 0 // current minimum candidate to sell stop
    once breakevenStop = 0 // breakeven stop
    once barLow = 0 // stores low of certain bars
    once equity = 0 // current equity
    once positionSize = 0 // number of shares to buy
    once cashSize = 0 // cash investment
    once allowOrders = 0 // allow or disallow cumulate orders
    // end of variables declaration

    REM Special treatment for 2 first loaded bars
    if BarIndex = 0 then
    currentMax = high
    currentMin = low
    endif

    if BarIndex = 1 then
    if high > currentMax then
    currentMax = high
    endif
    if low < currentMin then
    currentMin = low
    exitPrice = low * (1 – exitFilter/100)
    historicalMax = currentMax
    endif
    endif
    // end of special treatment for 2 first loaded bars

    REM Normal coding body
    if BarIndex > 1 then
    currentMin = min(low, currentMin)

    if BarIndex = TradeIndex then
    allowOrders = 0 // no cumulate orders after trade
    endif

    if not onmarket then
    exitPrice = currentMin * (1 – exitFilter/100)
    endif

    if high > currentMax then
    barLow = 0 // reset barLow
    currentMax = high
    // bullish engulfing bar
    if low < low[1] and close > open then
    currentMin = low
    exitPrice = currentMin * (1 – exitFilter/100)
    endif
    endif

    if low < low[1] and currentMax > historicalMax then
    historicalMax = currentMax
    allowOrders = 1
    if barLow > 0 then
    currentMin = min(low, barLow)
    else
    currentMin = low
    endif
    if not onmarket then
    exitPrice = currentMin * (1 – exitFilter/100)
    endif
    endif

    if high < high[1] and currentMax > historicalMax then
    barLow = low
    endif

    if high > historicalMax then
    exitPrice = currentMin * (1 – exitFilter/100)
    endif
    endif

    // cleaning
    if not onmarket then
    breakevenStop = 0 // reset breakEvenStop
    endif
    // end of normal coding body

    REM Money and risk management
    equity = initialCapital + STRATEGYPROFIT

    // calculate breakeven stop price
    if onmarket and upForBreakeven > 0 then
    if high >= PositionPrice * (1 + upForBreakeven/100) then
    breakevenStop = PositionPrice * (1 + gainAtBreakeven/100)
    endif
    endif

    // calculate number of shares and cash size
    positionSize = Round((equity * risk/100) / (historicalMax – exitPrice))
    cashSize = positionSize * historicalMax
    // end of money and risk management

    REM Set buy and sell stop orders
    if (not onmarket or allowOrders) and positionSize > 0 and cashSize >= minimalCashSize then
    buy positionSize shares at historicalMax + ticksize stop
    endif

    if onmarket and exitPrice > 0 then
    exitPrice = max(breakevenStop, exitPrice)
    sell at exitPrice stop
    endif
    // end of set buy and sell stop orders

    //graph currentmin
    //graph historicalmax
    //graph currentmax
    //graph exitprice

     

    1 user thanked author for this post.
    avatar quo
    #17757

    No sé si ha salido bien. Repito el código, just in case.

     

     

    1 user thanked author for this post.
    avatar quo
    #18480
    quo

    Hola de nuevo, perdón por la tardanza, vacaciones algo largas.

    Magnífico, se queda todo modificable en versión 5. Respecto a lo que preguntas sobre BIDU (que no BILDU..vade retro) en versión fin de dia no se puede hacer más. En la anterior versión salía y actualizaba en cualquier caso y en la 5 solo en vela blanca, suponiendo que las blancas hacen mínimo antes de máximo. Con tiempo real y accediendo al tick by tick podría hacerse pero en fin de dia, así es más que suficiente, muchas gracias.

    #18696

    Vamos, que aunque lo pareciera, no estabas muerto, que estabas tomando cañas… o mojitos en los Caribes.

    No sigo muy de cerca el tema, pero me parece que de momento (y seguramente va a ser un momento muy largo) el backtest tick a tick sólo se usa en los casos de ejecución de STOP LOSS y TAKE PROFIT en una misma barra, mejora muy necesaria para dar fiabilidad a los resultados de los backtests de sistemas intradiarios en esta plataforma, pero que no resuelve nuestro pequeño dilema.

    Así que podemos cerrar, con la versión 5.1, el proyecto de codificación de esta estrategia de ruptura de máximos históricos. El viaje bien puede ser la recompensa, pero habría algún inconveniente en aprovechar tu experiencia de años con este sistema y conocer los detalles prácticos de la operativa o plan de trading?

    #18698
    quo

    Buenos días,

    Yo creo que el tick a tick resuelve el dilema de saber en una misma barra qué va primero, es decir el órden de como ocurren las cosas. Como bien dices, si en una misma barra hay stop y profit sabemos lo que ocurre antes, en nuestro caso si tenemos una envolvente, sabríamos si ocurre antes el máximo o el mínimo, pero vaya que es un jardín en el que mejor no meterse, además en este sistema las variaciones serían pequeñas y con saber si la vela es blanca nos acercamos mucho. Respecto a conocer los detalles no hay ningún problema, no se si es el foro adecuado al no hablar de PRT y poder aburrir a la gente pero no tengo inconveniente. Es mas me gustaría contactarte en privado si es posible porque como te dije te debo una invitación y podríamos hablar de esto y de, por que no, otros métodos. El método en sí, como bien has podido deducir es un seguidor de tendencia y como cualquier seguidor de tendencia tiene una tasa de aciertos baja. Si no recuerdo mal estaba en torno al 35% de operaciones ganadoras únicamente, eso si, lo ganado es muy superior, hay valores desde hace años con rentabilidades superiores al 200%. Esto lo hace un método dificil de seguir porque psicologicamente cuando llevas 6 operaciones seguidas fallidas te planteas muchas cosas. Conozco gente que pierde con este sistema principalmente por su por falta de disciplina y MM. También es duro ver que ganas un 50% y acaba saltándote el stop, ya digo psicológicamente no es un sistema fácil de seguir. Estamos tratando de mejorar las entradas para mejorar la tasa de aciero con algún filtro y también de consolidar parte del beneficio para hacerlo mas operable y no quedarnos con cara de tonto. El primer aspecto mejoraría el sistema mucho, hemos estudiado que únicamente un 5% mas de aciertos mejoraría muchísimo las estadísticas. El segundo aspecto sabemos que mejoraría la tasa de aciertos y lo haría mas operable pero sacrificaríamos rentabilidad, cosa que no nos disgusta en principio, no todo es la rentabilidad, hay que hacerlo operable para poder llegar a ella y no caer en el intento. Es por todo ello por lo que lo queríamos plasmar en un código. Tenemos en 6 años una rentabilidad del 80% aprox, un maxDD del 15% y una vola del 13,8%. A nivel de stop, que es como nos gusta verlo la rent es del 60% mas o menos, perdona que no me lo sepa de memoria pero es lo que tiene trabajar con barras mensuales, que lo miro muy de vez en cuando. Si nos conocemos te mando el excel. Hablando de barras mensuales, como tu dijiste, compras y cuando te has separado de tu tercera mujer vendes, es cierto, muy aburrido pero los largos plazos quitan mucho ruido y te permiten hacer otras cosas en la vida. En 2002 estuve en el extrajero en la central de un banco de inversión haciendo prop trading y te aseguro que estaba mas tiempo sentado en la taza del vater que delante de la pantalla. La emoción para el deporte, yo estoy cómodo con una cartera de acciones que vigilo de vez en cuando y con una rentabilidad aceptable sin sufrir los batacazos del mercado. Buscamos valores fuertes en sectores fuertes con un filtro de A.Fundamental que normalemente chequeamos en finviz, procuramos tener diversificada la cartera en sectores y que el dia del stop no sea el mismo en todos los valores. El MM es importantísismo, realmente el sistema es lo de menos, cualquier seguidor de tendencia medio qué puede servir con una buena gestion del dinero, de hecho uso otro sistema seguidor basado en dos medias y un ADX que también va muy bien. La fórmula del MM ya la conoces, no hemos descubierto la pólvora, está en los libros. Tener en cuenta lo que arriesgas y no lo que inviertes y que esto no sea superior a un 0,6% de nuestra cartera (en nuestro caso), eso te permite equivocarte 10 veces seguidas y solo perder un 6%. A cambio, se tarda tiempo en construir una cartera porque al principio has llegado a tu nivel máximo de riesgo sin haber invertido todo el capital. Es cuando vas subiendo los stops cuando te vas metiendo con el resto del dinero. Es ser muy prudente, e ir poco a poco encontrando esos valores que te van dando la rentabilidad. Podemos comentar más si quieres sin problema ninguno aunque pienso que se escapa de la temática de este foro ;). Te puedo preguntar si conoces la programación de otros softwares como Amibroker o Visualchart?

Viewing 7 posts - 16 through 22 (of 22 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login