Código para rollover automatizado

Oct 12, 2022 | EasyLanguage

¿Pueden los traders de futuros confiar en los contratos continuos? [parte – 1]

Este artículo fue redactado por George Pruitt y publicado en su blog el 08 de septiembre del 2022. Tal como le planteamos en artículos anteriores, para un Quantum Trader, entender y programar sistemas de trading es una tarea común. Aquí le presentamos un código que le permite de manera automática cambiar de contrato cuando es el momento más oportuno:

Bueno, usted tiene que hacerlo, ¿no?

Cuando trabajaba en Futures Truth, probábamos todo con nuestro software Excalibur. Este software utilizaba datos de contratos individuales y cargaba todo el historial (bueno, la parte que manteníamos) de cada contrato en la memoria y ejecutaba los rollovers en un momento determinado del mes. Excalibur tenía sus limitaciones, ya que algunos contratos de futuros tenían un historial muy corto y las fechas de renovación tenían que estar predeterminadas, es decir, no eran dinámicas. Con el paso de los años, solucionamos el problema de los historiales cortos creando un contrato continuo dinámico que se remontaba en el tiempo durante el número de días necesarios para un cálculo. También arreglamos la base de datos con una frecuencia y unas fechas de renovación más adecuadas. Así que, al final, el software simulaba lo que yo esperaba de la negociación de contratos de futuros reales. Este software fue escrito originalmente en Fortran y para el Macintosh. También tenía limitaciones en el análisis de la cartera, ya que trabajaba a través de la cartera, un mercado completo a la vez. Incluso con todas estas limitaciones, realmente pensé que los rendimientos reflejaban mejor lo que un operador podría ver en tiempo real. Hoy en día, no hay muchas plataformas de simulación, por no decir ninguna, que hagan pruebas con contratos individuales. Las razones principales son la complejidad del software y la gestión de la base de datos. Sin embargo, si usted está dispuesto a hacer el trabajo, puede acercarse a las pruebas sobre los datos de los contratos individuales con EasyLanguage.

Paso 1 – Obtener las fechas de rollover

Esto es fundamental, ya que las fechas se utilizarán para salir de un contrato y entrar en otro. En este post, voy a probar una estrategia simple en los futuros del crudo. He elegido el crudo porque se renueva cada mes. Algunos proveedores de datos utilizan una fecha específica para renovar los contratos, como los datos de Pinnacle. En el trading en tiempo real, también hice esto. Teníamos un calendario para cada mes y marcábamos las fechas de rollover para todos los mercados negociados al principio de cada mes. El crudo se renovaba el 11 o el 12 del mes anterior al vencimiento. Por lo tanto, si negociamos el contrato de septiembre de 2022, lo haremos el 11 de agosto. Se colocaba una sola orden (rollover spread) para vender (si estaba largo) el contrato de septiembre y comprar el contrato de octubre en el mercado simultáneamente. A veces, nos movíamos en el rollover ejecutando dos órdenes separadas, con la esperanza de obtener una mejor ejecución. Nunca he sido capaz de encontrar una base de datos histórica de cuando TradeStation realiza sus rollovers. Cuando se utiliza el símbolo @CL por defecto, se permite a TradeStation utilizar una fórmula para determinar el mejor momento para realizar un rollover. Esto probablemente se basa en el volumen y el interés abierto. TradeStation le permite elegir varios desencadenantes de rollover diferentes cuando se utilizan sus datos continuos.

You can choose the type of activation - (3) dynamic or (4) time based

Usted puede elegir el tipo de activación – (3) dinámica o (4) basada en el tiempo.

Me estoy adelantando, porque podemos utilizar simplemente los datos por defecto de @CL para obtener las fechas de renovación (casi). El petróleo es uno de esos mercados extraños en los que el LTD (último día de negociación) se produce antes que el FND (primer día de aviso). La mayoría de los mercados te avisan antes de que un enorme camión vuelque 1000 barriles de petróleo en tu puerta. Con el crudo hay que ser Johnny en el momento. El rollover es sólo un dolor de cabeza cuando se opera con futuros, pero puede ser un dolor de cabeza muy caro si no se sale a tiempo. Algunos mercados se liquidan en efectivo, por lo que el rollover no es tan importante, pero otros dan lugar a la entrega de la materia prima. La mayoría de las empresas de compensación le ayudarán a deshacer un contrato vencido por una pequeña comisión (relativamente pequeña). Te llamarían y te dirían: «George, tienes que salir de ese crudo de septiembre pronto». Algunas empresas liquidarían automáticamente el contrato infractor en su nombre, lo que suena bien, pero podría costarle. A lo largo de mis 30 años de experiencia en el comercio de futuros, me he visto atrapado unas cuantas veces en el proceso de entrega. Usted puede determinar estos FND y LTD desde el sitio web de la CME. A continuación, la descripción de la expiración de los futuros del crudo.

La negociación finaliza 3 días hábiles antes del vigésimo quinto día del mes anterior al mes del contrato. Si el vigésimo quinto día no es un día hábil, la negociación termina 4 días hábiles antes del vigésimo quinto día del mes anterior al mes del contrato.

Puede consultar esto en la página web de su broker de confianza o en los prácticos calendarios que enviaban en Navidad. En base a esta descripción, el contrato de crudo de septiembre de 2022 vencería el 20 de agosto y aquí está la razón

  • El 25 de agosto es martes
  • El 24 de agosto es lunes – DÍA1
  • El 21 de agosto es viernes – DÍA2
  • El 20 de agosto es jueves – DÍA3

Esta es la belleza de una maquinaria bien engrasada o de una bolsa. El FND se producirá exactamente como se describe. Todo lo que tienes que hacer es conseguir todos los calendarios de los últimos diez años y encontrar el día 25 del mes y contar hacia atrás tres días hábiles. O si el 25 cae en fin de semana contar hacia atrás cuatro días hábiles. Sería una tarea ardua, ¿verdad? Por suerte, podemos tener los datos y un script de EasyLanguage que lo haga por nosotros. Eche un vistazo a este código y vea si tiene algún sentido para usted.

Case "@CL":
	If dayOfMonth(date) = 25 and firstMonthPrint = false then
	begin
		print(date[3]+19000000:8:0);
		firstMonthPrint = true;
	end;
	If(dayOfMonth(date[1]) < 25 and dayOfMonth(date) > 25 ) and firstMonthPrint = false then
	begin
		print(date[4]+19000000:8:0);
		firstMonthPrint = true;
	end;

Código para imprimir todos los FND del crudo.

He creado una herramienta para obtener el FND o LTD de cualquier futuro de materias primas examinando la fecha. En este ejemplo, estoy utilizando un Switch-Case para determinar qué lógica se aplica al símbolo del gráfico. Si el símbolo del gráfico es @CL, miro si el día 25 del mes está presente y si lo está, muestra la fecha 3 días antes. Si el día del mes de hoy es mayor que 25 y el día del mes anterior es menor que 25, sé que el 25 ocurrió en un fin de semana y debo mostrar la fecha cuatro barras antes. Estas fechas son fechas FN y no se pueden utilizar tal cual para simular un rollover. Es mejor estar fuera antes de la FND para evitar el proceso de entrega. La fecha de rollover en Pinnacle del crudo es el día 11 del mes anterior para los contratos continuos de crudo. Apunté a este día del mes con mi lógica. Si el FND normalmente cayó el 22 del mes, entonces debería retroceder 9 o 10 días hábiles para acercarme al 11 del mes. También deseaba utilizar la salida directamente con una estrategia EasyLanguage así que modifiqué mi salida para que fuera EasyLanguage exacto.

Case "@CL":
	If dayOfMonth(date) = 25 and firstMonthPrint = false then 
	begin
	value1 = value1 + 1;
		print("rollArr[",value1:1:0,"]=",date[9]+19000000:8:0,";");
		firstMonthPrint = true;
	end;
	If(dayOfMonth(date[1]) < 25 and dayOfMonth(date) > 25 ) and firstMonthPrint = false then
	begin
		value1 = value1 + 1;
		print("rollArr[",value1:1:0,"]=",date[10]+19000000:8:0,";");
//		print(date[4]+19000000:8:0);
		firstMonthPrint = true;
	end;


// example of output

rollArr[103]=20210312;
rollArr[104]=20210412;
rollArr[105]=20210512;
rollArr[106]=20210614;
rollArr[107]=20210712;
rollArr[108]=20210812;
rollArr[109]=20210913;
rollArr[110]=20211012;
rollArr[111]=20211111;
rollArr[112]=20211210;
rollArr[113]=20220111;
rollArr[114]=20220211;
rollArr[115]=20220314;
rollArr[116]=20220411;
rollArr[117]=20220512;
rollArr[118]=20220610;
rollArr[119]=20220712;
rollArr[120]=20220812;

Código para imprimir nuestras 9 o 10 barras antes de FND en el actual EasyLanguage

Ahora que tenía las fechas teóricas de rollover para mi análisis, tenía que asegurarme de que los datos que iba a utilizar coincidían exactamente. Como has visto antes, puedes elegir la fecha de rollover para los datos de tu gráfico. Y también puede determinar el ajuste que debe añadirse o restarse a todos los valores anteriores, basándose en la diferencia entre los precios de cierre en el momento del cambio de fecha. Yo jugué con el número de días anteriores a FND y seleccioné no ajustado para el suavizado de los datos anteriores.

Real data with which I have simulated the rollovers

Datos reales con los que he simulado los rollover

 

¿Cómo determiné que son 8 días antes de la primera fecha de notificación? Grafiqué diferentes datos utilizando un número diferente de días previos y determiné que 8 proporcionaba un punto óptimo entre el interés abierto de los datos del contrato antiguo y del nuevo. ¿Pueden ver los puntos de rollover en el siguiente gráfico? No haga caso de las operaciones – se trata de una prueba beta.

The Open Interest Valley is the rollover date

El Valle de Interés Abierto es la fecha de rollover

 

Las fechas en las que el interés abierto crea un valle se alineaban muy estrechamente con las fechas que había impreso utilizando mi función de búsqueda de fechas de FND. Para estar seguro, comparé las fechas y arreglé los datos de mi matriz para que coincidieran exactamente con el gráfico. Aquí hay dos operaciones de rollover – ahora son correctas.

Using a continuous tight contract you would not see these trades

Utilizando un contrato continuo ajustado no se verían estas operaciones

 

Esta publicación resultó ser un poco más larga de lo que pensaba, así que publicaré los resultados de usar un contrato continuo ajustado sin rollovers, y los resultados usando contratos concatenados no ajustados con rollovers. La estrategia será una simple entrada/salida donchiana de 40/20 barras. Tal vez le sorprendan los resultados – esté atento.

Artículo cedido por cortesía de George Pruitt

Para leer nuestro anterior artículo referente a la parte 1, haga clic en este enlace: ¿Pueden los traders de futuros confiar en los contratos continuos? [parte – 2]

Si desea ver parte del código que se ha utilizado en este artículo, lo tenemos disponible para quien los desee, para solicitarlo haga clic en este enlace: Contacto

Canal de YouTube de Quantified Models

En nuestro canal de YouTube tenemos varios videos disponibles que pueden resultarle muy útiles para desarrollar sistemas de trading.

Esperamos que esta información te haya sido de utilidad.

Subscribe to our Newsletter

Join our mailing list to receive the latest news and updates from Quantified Models team.

Subscribe to our Newsletter

You have Successfully Subscribed!

Ir al contenido