
Hola amigos: al fin he comprendido el proceso de enviar ordenes desde Amibroker a TWS.
Ningun sistema (de los que he encontrado) vale para todas las ocasiones, pero algunos son muy utiles para darse una vuelta mientras se queda el "automatico" conectado.
Os cuento el proceso por si a alguno le interesa.
1.- Recivir datos desde TWS a Amibroker:
Una vez bajado e instalado Amibroker (ya esta la version 4.9 en la libreria), se selecciona file/data base settings, y en data source se selecciona "Interactivebrokers data pug in", en local data se marca "enable" y en number of bars se marca "500.000", en base interval "1 minute".
En la TWS se selecciona "Configure"/API se marca "Habilitar active x" y "Permitir ordenes en conexion".
En el chart abierto de Amibroker en el extremo inferior derecho en boton rojo/verde podemos selecionar la long de backfill (permite 30 dias en barras de 1 minuto).
Se nos abre una ventana pidiendonos permiso para conectar, aceptamos y ya recivimos los datos de la TWS en tiempo real en Amibroker.
2.- Conectar Amibroker con TWS:
Debemos usar el programa "Amibroker Auto-trading interface for Interactive Brokers" lo bajamos desde la direccion "http://www.amibroker.com/at/at1011beta.exe"
lo instalamos en el directorio de Amibroker. En la instalacion nos pedira un codigo y nos advertira de que si no lo tenemos podemos rellenar los datos de la ventana( nombre y email) y darle a "enviar" para solicitarlo. Lo hacemos y al miomento nos llega el codigo. Rellenamos la casilla de codigo...y nos felicitamos porque ya esta conectado Amibroker con TWS.
3.-Envio de ordenes a TWS.
En el enlace http://www.amibroker.com/at/at1011beta.exe" hay muchos ejemplos y muy claros. Yo he hecho y comprovado este: En el editor lo copiais o haceis un sistema nuevo y lo insertais en el chart como si fuera un indicador mas....asombrosamente...funciona.
El sistema Compra/vende cuando el cierre Cruza la media de periodo 18.
....y de esta manera: AL FIN PODEMOS HACER SISTEMAS QUE ENVIEN ORDENES DESDE AMIBROKER A TWS.
Saludos.
periodo=18;
Buy= Cross(C,MA(C,periodo));
Sell= Cross(MA(C,periodo),C);
if (LastValue(Buy) )
{
ibc=GetTradingInterface("IB");
//check if we are connected OK
if(ibc.IsConnected() )
{
// check if we dont have already open position on this stock
if(ibc.GetPositionSize("fesx jun 07-dtb-fut" ) ==0)
{
//trasmit order
ibc.PlaceOrder("fesx jun 07-dtb-fut" , "buy",1,"mkt",0,0,"Day",True);
}
}
}
if (LastValue(Sell) )
{
ibc=GetTradingInterface("IB");
//check if we are connected OK
if(ibc.IsConnected() )
{
// check if we dont have already open position on this stock
if(ibc.GetPositionSize("fesx jun 07-dtb-fut" ) == 1)
{
//trasmit order
ibc.PlaceOrder("fesx jun 07-dtb-fut" , "sell",1,"mkt",0,0,"Day",True);
}
}
}
Color=ParamColor("Color",colorRed);
style=ParamStyle("Style",styleLine,maskAll);
arrows= ParamToggle("Display Arrows","No|Yes",1);
Plot(C,"PCompraVenta(1)",colorBlue,Style);
Plot(MA(C,periodo),"PCompraVenta(1)Media",color,style);
if ( arrows)
{
PlotShapes(Buy*shapeUpArrow+Sell*shapeDownArrow,IIf(Buy,colorGreen,colorRed));
}