¿Buscas el curso gratuito? Aquí lo tienes.

Tradestation - EasyLanguage

Hola, hace tiempo que quería ir mostrando algunos avances que hice con EasyLanguage. No sé si volveré a esta plataforma, así que quiero ir publicando antes de que se me olvide ;)

Uno de los aspectos que creo que tardamos en explotar de este lenguage es la Oritentación a Objetos. EasyLanguaje tiene algunas características de este tipo de lenguajes, aunque no todas.

¿Te has planteado cómo saber si una posición se ha abierto o se ha cerrado?

Puedes hacerlo consultando contínuamente el valor de Marketposition, pero esto no te va a dar la posibilidades de manejar varias posiciones.

Existe una clase PositionProvider que te facilitará el trabajo y te dará mucha información.
En la ayuda tenéis la información sobre ella: https://help.tradestation.com/10_00/eng/tsdevhelp/elobject/class/positionsprovider_class.htm

Para comenzar a utilizarla debéis crear una instancia de esta clase:

{ Declaramos variable }

PositionsProvider PositionInfo ( NULL ),

{ Instanciamos la clase }

PositionInfo = new PositionProvider;

Aquí ya tenéis la instancia creada en la variable  PositionInfo. Necesitamos pasarle algunos valores para poder utilizarla.
El primer valor es el ID de la cuenta, que podéis ponerlo a mano o lo podéis obtener con la función GetAccountID().

{ Delcaramos una variable para guardar el ID de la cuenta }

string AccountID (GetAccountID());

{ Añadimos el valor a nuestro PositionProvider }

PositionInfo.Accounts        += AccountID;

Como véis utilizamos el operador "+=" esto es porque podemos añadir más de un identificador de cuenta para gestionarlas.

{ Añadimos el símbolo sobre el que queremos obtener información }

PositionInfo.Symbols         += Symbol;   

{ Pedimos que se ejecute en tiempo real }

PositionInfo.Realtime         = true;

{ Habilitar la carga }

PositionInfo.Load             = true ; 

{ Definimos el método que queremos ejecutar cuando se produzca cualquier cambio }

PositionInfo.Updated     += PositionUpdate ;

Nos falta declarar el método PositionUpdate, que se ejecutará cuando ocurra un cambio en las posiciones de las cuentas seleccionadas.
Los cambios pueden ser: Añadida, Eliminada, Actualizada, Inicializada. Esto lo podréis ver en la ayuda.

Por ejemplo, un método sencillo podría servir para llevar la cuenta de cuantas posiciones tenemos abiertas en una variable (lo que ya hace Marketposition) y además podríamos añadir cuantos contratos tenemos en total en estas posiciones.

Method void PositionUpdate( Object PositionInfoSender, PositionUpdatedEventArgs PositionInfoUpdateArgs )  
    begin       	                
    	if PositionInfo.Count > 0 then begin  
                { Hacemos referencia a la primera cuenta del proveedor }
        	ActualMP = PositionInfo[0].Quantity; 
    	end else  
        	ActualMP = 0 ; 
    	StrategyPosition = MarketPosition * CurrentShares;                                                     
    end;<br>

Espero que sea de ayuda.
Saludos.

Comentarios

  • Luismi
    Luismi 197 puntos
        Muchas gracias por el aporte, me hace gracia cuando dices un metodo sencillo :), pero bueno supongo que leyendolo media docena de veces y trasteando en el easylenguage aprenderemos algo.
       A efectos practicos esto para que sirve, para hacer referencia a tu cuenta y dimensionar las posiciones con arreglo al capital ,por ejemplo , o eso ya es otra cosa?
  • Manuel
    Manuel 107 puntos
    Hola, te puede servir si quieres gestionar dos posicones abiertas y quieres saber cuál se ha cerrado, o tienes un un robot que puede abrir posiciones en símbolos distintos. Tamibién puedes limitar el total de contratos abiertos en un momento.
    Casi todo se puede hacer con variables, pero siempre es recomendable usar las herramientas que nos aporta la plataforma.
    Para los alumnos de este curso tiene una utilidad interesante, puedes usarla para guardar en un fichero el resultado de una operación al finalizar. 

    Saludos.
  • luis
    luis 399 puntos

    Muchas gracias Manuel por el tremendo aporte!

    Me he dado cuenta de que el editor que usábamos en el foro no funciona del todo bien con los códigos así que puse uno nuevo. Los posts antiguos siguen con el editor antiguo por compatibilidad pero los nuevos ya irán con el nuevo.

    Diseñar e implementar ejemplos sencillos ayuda mucho a entenderlo :)

    👌👌👌

  • Qué buen aporte Manuel!! A ver si me animo yo también a compartir.

    🇪🇦

  • enormi
    enormi 183 puntos

    Muy buen aporte, se nota que manejas bien la programación. Otros nos estamos peleando ahora con lo básico, esperemos llegar pronto a ese nivel. Con paciencia y dedicación….

  • Todos tus post son super didácticos Manuel! Sigue así por favor! se aprende mucho de ellos! Como dice Enormi, para los que tenemos poco nivel de programación, cualquier ejemplo de alguien con más nivel nos es de gran ayuda! Gracias!