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 vonexchange
Objektmitgliederfunktionen (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 Parametersymbol
wird 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,exchange
Wenn Sie Marktdaten mit der Währung als USDT und der Handelswährung als BTC anfordern müssen, wird der Parametersymbol
ist:"BTC_USDT"
, und das Format ist das von der FMZ-Plattform definierte Handelspaarformat.
Bei Anrufen derexchange.GetTicker(symbol)
Funktion,exchange
Wenn Sie die Marktdaten von BTCsymbol
ist:"BTC_USDT.swap"
, und das Format ist eine Kombination derHandelspaarundVertragskodedurch die FMZ-Plattform definiert, getrennt durch das Zeichen exchange.GetTicker(symbol)
Funktion,exchange
Wenn Sie die Marktdaten von BTCsymbol
ist:"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.exchange
oderexchanges[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);
}
Verwendensymbol
Parameter zur Anforderung von Marktdaten für ein bestimmtes Symbol (Spot-Symbol).
DieTicker
Daten, die von derexchange.GetTicker()
Die Ergebnisse des Backtesting-SystemsHigh
undLow
Im übrigen sind die Wertvorstellungen von der Verkaufs- und der Kaufwährung des Marktes zu diesem Zeitpunkt simuliert.Ticker
Daten, die von derexchange.GetTicker()
In der Praxis sind dieHigh
undLow
Werte basieren auf den von dem eingekapselten Austausch zurückgegebenen DatenTick
Interface, 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.
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 Parametersymbol
wird 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,exchange
ist das Spot-Austauschobjekt. Wenn Sie die Auftragsbuchdaten mit der Währung USDT und der Transaktionswährung BTC anfordern müssen, wird der Parametersymbol
ist:"BTC_USDT"
, und das Format ist das von der FMZ-Plattform definierte Handelspaarformat.exchange.GetDepth(symbol)
Funktion,exchange
ist das Futures-Austauschobjekt. Wenn Sie die Auftragsbuchdaten von BTCsymbol
ist:"BTC_USDT.swap"
, und das Format ist eine Kombination derHandelspaarundVertragskodedie durch die FMZ-Plattform definiert sind, getrennt durch den Zeichen exchange.GetDepth(symbol)
Funktion,exchange
ist das Futures Exchange Objekt. Wenn Sie die Auftragsbuchdaten des BTCsymbol
ist:"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
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 konfigurierteexchange
Objekt ist ein Futures-Börse Objekt, verwenden Sie diesymbol
Parameter 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.
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 Parametersymbol
wird 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,exchange
Wenn Sie die Daten des Auftragsbuchs mit der Währung USDT und der Handelswährung BTC anfordern müssen, ist der Parametersymbol
ist:"BTC_USDT"
, und das Format ist das von der FMZ-Plattform definierte Handelspaarformat.exchange.GetTrades(symbol)
Funktion,exchange
ist das Futures-Austauschobjekt. Wenn Sie die Auftragsbuchdaten von BTCsymbol
ist:"BTC_USDT.swap"
, und das Format ist eine Kombination derHandelspaarundVertragskodedie durch die FMZ-Plattform definiert sind, getrennt durch den Zeichen exchange.GetTrades(symbol)
Funktion,exchange
ist das Futures-Austauschobjekt. Wenn Sie die Auftragsbuchdaten von BTCsymbol
ist:"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
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 konfigurierteexchange
Objekt ist ein Futures-Börse Objekt, verwenden Sie diesymbol
Parameter 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.
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 Parametersymbol
wird 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,exchange
Wenn Sie die Daten mit der in USDT lautenden Währung und der Transaktionswährung als BTC anfordern müssen, wird der Parametersymbol
ist:"BTC_USDT"
, und das Format ist das von der FMZ-Plattform definierte Handelspaarformat.exchange.GetRecords(symbol)
Funktion,exchange
ist das Futures-Austauschobjekt. Wenn Sie die Auftragsbuchdaten von BTCsymbol
ist:"BTC_USDT.swap"
, und das Format ist eine Kombination derHandelspaarundVertragskodedie durch die FMZ-Plattform definiert sind, getrennt durch den Zeichen exchange.GetRecords(symbol)
Funktion,exchange
ist das Futures-Austauschobjekt. Wenn Sie die Auftragsbuchdaten von BTCsymbol
ist:"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 period
Der Wert des Parameters ist der Wert der in der Tabelle 1 angegebenen Periode.period
kann 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 Parameterlimit
wird 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 konfigurierteexchange
Objekt ist ein Futures-Börse Objekt, verwenden Sie diesymbol
, period
, undlimit
Parameter 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 vonRecord
Die 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 (Trade
Struktur-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.
Dieperiod
Der Parameter ist auf 5 gesetzt, was eine Anforderung ist, K-Liniendaten mit einer Periode von 5 Sekunden zu erhalten.period
Das zugrunde liegende System verwendet die entsprechende Schnittstelle vonexchange.GetTrades()
Um die Daten der Transaktionsprotokolle zu erhalten und die erforderlichen K-Liniendaten zu synthetisieren.period
Wenn 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.
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.
Setzen Sie die maximale Länge der K-Linie.
Auswechselung.SetMaxBarLen (n)
Der Parametern
wird 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:
Ich bin nicht derjenige, der dich anspricht.
Erhalten Sie den ursprünglichen Inhalt bis zum letztenrest
Anforderung für das aktuelle Austauschobjekt ({@var/EXCHANGE exchange}, {@var/EXCHANGE/exchanges exchanges}).
Die Daten für dierest
Anforderung.
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}
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 dieexchange
der Wechselkurs wird durch Multiplikation mit dem festgelegten Wechselkurs umgerechnet7
- Ich weiß.
Wennexchange
entspricht 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, indem7
An dieser Stelle wird der Wechselkurswert, der unter Verwendung derexchange.GetRate()
ist7
.
{@fun/Trade/exchange.SetRate exchange.SetRate}
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 Parametervalue
JSON-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 Parametervalue
in demselben Format wie diedata
Sie können sehen, dass der Zeitstempel1579622400000
entspricht 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:00
Was 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":1579795200000
entspricht1579795200000
in 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.
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?schema
ist 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 derdata
Eigenschaft.
Was ist in derdata
Attribut 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 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}
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_USDT
Es 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" : {...},
...
}
exchange.GetMarkets()
Funktion unterstützt Live-Handel, Backtesting-System.exchange.GetMarkets()
Funktion gibt nur Marktinformationen für die Sorten zurück, die an der Börse online gehandelt werden.exchange.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}
Dieexchange.GetTickers()
Die Funktion wird verwendet, um aggregierte Tickerdaten auszutauschen (das Array der Struktur {@struct/Ticker Ticker}).exchange
gibt Tickerdaten für alle Handelspare zurück, wenn es sich um ein Spot-Börseobjekt handelt;exchange
gibt 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:
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