jueves, 29 de julio de 2021

Controlando Amibroker con JavaScript

El código JavaScript que vemos hoy controla Amibroker para que realice las siguientes tareas relacionadas con la cointegración de pares mediante el método de regresión lineal. Los pares a probar se leen de un fichero de texto:

  • Optimización al derecho de un par (p.e. SAN-BBVA, o estimar BBVA con una regresión lineal a partir de los datos de SAN)
  • Escribir el resultado en un fichero con el nombre del par (p.e. SAN-BBVA.html)
  • Optimización al revés del par (BBVA-SAN, o estimar SAN con datos de BBVA)
  • Escribir el resultado en un fichero con el nombre del par (BBVA-SAN.html)
  • Borrar las primeras dos líneas del fichero para poder repetir con el siguiente par

Esto nos permite hacer tantas optimizaciones como pares tengamos. La programación en JavaScript controla completamente Amibroker para que realice las tareas que queremos.


CÓDIGO JAVASCRIPT

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// ESTE JSCRIPT LEE DEL FICHERO "NUMPARES.TXT" 
// EL NÚMERO DE PARES QUE HAY QUE PROBAR
// Y HACE LAS OPTIMIZACIONES DE ESE NÚMERO DE PARES
// EN UN BUCLE FOR
// OSCAR G. CAGIGAS
// 27 JULIO 2021
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// creates AmiBroker object
AB = new ActiveXObject( "Broker.Application" ); 
//definimos objeto de manipulación de ficheros
fso = new ActiveXObject( "Scripting.FileSystemObject" );
//abrimos fichero
file = fso.OpenTextFile( "C:\\temp\\NumPares.txt", 1 ); //1 es para lectura
//Leemos el número de pares del fichero
NumPares = file.ReadLine();
//COMPROBACIÓN
//WScript.echo( "NumPares =  " + NumPares );
//RUTAS A LOS FICHEROS
pathA = "C:\\Program Files\\AmiBroker\\Formulas\\Systems\\CointegracionLP\\Optimizacion1.apx";
pathB = "C:\\Program Files\\AmiBroker\\Formulas\\Systems\\CointegracionLP\\CopiarResultadosConNombre1.apx";
pathC = "C:\\Program Files\\AmiBroker\\Formulas\\Systems\\CointegracionLP\\Optimizacion2.apx";
pathD = "C:\\Program Files\\AmiBroker\\Formulas\\Systems\\CointegracionLP\\CopiarResultadosConNombre2.apx";
pathE =  "C:\\Program Files\\AmiBroker\\Formulas\\Systems\\CointegracionLP\\BorrarPrimerPar.apx";
//BUCLE
for ( i = 0; i < NumPares; i++ ) 
{
//OPTIMIZACIÓN 1
Opt1 = AB.AnalysisDocs.Open( pathA  ); 
if (Opt1)
{
Opt1.Run( 4 ); // start opt asynchronously
while ( Opt1.IsBusy ) WScript.Sleep( 2000 ); // check IsBusy every 2 second
Opt1.Export( "C:\\temp\\results.html" ); // export result list to HTML file
Opt1.Close(); // close new Analysis
}
//COPIAR RESULTADOS CON NOMBRE 1
Cr1 = AB.AnalysisDocs.Open( pathB ); 
if (Cr1)
{
Cr1.Run( 2 ); // start backtest asynchronously
while ( Cr1.IsBusy ) WScript.Sleep( 2000 ); // check IsBusy every 2 second    
Cr1.Close(); 
}
//OPTIMIZACIÓN 2
Opt2 = AB.AnalysisDocs.Open( pathC ); 
if (Opt2)
{
Opt2.Run( 4 ); // start opt asynchronously
while ( Opt2.IsBusy ) WScript.Sleep( 2000 ); // check IsBusy every 2 second
Opt2.Export( "C:\\temp\\results.html" ); // export result list to HTML file
Opt2.Close(); // close new Analysis
}
//COPIAR RESULTADOS CON NOMBRE 2
Cr2 = AB.AnalysisDocs.Open( pathD );
if (Cr2)
{
Cr2.Run( 2 ); // start backtest asynchronously
while ( Cr2.IsBusy ) WScript.Sleep( 2000 ); // check IsBusy every 2 second    
Cr2.Close(); 
}
//BORRAR PRIMER PAR
Bpp = AB.AnalysisDocs.Open( pathE );
if (Bpp)
{
Bpp.Run( 2 ); // start backtest asynchronously
while ( Bpp.IsBusy ) WScript.Sleep( 2000 ); // check IsBusy every 2 second
Bpp.Close(); // close new Analysis
}
}



2 comentarios:

  1. Buenos días Oscar! Como se haría para configurar el robotask? Se hace con codigo?

    ResponderEliminar
    Respuestas
    1. Robotask es muy fácil de manejar, son bloques que vas añadiendo con tareas. En el foro de Robotask y en las tareas de ejemplo que vienen con el programa se puede copiar el bucle de ficheros que abra los HTML y extraiga la información.

      Eliminar

ENTRADAS POPULARES