AMI Automatico

Foro genérico sobre programas relacionados con el trading: gráficos, ejecución de órdenes, automatización, etc.
Responder
Avatar de Usuario
strada
Mensajes: 71
Registrado: 18 Nov 2004 14:05

AMI Automatico

Mensaje por strada »

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);
El perro le dijo al hueso:
tú serás duro pero yo no tengo prisa.
Avatar de Usuario
trikero
Mensajes: 739
Registrado: 24 Ago 2006 23:44

Mensaje por trikero »

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
Ú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
Avatar de Usuario
Zubi
Mensajes: 504
Registrado: 17 Sep 2004 22:38
Ubicación: Granada

Mensaje por Zubi »

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 :-D :-D
Salu2.
lo facil es opinar sobre la parte izquierda del grafico, lo dificil es operar en tiempo real en el lado derecho
Avatar de Usuario
trikero
Mensajes: 739
Registrado: 24 Ago 2006 23:44

Mensaje por trikero »

sorry,zubi, vi el avatar y me parecio el tuyo y ni mire el nick, sorry a veces damos por supuesto muchas cosas.

mis disculpas si te ha molestado
las gacelas tambien tenemos derecho a pasto
Es probable que Dios no exista. Ahora, deja de preocuparte y disfruta de la vida
Avatar de Usuario
Zubi
Mensajes: 504
Registrado: 17 Sep 2004 22:38
Ubicación: Granada

Mensaje por Zubi »

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. :-D

Salu2.
lo facil es opinar sobre la parte izquierda del grafico, lo dificil es operar en tiempo real en el lado derecho

Avatar de Usuario
strada
Mensajes: 71
Registrado: 18 Nov 2004 14:05

Mensaje por strada »

Gracias triquero, pero no es el plugin lo que hay que activar, es el Trading interface que es una pequeña aplicación, creo que es lo que se llama un objeto COM que se abre desde el script del sistema.

Saludos y suerte
El perro le dijo al hueso:
tú serás duro pero yo no tengo prisa.
Avatar de Usuario
trikero
Mensajes: 739
Registrado: 24 Ago 2006 23:44

Mensaje por trikero »

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 :lol:
las gacelas tambien tenemos derecho a pasto
Es probable que Dios no exista. Ahora, deja de preocuparte y disfruta de la vida
Avatar de Usuario
strada
Mensajes: 71
Registrado: 18 Nov 2004 14:05

Mensaje por strada »

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
El perro le dijo al hueso:
tú serás duro pero yo no tengo prisa.
Avatar de Usuario
trikero
Mensajes: 739
Registrado: 24 Ago 2006 23:44

Mensaje por trikero »

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.
las gacelas tambien tenemos derecho a pasto
Es probable que Dios no exista. Ahora, deja de preocuparte y disfruta de la vida
Avatar de Usuario
hammer
Mensajes: 675
Registrado: 12 Jul 2005 02:00

Mensaje por hammer »

trikero escribió:es que en la version demo me da constantes mensajes preguntanto que si se acepta la conexion, no se porque.
Poniendo 127.0.0.1 en la IP de confianza de la TWS (Configurar-API), no te preguntará si aceptas la conexión.

Saludos ;-).
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Software”