O recurso está a ser carregado... Carregamento...

Mercado

exchange.GetTicker

Obter a estrutura {@struct/Ticker Ticker} do local ou contrato correspondente ao par de negociação atualmente definido, código do contrato, ou seja, os dados do ticker.GetTicker ()função é uma função membro do objeto de troca {@var/EXCHANGE exchange}, o uso deexchangefunções (métodos) de membros de objeto relacionadas apenas comexchange, e não será repetido no documento.

Oexchange.GetTicker()A função retorna a estrutura {@struct/Ticker Ticker} quando a solicitação de dados é bem-sucedida e retorna o valor nulo quando a solicitação de dados falha. {@struct/Ticker Ticker}, valor nulo

troca.GetTicker ((() troca.GetTicker (símbolo)

O parâmetrosymbolÉ utilizado para especificar o par de negociação específico e o código do contrato correspondente aos dados {@struct/Ticker Ticker} solicitados. Ao ligar para oexchange.GetTicker(symbol)função,exchangeSe você precisar solicitar dados de mercado com a moeda denominada como USDT e a moeda de negociação como BTC, o parâmetrosymbolé:"BTC_USDT", e o formato é o formato dos pares de negociação definido pela plataforma FMZ. Ao ligar para oexchange.GetTicker(symbol)função,exchangeSe você precisa solicitar os dados de mercado do contrato perpétuo padrão U do BTC, o parâmetrosymbolé:"BTC_USDT.swap", e o formato é uma combinação dospar de negociaçãoeCódigo do contratodefinidos pela plataforma FMZ, separados pelo símbolo .. Ao ligar para oexchange.GetTicker(symbol)função,exchangeSe você precisar solicitar os dados de mercado do contrato de opção U-standard do BTC, o parâmetrosymbolé:"BTC_USDT.BTC-240108-40000-C"(tomando Binance Option BTC-240108-40000-C como exemplo), o formato é a combinação dopar de negociaçãodefinidos pela plataforma FMZ e o código do contrato de opção específico definido pela bolsa, separados pelo carácter ..

símbolo Falso cordel

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 os objectos de troca de futuros (ou seja,exchangeouexchanges[0]), é necessário definir o código do contrato utilizando oexchange.SetContractType()função antes de chamar a função ticker, que não será repetida.

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);
}

Utilize osymbolParâmetro para solicitar dados de mercado para um símbolo específico (símbolo spot).

OTickerdados devolvidos peloexchange.GetTicker()O sistema de backtesting é um sistema de testes de desempenho.HigheLowOs valores simulados são os valores tomados da venda e da compra no mercado nesse momento.Tickerdados devolvidos peloexchange.GetTicker()O mercado real é o mercado em que aHigheLowvalores são baseados nos dados devolvidos pela troca encapsuladaTickInterface, que inclui os preços mais altos e mais baixos dentro de um determinado período (normalmente um período de 24 horas). As trocas que não suportam oexchange.GetTicker()Função:

Nome da função Trocas spot não suportadas Atividades de negociação
GetTicker Futuros_Aevo

{@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.GetRecords exchange.GetRecords}, {@fun/Market/exchange.GetTickers exchange.GetTickers}

exchange.GetDepth

Obter a estrutura {@struct/Depth Depth} do local ou contrato correspondente ao par de negociação atualmente definido, código do contrato, ou seja, dados da carteira de ordens.

Oexchange.GetDepth()A função retorna a estrutura {@struct/Depth Depth} se a solicitação de dados for bem-sucedida e retorna nulo se a solicitação de dados falhar. {@struct/Depth Depth}, valor nulo

troca.GetDepth ((() troca.GetDepth (símbolo)

O parâmetrosymbolé usado para especificar o par de negociação específico e o código do contrato correspondente aos dados {@struct/Depth Depth} solicitados. Se este parâmetro não for passado, os dados do livro de ordens do par de negociação atualmente definido e o código do contrato serão solicitados por padrão.exchange.GetDepth(symbol)função,exchangeSe você precisar solicitar para obter os dados da carteira de ordens com a moeda denominada como USDT e a moeda da transação como BTC, o parâmetrosymbolé:"BTC_USDT", e o formato é o formato do par de negociação definido pela plataforma FMZ.exchange.GetDepth(symbol)função,exchangeSe você precisa solicitar os dados do livro de pedidos do contrato perpétuo padrão U do BTC, o parâmetrosymbolé:"BTC_USDT.swap", e o formato é uma combinação dospar de negociaçãoeCódigo do contratodefinidos pela plataforma FMZ, separados pelo carácter ..exchange.GetDepth(symbol)função,exchangeSe você precisar solicitar os dados do livro de ordens do contrato de opção U-standard do BTC, o parâmetrosymbolé:"BTC_USDT.BTC-240108-40000-C"(tomando Binance Option BTC-240108-40000-C como exemplo), o formato é a combinação dopar de negociaçãodefinidos pela plataforma FMZ e o código do contrato de opção específico definido pela bolsa, separados pelo carácter .. símbolo Falso cordel

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);
}

Testeexchange.GetDepth()Função:

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);
}

Quando o configuradoexchangeObjeto é um objeto de troca de futuros, usar osymbolParâmetro para solicitar os dados do livro de ordens de um símbolo específico (símbolo de futuros).

No sistema de backtesting, os dados de cada grau são devolvidos peloexchange.GetDepth()função quando se utiliza oSimulação de TicO sistema de backtesting é um sistema de simulação de valores.exchange.GetDepth()função quando se utiliza oCarrapatos reaisO backtesting é um instante profundo de segundo nível.

{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.GetRecords exchange.GetRecords}

exchange.GetTrades

Obter a matriz de estrutura {@struct/Trade Trade} do ponto ou contrato correspondente ao par de negociação atualmente definido, código do contrato, ou seja, os dados da transação de mercado.

Oexchange.GetTrades()A função retorna uma matriz de estruturas {@struct/Trade Trade} se a solicitação de dados for bem-sucedida e retorna valores nulos se a solicitação de dados falhar. {@struct/Trade Trade} matrizes, valores nulos

Troca.GetTrades ((() troca.GetTrades (símbolo)

O parâmetrosymbolé usado para especificar o par de negociação específico e o código do contrato correspondente aos dados de matriz {@struct/Trade Trade} solicitados. Se este parâmetro não for passado, os dados de registro de transação mais recentes do par de negociação atualmente definido e o código do contrato serão solicitados por padrão.exchange.GetTrades(symbol)função,exchangeSe você precisar solicitar para obter os dados da carteira de ordens com a moeda denominada como USDT e a moeda de negociação como BTC, o parâmetrosymbolé:"BTC_USDT", e o formato é o formato do par de negociação definido pela plataforma FMZ.exchange.GetTrades(symbol)função,exchangeSe você precisa solicitar os dados do livro de pedidos do contrato perpétuo padrão U do BTC, o parâmetrosymbolé:"BTC_USDT.swap", e o formato é uma combinação dospar de negociaçãoeCódigo do contratodefinidos pela plataforma FMZ, separados pelo carácter ..exchange.GetTrades(symbol)função,exchangeSe você precisar solicitar os dados do livro de ordens do contrato de opção U-standard do BTC, o parâmetrosymbolé:"BTC_USDT.BTC-240108-40000-C"(tomando Binance Option BTC-240108-40000-C como exemplo), o formato é a combinação dopar de negociaçãodefinidos pela plataforma FMZ e o código do contrato de opção específico definido pela bolsa, separados pelo carácter .. símbolo Falso cordel

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);
}

Teste oexchange.GetTrades()Função:

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);
}

Quando o configuradoexchangeObjeto é um objeto de troca de futuros, usar osymbolParâmetro para solicitar dados de registo de transacções de mercado para um símbolo específico (símbolo de futuros).

exchange.GetTrades()A função para obter os pares de negociação atuais, o histórico de transações do mercado (não o seu próprio) correspondente aos contratos. Algumas bolsas não suportam essa função, e os dados específicos retornados é quanto do intervalo de registros de transações depende da troca e precisa ser manuseado de acordo com a situação específica.exchange.GetRecords ()A função retorna a mesma ordem de dados, ou seja, o último elemento da matriz é o dado mais próximo do tempo atual. Oexchange.GetTrades()função retorna uma matriz vazia ao usarSimulação de TicOs dados devolvidos pelo sistema de backtesting são os dados de base de dados que o sistema de backtesting retorna.exchange.GetTrades()Função no momento da utilizaçãoCarrapatos reaisO backtesting no sistema de backtesting é os dados instantâneos do fluxo de ordens, ou seja, a matriz de estrutura {@struct/Trade Trade}. As trocas que não suportam oexchange.GetTrades()Função:

Nome da função Trocas spot não suportadas Atividades de negociação
GetTrades Futures_BitMart / Futures_Bibox

{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetRecords exchange.GetRecords}

exchange.GetRecords

Obter a matriz de estrutura {@struct/Record Record} do ponto ou contrato correspondente ao par de negociação atualmente definido, código do contrato, ou seja, dados de linha K.

Oexchange.GetRecords()A função retorna uma matriz de estruturas {@struct/Record Record} quando a solicitação de dados é bem-sucedida e retorna valores nulos quando a solicitação de dados falha. {@struct/Record Record} matrizes, valores nulos

troca.GetRecords ((() Troca.GetRecords (símbolo) exchange.GetRecords (símbolo, ponto) exchange.GetRecords (símbolo, ponto, limite) troca.GetRecords (período) troca.GetRecords (período, limite)

O parâmetrosymbolé usado para especificar o par de negociação específico e o código do contrato correspondente aos dados de matriz {@struct/Record Record} solicitados. Se este parâmetro não for passado, os dados da linha K do par de negociação atualmente definido e o código do contrato serão solicitados por padrão.exchange.GetRecords(symbol)função,exchangeSe você precisar solicitar para obter os dados com a moeda denominada como USDT e a moeda da transação como BTC, o parâmetrosymbolé:"BTC_USDT", e o formato é o formato do par de negociação definido pela plataforma FMZ.exchange.GetRecords(symbol)função,exchangeSe você precisa solicitar os dados do livro de pedidos do contrato perpétuo padrão U do BTC, o parâmetrosymbolé:"BTC_USDT.swap", e o formato é uma combinação dospar de negociaçãoeCódigo do contratodefinidos pela plataforma FMZ, separados pelo carácter ..exchange.GetRecords(symbol)função,exchangeSe você precisar solicitar os dados do livro de ordens do contrato de opção U-standard do BTC, o parâmetrosymbolé:"BTC_USDT.BTC-240108-40000-C"(tomando Binance Option BTC-240108-40000-C como exemplo), o formato é a combinação dopar de negociaçãodefinidos pela plataforma FMZ e o código do contrato de opção específico definido pela bolsa, separados pelo carácter .. símbolo Falso cordel O parâmetroperiodespecifica o período dos dados de linha K solicitados, por exemplo: {@var/PERIOD/PERIOD_M1 PERIOD_M1}, {@var/PERIOD/PERIOD_M5 PERIOD_M5}, {@var/PERIOD/PERIOD_M15 PERIOD_M15}, etc. O valor do parâmetroperiodSe este parâmetro não for passado, o período dos dados de linha K solicitados por padrão é o período de linha K padrão da configuração atual de estratégia em tempo real / backtest. período Falso Número O parâmetrolimité usado para especificar o comprimento dos dados de linha K solicitados. Se esse parâmetro não for passado, o comprimento de solicitação padrão é o número máximo de barras de linha K solicitadas em um momento da interface de linha K de troca. Este parâmetro pode causar a busca para consultar os dados de linha K de troca e o consumo de tempo da chamada de função aumentará durante a consulta de busca. limite Falso 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]);
}

Obtenha dados da linha K para um 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]);
}

Dados de barra de linha K de saída:

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);
}

Quando o configuradoexchangeObjeto é um objeto de troca de futuros, usar osymbol, period, elimitParâmetros para solicitar os dados da linha K de um produto específico (produto futuro).

O período de linha K padrão pode ser definido nas páginas de backtest e de negociação real.exchange.GetRecords()Se nenhum parâmetro for especificado quando a função for chamada, os dados de linha K correspondentes serão devolvidos de acordo com o período de linha K definido no backtest e nos parâmetros reais do mercado. O valor de retorno é uma matriz deRecordOs dados de linha K retornados serão acumulados ao longo do tempo, o limite superior das barras de linhaexchange.SetMaxBarLen()O limite padrão é de 5000 bares quando não está definido. Quando os dados da linha K atingem o limite de acumulação da barra da linha K, eles serão atualizados adicionando uma barra da linha K e excluindo a primeira barra da linha K (por exemplo, fila de entrada/saída).TradeA utilização de um conjunto de linhas K (ou de uma matriz estruturada) em tempo real para gerar linhas K. Se a interface K-line do exchange suportar consultas de paginação, várias solicitações de API serão feitas ao chamar oexchange.SetMaxBarLen()função para definir um maior comprimento da linha K. Quando oexchange.GetRecords()A função é chamada inicialmente, o número de barras de linha K obtidas difere entre backtesting e negociação real: - O sistema de backtesting obterá um certo número de barras de linha K antes do início do intervalo de tempo de backtesting com antecedência (o padrão é 5000, as configurações do sistema de backtesting e a quantidade de dados afetarão o número final retornado), como os dados iniciais de linha K. - O número de barras de linha K obtidas durante a negociação real é baseado na quantidade máxima de dados que podem ser obtidos a partir da interface de linha K da bolsa. OperiodO parâmetro é definido em 5, que é uma solicitação para obter dados de linha K com um período de 5 segundos.periodO sistema subjacente utiliza a interface relevante deexchange.GetTrades()Os dados de registo de transacções são obtidos através de um sistema de registo de transacções, que permite obter os dados de registo de transacções e sintetizar os dados de linha K necessários.periodSe o parâmetro for divisível por 60, os dados de linha K necessários são sintetizados utilizando um mínimo de dados de linha K de 1 minuto (se possível, os dados de linha K necessários são sintetizados utilizando um período maior). O backtesting de nível simulado no sistema de backtesting requer a configuração do período de linha K subjacente (quando o sistema de backtesting simula o backtesting de nível, os dados de linha K correspondentes são usados para gerar dados Tick de acordo com o período de linha K subjacente definido). OC++linguagem tem o seguinte exemplo de código se você precisa construir seus próprios dados de linha 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);                     
}

As trocas que não suportam oexchange.GetRecords()Função:

Nome da função Trocas spot não suportadas Atividades de negociação
GetRecords Zaif / Coincheck / BitFlyer Futuros_Aevo

{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.SetMaxBarLen exchange.SetMaxBarLen}

exchange.GetPeriod

Obter o período de linha K definido na página do site da plataforma de negociação FMZ Quant quando backtesting e executando a estratégia em negociação ao vivo, ou seja, o período de linha K padrão usado ao chamar oexchange.GetRecords()Função sem passar parâmetros.

Período de linha K em segundos, valor inteiro em segundos. Número

troca.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");
}

Não, não, não, não.

exchange.SetMaxBarLen

Definir o comprimento máximo da linha K.

troca.SetMaxBarLen ((n)

O parâmetroné utilizada para especificar o comprimento máximo da linha K. n verdade 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]);
}

Oexchange.SetMaxBarLen()A função afeta dois aspectos para o tempo de execução da estratégia de criptomoedas:

  • Afeta o número de barras de linha K (Bars) obtidas na primeira chamada.
  • Afeta o número máximo de barras de linha K (Bars).

Não, não, não, não.

exchange.GetRawJSON

Obter o conteúdo original devolvido pela últimarestsolicitação do objeto de troca atual ({@var/EXCHANGE exchange}, {@var/EXCHANGE/exchanges exchanges}).

Os dados de resposta para orestpedido. cordel

troca.GetRawJSON()

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);
}

Oexchange.GetRawJSON()A função não é suportada por estratégias noC++ language.

{@var/EXCHANGE exchange}

exchange.GetRate

Obter a taxa de câmbio atualmente definida para o objeto de troca.

Valor corrente da taxa de câmbio do objeto de câmbio. Número

troca.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());
}

Seexchange.SetRate()A taxa de conversão não foi fixada, oexchange.GetRate()A função retorna um valor de taxa padrão de 1, ou seja, os dados relacionados com a moeda atualmente exibida (quoteCurrency) não foram convertidos. Se o valor da taxa de câmbio tiver sido definido utilizandoexchange.SetRate(), por exemplo,exchange.SetRate(7)Em seguida, todas as informações de preços, tais como cotações, profundidades e preços de encomenda obtidos através doexchangeObjeto de câmbio será convertido multiplicando pela taxa de câmbio definida7- Não. Seexchangecorresponde a uma troca com USD como moeda denominada, após a chamadaexchange.SetRate(7), todos os preços no mercado ao vivo serão convertidos para um preço próximo do yuan7Neste ponto, o valor da taxa de câmbio obtido utilizandoexchange.GetRate()é7.

{@fun/Trade/exchange.SetRate exchange.SetRate}

exchange.SetData

Oexchange.SetData()A função é usada para definir os dados carregados quando a estratégia está em execução.

O comprimento da cadeia após o parâmetrovalueCodificação JSON. Número

exchange.SetData ((chave, valor)

Nome da recolha de dados. Chave verdade cordel Os dados a carregar peloexchange.SetData()A estrutura de dados é a mesma que o formato de dados solicitado peloexchange.GetData()Função de solicitação de dados externos, ou seja:"schema": ["time", "data"]- Não. Valor verdade matriz

/*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);
    }
}

Requer que os dados para o parâmetrovalueser do mesmo formato que odataVocê pode ver que a marca de tempo1579622400000corresponde ao tempo2020-01-22 00:00:00, e que quando o programa de estratégia é executado após este tempo, chamar oexchange.GetData()função para obter os dados antes do próximo carimbo de tempo de dados1579708800000, isto é, tempo2020-01-23 00:00:00O que ganhas é[1579622400000, 123]O conteúdo desses dados, como o programa continua a ser executado, o tempo muda, e assim por diante para obter o item de dados por item. no exemplo a seguir, no tempo de execução (backtesting ou negociação ao vivo), o momento atual atinge ou excede o timestamp1579795200000, oexchange.GetData()A função é chamada e o valor de retorno é:{"Time":1579795200000,"Data":["abc", 123,{"price":123}]}. "Time":1579795200000corresponde a1579795200000em dados[1579795200000, ["abc", 123, {"price": 123}]]. "Data":["abc", 123, {"price": 123}]corresponde aos dados["abc", 123, {"price": 123}]]em[1579795200000, ["abc", 123, {"price": 123}]].

Os dados carregados podem ser quaisquer indicadores económicos, dados do setor, indicadores relevantes, etc., utilizados para a avaliação quantitativa da estratégia de todas as informações quantificáveis.

Não, não, não, não.

exchange.GetData

Oexchange.GetData()função é usada para obter dados carregados peloexchange.SetData()função ou fornecida por uma ligação externa.

Registros na recolha de dados. Objeto

troca.GetData (chave) Troca.GetData (chave, tempo de espera)

Nome da recolha de dados. Chave verdade cordel Usado para definir o tempo de expiração do cache em milissegundos. tempo de espera Falso 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);
    }
}

A chamada para obter os dados escritos diretamente.

/*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);
    }
}

Suporte para solicitar dados através de ligações externas, o formato dos dados solicitados para:

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

Onde?schemaé o formato de dados para cada registo no corpo dos dados carregados, que é fixado em["time", "data"]correspondente ao formato dos dados de entrada por entrada nodataatributo. O que é armazenado nodataO atributo é o corpo dos dados, com cada entrada constituída por uma marca de tempo de nível de milissegundos e o conteúdo dos dados (que pode ser qualquer dado codificável em JSON). O programa de serviço para testes, escrito em 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)
}

Os dados de resposta do programa após a recepção da solicitação:

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

Código da estratégia de ensaio:

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"));
}

Método de chamada para obter os dados de um link 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"));
}

Pedir dados para uma consulta criada na plataformadados, solicitando que o formato dos dados da resposta seja (deve conter tempo, campos de dados descritos no esquema):

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

O campo data é o conteúdo de dados exigido, e os dados no campo data devem ser os mesmos que os acordados no schema.exchange.GetData()função é chamada, um objeto JSON é devolvido, por exemplo:{"Time":1579795200000, "Data":"..."}.

Obter os dados de uma só vez para backtesting e cache um minuto de dados para negociação ao vivo.from(horário em segundos),to(timestamped em segundos) para o pedido, parâmetros tais comoperiod(período de linha K subjacente, marcado em milissegundos) são utilizados para determinar o período de tempo durante o qual os dados devem ser adquiridos.

{@fun/Market/exchange.SetData exchange.SetData}

exchange.GetMarkets

Oexchange.GetMarkets()A função é utilizada para obter informações sobre o mercado de câmbio.

Dicionário que contém a estrutura {@struct/Market Market}. Objeto

troca.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]);
}

Exemplo de chamada para um objeto de câmbio 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() + "`");
}

Use o objeto de troca de futuros para chamar oexchange.GetMarkets()Antes de chamar qualquer função de mercado, o GetMarkets retorna apenas os dados de mercado do par de negociação padrão atual. Depois de chamar a função de mercado, retorna os dados de mercado de todas as variedades solicitadas. Você pode se referir ao seguinte exemplo de teste:

Oexchange.GetMarkets()função retorna um dicionário com uma chave denominada o nome da variedade comercial e para as correções spot formatadas como um par comercial, por exemplo:

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

Para as trocas de contratos futuros, uma vez que podem existir vários contratos para uma única variedade, por exemplo:BTC_USDTOs contratos perpétuos, os contratos trimestrais e assim por diante.exchange.GetMarkets()A função retorna um dicionário com o nome da chave do par combinado com o código do contrato, por exemplo:

{
    "BTC_USDT.swap" : {...},     // The key value is the Market structure
    "BTC_USDT.quarter" : {...}, 
    "LTC_USDT.swap" : {...},
    ...
}
  • Oexchange.GetMarkets()Função suporta negociações ao vivo, sistema de backtesting.
  • Oexchange.GetMarkets()A função devolve informações de mercado apenas para as variedades que são negociadas on-line na bolsa.
  • Oexchange.GetMarkets()A função não suporta contratos de opções.

As trocas que não suportam oexchange.GetMarkets()Função:

Nome da função Trocas spot não suportadas Atividades de negociação
GetMarkets Coincheck / Bithumb / BitFlyer

{@struct/Mercado Mercado}

exchange.GetTickers

Oexchange.GetTickers()A função é utilizada para obter dados de ticker agregados de troca (a matriz da estrutura {@struct/Ticker Ticker}).exchangeRetorna dados de ticker para todos os pares de negociação quando se trata de um objeto de troca à vista;exchangeRetorna dados de ticker para todos os contratos quando se trata de um objeto de troca de futuros.

Oexchange.GetTickers()função retorna uma matriz de estruturas {@struct/Ticker Ticker} quando consegue solicitar dados, e nulo quando falha. {@struct/Ticker Ticker} matrizes, valores nulos

troca.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());
    }
}

Ligue para oexchange.GetTickers()Função de obtenção de dados 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() + "`");
}

Utilize o objeto de troca spot e chame oexchange.GetTickers()Antes de chamar qualquer função de mercado, o GetTickers retorna apenas os dados do ticker do par de negociação padrão atual. Depois de chamar a função de mercado, retorna os dados do ticker de todas as variedades solicitadas. Você pode se referir ao exemplo de teste a seguir:

  • Esta função solicita à bolsa para agregar tickers interface, sem necessidade de configurar pares de negociação, código de contrato antes de chamar.
  • O sistema de backtesting suporta esta função.
  • Os objetos de troca que não fornecem uma interface de ticker agregada não suportam esta função.
  • Esta função não suporta contratos de opção.

As trocas que não suportam oexchange.GetTickers()Função:

Nome da função Trocas spot não suportadas Atividades de negociação
GetTickers Zaif / WOO / Gemini / Coincheck / BitFlyer / Bibox Futures_WOO / Futures_dYdX / Futures_Deribit / Futures_Bibox / Futures_Aevo

Não, não, não, não, não.

Registo Comércio