Μετάβαση στην πλοήγηση

Διαρκή Ερωτήματα & Σελιδοποίηση

Perpetual Queries & Pagination: Agent Java SDK ενσωμάτωση v0.3.0, παραδείγματα, παράμετροι και σημασιολογία απόκρισης.

Προβολή ως Markdown

Αυτός ο οδηγός στοχεύει Agent Java SDK v0.3.0, Java 8+ και τη δημόσια σύμβαση με ετικέτα. Τα παραδείγματα εκτελούνται σε ένα backend συνεργάτη μετά την προετοιμασία του client στο Γρήγορη εκκίνηση.

Παράδειγμα προαπαιτούμενα

Τα αποσπάσματα Java μοιράζονται αυτές τις εισαγωγές. Αρχικοποιήστε το client χρησιμοποιώντας Γρήγορη εκκίνηση και αποκτήστε platformUserId από την αποθηκευμένη δέσμευση. Παραδείγματα αναγνωριστικών χρήστη/παραγγελιών πρέπει να αντικατασταθούν με τις δικές σας σταθερές τιμές.

import com.sixmm.agent.*;
import com.sixmm.agent.model.*;
import java.util.*;

Ερώτηση δεδομένων αορίστου συμβολαίου

Έξι τύποι διεπαφών και Java μέθοδοι

Όλα τα αιτήματα υπογράφονται POST με κοινό πρόθεμα /v1/agent/perpetual.

επίθημα διαδρομήςJava Μέθοδος/Τύπος αιτήματοςσειρά παικτών
/orders/currentlistCurrentPerpetualOrders(CurrentPerpetualOrdersRequest)NORMAL Το πρόγραμμα αναπαραγωγής μπορεί να παραλειφθεί. CONDITIONAL Πρέπει να καθοριστεί ο παίκτης
/orders/historylistPerpetualOrderHistory(PerpetualOrderHistoryRequest)Το ίδιο με το παραπάνω
/tradeslistPerpetualTrades(PerpetualTradesRequest)Πρέπει να καθοριστεί ο παίκτης
/positions/currentlistCurrentPerpetualPositions(CurrentPerpetualPositionsRequest)Οι παίκτες μπορούν να παραληφθούν
/positions/historylistPerpetualPositionHistory(PerpetualPositionHistoryRequest)Οι παίκτες μπορούν να παραληφθούν
/account/ledgerlistPerpetualLedger(PerpetualLedgerRequest)Οι παίκτες μπορούν να παραληφθούν

Το platformUserIds είναι ένας πίνακας συμβολοσειρών αναγνωριστικών δημόσιας πλατφόρμας. Όταν καθορίζεται, απαιτούνται 1 έως 100 μοναδικοί παίκτες που έχουν πρόσβαση. στα τελικά σημεία που επιτρέπουν την παράλειψη, ερωτάται μόνο το εύρος των απευθείας παικτών στα οποία έχει πρόσβαση ο τρέχων έμπορος. Τα ερωτήματα πλήρωσης συναλλαγών απαιτούν πάντα αυτόν τον πίνακα. Τα ερωτήματα παραγγελίας υπό όρους απαιτούν επίσης ρητά αναγνωριστικά χρήστη. Η παράλειψη δεν ισοδυναμεί με [] και οι κενές πίνακες είναι παράνομες. Το εύρος καθορίζεται από τον υπογράφοντα έμπορο και δεν είναι δυνατή η μεταβίβαση άλλων αναγνωριστικών εμπόρου για την επέκταση του εύρους.

Οι τιμές του πίνακα σειριοποιούνται ως συμπαγείς JSON πριν από την ένταξη στο ωφέλιμο φορτίο υπογραφής. Για παράδειγμα, το platformUserIds υπογράφει ως ["1188041528"], δίνοντας platformUserIds=["1188041528"] στο k=v ωφέλιμο φορτίο. Διατηρήστε τη σειρά στοιχείων του πίνακα, τα διπλά εισαγωγικά και τα αναγνωριστικά συμβολοσειρών. Μην εισάγετε κενά μορφοποίησης και μην χρησιμοποιείτε Java List.toString() (όπως [1188041528]). Το SDK χειρίζεται αυτόματα αυτήν τη σειριοποίηση.

Το ερώτημα παραγγελίας πρέπει να περάσει orderCategory=NORMAL ή CONDITIONAL. Χρησιμοποιήστε το orderId για τις συνηθισμένες παραγγελίες και το conditionId για τις εντολές υπό όρους. Δεν μπορούν να αναμειχθούν σε κατηγορίες. Οι εντολές υπό όρους και οι συνήθεις εντολές που δημιουργούνται με την ενεργοποίησή τους υποβάλλονται σε επεξεργασία ξεχωριστά ως οντότητες.

Συνθήκες φίλτρου

ΕρώτησηΔιαθέσιμα φίλτρα επιχειρήσεων
Τρέχουσα παραγγελίαorderCategory, symbol
ιστορική τάξηorderCategory, symbol, startTime, endTime, orderId, conditionId, clientOrderId, side, status
κάντε μια συμφωνίαsymbol, startTime, endTime, orderId
Τρέχουσα θέσηsymbol
Ιστορικές θέσειςsymbol, startTime, endTime, positionSide
Αλλαγές συμβολαίουstartTime, endTime, assetType, changeType

Ο χρόνος του ιστορικού ερωτήματος είναι Unix χιλιοστά του δευτερολέπτου και το διάστημα είναι [startTime, endTime). ο χρόνος αίτησης υπογραφής είναι timestamp είναι Unix δευτερόλεπτα. Συνιστάται η διόρθωση του χρονικού παραθύρου και του ερωτήματος UTC σε τμήματα. χρησιμοποιήστε το UTC για καθημερινή συμφωνία. Η κατάσταση και ο τύπος χρησιμοποιούν απαρίθμηση συμβολαίων πλατφόρμας και δεν μεταφράζονται από μόνες τους σε κινεζικές συμβολοσειρές.

limit Η προεπιλογή είναι 500, το εύρος είναι 1~1000. το μέγεθος της σελίδας δεν εγγυάται ότι ο ίδιος αριθμός θα επιστρέφεται κάθε φορά. Οι έξι διεπαφές μοιράζονται αυτήν τη στιγμή ένα όριο ερωτήματος 2 φορές ανά δευτερόλεπτο και 4 ριπές ανά έμπορο και το μέγιστο όριο ταυτόχρονης χρήσης για κάθε έμπορο εντός της παρουσίας είναι 2. Η πλευρά του εμπόρου χρησιμοποιεί μια ενοποιημένη ουρά και συνιστάται η έναρξη με διαδοχική σελιδοποίηση και μικρότερο παράθυρο ιστορικού.

Java παραδείγματα ερωτημάτων

Ερώτηση για την τρέχουσα συνηθισμένη παραγγελία ενός παίκτη:

CurrentPerpetualOrdersRequest current = new CurrentPerpetualOrdersRequest();
current.orderCategory = "NORMAL";
current.platformUserIds = Collections.singletonList(platformUserId);
current.symbol = "BTCUSDT";
current.limit = 100;
PerpetualResponse currentPage = client.listCurrentPerpetualOrders(current);

Ζητήστε ερωτήσεις για τις αλλαγές του συμβολαίου την τελευταία ώρα και επεξεργαστείτε τον κέρσορα. Το ακόλουθο παράδειγμα δεν επαναλαμβάνει αυτόματα. όταν η πραγματική εφαρμογή αντιμετωπίζει τρέχοντα περιορισμό ή προσωρινή αποτυχία, ακολουθήστε τον συνδεδεμένο σχετικό οδηγό για να επαναφέρετε την ίδια σελίδα.

PerpetualLedgerRequest ledger = new PerpetualLedgerRequest();
ledger.platformUserIds = Collections.singletonList(platformUserId);
ledger.endTime = System.currentTimeMillis();
ledger.startTime = ledger.endTime - 3_600_000L;
ledger.limit = 100;
Set<String> seenCursors = new HashSet<>();
while (true) {
PerpetualResponse page = client.listPerpetualLedger(ledger);
for (PerpetualRecord row : page.data.items) {
// Persist records idempotently by platformUserId, entityType and entityId.
}
if (!page.data.hasMore) {
break;
}
String next = page.data.nextCursor;
if (next == null || next.isEmpty() || !seenCursors.add(next)) {
throw new IllegalStateException("游标未推进,停止查询并排查");
}
ledger.cursor = next;
Thread.sleep(650L); // Other queries must share the same partner rate-limit queue.
}

Δομή επιστροφής και κανόνες αποθήκευσης

Βλέπω Κοινή απάντηση και σελιδοποίηση για κοινόχρηστα πεδία. Τα πεδία πόρων τεκμηριώνονται σε Παραγγελίες, Εμπορικά γεμίσματα, Θέσεις και Καθολικό συμβολαίου.

Οι έξι διεπαφές επιστρέφουν ομοιόμορφα PerpetualResponse:

{
"code": 0,
"message": "success",
"data": {
"items": [],
"nextCursor": "",
"hasMore": false
}
}

Κάθε items περιέχει platformUserId, entityType, entityId, data. Οι τύποι οντοτήτων περιλαμβάνουν ORDER, CONDITION_ORDER, TRADE_FILL, POSITION, ACCOUNT_LEDGER. Χρησιμοποιήστε αυτά τα τρία πεδία ταυτότητας για να δημιουργήσετε ένα αδύναμο κλειδί. μην αντιμετωπίζετε το αναγνωριστικό παραγγελίας υπό όρους, το αναγνωριστικό παραγγελίας και το αναγνωριστικό συμπλήρωσης ως τον ίδιο αριθμό.

data Παρέχει πεδία όπως τιμή, ποσότητα, κατάσταση, έξοδο, κέρδος και ζημία ή αλλαγή υπολοίπου ανά πόρο. Το ποσό, η τιμή, η ποσότητα και το αναγνωριστικό οντότητας αντιμετωπίζονται ως συμβολοσειρές. Ο χρόνος εργασίας είναι σε χιλιοστά του δευτερολέπτου. Τα πεδία που λείπουν δεν συμπληρώνονται στο 0 και δεν συνάγονται από άλλες οντότητες.

Ο δρομέας είναι η θέση σελιδοποίησης ενός ερωτήματος, όχι μια αξιόπιστη στοιχειώδης συνδρομή, ούτε ένα εγγυημένο ατομικό στιγμιότυπο διασέλιδων. Ο τρέχων δρομέας είναι έγκυρος για 24 ώρες από τον πρώτο κύκλο παραγωγής. Η επόμενη σελιδοποίηση διατηρεί τους ίδιους εμπόρους, πόρους, συλλογές παικτών και συνθήκες φίλτρου. Το σταθερό παράθυρο για την ιστορική έλξη είναι ανίσχυρο όταν τραβιέται επανειλημμένα. η κατάσταση της τρέχουσας παραγγελίας/θέσης ανανεώνεται μετά από εκ νέου ερώτημα. Όταν χρειάζεται μια διεπαφή σε πραγματικό χρόνο, χρησιμοποιείται ο μηχανισμός δεδομένων του front-end της πλατφόρμας και η διεπαφή polling six δεν μπορεί να θεωρηθεί ως διεπαφή αγοράς υψηλής συχνότητας.

Σφάλματα και ανάκτηση

HTTP επιτυχία δεν σημαίνει επιχειρηματική επιτυχία, πρέπει να ελέγξετε το code. Java SDK θα εμφανίσει ένα επαγγελματικό σφάλμα ως AgentApiException.

Κωδικός επιχείρησηςΤυπική έννοιαΧειριζόμενος
102001Λείπουν οι απαιτούμενες παράμετροι, για παράδειγμα, λείπουν παίκτες από το ερώτημα παραγγελίας υπό όρους.Δώστε τις παραμέτρους που λείπουν
102002Παράνομες παράμετροι, κενός πίνακας, αναντιστοιχία δρομέα ή ληγμένοΔιορθώστε τις παραμέτρους. ελέγξτε ξανά το σταθερό παράθυρο αφού διαγράψετε τον κέρσορα που έχει λήξει και αποθηκεύστε το ανεπαρκώς.
102003Παράνομο όριο, αριθμός παικτών ή χρονικό διάστημαΣτενό ή σωστό πεδίο εφαρμογής
6001Σφάλμα υπογραφήςΕλέγξτε τα πεδία κλειδιού, σειριοποίησης πίνακα και υπογραφής
6009Δεν επιτρέπεται η μέθοδος πρόσβασης εμπόρου ή το εύρος πρόσβασηςΕλέγξτε τις άδειες εμπόρου και την ιδιοκτησία του παίκτη
6904Η υπηρεσία δεν είναι διαθέσιμη προσωρινά, προστασία πόρων συγχρονισμού ή ερωτήματοςΜειώστε τη συγχρονικότητα και συρρικνώστε τα παράθυρα. επικοινωνήστε με την υποστήριξη εάν το σφάλμα επιμένει
6905Το κοινό όριο για έξι τύπους ερωτημάτων έχει εξαντληθείΚάντε πίσω και, στη συνέχεια, δοκιμάστε ξανά την αρχική αποτυχημένη σελίδα

Το cursor και όλες οι συνθήκες φίλτρου της αρχικής αποτυχημένης σελίδας θα διατηρηθούν μετά τον τρέχοντα περιορισμό, το χρονικό όριο ή την προσωρινή αποτυχία. κάθε φορά που καλείται ξανά το SDK, θα δημιουργούνται νέα timestamp, nonce, sign. Δεν μπορείτε να μεταβείτε απευθείας στην επόμενη σελίδα και δεν μπορείτε να αντιμετωπίζετε τις αποτυχίες ως κενά αποτελέσματα. Ο SDK δεν είναι υπεύθυνος για την αυτόματη επανάληψη των συναλλαγών κεφαλαίων.

Κοινή απάντηση και σελιδοποίηση

ΠεδίοJSON τύποςεικονογραφώ
codeintegerΚωδικός επιχείρησης, 0 σημαίνει επιτυχία. Εάν δεν είναι 0, θα αντιμετωπίζεται ως σφάλμα και η αποτυχία δεν θα αντιμετωπίζεται ως κενή σελίδα.
messagestringΗ περιγραφή των αποτελεσμάτων δεν αποτελεί τη μοναδική βάση για επιχειρηματική κρίση.
dataobjectΣελιδωτά αποτελέσματα για την επιτυχία
data.itemsarrayΕγγραφές σε αυτή τη σελίδα. η νόμιμη κενή σελίδα είναι []
data.nextCursorstringΔρομέας επόμενης σελίδας. συνήθως μια κενή συμβολοσειρά αν δεν υπάρχουν επόμενες σελίδες
data.hasMorebooleanΕάν υπάρχουν επόμενες σελίδες. όταν ισχύει, χρησιμοποιήστε το nextCursor για να συνεχίσετε το ίδιο ερώτημα

Η δομή κάθε data.items[]:

ΠεδίοJSON τύποςεικονογραφώ
platformUserIdstringΔημόσιο αναγνωριστικό χρήστη πλατφόρμας, αποθηκευμένο ως συμβολοσειρά. όχι εσωτερικό αναγνωριστικό χρήστη βάσης δεδομένων
entityTypestringΟ τύπος οντότητας στον οποίο ανήκει η εγγραφή, δείτε τον παρακάτω πίνακα
entityIdstringΤο αναγνωριστικό της τρέχουσας οντότητας συνδυάζεται με τον χρήστη της πλατφόρμας και τον τύπο οντότητας για τη δημιουργία ενός τοπικού κλειδιού ανεπαρκούς ισχύος.
dataobjectΟι επιχειρηματικοί τομείς αυτής της οντότητας· διαφορετικά πεδία πόρων είναι διαφορετικά
Πόροι ερωτημάτωνentityTypeentityId Αλληλογραφία
Συνήθης παραγγελίαORDERdata.orderId
παραγγελίες υπό όρουςCONDITION_ORDERdata.conditionId
Στοιχεία πλήρωσης συναλλαγώνTRADE_FILLdata.fillId, όχι tradeId
Επίκαιρες/ιστορικές θέσειςPOSITIONdata.positionId
Αρχεία λογιστικού συμβολαίουACCOUNT_LEDGERΑναγνώριση λεπτομερειών αλλαγής ενός λογαριασμού, ** δεν είναι δεδομένα.ledgerId**

Το ίδιο ledgerId μπορεί να διαχωρίσει πολλαπλές λεπτομέρειες, όπως αμοιβές χειρισμού, κέρδη και ζημίες κ.λπ. πατώντας το ledgerId για να αφαιρέσετε τα διπλότυπα θα προκαλέσει απώλεια δεδομένων. Τα αναγνωριστικά από διαφορετικούς πόρους δεν μπορούν να αναμειχθούν. Ανατρέξτε στον συνδεδεμένο σχετικό οδηγό του Οδηγού πρόσβασης για κανόνες σελιδοποίησης και αποθήκευσης πεδίου.

Τύποι, μονάδες και πεδία που παραλείφθηκαν

  • Συμβολοσειρά χρήσης ποσού, τιμής, ποσότητας και αναγνωριστικού οντότητας. χρήση δεκαδικών για την επεξεργασία ποσών και δεν μπορείτε να χρησιμοποιήσετε αριθμούς κινητής υποδιαστολής ή να μετατρέψετε μεγάλα αναγνωριστικά σε Αριθμούς JavaScript. Το νόμισμα ποσού και η μονάδα ποσότητας εξηγούνται σύμφωνα με τις προδιαγραφές του ζεύγους συναλλαγών/συμβολαίου.
  • Ο επιχειρηματικός χρόνος χρησιμοποιεί ακέραιο αριθμό (int64), και τα δύο είναι Unix χιλιοστά του δευτερολέπτου. Τα διαπιστευτήρια χρονικής σφραγίδας ελέγχου ταυτότητας αιτήματος expireAt χρησιμοποιούν δευτερόλεπτα και δεν μπορούν να συγχέονται.
  • Τα επιχειρηματικά πεδία συμβολοσειράς συνήθως δεν εξάγονται όταν είναι άδεια και ορισμένα θα παραληφθούν όταν τα αριθμητικά πεδία είναι 0. Το πεδίο που λείπει δεν σημαίνει ότι η τιμή της επιχείρησης είναι 0.
  • Τα reduceOnly, closeOnly, makerOnly στο μοντέλο γενικής εγγραφής δεν παραλείπουν το false, επομένως αυτά τα τρία false μπορεί επίσης να εμφανίζονται σε συναλλαγές ή θέσεις. Επεξηγούνται μόνο στους πόρους παραγγελίας. δεν μπορεί να θεωρηθεί ότι η συναλλαγή/θέση εκτέλεσε τους αντίστοιχους κανόνες εντολής.
  • Το closePosition είναι ένα προαιρετικό boolean: παρέχεται από εντολές υπό όρους, που συνήθως παραλείπεται για άλλους πόρους. Το λείπει έχει διαφορετικό νόημα από το ψεύτικο.
  • Ο παρακάτω πίνακας “παρέχεται αυτήν τη στιγμή” σημαίνει ότι η λογική ανάγνωσης έχει μια πηγή πεδίου. Τα προαιρετικά πεδία ενδέχεται να εξακολουθούν να παραλείπονται επειδή δεν έχουν αξία. Τα πεδία που υπάρχουν στο μοντέλο δεν είναι εγγυημένα ότι θα συμπληρωθούν σε κάθε διεπαφή.

Η διαφορά μεταξύ κατάστασης και λειτουργίας περιθωρίου

πόροςτρέχουσα τιμή επιστροφής
Τρέχουσα κατάσταση κανονικής παραγγελίαςNEW, PENDING, PARTIALLY_FILLED
Ιστορική κατάσταση συνήθους παραγγελίαςFILLED, CANCELED, REJECTED, PARTIAL_FILLED_CANCELED ή PARTIALLY_FILLED_CANCELED; κρατήστε την ορθογραφία της πραγματικής πηγής
Κατάσταση παραγγελίας τρέχουσας κατάστασης / triggerStatusPENDING_ACTIVATION, PENDING, TRIGGERING
Κατάσταση παραγγελίας ιστορικής κατάστασης / triggerStatusTRIGGERED, CANCELLED, REJECTED, FIRED
Κατάσταση τρέχουσας θέσηςΗ αριθμητική συμβολοσειρά “1” είναι σε θέση, “3” είναι σε εκκαθάριση
Κατάσταση ιστορικής θέσηςΗ αριθμητική συμβολοσειρά “2” έχει κλείσει τη θέση, το “4” έχει αναγκάσει την εκκαθάριση

Η ορθογραφία του CANCELED για μια συνηθισμένη σειρά είναι διαφορετική από εκείνη του CANCELLED για μια υπό όρους σειρά. Η ενεργοποίηση μιας εντολής υπό όρους δεν σημαίνει ότι έχει εκπληρωθεί η παραγόμενη συνηθισμένη εντολή. Μην επαναχρησιμοποιείτε το ίδιο σύνολο πινάκων μετάφρασης κατάστασης για όλους τους πόρους.

Η παραγγελία υπό όρους marginMode επιστρέφει CROSS / ISOLATED; Οι ιστορικές συνήθεις εντολές και θέσεις επιστρέφουν επί του παρόντος “1” / “2”, οι οποίες είναι σταυρωτό/απομονωμένο περιθώριο αντίστοιχα. Το marginMode δεν είναι προς το παρόν διαθέσιμο για συνηθισμένες παραγγελίες. Οι έμποροι μπορούν να κάνουν κανονικοποίηση ανά πόρο στο δικό τους επίπεδο εμφάνισης και οι αρχικές τιμές πρέπει ακόμα να αποθηκευτούν.

Πεδία που δηλώθηκαν στο μοντέλο αλλά δεν παρέχονται σε αυτό το ερώτημα

Generic RecordData / Java Το μοντέλο PerpetualData δηλώνει επίσης τα ακόλουθα πεδία, αλλά η τρέχουσα λογική ανάγνωσης παραγωγής έξι κατηγοριών δεν τα συμπληρώνει. **Δεν θα πρέπει να αναφέρονται ως διαθέσιμα επιχειρηματικά δεδομένα, ούτε θα πρέπει να αντικαθιστούν τα πραγματικά αποτελέσματα οι προεπιλογές πεδίων. **

ΠεδίοΤύπος μοντέλουτρέχον όριο
closeReasonstringΟι λόγοι για το κλείσιμο ιστορικών θέσεων δεν παρέχονται
walletDeltastringΗ διεπαφή αλλαγής λογαριασμού δεν επιστρέφει δέλτα πορτοφολιού
frozenDeltastringΗ διεπαφή αλλαγής λογαριασμού δεν επιστρέφει παγωμένο δέλτα
usedDeltastringΗ διεπαφή αλλαγής λογαριασμού δεν επιστρέφει το χρησιμοποιημένο δέλτα περιθωρίου
feeDeltastringΗ διεπαφή αλλαγής λογαριασμού δεν επιστρέφει το δέλτα χρέωσης
pnlDeltastringΗ διεπαφή αλλαγής λογαριασμού δεν επιστρέφει δέλτα κερδών και ζημιών
accountVersionstringΗ διεπαφή αλλαγής λογαριασμού δεν επιστρέφει την έκδοση του λογαριασμού και δεν μπορεί να χρησιμοποιηθεί για αξιόπιστο σταδιακό συγχρονισμό.
occurredAtintegerΗ διεπαφή αλλαγής λογαριασμού χρησιμοποιεί createdAt και δεν παρέχει άλλο σύνολο χρόνων εμφάνισης συμβάντων.

Το πραγματικό πεδίο εφαρμογής πεδίου υπόκειται στους παραπάνω πίνακες πόρων. όταν η πλατφόρμα ενημερώνει πεδία ή απαριθμήσεις, θα προσαρμόζεται σύμφωνα με τη νέα περιγραφή διεπαφής και την έκδοση SDK.

Πηγή και σχετικοί οδηγοί