Die Ressourcen sind geladen. Beförderung...

Markt

exchange.GetTicker

Erhalten Sie die {@struct/Ticker Ticker} -Struktur des Spot- oder Vertrags, die dem derzeit eingestellten Handelspar, dem Vertragscode, d. h. den Ticker-Daten entspricht.GetTicker ()Funktion ist eine Mitgliederfunktion des Austauschobjekts {@var/EXCHANGE exchange}, die Verwendung vonexchangeObjektmitgliederfunktionen (Methoden), die nur mitexchange, und es wird nicht im Dokument wiederholt werden.

Dieexchange.GetTicker()Funktion gibt die Struktur {@struct/Ticker Ticker} zurück, wenn die Datenanfrage erfolgreich ist, und gibt null zurück, wenn die Datenanfrage fehlschlägt. {@struct/Ticker Ticker}, Nullwert

- Ich bin nicht derjenige, der das sagt. - Das ist ein Symbol.

Der Parametersymbolwird verwendet, um das spezifische Handelspaar und den Vertragscode anzugeben, die den angeforderten {@struct/Ticker Ticker}-Daten entsprechen. Wird dieser Parameter nicht übergeben, werden standardmäßig die Marktdaten des aktuell eingestellten Handelspaares und des Vertragscodes angefordert. Bei Anrufen derexchange.GetTicker(symbol)Funktion,exchangeWenn Sie Marktdaten mit der Währung als USDT und der Handelswährung als BTC anfordern müssen, wird der Parametersymbolist:"BTC_USDT", und das Format ist das von der FMZ-Plattform definierte Handelspaarformat. Bei Anrufen derexchange.GetTicker(symbol)Funktion,exchangeWenn Sie die Marktdaten von BTCs U-Standard-Perpetual-Kontrakt anfordern müssen, wird der Parametersymbolist:"BTC_USDT.swap", und das Format ist eine Kombination derHandelspaarundVertragskodedurch die FMZ-Plattform definiert, getrennt durch das Zeichen .. Bei Anrufen derexchange.GetTicker(symbol)Funktion,exchangeWenn Sie die Marktdaten von BTCs U-Standard-Optionskontrakt anfordern müssen, wird der Parametersymbolist:"BTC_USDT.BTC-240108-40000-C"(beispielsweise Binance Option BTC-240108-40000-C), ist das Format die Kombination derHandelspaarvon der FMZ-Plattform und dem von der Börse definierten spezifischen Optionsvertragskode definiert, getrennt durch den Zeichen ..

Symbol falsche String

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

Für Futures-Börsenobjekte (d. h.exchangeoderexchanges[0]), müssen Sie den Vertragscode mit demexchange.SetContractType()Funktion vor dem Aufruf der Tickelfunktion, die nicht wiederholt wird.

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

VerwendensymbolParameter zur Anforderung von Marktdaten für ein bestimmtes Symbol (Spot-Symbol).

DieTickerDaten, die von derexchange.GetTicker()Die Ergebnisse des Backtesting-SystemsHighundLowIm übrigen sind die Wertvorstellungen von der Verkaufs- und der Kaufwährung des Marktes zu diesem Zeitpunkt simuliert.TickerDaten, die von derexchange.GetTicker()In der Praxis sind dieHighundLowWerte basieren auf den von dem eingekapselten Austausch zurückgegebenen DatenTickInterface, die die höchsten und niedrigsten Preise innerhalb eines bestimmten Zeitraums (in der Regel einen Zeitraum von 24 Stunden) enthält. Die Ausgabe vonexchange.GetTicker()Funktion:

Funktionsname Nicht unterstützte Spotbörsen Nicht abgesicherte Futures-Börsen
GetTicker Futures_Aevo

Der Markt wird von der Kommission und den Mitgliedstaaten geprüft, ob sie in der Lage sind, die erforderlichen Maßnahmen zu treffen.

exchange.GetDepth

Erhalten Sie die {@struct/Depth Depth}-Struktur des Spot- oder Vertrags, der dem derzeit eingestellten Handelspar, dem Vertragskode, d. h. den Auftragsbuchdaten entspricht.

Dieexchange.GetDepth()Funktion gibt die Struktur {@struct/Depth Depth} zurück, wenn die Anfrage erfolgreich ist, und null, wenn die Anfrage fehlschlägt. {@struct/Depth Depth}, Nullwert

Erhalten Sie die Tiefe. Wechseln.Symbol GetDepth

Der Parametersymbolwird verwendet, um das spezifische Handelspaar und den entsprechenden Vertragscode für die angeforderten {@struct/Depth Depth} Daten anzugeben. Wird dieser Parameter nicht übergeben, werden standardmäßig die Auftragsbuchdaten des aktuell eingestellten Handelspaares und der Vertragscode angefordert.exchange.GetDepth(symbol)Funktion,exchangeist das Spot-Austauschobjekt. Wenn Sie die Auftragsbuchdaten mit der Währung USDT und der Transaktionswährung BTC anfordern müssen, wird der Parametersymbolist:"BTC_USDT", und das Format ist das von der FMZ-Plattform definierte Handelspaarformat.exchange.GetDepth(symbol)Funktion,exchangeist das Futures-Austauschobjekt. Wenn Sie die Auftragsbuchdaten von BTCs U-Standard-Perpetual-Kontrakt anfordern müssen, wird der Parametersymbolist:"BTC_USDT.swap", und das Format ist eine Kombination derHandelspaarundVertragskodedie durch die FMZ-Plattform definiert sind, getrennt durch den Zeichen ..exchange.GetDepth(symbol)Funktion,exchangeist das Futures Exchange Objekt. Wenn Sie die Auftragsbuchdaten des BTCs U-Standard-Optionskontrakts anfordern müssen, wird der Parametersymbolist:"BTC_USDT.BTC-240108-40000-C"(beispielsweise Binance Option BTC-240108-40000-C), ist das Format die Kombination derHandelspaarvon der FMZ-Plattform und dem von der Börse definierten spezifischen Optionsvertragskode definiert, getrennt durch den Zeichen .. Symbol falsche String

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

Prüfungexchange.GetDepth()Funktion:

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

Wenn die konfigurierteexchangeObjekt ist ein Futures-Börse Objekt, verwenden Sie diesymbolParameter zur Anforderung der Auftragsbuchdaten eines bestimmten Symbols (Futures-Symbol).

Im Backtesting-System werden die Daten für jede Klasse von derexchange.GetDepth()Funktion bei der Verwendung derSimulieren von TicksDie Daten, die von der Datenbank zurückgegeben werden, werden in einem System für Backtesting mit einemexchange.GetDepth()Funktion bei der Verwendung derEchte ZeckeBacktesting ist eine zweite Ebene tiefe Momentaufnahme.

Der Markt wird von der Kommission überwacht, um die Ergebnisse der Prüfung zu ermitteln.

exchange.GetTrades

Erhalten Sie das Strukturmatrix {@struct/Trade Trade} des Spot- oder Vertrags, das dem aktuell eingestellten Handelspar, dem Vertragskode, d. h. den Markttransaktionsdaten entspricht.

Dieexchange.GetTrades()Funktion gibt ein Array von {@struct/Trade Trade}-Strukturen zurück, wenn die Anfrage erfolgreich ist, und nullwerte, wenn die Anfrage fehlschlägt. {@struct/Trade Trade} Arrays, Nullwerte

- Ich bin nicht derjenige, der das Problem hat. - (Symbol für GetTrades)

Der Parametersymbolwird verwendet, um das spezifische Handelspaar und den entsprechenden Vertragscode für die angeforderten Arraydaten von {@struct/Trade Trade} anzugeben. Wenn dieser Parameter nicht übergeben wird, werden standardmäßig die neuesten Transaktionsdatensätze des aktuell eingestellten Handelspaares und der Vertragscode angefordert.exchange.GetTrades(symbol)Funktion,exchangeWenn Sie die Daten des Auftragsbuchs mit der Währung USDT und der Handelswährung BTC anfordern müssen, ist der Parametersymbolist:"BTC_USDT", und das Format ist das von der FMZ-Plattform definierte Handelspaarformat.exchange.GetTrades(symbol)Funktion,exchangeist das Futures-Austauschobjekt. Wenn Sie die Auftragsbuchdaten von BTCs U-Standard-Perpetual-Kontrakt anfordern müssen, wird der Parametersymbolist:"BTC_USDT.swap", und das Format ist eine Kombination derHandelspaarundVertragskodedie durch die FMZ-Plattform definiert sind, getrennt durch den Zeichen ..exchange.GetTrades(symbol)Funktion,exchangeist das Futures-Austauschobjekt. Wenn Sie die Auftragsbuchdaten von BTCs U-Standard-Optionskontrakt anfordern müssen, wird der Parametersymbolist:"BTC_USDT.BTC-240108-40000-C"(beispielsweise Binance Option BTC-240108-40000-C), ist das Format die Kombination derHandelspaarvon der FMZ-Plattform und dem von der Börse definierten spezifischen Optionsvertragskode definiert, getrennt durch den Zeichen .. Symbol falsche String

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

Test derexchange.GetTrades()Funktion:

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

Wenn die konfigurierteexchangeObjekt ist ein Futures-Börse Objekt, verwenden Sie diesymbolParameter zur Anforderung von Marktgeschäftsdatensätzen für ein bestimmtes Symbol (Futures-Symbol).

exchange.GetTrades()Einige Börsen unterstützen diese Funktion nicht, und die spezifischen Daten, die zurückgegeben werden, sind, wie viel der Bandbreite der Transaktionsdatensätze von der Börse abhängt und entsprechend der spezifischen Situation behandelt werden muss.exchange.GetRecords ()Die Funktion gibt die gleiche Reihenfolge an Daten zurück, d. h. das letzte Element des Arrays ist die Daten, die der aktuellen Zeit am nächsten liegen. Dieexchange.GetTrades()Funktion gibt ein leeres Array zurückSimulieren von TicksDie Daten, die von derexchange.GetTrades()Funktion bei der VerwendungEchte ZeckeBacktesting im Backtesting-System sind die Order-Flow-Snapshot-Daten, d. h. das {@struct/Trade Trade} Strukturarray. Die Ausgabe vonexchange.GetTrades()Funktion:

Funktionsname Nicht unterstützte Spotbörsen Nicht abgesicherte Futures-Börsen
GetTrades Futures_BitMart / Futures_Bibox

Das bedeutet, dass wir uns in der Lage fühlen müssen, die Daten zu verarbeiten, die wir brauchen.

exchange.GetRecords

Erhalten Sie das {@struct/Record Record} Strukturarray des Spot- oder Vertrags, das dem aktuell eingestellten Handelspar, dem Vertragskode, d. h. den K-Liniendaten entspricht.

Dieexchange.GetRecords()Funktion gibt ein Array von {@struct/Record Record}-Strukturen zurück, wenn die Datenanfrage erfolgreich ist, und nullwerte, wenn die Datenanfrage fehlschlägt. {@struct/Record Record} Arrays, Nullwerte

- Ich bin nicht derjenige, der das Problem hat. - Das ist ein Symbol. Sie werden von der E-Mail-Adresse des E-Mail-Nachrichtendienstes erhalten. exchange.GetRecords (Symbol, Punkt, Grenze) - Ich bin nicht hier. (Veröffentlichung der Veröffentlichung)

Der Parametersymbolwird verwendet, um das spezifische Handelspaar und den entsprechenden Vertragscode für die angeforderten Arraydaten von {@struct/Record Record} anzugeben. Wenn dieser Parameter nicht übergeben wird, werden standardmäßig die K-Zeilendaten des aktuell eingestellten Handelspaares und des Vertragscodes angefordert.exchange.GetRecords(symbol)Funktion,exchangeWenn Sie die Daten mit der in USDT lautenden Währung und der Transaktionswährung als BTC anfordern müssen, wird der Parametersymbolist:"BTC_USDT", und das Format ist das von der FMZ-Plattform definierte Handelspaarformat.exchange.GetRecords(symbol)Funktion,exchangeist das Futures-Austauschobjekt. Wenn Sie die Auftragsbuchdaten von BTCs U-Standard-Perpetual-Kontrakt anfordern müssen, wird der Parametersymbolist:"BTC_USDT.swap", und das Format ist eine Kombination derHandelspaarundVertragskodedie durch die FMZ-Plattform definiert sind, getrennt durch den Zeichen ..exchange.GetRecords(symbol)Funktion,exchangeist das Futures-Austauschobjekt. Wenn Sie die Auftragsbuchdaten von BTCs U-Standard-Optionskontrakt anfordern müssen, wird der Parametersymbolist:"BTC_USDT.BTC-240108-40000-C"(beispielsweise Binance Option BTC-240108-40000-C), ist das Format die Kombination derHandelspaarvon der FMZ-Plattform und dem von der Börse definierten spezifischen Optionsvertragskode definiert, getrennt durch den Zeichen .. Symbol falsche String Der ParameterperiodDer Wert des Parameters ist der Wert der in der Tabelle 1 angegebenen Periode.periodkann nicht nur die definierte Standardperiode, sondern auch ganze Werte in Sekunden überschritten werden. Wird dieser Parameter nicht überschritten, ist die Standardperiode der standardmäßig angeforderten K-Liniendaten die Standardperiode der aktuellen Strategie Echtzeit-/Backtest-Konfiguration. Periode falsche Zahl Der Parameterlimitwird verwendet, um die Länge der angeforderten K-Line-Daten anzugeben. Wenn dieser Parameter nicht übergeben wird, ist die Standardanforderung Länge die maximale Anzahl von K-Line-Bars, die zu einem Zeitpunkt der Austausch-K-Line-Schnittstelle angefordert werden. Dieser Parameter kann dazu führen, dass die Paging-Abfrage die Austausch-K-Line-Daten abfragt, und der Zeitverbrauch des Funktionsanrufs wird während der Paging-Abfrage zunehmen. Grenzwerte falsche Zahl

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

Holen Sie K-Liniendaten für eine individuelle Periode.

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

Ausgangsdaten der K-Linienbalken:

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

Wenn die konfigurierteexchangeObjekt ist ein Futures-Börse Objekt, verwenden Sie diesymbol, period, undlimitParameter zur Anforderung der K-Linie-Daten eines bestimmten Produkts (zukünftiges Produkt).

Die Standard-K-Line-Periode kann in den Backtest- und Real-Trading-Seiten festgelegt werden.exchange.GetRecords()Wenn beim Aufruf der Funktion kein Parameter angegeben wird, werden die entsprechenden K-Liniendaten gemäß der im Backtest und in den realen Marktparametern festgelegten K-Linienperiode zurückgegeben. Der zurückgegebene Wert ist ein Array vonRecordDie Daten werden im Laufe der Zeit akkumuliert, die Obergrenze der akkumulierten K-Linienbalken wird durch dieexchange.SetMaxBarLen()Die Standardgrenze beträgt 5000 Bars, wenn sie nicht eingestellt ist. Wenn die K-Liniendaten die K-Linienbar-Akkumulationsgrenze erreichen, wird sie aktualisiert, indem eine K-Linienbar hinzugefügt und die früheste K-Linienbar gelöscht wird (z. B. Warteschlange in/aus). Einige Börsen bieten keine K-Linienschnittstelle, so dass der Docker Markttransaktionsdatensätze sammelt (TradeStruktur-Array) in Echtzeit generiert werden. Wenn die K-Line-Schnittstelle des Austauschs Paging-Abfragen unterstützt, werden mehrere API-Anfragen gestellt, wenn dieexchange.SetMaxBarLen()Funktion zur Einstellung einer größeren K-Linienlänge. Wenn dieexchange.GetRecords()Die Anzahl der erhaltenen K-Line-Bars unterscheidet sich zwischen dem Backtesting und dem realen Handel: - Das Backtesting-System erhält eine bestimmte Anzahl von K-Line-Bars vor Beginn des Backtesting-Zeitraums im Voraus (Standard ist 5000, die Einstellungen des Backtesting-Systems und die Datenmenge beeinflussen die endgültige Anzahl der zurückgegebenen Daten). - Die Anzahl der während des tatsächlichen Handels erhaltenen K-Line-Bars basiert auf der maximalen Datenmenge, die aus der K-Line-Schnittstelle der Börse gewonnen werden kann. DieperiodDer Parameter ist auf 5 gesetzt, was eine Anforderung ist, K-Liniendaten mit einer Periode von 5 Sekunden zu erhalten.periodDas zugrunde liegende System verwendet die entsprechende Schnittstelle vonexchange.GetTrades()Um die Daten der Transaktionsprotokolle zu erhalten und die erforderlichen K-Liniendaten zu synthetisieren.periodWenn der Parameter durch 60 teilbar ist, werden die erforderlichen K-Liniendaten mit mindestens 1-minütigen K-Liniendaten synthetisiert (wenn möglich, werden die erforderlichen K-Liniendaten mit einer größeren Periode synthetisiert). Das simulierte Level-Backtesting im Backtesting-System erfordert die Einstellung der zugrunde liegenden K-Linienperiode (wenn das Backtesting-System das Level-Backtesting simuliert, werden die entsprechenden K-Liniendaten verwendet, um Tick-Daten gemäß der gesetzten zugrunde liegenden K-Linienperiode zu generieren). Es sollte beachtet werden, dass die Periode der in der Strategie erhaltenen K-Liniendaten nicht kleiner sein sollte als die zugrunde liegende K-Linienperiode. DieC++Die Sprache hat das folgende Codebeispiel, wenn Sie Ihre eigenen K-Liniendaten erstellen müssen:

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

Dieexchange.GetRecords()Funktion:

Funktionsname Nicht unterstützte Spotbörsen Nicht abgesicherte Futures-Börsen
GetRecords Zaif / Coincheck / BitFlyer Futures_Aevo

Die Kommission hat die Kommission aufgefordert, die von ihr vorgenommenen Maßnahmen zu prüfen.

exchange.GetPeriod

Erhalten Sie die K-Linienperiode auf der Website der FMZ Quant Trading Plattform, wenn Sie die Strategie im Live-Handel backtesten und ausführen, d. h. die Standard-K-Linienperiode, die beim Anrufen derexchange.GetRecords()Funktion ohne Übergabe von Parametern.

K-Linienperiode in Sekunden, ganzzahliger Wert in Sekunden. Zahl

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

Ich bin nicht derjenige, der dich anspricht.

exchange.SetMaxBarLen

Setzen Sie die maximale Länge der K-Linie.

Auswechselung.SetMaxBarLen (n)

Der Parameternwird verwendet, um die maximale K-Länge anzugeben. n wahr Zahl

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

Dieexchange.SetMaxBarLen()Funktion wirkt sich auf zwei Aspekte für die Laufzeit der Kryptowährungsstrategie aus:

  • Wirkt sich auf die Anzahl der K-Linienbalken (Bars) aus, die beim ersten Anruf erhalten werden.
  • Wirkt sich auf die maximale Anzahl der K-Linienbalken (Bars) aus.

Ich bin nicht derjenige, der dich anspricht.

exchange.GetRawJSON

Erhalten Sie den ursprünglichen Inhalt bis zum letztenrestAnforderung für das aktuelle Austauschobjekt ({@var/EXCHANGE exchange}, {@var/EXCHANGE/exchanges exchanges}).

Die Daten für dierestAnforderung. String

- Das ist nicht wahr.

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

Dieexchange.GetRawJSON()Diese Funktion wird nur für den realen Handel unterstützt.C++ language.

{@var/EXCHANGE-Austausch}

exchange.GetRate

Erhalten Sie den aktuell für das Tauschobjekt festgelegten Wechselkurs.

Der aktuelle Wert des Wechselkurses des Austauschobjekts. Zahl

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

Wennexchange.SetRate()Der Umrechnungskurs wird nicht festgelegt.exchange.GetRate()Die Funktion gibt einen Standardwert von 1 zurück, d. h. die Daten zur aktuell angezeigten Währung (quoteCurrency) wurden nicht konvertiert. Wenn ein Wechselkurswert unter Verwendungexchange.SetRate(), zum Beispiel,exchange.SetRate(7). Dann werden alle Preisinformationen, wie Angebot, Tiefe und Auftragspreise, die über dieexchangeder Wechselkurs wird durch Multiplikation mit dem festgelegten Wechselkurs umgerechnet7- Ich weiß. Wennexchangeentspricht einem Umtausch mit USD als Stückelwährung, nachdemexchange.SetRate(7), werden alle Preise auf dem Live-Markt in einen Preis nahe dem CNY umgerechnet, indem7An dieser Stelle wird der Wechselkurswert, der unter Verwendung derexchange.GetRate()ist7.

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

exchange.SetData

Dieexchange.SetData()Die Funktion wird verwendet, um die geladenen Daten zu setzen, wenn die Strategie ausgeführt wird.

Die Länge der Zeichenfolge nach dem ParametervalueJSON-Codierung. Zahl

exchange.SetData (Schlüssel, Wert)

Name der Datenerhebung. Schlüssel wahr String Die Daten, die von derexchange.SetData()Die Datenstruktur ist die gleiche wie das von derexchange.GetData()Funktion bei der Anforderung externer Daten, d. h.:"schema": ["time", "data"]- Ich weiß. Wert wahr Reihenfolge

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

Es ist erforderlich, dass die Daten für den Parametervaluein demselben Format wie diedataSie können sehen, dass der Zeitstempel1579622400000entspricht der Zeit2020-01-22 00:00:00, und dass, wenn das Strategieprogramm nach dieser Zeit ausgeführt wird, dieexchange.GetData()Funktion, um die Daten vor dem nächsten Zeitstempel zu erhalten1579708800000, d. h. Zeit2020-01-23 00:00:00Was du bekommst, ist[1579622400000, 123]In dem folgenden Beispiel erreicht oder überschreitet der aktuelle Moment in der Laufzeit (Backtesting oder Live Trading) den Zeitstempel1579795200000, dieexchange.GetData()Funktion aufgerufen wird und der zurückgegebene Wert lautet:{"Time":1579795200000,"Data":["abc", 123,{"price":123}]}. "Time":1579795200000entspricht1579795200000in Daten[1579795200000, ["abc", 123, {"price": 123}]]. "Data":["abc", 123, {"price": 123}]entspricht den Daten["abc", 123, {"price": 123}]]in[1579795200000, ["abc", 123, {"price": 123}]].

Die geladenen Daten können alle wirtschaftlichen Indikatoren, Branchendaten, relevanten Indikatoren usw. sein, die für die strategische quantitative Bewertung aller quantifizierbaren Informationen verwendet werden.

Ich bin nicht derjenige, der das Problem hat, aber ich bin derjenige, der es hat.

exchange.GetData

Dieexchange.GetData()Die Funktion wird verwendet, um die von derexchange.SetData()Funktion oder durch eine externe Verbindung bereitgestellt.

Aufzeichnungen in der Datensammlung. Gegenstand

- Das ist nicht wahr. Erhalten Sie die Daten (Schlüssel, Timeout)

Name der Datenerhebung. Schlüssel - Das stimmt. String Der Cache-Timeout wird in Millisekunden eingestellt, bei Live-Tradings ist der Cache-Timeout eine Minute. Zeitverzögerung falsche Zahl

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

Der Anruf, um die Daten direkt zu schreiben.

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

Es unterstützt die Anforderung von Daten über externe Links, das Format der angeforderten Daten:

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

Wo ist er?schemaist das Datenformat für jeden Datensatz im Inhalt der geladenen Daten, das auf["time", "data"]die dem Format der Eintrag-für-Eintrag-Daten in derdataEigenschaft. Was ist in derdataAttribut ist der Datenkörper, wobei jeder Eintrag aus einem Zeitstempel auf Millisekundenebene und dem Dateninhalt (der beliebige JSON-kodierbare Daten sein kann) besteht. Das Serviceprogramm für Tests, geschrieben in 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)
}

Die Antwortdaten des Programms bei Erhalt der Anfrage:

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

Teststrategiecode:

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

Die Anrufmethode, um die Daten einer externen Verbindung zu erhalten.

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

Anforderung von Daten für eine auf der Plattform erstellte AbfrageDatendaten, in dem das Datenformat der Antwort (Zeit, in dem Schema beschriebene Datenfelder enthalten müssen) angegeben wird:

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

Das Feld data ist der erforderliche Dateninhalt, und die Daten im Feld data müssen mit denen übereinstimmen, die im Schema vereinbart sind.exchange.GetData()Funktion aufgerufen wird, wird ein JSON-Objekt zurückgegeben, z. B.:{"Time":1579795200000, "Data":"..."}.

In einem Backtesting-System, wenn Daten über die Zugangsschnittstelle angefordert werden, fügt das Backtesting-System automatischfrom(Zeitstempel in Sekunden),to(Zeitstempel in Sekunden) auf die Anfrage, Parameter wieperiod(unterliegende K-Zeile, in Millisekunden zeitgestempelt) werden verwendet, um den Zeitrahmen zu bestimmen, über den die Daten erhoben werden sollen.

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

exchange.GetMarkets

Dieexchange.GetMarkets()Funktion wird verwendet, um Informationen über den Devisenmarkt zu erhalten.

Wörterbuch, das die Struktur {@struct/Market Market} enthält. Gegenstand

- Ich bin nicht derjenige, der das Problem hat.

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

Beispiel für einen Aufruf an ein Futures-Börseobjekt:

/*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() + "`");
}

Verwenden Sie das Futures Exchange Objekt, um dieexchange.GetMarkets()Funktion im Backtesting-System. Bevor eine Marktfunktion aufgerufen wird, gibt GetMarkets nur die Marktdaten des aktuellen Standard-Handelspaares zurück. Nach dem Aufruf der Marktfunktion gibt es die Marktdaten aller angeforderten Sorten zurück. Sie können sich auf das folgende Testbeispiel beziehen:

Dieexchange.GetMarkets()Funktion gibt ein Wörterbuch mit einem Schlüssel zurück, der den Namen der Handelssorte benennt, und für als Handelspaar formatierte Spot-Fixes:

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

Für Futures-Kontrakte, da es mehrere Verträge für eine einzelne Sorte geben kann, z. B.BTC_USDTEs gibt also auch eine Vielzahl von Handelspaaren.exchange.GetMarkets()Funktion gibt ein Wörterbuch mit dem Schlüsselnamen des Paares in Kombination mit dem Vertragskode zurück, z. B.:

{
    "BTC_USDT.swap" : {...},     // The key value is the Market structure
    "BTC_USDT.quarter" : {...}, 
    "LTC_USDT.swap" : {...},
    ...
}
  • Dieexchange.GetMarkets()Funktion unterstützt Live-Handel, Backtesting-System.
  • Dieexchange.GetMarkets()Funktion gibt nur Marktinformationen für die Sorten zurück, die an der Börse online gehandelt werden.
  • Dieexchange.GetMarkets()Funktion unterstützt keine Optionskontrakte.

Dieexchange.GetMarkets()Funktion:

Funktionsname Nicht unterstützte Spotbörsen Nicht abgesicherte Futures-Börsen
GetMarkets Coincheck / Bithumb / BitFlyer

{@struct/Marktmarkt}

exchange.GetTickers

Dieexchange.GetTickers()Die Funktion wird verwendet, um aggregierte Tickerdaten auszutauschen (das Array der Struktur {@struct/Ticker Ticker}).exchangegibt Tickerdaten für alle Handelspare zurück, wenn es sich um ein Spot-Börseobjekt handelt;exchangegibt Tickerdaten für alle Verträge zurück, wenn es sich um ein Futures-Austauschobjekt handelt.

Dieexchange.GetTickers()Funktion gibt ein Array von {@struct/Ticker Ticker} Strukturen zurück, wenn sie erfolgreich Daten anfordert, und null, wenn sie fehlschlägt. {@struct/Ticker Ticker} Arrays, Nullwerte

- Ich bin nicht derjenige, der das sagt.

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

Rufen Sie dieexchange.GetTickers()Funktion zur Erfassung aggregierter Marktdaten.

/*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() + "`");
}

Verwenden Sie das Spot-Austauschobjekt und rufen Sie dieexchange.GetTickers()Vor dem Aufruf einer Marktfunktion gibt GetTickers nur die Tickerdaten des aktuellen Standardhandelspaares zurück. Nach dem Aufruf der Marktfunktion gibt es die Tickerdaten aller angeforderten Varianten zurück. Sie können sich auf das folgende Testbeispiel beziehen:

  • Diese Funktion fordert die Börse auf, Tickers-Schnittstelle zu aggregieren, keine Notwendigkeit, Handelspaare einzurichten, Vertragskode vor dem Anrufen.
  • Das Backtesting-System unterstützt diese Funktion.
  • Exchange-Objekte, die keine aggregierte Tickerschnittstelle bereitstellen, unterstützen diese Funktion nicht.
  • Diese Funktion unterstützt keine Optionsverträge.

Dieexchange.GetTickers()Funktion:

Funktionsname Nicht unterstützte Spotbörsen Nicht abgesicherte Futures-Börsen
GetTickers Zaif / WOO / Gemini / Coincheck / BitFlyer / Bibox Futures_WOO / Futures_dYdX / Futures_Deribit / Futures_Bibox / Futures_Aevo

Ich habe eine Frage an Sie.

Tagebücher Handel