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 quo.
-
-
11/30/2016 at 9:52 PM #17626
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.
11/30/2016 at 11:42 PM #17632En 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.
12/03/2016 at 1:18 PM #17755Buen 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 parametersREM 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 declarationREM Special treatment for 2 first loaded bars
if BarIndex = 0 then
currentMax = high
currentMin = low
endifif 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 barsREM Normal coding body
if BarIndex > 1 then
currentMin = min(low, currentMin)if BarIndex = TradeIndex then
allowOrders = 0 // no cumulate orders after trade
endifif not onmarket then
exitPrice = currentMin * (1 – exitFilter/100)
endifif 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
endifif 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
endifif high < high[1] and currentMax > historicalMax then
barLow = low
endifif high > historicalMax then
exitPrice = currentMin * (1 – exitFilter/100)
endif
endif// cleaning
if not onmarket then
breakevenStop = 0 // reset breakEvenStop
endif
// end of normal coding bodyREM 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 managementREM 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
endifif 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 exitprice1 user thanked author for this post.
12/03/2016 at 1:28 PM #17757No sé si ha salido bien. Repito el código, just in case.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135// 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 = TRUEREM Customizable and optional parametersonce initialCapital= 50000 // initial capitalonce exitFilter = 3 // % below relative minimum to exitonce risk = 0.6 // % equity riskonce minimalCashSize = 1000 // minimal cash position sizeonce upForBreakeven = 10 // % price gain to move stop to breakevenonce gainAtBreakeven = 1 // % marginal profit at breakeven// end of customizable and optional parametersREM Variables declarationonce historicalMax = 0 // pivot high and buy stop priceonce currentMax = 0 // current maximum candidate to pivot highonce exitPrice = 0 // sell stop priceonce currentMin = 0 // current minimum candidate to sell stoponce breakevenStop = 0 // breakeven stoponce barLow = 0 // stores low of certain barsonce equity = 0 // current equityonce positionSize = 0 // number of shares to buyonce cashSize = 0 // cash investmentonce allowOrders = 0 // allow or disallow cumulate orders// end of variables declarationREM Special treatment for 2 first loaded barsif BarIndex = 0 thencurrentMax = highcurrentMin = lowendifif BarIndex = 1 thenif high > currentMax thencurrentMax = highendifif low < currentMin thencurrentMin = lowexitPrice = low * (1 - exitFilter/100)historicalMax = currentMaxendifendif// end of special treatment for 2 first loaded barsREM Normal coding bodyif BarIndex > 1 thencurrentMin = min(low, currentMin)if BarIndex = TradeIndex thenallowOrders = 0 // no cumulate orders after tradeendifif not onmarket thenexitPrice = currentMin * (1 - exitFilter/100)endifif high > currentMax thenbarLow = 0 // reset barLowcurrentMax = high// bullish engulfing barif low < low[1] and close > open thencurrentMin = lowexitPrice = currentMin * (1 - exitFilter/100)endifendifif low < low[1] and currentMax > historicalMax thenhistoricalMax = currentMaxallowOrders = 1if barLow > 0 thencurrentMin = min(low, barLow)elsecurrentMin = lowendifif not onmarket thenexitPrice = currentMin * (1 - exitFilter/100)endifendifif high < high[1] and currentMax > historicalMax thenbarLow = lowendifif high > historicalMax thenexitPrice = currentMin * (1 - exitFilter/100)endifendif// cleaningif not onmarket thenbreakevenStop = 0 // reset breakEvenStopendif// end of normal coding bodyREM Money and risk managementequity = initialCapital + STRATEGYPROFIT// calculate breakeven stop priceif onmarket and upForBreakeven > 0 thenif high >= PositionPrice * (1 + upForBreakeven/100) thenbreakevenStop = PositionPrice * (1 + gainAtBreakeven/100)endifendif// calculate number of shares and cash sizepositionSize = Round((equity * risk/100) / (historicalMax - exitPrice))cashSize = positionSize * historicalMax// end of money and risk managementREM Set buy and sell stop ordersif (not onmarket or allowOrders) and positionSize > 0 and cashSize >= minimalCashSize thenbuy positionSize shares at historicalMax + ticksize stopendifif onmarket and exitPrice > 0 thenexitPrice = max(breakevenStop, exitPrice)sell at exitPrice stopendif// end of set buy and sell stop orders//graph currentmin//graph historicalmax//graph currentmax//graph exitprice1 user thanked author for this post.
12/13/2016 at 8:36 PM #18480Hola 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.
12/17/2016 at 3:32 AM #18696Vamos, 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?
12/17/2016 at 11:07 AM #18698Buenos 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?
-
AuthorPosts
Find exclusive trading pro-tools on