viernes, 6 de diciembre de 2019

ALGORITMO BÁSICO DE AUTOTRADING CON AMIBROKER

Supongamos que ya tenemos nuestro sistema listo para operarlo en real. El sistema genera operaciones largas y cortas y tiene en cuenta todos los detalles que queríamos incluir; esto es, no necesita lógica extra y todo lo que hace lo consideramos válido.

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

ENTRADAS POPULARES