Easylanguage | Sistema de trading: Tortugas

May 24, 2023 | TradeStation

He visto una plétora de publicaciones sobre las estrategias de comercio de tortugas donde se proporcionan las reglas y el código. Los códigos van desde una mera ruptura de Donchian hasta una representación bastante cercana. Sin retroalimentación de cartera dinámica es bastante imposible programar las restricciones de la cartera como explica Curtis Faith en su bien recibido «Camino de la Tortuga». Pero los otros componentes se pueden programar bastante cerca de las descripciones de Curtis. Quería proporcionar este código de una manera concisa para ilustrar algunas de las construcciones esotéricas de EasyLanguage y algunos atajos limpios. En primer lugar vamos a echar un vistazo a cómo el sistema de trading de las tortugas ha funcionado en el crudo durante los últimos 15 años.

Grafico de TradeStation
Gráfico de TradeStation del sistema de las tortugas

 

Si hay tendencias en el mercado, el sistema de trading de las tortuga lo atrapará. Mira cómo el mercado se recuperó en 2007 e inmediatamente se recuperó en 2008, y mira cómo la Tortuga atrapó los movimientos – impresionante. Pero vea cómo el sistema deja de funcionar en la congestión. Tomó una pequeña porción del movimiento de 2014 hacia abajo y ha hecho un gran trabajo de atrapar el colapso de la pandemia y el rebote. En mi último post, programé la función LTL (Last Trader Loser) para determinar el éxito/fallo de la entrada Turtle System 1. Lo modifiqué ligeramente para este post y lo usé en conjunto con Turtle System 2 Entry y el comercio piramidal AddOn de 1/2N para acercarme lo más posible al núcleo de la lógica de entrada/salida de tortugas.

Voy a proporcionar el ELD para que pueda revisar en su tiempo libre, pero aquí están las piezas importantes del código que es posible que no sea capaz de derivar sin una gran experiencia de programación.

Grafico del futuro del crudo en TradeStation
Gráfico del sistema de trading de las tortugas sobre el crudo en TradeStation
If mp[1] <> mp and mp <> 0 then 
begin
	if mp = 1 then
	begin	
		origEntry = entryPrice;
		origEntryName = "Sys1Long";
		If ltl = False and h >= lep1[1] then origEntryName = "Sys2Long";
	end;
	if mp =-1 then
	begin	
		origEntry = entryPrice;
		origEntryName = "Sys1Short";
		If ltl = False and l <= sep1[1] then origEntryName = "Sys2Short";
	end;

Este código determina si la posición actual del mercado no es plana y es diferente de la posición de mercado de la barra anterior. Si este es el caso, entonces se ha ejecutado una nueva operación. Esta información es necesaria para saber qué salida aplicar sin tener que vincularlas por la fuerza usando las palabras clave De Entry de EasyLanguage. Sólo necesito saber el nombre de la entrada. El entryPrice es el entryPrice. Aquí sé si el LTL es falso, y el entryPrice es igual o mayor /menor que (basado en la posición actual del mercado) que los niveles de entrada del sistema 2, entonces sé que el sistema 2 nos metió en el trade.

If mp = 1 and origEntryName = "Sys1Long" then Sell currentShares shares next bar at lxp stop;
If mp =-1 and origEntryName = "Sys1Short" then buyToCover currentShares shares next bar at sxp stop;

//55 bar component - no contingency here
If mp = 0 and ltl = False then buy("55BBO") next bar at lep1 stop;
If mp = 1 and origEntryName = "Sys2Long" then sell("55BBO-Lx") currentShares shares next bar at lxp1 stop;

If mp = 0 and ltl = False then sellShort("55SBO") next bar at sep1 stop;
If mp =-1 and origEntryName = "Sys2Short" then buyToCover("55SBO-Sx") currentShares shares next bar at sxp1 stop;

La clave de esta lógica son las palabras clave currentShares shares. Este código indica a TradeStation que liquide todas las acciones o contratos actuales en los niveles stop. Podría utilizar los contratos currentContracts si se siente más cómodo con los futuros La clave de esta lógica son las palabras clave currentShares shares. Este código indica a TradeStation que liquide todas las acciones o contratos actuales en los niveles stop. Podría utilizar los contratos currentContracts si lo prefiere.

 

Activación de la opción de piramidar en TradeStation

 

Antes de poder piramidar, debe activarla en Propiedades de estrategia.

Strategy Properties TradeStation
Ventana de diálogo en TradeStation para configurar piramidación

Esta lógica agrega posiciones desde la entrada originalPrecio en incrementos de 1/2N. La descripción de esta lógica es un poco borrosa. ¿Es el valor N la lectura ATR cuando se puso el primer contrato o se vuelve a calcular dinámicamente? Me equivoqué en el lado de la precaución y usé la N cuando se puso el primer contrato. Por lo tanto, para calcular las entradas largas de AddOn, basta con tomar el entryPrice original y agregar currentShares * .5N. Así que si currentShares es 1, entonces el siguiente nivel de pirámide sería entryPrice + 1* .5N. Si currentShares es 2 , entonces entryPrice + 2* .5N y así sucesivamente. El stop estará en 2N de la última entrada. Así que si pones 4 contratos (especificados en el libro de Curtis), entonces la salida final sería 2N desde donde agregaste el 4o contrato. Aquí está el código para eso.

vars: lastEntryPrice(0);
If cs <= 1 then lastEntryPrice = entryPrice;
If cs > 1 and cs > cs[1] and mp = 1 then lastEntryPrice = entryPrice + ((currentShares-1) * .5*NValue);
If cs > 1 and cs > cs[1] and mp =-1 then lastEntryPrice = entryPrice - ((currentShares-1) * .5*NValue);

//If mp = -1 then print(d," ",lastEntryPrice," ",NValue);

If mp = 1 then sell("2NLongLoss") currentShares shares next bar at lastEntryPrice-2*NValue stop;
If mp =-1 then buyToCover("2NShrtLoss") currentShares shares next bar at lastEntryPrice+2*NValue Stop;
 

Presento una nueva variable aquí: cs. CS significa currentShares y yo hago un seguimiento de ella de bar a bar. Si currentShares o cs es menor o igual a1 sé que la última entradaPrice era la entrada originalPrice. Las cosas se complican un poco más cuando empiezas a añadir posiciones – inicialmente no podía recordar si el entryPrice de EasyLanguage contenía el último entryPrice o el original – resulta que es el original – bueno saber. Por lo tanto, si currentShares es mayor que uno y currentShares de la barra actual es mayor que currentShares de la barra anterior, entonces sé que agregué otro contrato y por lo tanto debo actualizar lastEntryPrice. LastEntryPrice se calcula tomando el entryPrice original y agregando (currentShares-1) * .5N. Ahora esta es la entrada teóricaPrecio, porque no tengo en cuenta el deslizamiento en la entrada. Podrías hacer este ajuste. Por lo tanto, una vez que conozco el lastEntryPrice puedo determinar 2N a partir de ese precio.

 

Salir en 2N Trailing Stop

If mp = 1 then sell("2NLongLoss") currentShares shares next bar at lastEntryPrice-2*NValue stop;
If mp =-1 then buyToCover("2NShrtLoss") currentShares shares next bar at lastEntryPrice+2*NValue Stop;

Ese es todo el código ingenioso. A continuación se muestra la función y ELD para mi implementación del sistema de entrada dual Turtle. Verá un código bastante sofisticado cuando se trata de la entrada del sistema 1 y esto es debido a estos escenarios:

¿Qué pasa si usted es teóricamente corto y son teóricamente detenidos para un verdadero perdedor y se puede entrar en la misma barra en una operación larga.

¿Qué pasa si usted es teóricamente corto y el punto de inversión resultaría en una operación perdedora. No registraría al perdedor a tiempo para entrar en la posición larga en el punto de inversión.

¿Qué pasa si usted es realmente corto y el punto de inversión daría como resultado un verdadero perdedor, entonces usted querría permitir la inversión en ese punto

Probablemente haya otros escenarios, pero creo que cubrí todas las bases. Sólo avísame si ese no es el caso. Lo que hice para validar las entradas fue que programé una ruptura/fallo de 20/10 días con una parada 2N y luego revisé la lista y eliminé las operaciones que siguieron a una pérdida no 2N (10 salida de barra para una pérdida o una victoria.) Entonces me aseguré de que esas operaciones no estaban en la salida del sistema completo. Hubo un poco de prueba y error. Si ves un error, como dije, avísame.

Artículo escrito por Quantified Models

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