En ese caso podemos añadir un simple algoritmo de Autotrading con el IBController de forma que cada vez que haya una operación en el gráfico el IBcontroller la lanzará a nuestro broker Interactive Brokers:
El algoritmo que sigue a continuación replicará todas y cada una de las señales del sistema de trading. He procurado hacerlo lo más sencillo posible para que vd pueda modificarlo a su gusto.
IMPORTANTE: El algoritmo replica exactamente las señales en pantalla. Para operarlo debe tener en cuenta que si abre una posición y después se desconecta su internet, el proveedor de datos, o se apaga o bloquea su ordenador entonces la posición quedará abierta sin stop de pérdidas. Esta versión básica del algoritmo se proporciona solamente a fines didácticos.
----------------------------------------------------------------------------------
**** EL SISTEMA DE TRADING VA AQUÍ****
//################################################################################
//######################### ALGORITMO DE AUTOTRADING #############################
//####################### OSCAR G. CAGIGAS. 5 DIC 2019 ###########################
//################################################################################
//VARIABLES
Ctos = 2; //poner el núm de ctos que queramos operar
transmit = True; //True: automático. False: manual
//Arranca el interfaz con IB
autotrading = ParamToggle("Auto Trading","No|Yes",0);
//SI ALGO FALLA RESETEANDO VOLVEMOS AL ESTADO INICIAL
reset = ParamTrigger("RESET","RESETEAR VARIABLES");
if(reset)
{
StaticVarSetText("EntryID"+Name(), "");
StaticVarSetText("ExitID"+Name(), "");
}
if (autotrading)
{
ibc = GetTradingInterface("IB");
RequestTimedRefresh( 1 ); //refresca cada 1 seg
//CONECTADO
if ( ibc.IsConnected() )
{
// coge el ID de la ejecución anterior (o cero en la primera)
EntryID = StaticVarGetText("EntryID"+Name());
ExitID = StaticVarGetText("ExitID"+Name());
//ABRE LARGOS A MERCADO
if( LastValue(Buy) AND EntryID == "" )
{
EntryID = ibc.PlaceOrder( tib, "BUY", Ctos, "MKT", 0, 0, "DAY", transmit); //COMPRA A MERCADO
StaticVarSetText("EntryID"+Name(), EntryID); //almacenamos el ID de la entrada
StaticVarSetText("ExitID"+Name(), ""); //RESETEAMOS ExitID
}
//CIERRA LARGOS A MERCADO
if( LastValue(Sell) AND !EntryID == "" AND ExitID == "" )
{
ExitID = ibc.PlaceOrder( tib, "SELL", Ctos, "MKT", 0, 0, "DAY", transmit); //SALE A MERCADO
StaticVarSetText("ExitID"+Name(), ExitID);
StaticVarSetText("EntryID"+Name(), ""); //Reseteamos EntryID
}
//ABRE CORTOS A MERCADO
if( LastValue(Short) AND EntryID == "" )
{
EntryID = ibc.PlaceOrder( tib, "SELL", Ctos, "MKT", 0, 0, "DAY", transmit); //COMPRA A MERCADO
StaticVarSetText("EntryID"+Name(), EntryID); //almacenamos el ID de la entrada
StaticVarSetText("ExitID"+Name(), ""); //RESETEAMOS ExitID
}
//CIERRA CORTOS A MERCADO
if( LastValue(Cover) AND !EntryID == "" AND ExitID == "" )
{
ExitID = ibc.PlaceOrder( tib, "BUY", Ctos, "MKT", 0, 0, "DAY", transmit); //SALE A MERCADO
StaticVarSetText("ExitID"+Name(), ExitID);
StaticVarSetText("EntryID"+Name(), ""); //Reseteamos EntryID
}
//ACTUALIZAR NAV y MAXNET
NAV = StaticVarSet("NAV",StrToNum(ibc.GetAccountValue( "NetLiquidationByCurrency")));
//visualizamos las variables en el chart
Title = Title + "\n" + EncodeColor(colorGrey50) + "---------------"
+ "\n" + "NetAccVal = " + StaticVarGet("NAV")
+ "\n" + "EntryID = " + EncodeColor(colorRed) + EntryID + EncodeColor(colorGrey50)
+ "\n" + "ExitID = " + EncodeColor(colorRed) + ExitID + EncodeColor(colorGrey50)
+ "\n" + "pos size = " + ibc.GetPositionSize( tib )
+ "\n" + StrExtract( ibc.GetPositionList(), 0 )
+ "\n" + StrExtract( ibc.GetPositionList(), 1 )
+ "\n" + StrExtract( ibc.GetPositionList(), 2 );
} //is connected
}
No hay comentarios:
Publicar un comentario