AMI Automatico
AMI Automatico
Hola, saludos a todos,
Hacía tiempo que no entraba en el foro, ... hay que entrar más, siempre hay buena compañía y mucha información útil.
Con el ánimo de aportar algo pongo el código de un sistemilla con la automatización de las órdenes, aviso que no funciona fino fino y hay que vigilarlo, aunque está muy lioso y redundante, lo he mejorado algo y veo que hay quien tiene cierto interés.
Ahora, al mismo tiempo que contrata pone un stop a la distancia que quieras, y cuando se cierran las posiciones lo quita.
Funciona casi siempre, pero a veces no sé porqué falla.
Yo lo tengo en un sistema más tranquilo, pero para pruebas lo tengo en este sistemilla y en Tick, a lo mejor por esto falla más, porque entra y sale muy rápido.
Primero hay que bajarse, instalar y autorizar, con una clave que hay que pedir a los de AMI por emilio (X-Tra tiene un artículo), el IB Controller Autotrading Interface desde http://www.amibroker.com/at/ .
Luego abrir una ventana nueva de sistemas, pegar el script que pongo al final, guardar el sistema e insertarlo en el chart.
Hay que usarlo en la cuenta Paper de IB con el contrato de Marzo del EUR, para usarlo en el siguiente hay que cambiar las claves en el script donde pone contrato.
Los que teneis algún interés probadlo y contarnos.
Saludos
////Para probar IBController ////
Ind1=Ref(MACD(11,19),-1);
AMArillo=Ref(MACD(5,10),-1);
Azul=Ind1+0.00001;
Rojo=Ind1-0.00001;
Buy=Cross(AMArillo,Rojo) ;
Short=Cross(Azul,AMArillo) ;
Sell=Cross(AMArillo,azul) ;
Cover=Cross(Rojo,AMArillo) ;
CoverPrice=O;
ShortPrice=O;
SellPrice=O;
BuyPrice = O;
Buy=ExRem(Buy,Short);
Short=ExRem(Short, Buy);
Cover=ExRem(Cover,Short);
Sell=ExRem(Sell,Buy);
//StochK(14); Plot(StochK(14,3),"",colorBlack);
Plot(Rojo,"Ind",colorRed);
Plot(Azul,"Ind2",colorBlue);
Plot(AMArillo,"I3",colorYellow);
PlotShapes(IIf (Cover,shapeUpArrow,shapeNone),colorWhite,0,Graph0,-12);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorYellow,0,Graph0,-12);
PlotShapes(IIf (Buy,shapeUpArrow,shapeNone),colorGreen,0,Graph0,-12);
PlotShapes(IIf(Short,shapeDownArrow,shapeNone),colorRed,0,Graph0,-12);
//// IBController //////
Pos=1;
Stop=0.001;
Contrato="6EH7-GLOBEX-FUT";
OrderIDB = StaticVarGetText("OrderIDB"+Contrato);
OrderIDS = StaticVarGetText("OrderIDS"+Contrato );
ORderIDC= StaticVarGetText("OrderIDC"+Contrato );
ORderIDSL= StaticVarGetText("OrderIDSL"+Contrato );
ibc = GetTradingInterface("IB");
////////////////////////////////// BUY ////////////////////////////
if( (LastValue( Buy )==1) AND (ibc.IsOrderPending(OrderIDB) == False) AND (ibc.GetPositionSize( Contrato ) <= 0) )
{
if( ibc.IsConnected() )
{
if(( ibc.GetPositionSize( Contrato ) <= 0 ))
{
if( ibc.GetStatus(ORderIDS) =="PreSubmitted")
{
do{
ibc.CancelOrder(ORderIDS);
}while (1<0>=0) )
{
if( ibc.IsConnected() )
{
if(( ibc.GetPositionSize( Contrato ) >=0 ))
{
if( ibc.GetStatus(ORderIDB) =="PreSubmitted")
{
do{
ibc.CancelOrder(ORderIDB);
}while (1<0);
}
if (ibc.IsOrderPending( ORderIDS) == False)
{
Corto= abs(ibc.GetPositionSize( Contrato ))+Pos;
ParentIDS = ibc.PlaceOrder
( Contrato , "SELL", Corto, "MKT", 0, 0, "GTC", False,1,"ignoreRth" );
stopS=LastValue(ValueWhen(Short==1,O,1),True);
OrderIDS=ibc.PlaceOrder
( Contrato , "BUY", Pos, "STP", 1.2150, stopS+Stop, "GTC", True,1,"ignoreRth",ParentIDS);
StaticVarSetText("OrderIDS"+Contrato , OrderIDS);
}
}
}
}
////////////////////////////// COVER /////////////////////////////
if ( NOT(ibc.GetStatus(ORderIDC) == "PreSubmitted") AND (NOT(ibc.GetStatus(ORderIDC) == "Filled")) )
{
if( (LastValue( Cover )==1) AND (ibc.IsOrderPending( ORderIDC)==False) AND (ibc.GetPositionSize( Contrato )<0) )
{
if ( NOT(ibc.GetStatus(ORderIDC) == "PreSubmitted") AND (NOT(ibc.GetStatus(ORderIDC) == "PendingSubmit") ) )
{
if( ibc.GetPositionSize( Contrato ) <0 )
{ ibc.GetStatus(ORderIDC);
if ( (ibc.IsOrderPending( ORderIDC) == False))
{
Largo=abs(ibc.GetPositionSize( Contrato ));
OrderIDC = ibc.PlaceOrder
( Contrato , "BUY", Largo, "MKT", 0, 0, "GTC", True,1,"ignoreRth" );
StaticVarSetText("OrderIDC"+Contrato , OrderIDC);
if( (ibc.GetStatus(ORderIDS) =="PreSubmitted") )
{
do{
ibc.CancelOrder(ORderIDS);
}while (1<0>0) )
{
if( NOT(ibc.GetStatus(ORderIDSL) == "PreSubmitted") AND (NOT(ibc.GetStatus(ORderIDSL) == "PendingSubmit")) )
{
if (ibc.IsOrderPending( ORderIDSL) == False)
{
if(( ibc.GetPositionSize( Contrato ) >0 ))
{
Corto= abs(ibc.GetPositionSize( Contrato ));
OrderIDSL = ibc.PlaceOrder
( Contrato , "SELL", Corto, "MKT", 0, 0, "GTC", True,1,"ignoreRth" );
StaticVarSetText("OrderIDSL"+Contrato , OrderIDSL);
if( ibc.GetStatus(ORderIDB) =="PreSubmitted")
{
do{
ibc.CancelOrder(ORderIDB);
}while (1<0);
}
}
}
}
}
}
Plot(C,"SB",colorBlack,styleOwnScale);
Hacía tiempo que no entraba en el foro, ... hay que entrar más, siempre hay buena compañía y mucha información útil.
Con el ánimo de aportar algo pongo el código de un sistemilla con la automatización de las órdenes, aviso que no funciona fino fino y hay que vigilarlo, aunque está muy lioso y redundante, lo he mejorado algo y veo que hay quien tiene cierto interés.
Ahora, al mismo tiempo que contrata pone un stop a la distancia que quieras, y cuando se cierran las posiciones lo quita.
Funciona casi siempre, pero a veces no sé porqué falla.
Yo lo tengo en un sistema más tranquilo, pero para pruebas lo tengo en este sistemilla y en Tick, a lo mejor por esto falla más, porque entra y sale muy rápido.
Primero hay que bajarse, instalar y autorizar, con una clave que hay que pedir a los de AMI por emilio (X-Tra tiene un artículo), el IB Controller Autotrading Interface desde http://www.amibroker.com/at/ .
Luego abrir una ventana nueva de sistemas, pegar el script que pongo al final, guardar el sistema e insertarlo en el chart.
Hay que usarlo en la cuenta Paper de IB con el contrato de Marzo del EUR, para usarlo en el siguiente hay que cambiar las claves en el script donde pone contrato.
Los que teneis algún interés probadlo y contarnos.
Saludos
////Para probar IBController ////
Ind1=Ref(MACD(11,19),-1);
AMArillo=Ref(MACD(5,10),-1);
Azul=Ind1+0.00001;
Rojo=Ind1-0.00001;
Buy=Cross(AMArillo,Rojo) ;
Short=Cross(Azul,AMArillo) ;
Sell=Cross(AMArillo,azul) ;
Cover=Cross(Rojo,AMArillo) ;
CoverPrice=O;
ShortPrice=O;
SellPrice=O;
BuyPrice = O;
Buy=ExRem(Buy,Short);
Short=ExRem(Short, Buy);
Cover=ExRem(Cover,Short);
Sell=ExRem(Sell,Buy);
//StochK(14); Plot(StochK(14,3),"",colorBlack);
Plot(Rojo,"Ind",colorRed);
Plot(Azul,"Ind2",colorBlue);
Plot(AMArillo,"I3",colorYellow);
PlotShapes(IIf (Cover,shapeUpArrow,shapeNone),colorWhite,0,Graph0,-12);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorYellow,0,Graph0,-12);
PlotShapes(IIf (Buy,shapeUpArrow,shapeNone),colorGreen,0,Graph0,-12);
PlotShapes(IIf(Short,shapeDownArrow,shapeNone),colorRed,0,Graph0,-12);
//// IBController //////
Pos=1;
Stop=0.001;
Contrato="6EH7-GLOBEX-FUT";
OrderIDB = StaticVarGetText("OrderIDB"+Contrato);
OrderIDS = StaticVarGetText("OrderIDS"+Contrato );
ORderIDC= StaticVarGetText("OrderIDC"+Contrato );
ORderIDSL= StaticVarGetText("OrderIDSL"+Contrato );
ibc = GetTradingInterface("IB");
////////////////////////////////// BUY ////////////////////////////
if( (LastValue( Buy )==1) AND (ibc.IsOrderPending(OrderIDB) == False) AND (ibc.GetPositionSize( Contrato ) <= 0) )
{
if( ibc.IsConnected() )
{
if(( ibc.GetPositionSize( Contrato ) <= 0 ))
{
if( ibc.GetStatus(ORderIDS) =="PreSubmitted")
{
do{
ibc.CancelOrder(ORderIDS);
}while (1<0>=0) )
{
if( ibc.IsConnected() )
{
if(( ibc.GetPositionSize( Contrato ) >=0 ))
{
if( ibc.GetStatus(ORderIDB) =="PreSubmitted")
{
do{
ibc.CancelOrder(ORderIDB);
}while (1<0);
}
if (ibc.IsOrderPending( ORderIDS) == False)
{
Corto= abs(ibc.GetPositionSize( Contrato ))+Pos;
ParentIDS = ibc.PlaceOrder
( Contrato , "SELL", Corto, "MKT", 0, 0, "GTC", False,1,"ignoreRth" );
stopS=LastValue(ValueWhen(Short==1,O,1),True);
OrderIDS=ibc.PlaceOrder
( Contrato , "BUY", Pos, "STP", 1.2150, stopS+Stop, "GTC", True,1,"ignoreRth",ParentIDS);
StaticVarSetText("OrderIDS"+Contrato , OrderIDS);
}
}
}
}
////////////////////////////// COVER /////////////////////////////
if ( NOT(ibc.GetStatus(ORderIDC) == "PreSubmitted") AND (NOT(ibc.GetStatus(ORderIDC) == "Filled")) )
{
if( (LastValue( Cover )==1) AND (ibc.IsOrderPending( ORderIDC)==False) AND (ibc.GetPositionSize( Contrato )<0) )
{
if ( NOT(ibc.GetStatus(ORderIDC) == "PreSubmitted") AND (NOT(ibc.GetStatus(ORderIDC) == "PendingSubmit") ) )
{
if( ibc.GetPositionSize( Contrato ) <0 )
{ ibc.GetStatus(ORderIDC);
if ( (ibc.IsOrderPending( ORderIDC) == False))
{
Largo=abs(ibc.GetPositionSize( Contrato ));
OrderIDC = ibc.PlaceOrder
( Contrato , "BUY", Largo, "MKT", 0, 0, "GTC", True,1,"ignoreRth" );
StaticVarSetText("OrderIDC"+Contrato , OrderIDC);
if( (ibc.GetStatus(ORderIDS) =="PreSubmitted") )
{
do{
ibc.CancelOrder(ORderIDS);
}while (1<0>0) )
{
if( NOT(ibc.GetStatus(ORderIDSL) == "PreSubmitted") AND (NOT(ibc.GetStatus(ORderIDSL) == "PendingSubmit")) )
{
if (ibc.IsOrderPending( ORderIDSL) == False)
{
if(( ibc.GetPositionSize( Contrato ) >0 ))
{
Corto= abs(ibc.GetPositionSize( Contrato ));
OrderIDSL = ibc.PlaceOrder
( Contrato , "SELL", Corto, "MKT", 0, 0, "GTC", True,1,"ignoreRth" );
StaticVarSetText("OrderIDSL"+Contrato , OrderIDSL);
if( ibc.GetStatus(ORderIDB) =="PreSubmitted")
{
do{
ibc.CancelOrder(ORderIDB);
}while (1<0);
}
}
}
}
}
}
Plot(C,"SB",colorBlack,styleOwnScale);
El perro le dijo al hueso:
tú serás duro pero yo no tengo prisa.
tú serás duro pero yo no tengo prisa.
strada, yo ayer estuve probando con el plug-in de ami para ib que no necesita activarse (almenos el mulero que tengo ) y iba bien, quizas no te haga falta este añadido que esta en beta desde el 2006 y vaya mas fino
no pude probar mucho por que no tengo cuenta en ib y por lo tanto no podia hacer backfill, pero en principio se conectaba sin problemas con la ultima tws en local (activando plugins activex) y declarando en el ami una base de datos con toma de datos desde el plugin de ib (api)
version de ami: 4.8
no pude probar mucho por que no tengo cuenta en ib y por lo tanto no podia hacer backfill, pero en principio se conectaba sin problemas con la ultima tws en local (activando plugins activex) y declarando en el ami una base de datos con toma de datos desde el plugin de ib (api)
version de ami: 4.8
Última edición por trikero el 14 Mar 2007 17:12, editado 1 vez en total.
las gacelas tambien tenemos derecho a pasto
Es probable que Dios no exista. Ahora, deja de preocuparte y disfruta de la vida
Es probable que Dios no exista. Ahora, deja de preocuparte y disfruta de la vida
Trikero, yo no tengo nada q ver con strada. (tengo 2 nicks este pa cuando toy en Graná y Kuelebre, q utilizo aveces cuando voy a mi querida Asturias o me entra nostalgia.
Por otra parte, no tengo el ami, porq no tengo NPI, ni de ingles ni de programar, jjjj
Salu2.
Por otra parte, no tengo el ami, porq no tengo NPI, ni de ingles ni de programar, jjjj


Salu2.
lo facil es opinar sobre la parte izquierda del grafico, lo dificil es operar en tiempo real en el lado derecho
En absoluto me ha molestado, solo aclarar, ya q con la cantidad de multinicks q algun@s utilizan, pudiera ser q pensases q eramos la misma persona la q esta detras del 'pato lucas' y 'coyote', q si son los dos de la Warner, pero no es el caso.
Salu2.

Salu2.
lo facil es opinar sobre la parte izquierda del grafico, lo dificil es operar en tiempo real en el lado derecho
pues en este post me estoy cubriendo de gloria, confundo a zubi con strada y ahora esto. cuando coja al aleman se va a enterar.
oye, y p'a que c... sirve este plug-in, por que si no estoy equivocado con el que yo te he mencionado entiendo que tambien se pueden hacer sistemas automaticos en ami operando sobre tws.
me lo aclaras porfi
oye, y p'a que c... sirve este plug-in, por que si no estoy equivocado con el que yo te he mencionado entiendo que tambien se pueden hacer sistemas automaticos en ami operando sobre tws.
me lo aclaras porfi

las gacelas tambien tenemos derecho a pasto
Es probable que Dios no exista. Ahora, deja de preocuparte y disfruta de la vida
Es probable que Dios no exista. Ahora, deja de preocuparte y disfruta de la vida
Pues, que yo sepa el plugin de IB es para conectar AMI con la TWS de manera que se puedan recibir datos y almacenalos sobre todo, desde la TWS hacia AMI.
Pero para que desde AMI se puedan enviar datos a tu TWS se necesita el IB Controller Trading interface. Que lo mismo se puede abrir desde un sistema, como un objeto COM, o manualmente, pero para controlarlo bien hace falta un sistema escrito en AMI.
Recibe también todos los datos de tu cuenta (P&L, ...) , con lo que se pueden diseñar estrategias basadas en estos datos y así utilizar MM en el sistema, automáticamente.
Lo puedes ver en el enlace que he puesto http://www.amibroker.com/at/
Claro es, que para que funcione hay que tener instalado el plugin de IB para AMI, si no no creo que funcione.
Salud y suerte Trikero
Pero para que desde AMI se puedan enviar datos a tu TWS se necesita el IB Controller Trading interface. Que lo mismo se puede abrir desde un sistema, como un objeto COM, o manualmente, pero para controlarlo bien hace falta un sistema escrito en AMI.
Recibe también todos los datos de tu cuenta (P&L, ...) , con lo que se pueden diseñar estrategias basadas en estos datos y así utilizar MM en el sistema, automáticamente.
Lo puedes ver en el enlace que he puesto http://www.amibroker.com/at/
Claro es, que para que funcione hay que tener instalado el plugin de IB para AMI, si no no creo que funcione.
Salud y suerte Trikero
El perro le dijo al hueso:
tú serás duro pero yo no tengo prisa.
tú serás duro pero yo no tengo prisa.
dando vueltas a la historia he visto que han puesto una version mas moderna del plugin de datos
no obstante ¿?se pueden tener ambas conexiones abiertas con la tws¿? es que en la version demo me da constantes mensajes preguntanto que si se acepta la conexion, no se porque.
tengo una base de datos creada y conectada con el plugin y despues doy doble clic al brokerib.exe.
bueno, ya veo que la curva de aprendizaje es alta.
saludos.
no obstante ¿?se pueden tener ambas conexiones abiertas con la tws¿? es que en la version demo me da constantes mensajes preguntanto que si se acepta la conexion, no se porque.
tengo una base de datos creada y conectada con el plugin y despues doy doble clic al brokerib.exe.
bueno, ya veo que la curva de aprendizaje es alta.
saludos.
las gacelas tambien tenemos derecho a pasto
Es probable que Dios no exista. Ahora, deja de preocuparte y disfruta de la vida
Es probable que Dios no exista. Ahora, deja de preocuparte y disfruta de la vida
Si te ha gustado este hilo del Foro, ¡compártelo en redes!