Hi, I hope someone can help me.
I've found a very interesting website [Amplitud de Mercado]
that allows you to extract market breadth data through an API. For now, I'm just testing a "demo" version they provide.
I've created a list of the tickers I think can be retrieved from that API, and they are:
But I'm stuck trying to create a user-definable data source with AmiQuote and then use it to obtain the data.
I'm doing the following in the General tab:
And I think it's in the JavaScript tab where I'm stuck (in fact, I'm trying to do it with Gemini because I can't do it on my own). This is what I've done with Gemini:
function Process( input, sym )
{
// 1. Verificación de entrada básica
if (!input || input.indexOf("<html") != -1 || input.indexOf("<!DOCTYPE") != -1) return "";
var obj;
try {
obj = eval("(" + input + ")");
} catch(e) {
return "";
}
// 2. Comprobación del nodo raíz
if (!obj || !obj.datosAmplitud) return "";
var root = obj.datosAmplitud;
var csvOutput = "";
function fF(s) {
if(!s) return "01-01-2026";
var str = s.toString();
if (str.length < 8) return "01-01-2026";
return str.substring(0, 2) + "-" + str.substring(2, 4) + "-" + str.substring(4, 8);
}
var data = null;
var col = -1;
var cleanSym = sym.toUpperCase();
// --- BLOQUE NYSE (Seguro) ---
if (cleanSym.indexOf("NYSE") != -1 && root.nyse) {
data = root.nyse;
if (cleanSym == "NYSE") col = 1;
else if (cleanSym.indexOf("SUB") != -1) col = 2;
else if (cleanSym.indexOf("BAJ") != -1) col = 3;
else if (cleanSym.indexOf("VOLS") != -1) col = 4;
else if (cleanSym.indexOf("VOLB") != -1) col = 5;
else if (cleanSym.indexOf("MAX") != -1) col = 6;
else if (cleanSym.indexOf("MIN") != -1) col = 7;
else if (cleanSym.indexOf("MCC") != -1) col = 8;
else if (cleanSym.indexOf("ADN") != -1) col = 9;
else if (cleanSym.indexOf("RASI") != -1) col = 10;
}
// --- BLOQUE NASDAQ (Seguro) ---
else if (cleanSym.indexOf("NASD") != -1 && root.nasdaq) {
data = root.nasdaq;
if (cleanSym == "NASDAQ") col = 1;
else if (cleanSym.indexOf("SUB") != -1) col = 2;
else if (cleanSym.indexOf("BAJ") != -1) col = 3;
else if (cleanSym.indexOf("MAX") != -1) col = 6;
else if (cleanSym.indexOf("MIN") != -1) col = 7;
else if (cleanSym.indexOf("ADN") != -1) col = 9;
}
// --- BLOQUE SENTIMIENTO (Seguro) ---
else if (cleanSym.indexOf("AAII") != -1 && root.encuestas && root.encuestas.aaii) {
data = root.encuestas.aaii;
col = (cleanSym.indexOf("BULL") != -1) ? 1 : 2;
}
else if (cleanSym.indexOf("II_") != -1 && root.encuestas && root.encuestas.ii) {
data = root.encuestas.ii;
col = (cleanSym.indexOf("BULL") != -1) ? 1 : 2;
}
// --- BLOQUE MACRO (Seguro) ---
else if (root.macro) {
if (cleanSym.indexOf("VIX") != -1 && root.macro.diarios) {
data = root.macro.diarios; col = 1;
}
else if (cleanSym.indexOf("PC_RATIO") != -1 && root.macro.diarios) {
data = root.macro.diarios; col = 3;
}
else if (cleanSym.indexOf("ADBONOHY") != -1 && root.macro.bonos) {
data = root.macro.bonos; col = 2;
}
else if (cleanSym.indexOf("ADBONOCEF") != -1 && root.macro.bonos) {
data = root.macro.bonos; col = 3;
}
}
// Volcado de datos para tablas (NYSE, NASD, AAII, II, VIX, Bonos...)
if (col != -1 && data && data.length > 0) {
for (var i = 1; i < data.length; i++) {
if (data[i] && data[i][0]) {
csvOutput += sym + "," + fF(data[i][0]) + "," + data[i][col] + "\n";
}
}
}
// --- BLOQUE FEAR & GREED (Caso especial) ---
if (cleanSym.indexOf("FEARGREED") != -1 && root.macro && root.macro.fearGreed) {
var fg = root.macro.fearGreed;
if (fg.length > 0) {
if (!Array.isArray(fg[0])) { // Un solo dato
csvOutput += sym + "," + fF(fg[0]) + "," + fg[1] + "\n";
} else { // Histórico si existiera
for (var j = 1; j < fg.length; j++) {
csvOutput += sym + "," + fF(fg[j][0]) + "," + fg[j][1] + "\n";
}
}
}
}
return csvOutput;
}
I'm not getting anywhere. I paid for AmiQuote, and I'm sure it can connect to this API, but without help, I won't be able to.
Any help would be greatly appreciated.

