Archivos del mes julio, 2006
Publicado por Diego Palmeira - 25/07/06 a las 10:07:28 am
Hola amigos,
En vista de que para las invocaciones desde java hay algunas dudas al respecto, he pensado que lo mejor seria aclararlo con un ejemplo concreto y operativo. De igual modo explicar paso a paso como hacer para tener un proyecto Java bien configurado, funcionando y que nos sirva de base para programar nuestros propios sistemas.
Es por esto que he decidido crear un proyecto que se llamará “jForex Template” y que subiré en breve al blog para que la gente interesada pueda gratuitamente bajárselo.
Este consistirá en un proyecto de MyEclipse, que contendrá todo lo necesario para generar el JAR de nuestra aplicación y asi podais probar vuestras propias experiencias para automatizar operaciones, y quién sabe, quizás dar con una buena fórmula para ganar dinero !
Un saludo
Diego
Publicado por Diego Palmeira - 17/07/06 a las 07:07:53 pm
Hola,
Hoy voy a explicar como desde Java se puede lanzar una orden de entrada o Entry Order (en inglés), utilizando la API gratuita de FXCM llamada Order2Go.
Nota: Para poder utilizar desde java la API, es necesario tener instalado la plataforma de operaciones y una libreria llamada JACOB que es un puente entre COM y Java, ya que la API que proporcionan gratuitamente es un componente de Microsoft COM.
La librería Jacob (JAVA-COM Bridge) se puede descargar de los siguientes sitios:
http://danadler.com/jacob/
http://sourceforge.net/projects/jacob-project/
La plataforma de operaciones se puede descargar de FXCM al igual que la API Order2Go
http://www.fxcm.com/
http://www.fxcmespanol.com/
La API de FXCM posee un método llamado CreateEntryOrder, que sirve para lanzar una orden de entrada. Esto quiere decir que se puede poner una orden la cual entrará en el mercado cuando cumpla ciertas condiciones, como por ejemplo alcanzar un precio determinado.
Ejemplo de invocación desde JAVA:
Variant entryOrder1 = null;
Variant entryOrder2 = null;
String sAccountName = “xxxxxxxx”; // Numero de cuenta. Se puede obtener desde la plataforma de operaciones.
String sInstrument = “EUR/USD”;
// Calculamos datos para la orden de compra.
boolean bBuy = true;
int iLotsNo = 10000;
double dRate = xxxxxx;
double dStop = xxxxxx;
double dLimit = xxxxxx;
int iTrailMinMove = 0;
Variant OrderNo = new Variant();
Variant DealerInt = new Variant();
System.out.println(“Lanzando orden de compra…”);
entryOrder1 = Dispatch.callN(TradeDeskHelper.tradeDesk, “CreateEntryOrder”, new Object[] {
sAccountName,
sInstrument,
new Boolean(bBuy),
new Integer(iLotsNo),
new Double(dRate),
new Double(dStop),
new Double(dLimit),
new Integer(iTrailMinMove),
OrderNo,
DealerInt});
Y aquí, la documentación del método CreateEntryOrder es:
TradeDeskAut.CreateEntryOrder
Brief
Create entry order
Declaration
Function CreateEntryOrder
|
(sAccountName As String, sInstrument As String, bBuy As Bool, iLotsNo As Integer, dRate As Double, dStop As Double, dLimit As Double, iTrailMinMove As Integer, ByRef OrderID as Variant, ByRef sDealerIntervention as Variant)
|
Details
Name
|
Description
|
sAccountName
|
Account name
|
sInstrument
|
Currency pair
|
bBuy
|
Is it buy or sell entry order
|
iLotsNo
|
Number of lots
|
dRate
|
Order rate
|
dStop
|
Stop level value (if 0, no stop level)
|
dLimit
|
Limit level value (if 0, no limit level)
|
iTrailMinMove
|
Value of trailing move (or 0)
|
sOrderID
|
[out] ID of created order
|
sDealerIntervention
|
[out] Dealer intervention flag value.’Y’ if order must be processed manually by dealer, in this case order will be not created automatically, it should be processed by dealer. Trader can accept requoted order using AcceptOrder method.
|
Description
Creates entry order. This method can be executed only by trader.
Publicado por Diego Palmeira - 11/07/06 a las 08:07:04 am
Muchas veces tardamos mucho tiempo en probar un sistema automatizado de inversión realizando numerosas pruebas para ver si funciona, y cual es su rendimiento. En muchas ocaciones esto se hace muy pesado a causa que solo podemos ejecutar nuestro sistema en tiempo real contra eventos del mercado y esto nos hace perder un valioso tiempo, puesto que para poder asegurar que el sistema de inversión funciona debemos probarlo un tiempo prudencial.
Una posible solución a este problema es contar con datos históricos para probar nuestros sistemas, y de esta forma evitar el retardo y sobrecarga que nuestro sistema emplea por ejemplo en hacer login, o esperar a que los “ticks” del mercado se produzcan, etc… y en mucho menos tiempo disparar solo el proceso que analiza los datos y actua para dar como salida los resultados de por ejemplo meses de ejecución en unas horas, adelantando así el reloj de operaciones para poder descartar rápidamente un sistema o afinar sus valores y hallar el esperado en mucho menos tiempo !
Para esto he encontrado 2 webs que proporcionan de forma gratuita los datos históricos del forex
http://disktrading.is99.com/disktrading/
http://www.fin-rus.com/analysis/export/default.asp
Asique adelante y a probar los sistemas de forma más eficiente !
Publicado por Diego Palmeira - 02/07/06 a las 05:07:56 pm
Hola amigos, aquí os dejo un método java que yo utilizo para realizar el login en mis sistemas automáticos.
La idea es invorcarlo por ejemplo:
login(“FX5M111111111″,”1111″,”http://www.fxcorporate.com”,
“demo”);
public boolean login(String login, String password, String url, String type) {
ActiveXComponent eventsSink = new ActiveXComponent(
“FXcore.TradeDeskEventsSink”);
System.out.println(“Subscribing to table events…”);
subscription = Dispatch.call(tradeDesk, “Subscribe”, eventsSink);
TradeDeskHelperBuy.tradeDeskEventsSink = new TradeDeskEventsSinkBuy();
new DispatchEvents(eventsSink.getObject(),
TradeDeskHelperBuy.tradeDeskEventsSink);
System.out.println(“Connecting to FXCM…”);
Dispatch.call(tradeDesk, “Login”, login, password, url, type);
System.out.println(“Connected”);
TradeDeskHelperBuy.connected = true;
return true;
}
Espero que os sea de utilidad, un saludo !