AMI Automatico
Publicado: 14 Mar 2007 11:10
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);