La plateforme FMZ API Doc Joignez-vous à nous sur le groupe Telegram
www.fmz.com(anciennement BotVs) est une plateforme de trading de stratégie quantitative où vous pouvez facilement apprendre, écrire, partager et échanger des stratégies quantitatives.
FMZ (BOTVS) prend désormais en charge tous les contrats sur BitMEX!
function main() {
exchange.IO("base", "https://testnet.bitmex.com")
}
var initAccount = null;
var nowAccount = null;
function main() {
LogReset(1);
Log("This is BitMEX test bot");
Log("Fee:", exchange.GetFee());
Log("Initial account:", initAccount = _C(exchange.GetAccount));
var info = exchange.SetContractType("XBTUSD"); // BitMEX : XBTUSD , OK : this_week
Log("XBTUSD info:", info);
Log("Use GetTicker to get ticker information:", _C(exchange.GetTicker))
Sleep(1000 * 10);
// make an order
exchange.SetDirection("sell"); // set order direction
var orderId = exchange.Sell(-1, 1); // sell at market price。
Sleep(6000);
// log positions
var positions = null;
Log(positions = _C(exchange.GetPosition));
Log("Account before changing leverage:", _C(exchange.GetAccount));
// change leverage
Log("Change leverage", _C(exchange.SetMarginLevel, positions[0].MarginLevel * 2));
Log("Account after changing leverage:", _C(exchange.GetAccount));
// test GetOrder
if (orderId) {
Log(_C(exchange.GetOrder, orderId));
}
Sleep(1000 * 10);
Log(_C(exchange.GetPosition));
// set direction to close
exchange.SetDirection("closesell");
var go_buy = exchange.Go("Buy", -1, 1);
var orderId2 = go_buy.wait();
Log(_C(exchange.GetOrder, orderId2));
Log("Current account:", nowAccount = _C(exchange.GetAccount));
Log(_C(exchange.GetPosition));
LogProfit(nowAccount.Stocks - initAccount.Stocks, " initAccount:", initAccount, " nowAccount:", nowAccount);
Sleep(1000 * 10);
var ticker = _C(exchange.GetTicker);
exchange.SetDirection("buy");
exchange.Buy(ticker.Last - 50, 1);
exchange.SetDirection("sell");
exchange.Sell(ticker.Last + 50, 1);
// GetOrders
Log("Test GetOrders:", _C(exchange.GetOrders));
var e = exchange;
while (true) {
var orders = _C(e.GetOrders);
if (orders.length === 0) {
break;
}
Sleep(500);
for (var j = 0; j < orders.length; j++) {
e.CancelOrder(orders[j].Id);
if (j < (orders.length - 1)) {
Sleep(500);
}
}
}
Log("Cancel order, test GetOrders again:", _C(exchange.GetOrders));
}
Enregistrez les informations par bot, qui est le même que celui sur BitMEX.
exchange.SetDirection("closesell");
var go_buy = exchange.Go("Buy", -1, 1);
var orderId2 = go_buy.wait();
Log(_C(exchange.GetOrder, orderId2));
Log("当前账户:", nowAccount = _C(exchange.GetAccount));
Log(_C(exchange.GetPosition));
LogProfit(nowAccount.Stocks - initAccount.Stocks, " initAccount:", initAccount, " nowAccount:", nowAccount);
var ticker = _C(exchange.GetTicker);
exchange.SetDirection("buy");
exchange.Buy(ticker.Last - 50, 1);
exchange.SetDirection("sell");
exchange.Sell(ticker.Last + 50, 1);
// GetOrders
Log("Test GetOrders:", _C(exchange.GetOrders));
var e = exchange;
while (true) {
var orders = _C(e.GetOrders);
if (orders.length === 0) {
break;
}
Sleep(500);
for (var j = 0; j < orders.length; j++) {
e.CancelOrder(orders[j].Id);
if (j < (orders.length - 1)) {
Sleep(500);
}
}
}
Log("orders have been canceled. Now check orders again, order array is empty. GetOrders:", _C(exchange.GetOrders));
Les commandes en attente sont supprimées.
[{"Id":4,"Amount":1,"Price":1679.6,"DealAmount":0,"AvgPrice":0,"Status":0,"Type":1,"ContractType":"XBTUSD"},
{"Id":3,"Amount":1,"Price":1579.6,"DealAmount":0,"AvgPrice":0,"Status":0,"Type":0,"ContractType":"XBTUSD"}]
L'utilisation des derniers hôtes permet de synthétiser automatiquement les lignes K, et certaines données de cycle de ligne K non prises en charge par BITMEX peuvent également être synthétisées, de sorte que les cycles de ligne K ne sont plus limités lors de la configuration.1分钟、5分钟、1小时、1天
Ces cycles, tous les cycles peuvent être réglés.
LogReset(1);
var info = exchange.SetContractType("XBTUSD");
exchange.SetDirection("sell");
var orderId = exchange.Sell(-1, 1);
Log(_C(exchange.GetPosition));
Sleep(1000*6);
exchange.SetDirection("buy");
var orderId2 = exchange.Buy(-1, 1);
Log(_C(exchange.GetPosition));
exchange.SetDirection("closesell");
var orderId3 = exchange.Buy(-1, 1);
Log(_C(exchange.GetPosition));
// exchange.IO example
exchange.SetContractType("XBTUSD");
Log(exchange.IO("api", "POST", "position/leverage", "symbol=XBTUSD&leverage=4"));
Log(exchange.IO("api", "GET", "user"));
L'information brute de l'API de position/leverage est la suivante:
{"homeNotional":0,
"sessionMargin":0,
"bankruptPrice":null,
"initMarginReq":0.25,
"execBuyQty":2,
"execComm":184,
"unrealisedCost":0,
"commission":0.00075,
"leverage":4,
"posLoss":0,
"posMargin":0,
"posMaint":0,
"liquidationPrice":null,
"maintMarginReq":0.005,
"grossExecCost":0,
"execCost":7,
"currentTimestamp":"2017-05-08T10:51:20.576Z",
"markValue":0,
"unrealisedGrossPnl":0,
"taxBase":7720,
"unrealisedPnlPcnt":0,
"prevUnrealisedPnl":0,
"openOrderSellCost":0,
"deleveragePercentile":null,
"openingComm":31588,
"openOrderBuyCost":0,
"posCross":0,
"taxableMargin":0,
"simpleCost":0,
"underlying":"XBT",
"quoteCurrency":"USD",
"execBuyCost":122613,
"execSellCost":122620,
"execQty":0,
"realisedCost":-7720,
"unrealisedPnl":0,
"openingQty":0,
"openOrderBuyQty":0,
"initMargin":0,
"unrealisedTax":0,
"simpleQty":0,
"avgCostPrice":null,
"rebalancedPnl":24052,
"openingTimestamp":"2017-05-08T10:00:00.000Z",
"unrealisedRoePcnt":0,
"posCost":0,
"posInit":0,
"posComm":0,
"realisedTax":0,
"indicativeTax":0,
"breakEvenPrice":null,
"isOpen":false,
"riskValue":0,
"posState":"",
"varMargin":0,
"realisedGrossPnl":7720,
"timestamp":"2017-05-08T10:51:20.576Z",
"account":25992,
"foreignNotional":0,
"openOrderSellPremium":0,
"simpleValue":0,
"lastValue":0,
"riskLimit":20000000000,
"openOrderSellQty":0,
"grossOpenPremium":0,
"marginCallPrice":null,
"prevClosePrice":1562.74,
"openOrderBuyPremium":0,
"currentQty":0,
"currentCost":-7720,
"currentComm":31772,
"markPrice":null,
"posCost2":0,
"realisedPnl":-24052,
"prevRealisedPnl":-95,
"execSellQty":2,
"shortBankrupt":0,
"simplePnl":0,
"simplePnlPcnt":0,
"lastPrice":null,
"posAllowance":0,
"targetExcessMargin":0,
"indicativeTaxRate":0,
"grossOpenCost":0,
"maintMargin":0,
"crossMargin":false,
"openingCost":-7727,
"longBankrupt":0,
"avgEntryPrice":null,
"symbol":"XBTUSD",
"currency":"XBt"}
Q25459768Merci beaucoup.
C' est quoi?S'il vous plaît ouvrez le VPN avec un hôte local, utilisez shadowsocks, global, bitmex. Les pages Web peuvent être consultées, mais le programme ne fonctionne pas.
Les petites fleurs ont fleuri.S'il vous plaît demander si botvs prend en charge la commande à prix limité de bitmex, ce qui revient à cliquer sur la barre de commande passive lorsque vous commandez dans bitmex.
- Je ne sais pas.Avec getrecords, bitmex ne renvoie que 100 données, mais bitmex prend en charge 500 au maximum, comment en obtenir plus? merci
l'âmeLes données obtenues par GetAccount ne sont pas correctes {"Stocks": 0.00841059, "FrozenStocks": 0.0092248, "Balance": 0, "FrozenBalance": 0} FrozenStocks est un zéro de moins, c'est en fait 0.092248.
- Je vous en prie.Comment résoudre ce problème? Comment résoudre ce problème? Comment résoudre ce problème? J'aimerais obtenir l'url de bitmex: https://www.bitmex.com/api/v1/orderBook/L2? symbol=XBT&depth=1, en utilisant le code suivant selon le document. Définition principale: L'échange est effectué en utilisant le code source de l'appareil. Log ((depth)) Les journaux ont été supprimés: Futures_BitMEX erreur Futures_OP 4: 401: {"erreur":{"message":"Signature not valid.","name":"HTTPError"}} Mon aksk n'a pas de problème, car d'autres API peuvent être appelées par, aidez-moi à voir ce qui cause cela?
Victor997Bonjour, je ne peux pas ajouter Droker, il est écrit un mot de passe incorrect. J'ai besoin d'aide avec toutes les étapes si c'est possible, je pourrais juste ajouter la plateforme. Merci, Victor 997.
Huit personnes en train d'essayer de faire du pétroleQuand BitMEX pourra-t-il prendre en charge le mode websocekt, la limite de fréquence de 300 transactions en 5 minutes est trop élevée maintenant
écorcePourquoi je ne vois pas Bitmex dans les plates-formes ajoutées, y compris Kraken dans la capture d'écran?
YtrezqBonjour, je suis nouveau sur botvs, comment puis-je utiliser ça pour Bitmex?
Je ne sais pas.S'il vous plaît demander si votre plateforme a un système de retouche pour BitMex.
JeLa dernière valeur des données de la ligne K retournées par BitMEX GetRecords n'est pas en temps réel, ce qui empêche de calculer les indicateurs en temps réel. Le problème est depuis longtemps un défaut de l'API BitMEX elle-même et n'a pas été résolu. BotVS collecte des données BitMEX en temps réel et peut-il compléter ces données en temps réel avec les données collectées?
JeComment les données de la ligne K de BitMEX sont-elles obtenues?
Le fils de NingJe ne sais pas ce que c'est, mais j'ai trouvé un problème, après que bitMEX ait mis le taux de change en yuan, il n'a pas pu être traité ~ je ne sais pas quel problème, s'il vous plaît, demandez à Dream
JeC'est une grosse vache, mais elle peut être manipulée à l'aide d'un levier.
L'inventeur de la quantification - un petit rêveshadowsocks n'est pas un véritable proxy global, et n'a pas l'accès au réseau de tous les proxys de l'ordinateur. Pour le moment, le plus simple est d'utiliser un serveur dans une autre région pour exécuter un hôte.
- Je ne sais pas.Pourriez-vous m'en donner un exemple, s'il vous plaît?
L'inventeur de la quantification - un petit rêveVous pouvez accéder directement à l'interface de l'échange, spécifier des paramètres, obtenir des données en utilisant HttpQuery.
L'inventeur de la quantification - un petit rêveVous pouvez me joindre à mon QQ: 359706687 et je vous aiderai à vérifier.
L'inventeur de la quantification - un petit rêveOui, vous appelez l'interface d'accès à la profondeur, qui devrait être cryptée sans signature. Pour les interfaces de requêtes cryptées, utilisez l'appel exchange.IO, pour les interfaces non cryptées, utilisez HttpQuery (python utilise la bibliothèque urlib), HttpQuery traite les requêtes d'interfaces non cryptées.
L'inventeur de la quantification - un petit rêveMerci pour votre soutien! Pourrais-je obtenir une réponse sur les types de votre système que vous voulez exécuter un dock. BotVS pris en charge: - windows 64 bits, 32 bits (interface utilisateur) - Mac OSX (ligne cmd) - Linux 64 bits, 32 bits (ligne cmd) - ARM linux (ligne cmd) Après cela, je vais faire un processus qui pas à pas ajouter un dock. J'attends ton message!
L'inventeur de la quantification - un petit rêveLe protocole WS de BITMEX n'est pas encore pris en charge.
écorceJe suis désolée.
L'inventeur de la quantification - un petit rêveLa plate-forme du disque n'a pas de données de retouche pour le moment, la prise en charge est prévue. Vous avez changé de navigateur, peut-être le navigateur, ce qui a entraîné l'absence de contrôle de défilement.
L'inventeur de la quantification - un petit rêveÀ l'aide de step: 1, exécutez le programme nommé robot, où télécharger à cet endroit: Je suis désolé, mais je n'ai pas le temps de vous répondre. 2、Ajouter une plateforme: configuration BitMEX `s API KEY: Le projet de loi n'a pas été adopté. Le projet de loi de 2010 sur les droits de l'homme est en cours d'exécution. Il s'agit d'un projet de loi visant à améliorer la qualité de l'air et de l'eau. 3, Ajouter le robot et la stratégie de liaison avec le robot Le présent règlement est obligatoire dans tous ses éléments et directement applicable dans tout État membre. Il s'agit d'un projet de loi visant à améliorer la qualité de l'air et de l'eau. Le projet de loi de finances de l'Union européenne est en cours d'exécution.
YtrezqOui, mais quelles sont les étapes sur le site Web pour utiliser BitMex sur BotVS?
L'inventeur de la quantification - un petit rêveMerci d' utiliser BotVS ^^, BotVS prend déjà en charge BitMEX.
L'inventeur de la quantification - un petit rêveBonjour, pour l'instant, le système de détection n'est pas compatible avec BitMEX.
L'inventeur de la quantification - un petit rêveVous pouvez copier en profondeur une poussée vers l'intérieur.
JeMerci! Alors je vais pousser à l'autre variable et ça devrait être bon.
L'inventeur de la quantification - un petit rêveL'ensemble obtenu par GetRecords est une référence passée, et si vous poussez dans la prochaine fois que vous l'obtenez, l'élément de la pousse apparaît.
L'inventeur de la quantification - un petit rêveJe vais essayer, attendez un peu.
JeJe voulais ajouter cette dernière donnée en temps réel, mais j'ai rencontré un problème. Exchange.SetContractType (en anglais seulement) // Obtenir des données avec GetRecords records = exchange.GetRecords (en anglais) Log (enregistrement) // puis ajoutez vous-même la dernière valeur. Je ne suis pas d'accord avec toi. Time:records[records.length-1].Time + 3600000, qui est une série de films réalisés par Time. Close:records[records.length-1].Close + 1 Je ne sais pas. Log (enregistrement) // pause de 10 secondes pour rappeler GetRecords Sleep (en anglais seulement) records = exchange.GetRecords (en anglais) // Pourquoi les données que vous avez ajoutées la dernière fois sont toujours là? Log (enregistrement)
L'inventeur de la quantification - un petit rêveBon, merci à J, je vais essayer de faire un rapport.
L'inventeur de la quantification - un petit rêveOui, BITMEX, c'est le contrat.
JeC'est clair, la première chose à faire est de mettre la monnaie. Les échanges.SetContractType (('XBTUSD') records = exchanges.GetRecords
L'inventeur de la quantification - un petit rêveBien, nous allons vérifier.
Le fils de NingC'est aussi possible, je vais essayer.
L'inventeur de la quantification - un petit rêveVous pouvez essayer de limiter le nombre de fractions de prix à l'aide de N. Beaucoup d'échanges limitent le nombre de fractions de prix, généralement pas plus de 4 fractions.
Le fils de NingLe rêve est toujours le même, Sell ((12319.94890, 100.00000): 400: {"error":{"message":"Invalid price tickSize","name":"HTTPError"}}, la sensation est que le prix n'a pas été converti en dollars et a été signalé, de sorte que le prix est anormalement dévié et n'est pas mis en attente.
L'inventeur de la quantification - un petit rêveBon, je vais le tester tout de suite.