Cómo decirle a Amibroker que si el ticker que está revisando actualmente es el Oro debe multiplicar por 100 pero si es el mini SP500 debería hacerlo por 50?
El siguiente código extrae los primeros 3 caracteres del nombre del ticker empezando por la izquierda, y así le asigna el PointValue correspondiente. Lo mejor es tenerlo en un #include y llamarlo al principio de cada código que hagamos.
Es formato IQFeed así que si p.e. se trata del futuro continuo del mini SP500 entonces el ticker es @ES#C y los tres primeros caracteres son @ES. Igualmente si se tratara del vencimiento de diciembre de 2018 el ticker sería @ESZ18 pero los tres primeros caracteres serán @ES.
Este código funciona tanto para el futuro continuo como para los diferentes vencimientos. Es formato IQFeed pero no cuesta mucho adaptarlo a otros formatos para aquel que utilice eSignal o cualquier otro proveedor de datos.
En IQFeed existen tres mercados que en lugar de tener tres caracteres iniciales tienen solo dos: El trigo (@W), la Soja (@S) y el maíz (@C). Afortunadamente da la casualidad de que los tres tienen el mismo multiplicador, 50, así que lo he incluido en la última parte, valor por defecto. Si no fuera así el código sería algo más complicado.
//---------------------------------------//
// CODIGO DE MULTIPLICADORES DE FUTUROS
// OSCAR G. CAGIGAS
// 19 AGOSTO 2018
//---------------------------------------//
//ESCOGEMOS EL MULTIPLICADOR PARA CADA MERCADO//
switch( StrLeft( Name(), 3) )
{
//----------IQFEED SYMBOLS------------------------------------------//
case "@ES": mul=50; tick = 0.25; dec = 2; break; //MINI SP500
case "@NQ": mul=20; tick = 0.25; dec = 2; break; //MINI NASDAQ
case "@YM": mul=5; tick = 1; dec = 0; break; //DOW JONES MINI ($5)
case "@NK": mul=5; tick = 5; dec = 0; break; //NIKKEI DOLLAR
//----------
case "@AD": mul=100000; tick = 0.0001; dec = 4; break; //AUSTRALIAN DOLLAR
case "@SF": mul=125000; tick = 0.0001; dec = 4; break; //SWISS FRANC
case "@EU": mul=125000; tick = 0.00005; dec = 5; break; //EURODOLLARS
case "@CD": mul=100000; tick = 0.0001; dec = 4; break; //CANADIAN DOLLAR
case "@NE": mul=100000; tick = 0.0001; dec = 4; break; //NEW ZEALAND DOLLAR
case "@BP": mul=62500; tick = 0.0001; dec = 4; break; //BRITISH POUND
case "@JY": mul=12500000; tick = 0.000001;dec = 7; break; //YEN
case "@PX": mul=500000; tick = 0.00001; dec = 5; break; //MEXICAN PESO
//----------
case "QGC": mul=100; tick = 0.1; dec = 2; break; //GOLD
case "QSI": mul=5000; tick = 0.005; dec = 3; break; //SILVER
case "QHG": mul=25000; tick = 0.0005; dec = 4; break; //COPPER
case "QPA": mul=100; tick = 0.05; dec = 2; break; //PALADIUM (PA,NYMEX)
case "QPL": mul=50; tick = 0.1; dec = 2; break; //PLATINUM
//----------
case "QHO": mul=42000; tick = 0.0001; dec = 4; break; //HEATING OIL
case "QRB": mul=42000; tick = 0.0001; dec = 4; break; //GASOLINE
case "QCL": mul=1000; tick = 0.01; dec = 2; break; //CRUDE OIL
case "QNG": mul=10000; tick = 0.001; dec = 3; break; //NATURAL GAS
//----------
case "@HE": mul=400; tick = 0.025; dec = 3; break; //LEAN HOGS
case "@LE": mul=400; tick = 0.025; dec = 3; break; //LIVE CATTLE
case "@GF": mul=500; tick = 0.025; dec = 3; break; //FEEDER CATTLE
//-----------
case "@US": mul=1000; tick = 1/32; dec = 3; break; //T-BOND
case "@TY": mul=1000; tick = 1/64; dec = 3; break; //TREASURY NOTES 10 YEAR
//-----------
case "@SB": mul=1120; tick = 0.01; dec = 4; break; //SUGAR
case "@KC": mul=375; tick = 0.05; dec = 4; break; //COFFE (KC,NYBOT)
case "@CT": mul=500; tick = 0.01; dec = 4; break; //COTTON
case "@CC": mul=10; tick = 1.00; dec = 0; break; //COCOA (NYBOT)
//-----------
case "@SM": mul=100; tick = 0.10; dec = 2; break; //SOYBEAN MEAL
case "@BO": mul=600; tick = 0.01; dec = 2; break; //SOYBEAN OIL
case "@KW": mul=50; tick = 0.25; dec = 2; break; //KC WHEAT (ZW, ECBOT)
//-----------
default: mul = 50; tick = 0.25; dec = 2; break; //EL RESTO (@W,@S,@C) CON SOLO 2 CARACTERES
}
//ASIGNAMOS A LOS NOMBRES RESERVADOS
PointValue = mul; TickSize = tick;
Eres un friki de la programación de algoritmos, sistemas de trading y demás cosas raras? Encuentra aquí el código y herramientas útiles para probar sistemas y gestión de capital. Amibroker Python, Excel...
Suscribirse a:
Enviar comentarios (Atom)
ENTRADAS POPULARES
-
El primer vídeo que se subió en 2019 al canal YouTube de Onda4 muestra un sistema de trading completo, con su backtesting y con su algoritmo...
-
Hoy traigo una aplicación en Amibroker que es a la vez sencilla y práctica. Es una plataforma que sirve para operar acciones y que aprovecha...
-
El sistema "Agorero" opera el SP500 abriendo posiciones cortas cuando hay las siguientes señales bajistas: Baja volatilidad Nuevos...
-
El modelo de volatilidad de Robert Carver está explicado en su libro "Systematic Trading" y es una forma sencilla pero eficaz de d...
-
Hoy veremos un sistema con unas estadísticas excelentes. Compra el futuro mini del SP500 cuando se produce un techo en el VIX en forma de ...
Buenas Óscar.
ResponderEliminarCuando pones por ejemplo Case "@ES"..............
No coincide con el símbolo @ES#C de Iqfeed.
Precisamente coincide con el nombre del ticker en Tradestation.
Podría haber algún error en lo que has escrito? No debe coincider el metadato?
La primera instrucción “switch( StrLeft( Name(), 3) )” dice que Amibroker leerá los primeros tres caracteres, así que @ES sirve para el SP500 continuo (símbolo @ES#C) así como para los distintos vencimientos. Funciona bien, hace años que lo uso con IQFeed.
EliminarHola Oscar! Para Norgate no hace falta, no? Esa base de datos en teoria viene con los datos de cada futuro incorporado. Es así? Gracias!
ResponderEliminarSí, Norgate ya trae los multiplicadores y no haría falta añadir este código.
ResponderEliminar