En la carga de los recursos... Cargando...

Mercado

exchange.GetTicker

Obtener la estructura {@struct/Ticker Ticker} del spot o contrato correspondiente al par de operaciones establecido actualmente, el código del contrato, es decir, los datos del ticker.GetTicker ()Función es una función miembro del objeto de intercambio {@var/EXCHANGE exchange}, el uso deexchangefunciones (métodos) de miembros de objetos relacionadas únicamente conexchange, y no se repetirá en el documento.

Elexchange.GetTicker()función devuelve la estructura {@struct/Ticker Ticker} cuando la solicitud de datos tiene éxito, y devuelve el valor nulo cuando la solicitud de datos falla. {@struct/Ticker Ticker}, valor nulo

El cambio.GetTicker ((() intercambio.GetTicker (símbolo)

El parámetrosymbolse utiliza para especificar el par de operaciones específico y el código de contrato correspondiente a los datos {@struct/Ticker Ticker} solicitados. Si no se pasa este parámetro, se solicitarán por defecto los datos de mercado del par de operaciones y el código de contrato actualmente establecidos. Cuando se llama a laexchange.GetTicker(symbol)función,exchangeSi necesita solicitar datos de mercado con la moneda denominada en USDT y la moneda de negociación en BTC, el parámetrosymboles:"BTC_USDT", y el formato es el formato del par de operaciones definido por la plataforma FMZ. Cuando se llama a laexchange.GetTicker(symbol)función,exchangeSi usted necesita solicitar los datos de mercado de BTCs U-estándar contrato perpetuo, el parámetrosymboles:"BTC_USDT.swap", y el formato es una combinación dePares de negociaciónycódigo del contratodefinidas por la plataforma FMZ, separadas por el carácter .. Cuando se llama a laexchange.GetTicker(symbol)función,exchangeSi usted necesita solicitar los datos de mercado de BTCs contrato de opción U-estándar, el parámetrosymboles:"BTC_USDT.BTC-240108-40000-C"(tomando Binance Option BTC-240108-40000-C como ejemplo), el formato es la combinación dePares de negociacióndefinido por la plataforma FMZ y el código del contrato de opción específico definido por la bolsa, separado por el carácter ..

el símbolo falsos la cuerda

function main(){
    // If it is a futures exchange object, set the contract code first, e.g. set it as a perpetual contract
    // exchange.SetContractType("swap")

    var ticker = exchange.GetTicker()
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, the ticker is null, and it will cause an error when accessing ticker.High, so when testing this code, make sure that the exchange interface can be accessed.
    */
    Log("Symbol:", ticker.Symbol, "High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Open:", ticker.Open, "Volume:", ticker.Volume)
}
def main():
    ticker = exchange.GetTicker()
    Log("Symbol:", ticker["Symbol"], "High:", ticker["High"], "Low:", ticker["Low"], "Sell:", ticker["Sell"], "Buy:", ticker["Buy"], "Last:", ticker["Last"], "Open:", ticker.Open, "Volume:", ticker["Volume"])
void main() {
    auto ticker = exchange.GetTicker();
    Log("Symbol:", ticker.Symbol, "High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Open:", ticker.Open, "Volume:", ticker.Volume);
}

Para los objetos de cambio de futuros (es decir,exchangeo bienexchanges[0]), debe establecer el código del contrato utilizando elexchange.SetContractType()función antes de llamar a la función ticker, que no se repetirá.

function main() {
    var ticker = exchange.GetTicker("BTC_USDT")
    Log(ticker)
}
def main():
    ticker = exchange.GetTicker("BTC_USDT")
    Log(ticker)
void main() {
    auto ticker = exchange.GetTicker("BTC_USDT");
    Log(ticker);
}

Utilice elsymbolParámetro para solicitar datos de mercado para un símbolo específico (símbolo spot).

ElTickerdatos devueltos por elexchange.GetTicker()En la actualidad, la mayoría de los sistemas de backtesting se encuentran integrados en el sistema.HighyLowLos valores simulados, tomados de los valores de venta y compra del mercado en ese momento.Tickerdatos devueltos por elexchange.GetTicker()En el mercado real, elHighyLowLos valores se basan en los datos devueltos por el intercambio encapsuladoTickInterfaz, que incluye los precios más altos y más bajos dentro de un determinado período (generalmente un período de 24 horas). Los intercambios que no apoyan elexchange.GetTicker()Función:

Nombre de la función Intercambios al contado sin soporte Exchanges de futuros no respaldados
¿ Qué haces? El valor de las pérdidas

En el caso de las empresas que no se encuentran en el mercado de valores, el valor de los valores obtenidos es el valor de los valores obtenidos en el mercado.

exchange.GetDepth

Obtener la estructura {@struct/Depth Depth} del spot o contrato correspondiente al par de operaciones establecido actualmente, código del contrato, es decir, datos de la cartera de órdenes.

Elexchange.GetDepth()La función devuelve la estructura {@struct/Depth Depth} si la solicitud de datos tiene éxito, y devuelve nulo si la solicitud de datos falla. {@struct/Depth Depth}, valor nulo

El cambio.GetDepth() intercambio.Simbolo de Profundidad.

El parámetrosymbolSe utiliza para especificar el par de operaciones específico y el código del contrato correspondiente a los datos {@struct/Depth Depth} solicitados. Si no se pasa este parámetro, se solicitarán por defecto los datos del libro de órdenes del par de operaciones actualmente establecido y el código del contrato.exchange.GetDepth(symbol)función,exchangeSi necesita solicitar obtener los datos del libro de pedidos con la moneda denominada en USDT y la moneda de la transacción en BTC, el parámetrosymboles:"BTC_USDT", y el formato es el formato del par de operaciones definido por la plataforma FMZ.exchange.GetDepth(symbol)función,exchangeSi necesita solicitar los datos del libro de pedidos del contrato perpetuo estándar U de BTC, el parámetrosymboles:"BTC_USDT.swap", y el formato es una combinación dePares de negociaciónycódigo del contratodefinido por la plataforma FMZ, separado por el carácter ..exchange.GetDepth(symbol)función,exchangeSi necesita solicitar los datos del libro de pedidos del contrato de opción estándar U de BTC, el parámetrosymboles:"BTC_USDT.BTC-240108-40000-C"(tomando Binance Option BTC-240108-40000-C como ejemplo), el formato es la combinación dePares de negociacióndefinido por la plataforma FMZ y el código del contrato de opción específico definido por la bolsa, separado por el carácter .. el símbolo falsos la cuerda

function main(){
    var depth = exchange.GetDepth()
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, the depth is null, which will cause an error when accessing depth.Asks[1].Price, so make sure you can access the exchange interface when testing the code.
    */
    var price = depth.Asks[1].Price
    Log("Sell 2 price is:", price)
}
def main():
    depth = exchange.GetDepth()
    price = depth["Asks"][1]["Price"]
    Log("Sell 2 price is:", price)
void main() {
    auto depth = exchange.GetDepth();
    auto price = depth.Asks[1].Price;
    Log("Sell 2 price is:", price);
}

Pruebaexchange.GetDepth()Función:

function main() {
    // BTC U-based perpetual contract
    var depth = exchange.GetDepth("BTC_USDT.swap")
    Log(depth)
}
def main():
    depth = exchange.GetDepth("BTC_USDT.swap")
    Log(depth)
void main() {
    auto depth = exchange.GetDepth("BTC_USDT.swap");
    Log(depth);
}

Cuando el configuradoexchangeobjeto es un objeto de intercambio de futuros, utilizar elsymbolParámetro para solicitar los datos del libro de pedidos de un símbolo específico (símbolo de futuros).

En el sistema de backtesting, los datos de cada grado devueltos por elexchange.GetDepth()Función cuando se utiliza elSimulación de tickEn el sistema de backtesting, los datos devueltos por elexchange.GetDepth()Función cuando se utiliza elEl verdadero tickLas pruebas de retroceso son una instantánea profunda de segundo nivel.

Se trata de una lista de las acciones que se han emitido en el mercado de valores de valores de valores de valores.

exchange.GetTrades

Obtener la matriz de estructura {@struct/Trade Trade} del spot o contrato correspondiente al par de operaciones establecido actualmente, código del contrato, es decir, los datos de transacción de mercado.

Elexchange.GetTrades()La función devuelve una matriz de estructuras {@struct/Trade Trade} si la solicitud de datos tiene éxito, y devuelve valores nulos si la solicitud de datos falla. {@struct/Trade Trade} matriz, valores nulos

En cambio.GetTrades ((() el símbolo de intercambio.GetTrades

El parámetrosymbolSe utiliza para especificar el par de operaciones específico y el código del contrato correspondiente a los datos de la matriz {@struct/Trade Trade} solicitados. Si no se pasa este parámetro, se solicitarán por defecto los últimos datos del registro de transacciones del par de operaciones y el código del contrato actualmente establecidos.exchange.GetTrades(symbol)función,exchangeSi necesita solicitar obtener los datos del libro de pedidos con la moneda denominada en USDT y la moneda de negociación en BTC, el parámetrosymboles:"BTC_USDT", y el formato es el formato del par de operaciones definido por la plataforma FMZ.exchange.GetTrades(symbol)función,exchangeSi necesita solicitar los datos del libro de pedidos del contrato perpetuo estándar U de BTC, el parámetrosymboles:"BTC_USDT.swap", y el formato es una combinación dePares de negociaciónycódigo del contratodefinido por la plataforma FMZ, separado por el carácter ..exchange.GetTrades(symbol)función,exchangeSi necesita solicitar los datos del libro de pedidos del contrato de opción estándar U de BTC, el parámetrosymboles:"BTC_USDT.BTC-240108-40000-C"(tomando Binance Option BTC-240108-40000-C como ejemplo), el formato es la combinación dePares de negociacióndefinido por la plataforma FMZ y el código del contrato de opción específico definido por la bolsa, separado por el carácter .. el símbolo falsos la cuerda

function main(){
    var trades = exchange.GetTrades()
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, trade is null. When accessing trade[0].Id, it will cause an error. Therefore, when testing this code, ensure that you can access the exchange interface.
    */
    Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type)
}
def main():
    trades = exchange.GetTrades()
    Log("id:", trades[0]["Id"], "time:", trades[0]["Time"], "Price:", trades[0]["Price"], "Amount:", trades[0]["Amount"], "type:", trades[0]["Type"])
void main() {
    auto trades = exchange.GetTrades();
    Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type);
}

Prueba elexchange.GetTrades()Función:

function main() {
    // BTC's U-based perpetual contract
    var trades = exchange.GetTrades("BTC_USDT.swap")
    Log(trades)
}
def main():
    trades = exchange.GetTrades("BTC_USDT.swap")
    Log(trades)
void main() {
    auto trades = exchange.GetTrades("BTC_USDT.swap");
    Log(trades);
}

Cuando el configuradoexchangeobjeto es un objeto de intercambio de futuros, utilizar elsymbolParámetro para solicitar datos de registro de transacciones de mercado para un símbolo específico (símbolo de futuros).

exchange.GetTrades()Algunos intercambios no admiten esta función, y los datos específicos devueltos son cuánto del rango de registros de transacciones depende del intercambio y necesita ser manejado de acuerdo con la situación específica.exchange.GetRecords ()La función devuelve el mismo orden de datos, es decir, el último elemento de la matriz es el dato más cercano al tiempo actual. Elexchange.GetTrades()función devuelve una matriz vacía cuando se utilizaSimulación de tickLos datos devueltos por elexchange.GetTrades()Función en el usoEl verdadero tickLa prueba de retroceso en el sistema de prueba de retroceso es la toma instantánea de los datos del flujo de pedidos, es decir, la matriz de estructuras {@struct/Trade Trade}. Los intercambios que no apoyan elexchange.GetTrades()Función:

Nombre de la función Intercambios al contado sin soporte Exchanges de futuros no respaldados
Obtener Trades Los valores de los activos de la entidad de crédito que no se incluyen en el balance de la entidad de crédito

En el caso de las empresas que no se encuentran en el mercado, las empresas que no se encuentran en el mercado deben tener un registro de los resultados de los intercambios.

exchange.GetRecords

Obtener la matriz de estructura {@struct/Record Record} del spot o contrato correspondiente al par de operaciones establecido actualmente, código del contrato, es decir, datos de línea K.

Elexchange.GetRecords()función devuelve una matriz de {@struct/Record Record} estructuras cuando la solicitud de datos tiene éxito, y devuelve valores nulos cuando la solicitud de datos falla. {@struct/Record Record} matrices, valores nulos

¿ Qué pasa con los registros? intercambio.GetRecords (símbolo) intercambio.GetRecords (símbolo, punto) intercambio.GetRecords (símbolo, punto, límite) El cambio.GetRecords (período) intercambio.GetRecords (período, límite)

El parámetrosymbolSe utiliza para especificar el par de operaciones específico y el código del contrato correspondiente a los datos de la matriz {@struct/Record Record} solicitados. Si este parámetro no se pasa, se solicitarán por defecto los datos de la línea K del par de operaciones actualmente establecido y el código del contrato.exchange.GetRecords(symbol)función,exchangeSi necesita solicitar obtener los datos con la moneda denominada como USDT y la moneda de la transacción como BTC, el parámetrosymboles:"BTC_USDT", y el formato es el formato del par de operaciones definido por la plataforma FMZ.exchange.GetRecords(symbol)función,exchangeSi necesita solicitar los datos del libro de pedidos del contrato perpetuo estándar U de BTC, el parámetrosymboles:"BTC_USDT.swap", y el formato es una combinación dePares de negociaciónycódigo del contratodefinido por la plataforma FMZ, separado por el carácter ..exchange.GetRecords(symbol)función,exchangeSi necesita solicitar los datos del libro de pedidos del contrato de opción estándar U de BTC, el parámetrosymboles:"BTC_USDT.BTC-240108-40000-C"(tomando Binance Option BTC-240108-40000-C como ejemplo), el formato es la combinación dePares de negociacióndefinido por la plataforma FMZ y el código del contrato de opción específico definido por la bolsa, separado por el carácter .. el símbolo falsos la cuerda El parámetroperiodespecifica el período de los datos de línea K solicitados, por ejemplo: {@var/PERIOD/PERIOD_M1 PERIOD_M1}, {@var/PERIOD/PERIOD_M5 PERIOD_M5}, {@var/PERIOD/PERIOD_M15 PERIOD_M15}, etc. El valor del parámetroperiodSi este parámetro no se pasa, el período de los datos de línea K solicitados por defecto es el período de línea K predeterminado de la configuración actual de estrategia en tiempo real/backtest. el período falsos Número El parámetrolimitSe utiliza para especificar la longitud de los datos de línea K solicitados. Si este parámetro no se pasa, la longitud de la solicitud predeterminada es el número máximo de barras de línea K solicitadas en un momento de la interfaz de línea K de intercambio. Este parámetro puede causar que la paginación solicite los datos de línea K de intercambio, y el consumo de tiempo de la llamada de función aumentará durante la consulta de paginación. el límite falsos Número

function main() {
    // Print K-line data with a K-line period of 120 seconds (2 minutes)
    Log(exchange.GetRecords(60 * 2))         
    // Print K-line data with a K-line period of 5 minutes
    Log(exchange.GetRecords(PERIOD_M5))      
}
def main():
    Log(exchange.GetRecords(60 * 2))
    Log(exchange.GetRecords(PERIOD_M5))
void main() {
    Log(exchange.GetRecords(60 * 2)[0]);
    Log(exchange.GetRecords(PERIOD_M5)[0]);
}

Obtener datos de línea K para un período personalizado.

function main() {
    var records = exchange.GetRecords(PERIOD_H1)
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, records is null. When accessing records[0].Time, it will cause an error. Therefore, when testing this code, ensure that you can access the exchange interface.
    */
    Log("The first k-line data is Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High)
    Log("The second k-line data is Time:", records[1].Time ,"Close:", records[1].Close)
    Log("Current K-line (latest)", records[records.length-1], "Previous K-line", records[records.length-2])
}
def main():
    records = exchange.GetRecords(PERIOD_H1)
    Log("The first k-line data is Time:", records[0]["Time"], "Open:", records[0]["Open"], "High:", records[0]["High"])
    Log("The second k-line data Time:", records[1]["Time"], "Close:", records[1]["Close"])
    Log("Current K-line (latest)", records[-1], "Previous K-line", records[-2])
void main() {
    auto records = exchange.GetRecords(PERIOD_H1);
    Log("The first k-line data is Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High);
    Log("The second k-line data Time:", records[1].Time, "Close:", records[1].Close);
    Log("Current K-line (latest)", records[records.size() - 1], "Previous K-line", records[records.size() - 2]);
}

Datos de barra de la línea K de salida:

function main() {
    var records = exchange.GetRecords("BTC_USDT.swap", 60, 100)
    Log(records)
}
def main():
    records = exchange.GetRecords("BTC_USDT.swap", 60, 100)
    Log(records)
void main() {
    auto records = exchange.GetRecords("BTC_USDT.swap", 60, 100);
    Log(records);
}

Cuando el configuradoexchangeobjeto es un objeto de intercambio de futuros, utilizar elsymbol, period, ylimitlos parámetros para solicitar los datos de línea K de un producto específico (producto futuro).

El período predeterminado de la línea K se puede establecer en las páginas de backtest y de operaciones reales.exchange.GetRecords()Si no se especifica ningún parámetro cuando se llama la función, se devolverán los datos de línea K correspondientes de acuerdo con el período de línea K establecido en el backtest y los parámetros reales del mercado. El valor de retorno es una matriz deRecordEn el caso de las estructuras, los datos de línea K devueltos se acumularán con el tiempo, el límite superior de las barras de línea K acumuladas se ve afectado por laexchange.SetMaxBarLen()El límite predeterminado es de 5000 bares cuando no está establecido. Cuando los datos de la línea K alcanzan el límite de acumulación de la barra de la línea K, se actualizarán agregando una barra de la línea K y eliminando la barra de la línea K más temprana (por ejemplo, cola de entrada/salida).TradeLas líneas K se generan en tiempo real. Si la interfaz de línea K del intercambio admite consultas de paginación, se realizarán varias solicitudes de API al llamar alexchange.SetMaxBarLen()función para establecer una longitud de línea K más grande. Cuando elexchange.GetRecords()Cuando la función se llama inicialmente, el número de barras de línea K obtenidas difiere entre la prueba posterior y la negociación real: - El sistema de prueba posterior obtendrá un cierto número de barras de línea K antes del inicio del intervalo de tiempo de prueba posterior por adelantado (el valor predeterminado es 5000, la configuración del sistema de prueba posterior y la cantidad de datos afectarán al número final devuelto), como los datos iniciales de línea K. - El número de barras de línea K obtenidas durante la negociación real se basa en la cantidad máxima de datos que se pueden obtener de la interfaz de línea K de la bolsa. ElperiodSi el parámetro se establece en 5, que es una solicitud para obtener datos de línea K con un período de 5 segundos.periodel parámetro no es divisible por 60 (es decir, el período representado no es divisible por minutos).exchange.GetTrades()En el caso de las transacciones, los datos de registro de transacciones deben ser obtenidos y los datos de línea K requeridos sintetizados.periodSi el parámetro es divisible por 60, entonces los datos de línea K requeridos se sintetizan utilizando un mínimo de datos de línea K de 1 minuto (si es posible, los datos de línea K requeridos se sintetizan utilizando un período más largo). La simulación de nivel de backtesting en el sistema de backtesting requiere la configuración del período de la línea K subyacente (cuando el sistema de backtesting simula la backtesting de nivel, los datos de la línea K correspondientes se utilizan para generar datos de Tick de acuerdo con el período de la línea K subyacente). ElC++lenguaje tiene el siguiente ejemplo de código si necesita construir sus propios datos de línea K:

#include <sstream>
void main() { 
    Records r;
    r.Valid = true;
    for (auto i = 0; i < 10; i++) {
        Record ele;
        ele.Time = i * 100000;
        ele.High = i * 10000;
        ele.Low = i * 1000;
        ele.Close = i * 100;
        ele.Open = i * 10;
        ele.Volume = i * 1;
        r.push_back(ele);
    }
    // Output display: Records[10]
    Log(r);                      
    auto ma = TA.MA(r,10);       
    // Output display: [nan,nan,nan,nan,nan,nan,nan,nan,nan,450]
    Log(ma);                     
}

Los intercambios que no apoyan laexchange.GetRecords()Función:

Nombre de la función Intercambios al contado sin soporte Exchanges de futuros no respaldados
Obtener registros Zaif / Coincheck / BitFlyer. ¿ Qué es esto? El valor de las pérdidas

Se trata de un sistema de intercambio de datos que permite a los operadores de los mercados de datos de obtener información sobre las operaciones de intercambio de datos.

exchange.GetPeriod

Obtener el período de línea K establecido en la página web de la plataforma de comercio de FMZ Quant cuando backtesting y ejecutar la estrategia en el comercio en vivo, es decir, el período de línea K predeterminado utilizado al llamar a laexchange.GetRecords()Función sin pasar parámetros.

Período de línea K en segundos, valor entero en segundos. Número

cambio.GetPeriod (()

function main() {
    // For example, the K-line period set on the website page of the FMZ Quant Trading platform during backtesting and live trading is 1 hour.
    var period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hours")
}
def main():
    period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hours")
void main() {
    auto period = exchange.GetPeriod();
    Log("K-line period:", period / (60 * 60.0), "hours");
}

¿Por qué no lo haces?

exchange.SetMaxBarLen

Establezca la longitud máxima de la línea K.

En el caso de los productos de la clase A, el valor de la diferenciación será el mismo.

El parámetronse utiliza para especificar la longitud máxima de la línea K. No verdadero Número

function main() {
    exchange.SetMaxBarLen(50)
    var records = exchange.GetRecords()
    Log(records.length, records)
}
def main():
    exchange.SetMaxBarLen(50)
    r = exchange.GetRecords()
    Log(len(r), r)
void main() {
    exchange.SetMaxBarLen(50);
    auto r = exchange.GetRecords();
    Log(r.size(), r[0]);
}

Elexchange.SetMaxBarLen()La función afecta dos aspectos para el tiempo de ejecución de la estrategia de criptomonedas:

  • Afecta el número de barras de la línea K (Bars) que se obtienen en la primera llamada.
  • Afecta al número máximo de barras de línea K (Barras).

¿Por qué no lo haces?

exchange.GetRawJSON

Obtener el contenido original devuelto por el últimorestsolicitud para el objeto de intercambio actual ({@var/EXCHANGE exchange}, {@var/EXCHANGE/exchanges exchanges}).

Los datos de respuesta para elrestel pedido. la cuerda

¿Qué está pasando?

function main(){
    exchange.GetAccount(); 
    var obj = JSON.parse(exchange.GetRawJSON());
    Log(obj);
}
import json
def main():
    exchange.GetAccount()
    obj = json.loads(exchange.GetRawJSON())
    Log(obj)
void main() {
    auto obj = exchange.GetAccount();
    // C++ does not support the GetRawJSON function
    Log(obj);
}

Elexchange.GetRawJSON()Las estrategias de negociación en el mercado de divisas no soportan esta función.C++ language.

¿Qué es lo que está pasando?

exchange.GetRate

Obtener el tipo de cambio actualmente establecido para el objeto de intercambio.

El valor actual del tipo de cambio del objeto de cambio. Número

El cambio.GetRate()

function main(){
    Log(exchange.GetTicker())
    // Set up exchange rate conversion
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    Log("Current exchange rate:", exchange.GetRate())
}
def main():
    Log(exchange.GetTicker())
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    Log("Current exchange rate:", exchange.GetRate())
void main() {
    Log(exchange.GetTicker());
    exchange.SetRate(7);
    Log(exchange.GetTicker());
    Log("Current exchange rate:", exchange.GetRate());
}

Si esexchange.SetRate()No ha sido convocado para fijar el tipo de conversión, elexchange.GetRate()La función devuelve un valor de tasa predeterminado de 1. Es decir, los datos relacionados con la moneda que se muestra actualmente (quoteCurrency) no se han convertido. Si se ha establecido un valor de tipo de cambio utilizandoexchange.SetRate(), por ejemplo,exchange.SetRate(7)Luego, toda la información de precios, tales como cotizaciones, profundidades y precios de pedido obtenidos a través delexchangeel objeto de cambio se convertirá multiplicando por el tipo de cambio establecido7- ¿ Por qué? Siexchangecorresponde a un intercambio con USD como moneda denominada, después de llamarexchange.SetRate(7), todos los precios en el mercado en vivo se convertirán a un precio cercano al yuan por multiplicación7En este punto, el valor del tipo de cambio obtenido utilizandoexchange.GetRate()es7.

¿Por qué no lo haces?

exchange.SetData

Elexchange.SetData()La función se utiliza para establecer los datos cargados cuando se ejecuta la estrategia.

La longitud de la cadena después del parámetrovalueCodificación JSON. Número

intercambio.Configurar datos (clave, valor)

Nombre de la recopilación de datos. llave verdadero la cuerda Los datos que deben cargarse por elexchange.SetData()La estructura de datos es la misma que el formato de datos solicitado por elexchange.GetData()Función al solicitar datos externos, es decir:"schema": ["time", "data"]- ¿ Por qué? Valor verdadero el conjunto

/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
    var data = [
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
    exchange.SetData("test", data)
    while(true) {
        Log(exchange.GetData("test"))
        Sleep(1000)
    }
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''              

def main():
    data = [
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
    exchange.SetData("test", data)
    while True:
        Log(exchange.GetData("test"))
        Sleep(1000)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/              

void main() {
    json data = R"([
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ])"_json;
    
    exchange.SetData("test", data);
    while(true) {
        Log(exchange.GetData("test"));
        Sleep(1000);
    }
}

Se requiere que los datos para el parámetrovalueSe trata de un documento que debe tener el mismo formato que eldatavariable en el siguiente ejemplo.1579622400000corresponde al tiempo2020-01-22 00:00:00, y que cuando el programa de estrategia se ejecuta después de este tiempo, llamar a laexchange.GetData()Función para obtener los datos antes de la próxima marca de tiempo de los datos1579708800000, es decir, el tiempo2020-01-23 00:00:00Lo que obtienes es[1579622400000, 123]el contenido de esos datos, a medida que el programa continúa ejecutándose, el tiempo cambia, y así sucesivamente para obtener el elemento de datos por elemento. en el siguiente ejemplo, en tiempo de ejecución (backtesting o comercio en vivo), el momento actual alcanza o excede la marca de tiempo1579795200000, elexchange.GetData()La función se llama y el valor de retorno es:{"Time":1579795200000,"Data":["abc", 123,{"price":123}]}. "Time":1579795200000corresponde a1579795200000en los datos[1579795200000, ["abc", 123, {"price": 123}]]. "Data":["abc", 123, {"price": 123}]corresponde a los datos["abc", 123, {"price": 123}]]En el[1579795200000, ["abc", 123, {"price": 123}]].

Los datos cargados pueden ser cualquier indicador económico, datos de la industria, indicadores relevantes, etc., utilizados para la evaluación cuantitativa de la estrategia de toda la información cuantificable.

¿Por qué no lo haces?

exchange.GetData

Elexchange.GetData()La función se utiliza para obtener datos cargados por elexchange.SetData()Función o proporcionado por un enlace externo.

Registros en la recopilación de datos. Objeto

El cambio.GetData ((clave) intercambio.GetData ((clave, tiempo de espera)

El nombre de la recopilación de datos. llave verdadero la cuerda Se utiliza para establecer el tiempo de caché en milisegundos. tiempo de espera falsos Número

/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
    exchange.SetData("test", [[1579536000000, _D(1579536000000)], [1579622400000, _D(1579622400000)], [1579708800000, _D(1579708800000)]])
    while(true) {
        Log(exchange.GetData("test"))
        Sleep(1000 * 60 * 60 * 24)
    }
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''  
def main():
    exchange.SetData("test", [[1579536000000, _D(1579536000000/1000)], [1579622400000, _D(1579622400000/1000)], [1579708800000, _D(1579708800000/1000)]])
    while True:
        Log(exchange.GetData("test"))
        Sleep(1000 * 60 * 60 * 24)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/    
void main() {
    json arr = R"([[1579536000000, ""], [1579622400000, ""], [1579708800000, ""]])"_json;
    arr[0][1] = _D(1579536000000);
    arr[1][1] = _D(1579622400000);
    arr[2][1] = _D(1579708800000);
    exchange.SetData("test", arr);
    while(true) {
        Log(exchange.GetData("test"));
        Sleep(1000 * 60 * 60 * 24);
    }
}

La llamada para obtener los datos escritos directamente.

/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
    while(true) {
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
        Sleep(1000)
    }
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''              

def main():
    while True:
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
        Sleep(1000)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/              

void main() {
    while(true) {
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
        Sleep(1000);
    }
}

Apoya la solicitud de datos a través de enlaces externos, el formato de los datos solicitados para:

{
    "schema":["time","data"],
    "data":[
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
}

¿Dónde está?schemaes el formato de datos de cada registro en el cuerpo de los datos cargados, que se fija en["time", "data"]correspondiente al formato de los datos de entrada por entrada en eldatael atributo. Lo que se almacena en eldataatributo es el cuerpo de los datos, con cada entrada que consta de una marca de tiempo de nivel de milisegundos y el contenido de los datos (que pueden ser cualquier dato codificable en JSON). El programa de servicio para pruebas, escrito en Go:

package main
import (
    "fmt"
    "net/http"
    "encoding/json"
)                

func Handle (w http.ResponseWriter, r *http.Request) {
    defer func() {
        fmt.Println("req:", *r)
        ret := map[string]interface{}{
            "schema": []string{"time","data"},
            "data": []interface{}{
                []interface{}{1579536000000, "abc"},
                []interface{}{1579622400000, 123},
                []interface{}{1579708800000, map[string]interface{}{"price":123}},
                []interface{}{1579795200000, []interface{}{"abc", 123, map[string]interface{}{"price":123}}},
            },
        }
        b, _ := json.Marshal(ret)
        w.Write(b)
    }()
}                

func main () {
    fmt.Println("listen http://localhost:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe(":9090", nil)
}

Los datos de respuesta del programa al recibir la solicitud:

{
    "schema":["time","data"],
    "data":[
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
}

Código de la estrategia de ensayo:

function main() {
    Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
    Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
}
def main():
    Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
    Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
void main() {
    Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
    Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"));
}

El método de llamada para obtener los datos de un enlace externo.

function main() {
    Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"))   // The xxx part of the link is the code of the query data, here xxx is an example.
}
def main():
    Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"))
void main() {
    Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"));
}

Solicitar datos para una consulta creada en la plataformaDatos y datos, solicitando que el formato de datos de la respuesta sea (debe contener tiempo, campos de datos descritos en el esquema):

{
    "data": [],
    "schema": ["time", "data"]
}

El campo data es el contenido de datos requerido, y los datos en el campo data deben ser los mismos que los acordados en el esquema.exchange.GetData()Cuando se llama una función, se devuelve un objeto JSON, por ejemplo:{"Time":1579795200000, "Data":"..."}.

Obtener los datos a la vez para backtesting y almacenar en caché un minuto de datos para el comercio en vivo.from(tiempo marcado en segundos),to(tiempo marcado en segundos) a la solicitud, parámetros tales comoperiod(período de línea K subyacente, marcado en milisegundos) se utilizan para determinar el período de tiempo durante el cual se deben adquirir los datos.

¿Qué es lo que está pasando?

exchange.GetMarkets

Elexchange.GetMarkets()La función se utiliza para obtener información sobre el mercado de divisas.

Diccionario que contiene la estructura {@struct/Market Market}. Objeto

En cambio.GetMarkets ((()

function main() {
    var markets = exchange.GetMarkets()
    var currency = exchange.GetCurrency()

    // Get the current contract code can also use exchange.GetContractType() function
    var ct = "swap"

    var key = currency + "." + ct
    Log(key, ":", markets[key])
}
def main():
    markets = exchange.GetMarkets()
    currency = exchange.GetCurrency()
    ct = "swap"

    key = currency + "." + ct
    Log(key, ":", markets[key])
void main() {
    auto markets = exchange.GetMarkets();
    auto currency = exchange.GetCurrency();

    auto ct = "swap";
    auto key = currency + "." + ct;
    Log(key, ":", markets[key]);
}

Ejemplo de llamada a un objeto de cambio de futuros:

/*backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

function main() {
    var arrSymbol = ["SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    var tbl1 = {
        type: "table",
        title: "markets1",
        cols: ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        rows: []
    }

    var markets1 = exchange.GetMarkets()
    for (var key in markets1) {
        var market = markets1[key]
        tbl1.rows.push([key, market.Symbol, market.BaseAsset, market.QuoteAsset, market.TickSize, market.AmountSize, market.PricePrecision, market.AmountPrecision, market.MinQty, market.MaxQty, market.MinNotional, market.MaxNotional, market.CtVal])
    }

    for (var symbol of arrSymbol) {
        exchange.GetTicker(symbol)
    }

    var tbl2 = {
        type: "table",
        title: "markets2",
        cols: ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        rows: []
    }

    var markets2 = exchange.GetMarkets()
    for (var key in markets2) {
        var market = markets2[key]
        tbl2.rows.push([key, market.Symbol, market.BaseAsset, market.QuoteAsset, market.TickSize, market.AmountSize, market.PricePrecision, market.AmountPrecision, market.MinQty, market.MaxQty, market.MinNotional, market.MaxNotional, market.CtVal])
    }

    LogStatus("`" + JSON.stringify([tbl1, tbl2]) + "`")
}
'''backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
'''

import json

def main():
    arrSymbol = ["SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    tbl1 = {
        "type": "table",
        "title": "markets1",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    }

    markets1 = exchange.GetMarkets()
    for key in markets1:
        market = markets1[key]
        tbl1["rows"].append([key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]])

    for symbol in arrSymbol:
        exchange.GetTicker(symbol)

    tbl2 = {
        "type": "table",
        "title": "markets2",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    }

    markets2 = exchange.GetMarkets()
    for key in markets2:
        market = markets2[key]
        tbl2["rows"].append([key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]])

    LogStatus("`" + json.dumps([tbl1, tbl2]) + "`")
/*backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

void main() {
    auto arrSymbol = {"SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"};

    json tbl1 = R"({
        "type": "table",
        "title": "markets1",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    })"_json;

    auto markets1 = exchange.GetMarkets();
    for (auto& [key, market] : markets1.items()) {
        json arrJson = {key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]};
        tbl1["rows"].push_back(arrJson);
    }

    for (const auto& symbol : arrSymbol) {
        exchange.GetTicker(symbol);
    }

    json tbl2 = R"({
        "type": "table",
        "title": "markets2",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    })"_json;

    auto markets2 = exchange.GetMarkets();
    for (auto& [key, market] : markets2.items()) {
        json arrJson = {key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]};
        tbl2["rows"].push_back(arrJson);
    }

    json tbls = R"([])"_json;
    tbls.push_back(tbl1);
    tbls.push_back(tbl2);
    LogStatus("`" + tbls.dump() + "`");
}

Utilice el objeto de intercambio de futuros para llamar a laexchange.GetMarkets()Antes de llamar a cualquier función de mercado, GetMarkets solo devuelve los datos de mercado del par de operaciones predeterminado actual. Después de llamar a la función de mercado, devuelve los datos de mercado de todas las variedades solicitadas. Puede consultar el siguiente ejemplo de prueba:

Elexchange.GetMarkets()función devuelve un diccionario con una clave llamada el nombre de la variedad comercial, y para fijaciones al contado formateadas como un par comercial, por ejemplo:

{
    "BTC_USDT" : {...},  // The key value is the Market structure
    "LTC_USDT" : {...},  
    ...
}

Para los intercambios de contratos de futuros, ya que puede haber múltiples contratos para una sola variedad, por ejemplo:BTC_USDTEn el caso de los contratos de comercio de pares, hay contratos perpetuos, contratos trimestrales, etc.exchange.GetMarkets()función devuelve un diccionario con el nombre clave del par combinado con el código del contrato, por ejemplo:

{
    "BTC_USDT.swap" : {...},     // The key value is the Market structure
    "BTC_USDT.quarter" : {...}, 
    "LTC_USDT.swap" : {...},
    ...
}
  • Elexchange.GetMarkets()La función admite operaciones en vivo, sistema de backtesting.
  • Elexchange.GetMarkets()La función devuelve información de mercado sólo para las variedades que se negocian en línea en el intercambio.
  • Elexchange.GetMarkets()La función no admite contratos de opciones.

Los intercambios que no apoyan laexchange.GetMarkets()Función:

Nombre de la función Intercambios al contado sin soporte Exchanges de futuros no respaldados
Obtener Mercados Coincheck / Bithumb / BitFlyer y otros

¿Qué es esto?

exchange.GetTickers

Elexchange.GetTickers()La función se utiliza para obtener datos de ticker agregados de intercambio (la matriz de la estructura {@struct/Ticker Ticker}).exchangedevuelve datos de ticker para todos los pares de operaciones cuando se trata de un objeto de intercambio al contado;exchangedevuelve datos de ticker para todos los contratos cuando se trata de un objeto de intercambio de futuros.

Elexchange.GetTickers()función devuelve una matriz de {@struct/Ticker Ticker} estructuras cuando tiene éxito en la solicitud de datos, y nulo cuando falla. Las matrices de {@struct/Ticker Ticker}, valores nulos

El intercambio.GetTickers ((()

function main() {
    var tickers = exchange.GetTickers()
    if (tickers && tickers.length > 0) {
        Log("Number of tradable items on the exchange:", tickers.length)
    }
}
def main():
    tickers = exchange.GetTickers()
    if tickers and len(tickers) > 0:
        Log("Number of tradable items on the exchange:", len(tickers))
void main() {
    auto tickers = exchange.GetTickers();
    if (tickers.Valid && tickers.size() > 0) {
        Log("Number of tradable items on the exchange:", tickers.size());
    }
}

Llama alexchange.GetTickers()Función para obtener datos de mercado agregados.

/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

function main() {
    var arrSymbol = ["ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"]
    
    // Before requesting other trading pair market data, call Get Tickers
    var tickers1 = exchange.GetTickers()
    var tbl1 = {type: "table", title: "tickers1", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var ticker of tickers1) {
        tbl1.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }
    
    // Request market data for other trading pairs
    for (var symbol of arrSymbol) {
        exchange.GetTicker(symbol)
    }

    // Call GetTickers again
    var tickers2 = exchange.GetTickers()
    var tbl2 = {type: "table", title: "tickers2", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var ticker of tickers2) {
        tbl2.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify([tbl1, tbl2]) +  "`")
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''

import json

def main():
    arrSymbol = ["ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"]
        
    tickers1 = exchange.GetTickers()
    tbl1 = {"type": "table", "title": "tickers1", "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], "rows": []}
    for ticker in tickers1:
        tbl1["rows"].append([ticker["Symbol"], ticker["High"], ticker["Open"], ticker["Low"], ticker["Last"], ticker["Buy"], ticker["Sell"], ticker["Time"], ticker["Volume"]])
    
    for symbol in arrSymbol:
        exchange.GetTicker(symbol)
    
    tickers2 = exchange.GetTickers()
    tbl2 = {"type": "table", "title": "tickers2", "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], "rows": []}
    for ticker in tickers2:
        tbl2["rows"].append([ticker["Symbol"], ticker["High"], ticker["Open"], ticker["Low"], ticker["Last"], ticker["Buy"], ticker["Sell"], ticker["Time"], ticker["Volume"]])
    
    LogStatus("`" + json.dumps([tbl1, tbl2]) +  "`")
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

json tickerToJson(const Ticker& ticker) {
    json arrJson;

    arrJson.push_back(ticker.Symbol);
    arrJson.push_back(ticker.High);
    arrJson.push_back(ticker.Open);
    arrJson.push_back(ticker.Low);
    arrJson.push_back(ticker.Last);
    arrJson.push_back(ticker.Buy);
    arrJson.push_back(ticker.Sell);
    arrJson.push_back(ticker.Time);
    arrJson.push_back(ticker.Volume);

    return arrJson;
}

void main() {
    std::string arrSymbol[] = {"ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"};
    
    auto tickers1 = exchange.GetTickers();
    json tbl1 = R"({
        "type": "table", 
        "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"],
        "rows": []
    })"_json;
    tbl1["title"] = "tickers1";
    
    for (const auto& ticker : tickers1) {
        json arrJson = tickerToJson(ticker);
        tbl1["rows"].push_back(arrJson);
    }
    
    for (const std::string& symbol : arrSymbol) {
        exchange.GetTicker(symbol);
    }
    
    auto tickers2 = exchange.GetTickers();
    json tbl2 = R"({
        "type": "table", 
        "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"],
        "rows": []
    })"_json;
    tbl2["title"] = "tickers2";
    
    for (const auto& ticker : tickers2) {
        json arrJson = tickerToJson(ticker);
        tbl2["rows"].push_back(arrJson);
    }
    
    json tbls = R"([])"_json;
    tbls.push_back(tbl1);
    tbls.push_back(tbl2);
    LogStatus("`" + tbls.dump() + "`");
}

Utilice el objeto de intercambio spot y llame alexchange.GetTickers()Antes de llamar a cualquier función de mercado, GetTickers solo devuelve los datos de ticker del par de operaciones predeterminado actual. Después de llamar a la función de mercado, devuelve los datos de ticker de todas las variedades solicitadas. Puede consultar el siguiente ejemplo de prueba:

  • Esta función solicita el intercambio para agregar las tickers de la interfaz, no es necesario configurar pares de negociación, código del contrato antes de llamar.
  • El sistema de backtesting admite esta función.
  • Los objetos de intercambio que no proporcionan una interfaz de ticker agregada no admiten esta función.
  • Esta función no admite contratos de opción.

Los intercambios que no apoyan laexchange.GetTickers()Función:

Nombre de la función Intercambios al contado sin soporte Exchanges de futuros no respaldados
Los GetTickers Zaif / WOO / Géminis / Coincheck / BitFlyer / Bibox Los futuros de los bancos centrales de los Estados miembros que no cumplan los requisitos de la Directiva 2009/138/CE se considerarán como activos de la entidad de crédito.

¿Por qué no lo haces?

Registro Comercio