Les ressources ont été chargées... Je charge...

exchange.IO

Leexchange.IO()la fonction est utilisée pour d'autres appels d'interface liés à l'objet d'échange.

Leexchange.IO()La fonction appelle d'autres interfaces liées à l'objet d'échange, renvoyant les données de réponse demandées lors d'un appel réussi et elle renvoie null lors d'un appel raté. chaîne, nombre, bool, objet, tableau, nul et tout autre type pris en charge par le système

exchange.IO(k,... args)

Lekparamètre est utilisé pour définir le type d'appel, avec des valeurs facultatives"api", "currency", "base", "trade_margin", "trade_normal", "public_base", "mbase", selfTradePreventionMode, simulate, cross, dual, unifiedet ainsi de suite. K vrai chaîne Paramètres étendus, passés selon le scénario d'appel spécifique,argEn raison du mécanisme polymorphe de laexchange.IO()Le nombre et le type de paramètres correspondent aux fonctions de l'appareil.exchange.IO()Les fonctions sont indéterminées. arg vrai chaîne, nombre, bool, objet, tableau, nul et tout autre type pris en charge par le système

function main() {
    var arrOrders = [
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ]
    
    // Call exchange.IO to access the exchange's bulk order interface directly
    var ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", JSON.stringify(arrOrders))
    Log(ret)
}
import json
def main():
    arrOrders = [
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}, 
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ]
    ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", json.dumps(arrOrders))
    Log(ret)
void main() {
    json arrOrders = R"([
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ])"_json;
    auto ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", arrOrders.dump());
    Log(ret);
}

En utilisant leexchange.IO("api", httpMethod, resource, params, raw)Le formulaire d'appelexchange.IO()Il est nécessaire de comprendre l'interface API de l'échange et de vérifier d'abord la documentation pertinente.POSTla demande ne vous oblige pas à vous soucier du chiffrement, de la signature ou de la vérification des paramètres, qui sont déjà gérés par FMZ en bas, tant que vous remplissez les paramètres correspondants.Échange OKXles contrats à terme, et utiliser le paramètrerawpour passer les paramètres d'ordre:

var amount = 1
var price = 10
var basecurrency = "ltc"
function main () {
    // Note that both amount.toString() and price.toString() have a ' character on the left and right side
    var message = "symbol=" + basecurrency + "&amount='" + amount.toString() + "'&price='" + price.toString() + "'&side=buy" + "&type=limit"
    var id = exchange.IO("api", "POST", "/v1/order/new", message)
}
amount = 1
price = 10
basecurrency = "ltc"
def main():
    message = "symbol=" + basecurrency + "&amount='" + str(amount) + "'&price='" + str(price) + "'&side=buy" + "&type=limit"
    id = exchange.IO("api", "POST", "/v1/order/new", message)
void main() {
    auto amount = 1.0;
    auto price = 10.0;
    auto basecurrency = "ltc";
    string message = format("symbol=%s&amount=\"%.1f\"&price=\"%.1f\"&side=buy&type=limit", basecurrency, amount, price);
    auto id = exchange.IO("api", "POST", "/v1/order/new", message);
}

Si la valeur clé dans leparamsparamètre (par exemple, paramètre de demande HTTP) est une chaîne, il doit être écrit en guillemets simples (par exemple, le symbole ') autour de la valeur du paramètre pour envelopper la valeur du paramètre.

function main() {
    var ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
    Log(ret)
}
def main():
    ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
    Log(ret)
void main() {
    auto ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC");
    Log(ret);
}

Il prend en charge le passage de paramètres d'url complets, ce qui peut omettre l'opération de commutation de l'adresse de base (appelant leexchange.SetBase()fonction).

function main(){
    var ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
    Log(ret)
}
def main():
    ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
    Log(ret)
void main() {
    auto ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT");
    Log(ret);
}

Exemple d'appel sans paramètreraw:

function main() {
    // For example, if you set the current trading pair of the exchange object to BTC_USDT at the beginning of the live trading, print the current trading pair tickers
    Log(exchange.GetTicker())
    // Switch the trading pair to LTC_BTC      
    exchange.IO("currency", "LTC_BTC")
    Log(exchange.GetTicker())
}
def main():
    Log(exchange.GetTicker())
    exchange.IO("currency", "LTC_BTC")
    Log(exchange.GetTicker())
void main() {
    Log(exchange.GetTicker());
    exchange.IO("currency", "LTC_BTC");
    Log(exchange.GetTicker());
}

Modifier la paire de négociation de l'échange actuel, de sorte qu'il changera la paire de négociation configurée par codelors de la création de transactions en directouau backtest.

function main () {
    // exchanges[0] is the first exchange object added when the live trading is created 
    exchanges[0].IO("base", "https://api.huobi.pro")
}
def main():
    exchanges[0].IO("base", "https://api.huobi.pro")
void main() {
    exchanges[0].IO("base", "https://api.huobi.pro");
}```
For example, the default base address when the exchange object is wrapped is ```https://api.huobipro.com```, and when you need to switch to ```https://api.huobi.pro```, use the following code to switch:
```javascript
function main() {
    exchange.SetBase("https://api.bitfinex.com")
    exchange.IO("mbase", "https://api-pub.bitfinex.com")
}
def main():
    exchange.SetBase("https://api.bitfinex.com")
    exchange.IO("mbase", "https://api-pub.bitfinex.com")
void main() {
    exchange.SetBase("https://api.bitfinex.com");
    exchange.IO("mbase", "https://api-pub.bitfinex.com");
}

Pour les bourses avec différentes adresses de base pour l'interface ticker et l'interface de trading, par exemple, Bitfinex Futures dispose de deux adresses, l'une pour l'interface ticker et l'autre pour l'interface de trading.exchange.SetBase("xxx")Les contrats à terme de Bitfinex changent d'adresse de base d'interface publique en utilisantexchange.IO("mbase", "xxx").

I. Pour les échanges centrés sur les crypto-monnaies, autres appels d'interface API qui ne sont pas uniformément encapsulés, avec paramètrekréglé sur"api":

exchange.IO("api", httpMethod, resource, params, raw)
  • httpMethod : Le paramètre est un type de chaîne, renseignez le type de requêtePOST, GET, etc.
  • resource : Le paramètre est de type chaîne et remplit le chemin de requête; il prend en charge l'utilisation de chemins de requête complets, voir l'exemple de référence pour plus de détails.
  • Paramètres: Le paramètre est un type de chaîne, rempli de paramètres de demande, codé avecURL.
  • raw: le paramètre est le paramètre de chaîne raw et peut être omis.

Leexchange.IO("api", httpMethod, resource, params, raw)l'appel de fonction accède à l'interface d'échange et renvoie null si l'appel échoue et qu'une erreur se produit. Seul le commerce réel soutient l'appelexchange.IO("api", httpMethod, resource, params, raw) function.

II. Pour le changement de paires de négociation, le paramètrekest réglée sur"currency":

exchange.IO("currency", currency)
  • monnaie : Le paramètre est un type de chaîne avec un format majuscule uniforme, avec un trait de soulignement pour séparerbaseCurrencydequoteCurrency, tels queBTC_USDT.

    1. Le système de backtesting prend désormais en charge la commutation des paires de négociation (uniquement pour les objets de change au comptant de devises numériques), lors du backtesting, vous devez faire attention que vous ne pouvez passer à des paires de négociation avec la même monnaie libellée, par exemple, la paire de négociation actuelle estETH_BTCJe peux seulement passer àLTC_BTC, pas àLTC_USDT.
    2. Pour les contrats à terme de crypto-monnaie, l'objet d'échange change de paire de négociation et le code du contrat doit être réinitialisé pour déterminer le contrat à négocier.
    3. Utiliser la fonction {@fun/Account/exchange.SetCurrency exchange.SetCurrency} pour changer de paire de trading est exactement la même chose que d'utiliserexchange.IO("currency", currency)pour changer de paire de négociation.

III. Utilisé pour basculer sur le mode de compte à effet de levier de l'objet de l'échange au comptant de crypto-monnaie:

  • Le paramètrekest réglée sur"trade_margin"Pour placer des ordres et obtenir des actifs de compte, vous aurez accès à l'interface à effet de levier au comptant de l'échange. Si la bourse fait la distinction entre marge totale et marge isolée dans l'effet de levier au comptant, utiliser:exchange.IO("trade_super_margin")passer à la marge totale pour le compte à effet de levier, etexchange.IO("trade_margin")de passer à une marge isolée pour le compte à effet de levier.
  • Paramètrekest réglée sur"trade_normal"pour revenir au mode de compte au comptant normal.

Échanges au comptant qui prennent en charge le passage entre les modèles de comptes à effet de levier:

Les échanges Remarques spéciales
- Ça va. Les paires de trading en mode compte à effet de levier sont différentes des paires normales, certaines paires de trading peuvent ne pas les avoir.exchange.IO("trade_super_margin")passer à la position complète pour les comptes à effet de levier et utiliserexchange.IO("trade_margin")pour passer à la position par position.trade_normalutiliser le dispositif pour passer en mode spot normal.exchange.IO("tdMode", "cross")pour spécifier directement le mode d'effet de levier.
Huobi est un joueur. Les paires de trading en mode compte à effet de levier sont différentes des paires normales, certaines paires de trading peuvent ne pas les avoir.trade_marginpour passer à un compte d'effet de levier position par position, utilisertrade_super_marginpour passer à la position complète du compte à effet de levier.trade_normalpour passer au mode monnaie-monnaie normal.
Binance Le mode de compte à effet de levier est divisé en position par position et position totale, utilisationtrade_marginpour passer à position par position, utilisertrade_super_marginpour passer à la position complète, utilisertrade_normalpour passer au mode monnaie-monnaie normal.
La porte Le mode de compte à effet de levier est divisé en position par position et position totale, utilisationtrade_marginpour passer à position par position, utilisertrade_super_marginpour passer à la position complète, utilisertrade_normalpour passer au mode monnaie-monnaie normal.
AscendEx Utilisationexchange.IO("trade_margin")de passer au mode de compte à effet de levier etexchange.IO("trade_normal")pour revenir au mode de compte normal.
Je vous en prie! Utilisationexchange.IO("trade_margin")de passer au mode de compte à effet de levier etexchange.IO("trade_normal")pour revenir au mode de compte normal.
CoinEx Utilisationexchange.IO("trade_margin")de passer au mode de compte à effet de levier etexchange.IO("trade_normal")pour revenir au mode de compte normal.

IV. Autres fonctions de commutationRegardez leexchange.IO()fonction pourAutres fonctions de commutationdans le guide de l'utilisateur.

{@fun/NetSettings/exchange.SetBase exchange.SetBase}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@var EXCHANGE_OP_IO_CONTROL}, {@var EXCHANGE_OP_IO_CONTROL}, {@var EXCHANGE_OP_IO_CONTROL}, {@fun/NetSettings/exchange.SetBase exchange.SetBase}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@var EXCHANGE_OP_IO_CONTROL}, {@var EXCHANGE_OP_IO_CONTROL}, {@var EXCHANGE_OP_IO_CONTROL}, {@var EXCHANGE_OP_IO_CONTROL}

exchange.SetRate exchange.Log