avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Uso de la API de intercambio de BitMEX

Creado el: 2017-05-08 18:39:32, Actualizado el: 2023-07-27 20:40:27
comments   51
hits   68223

Utilización de la API de BitMEX (BitMEX exchange API note)

The FMZ platform API Doc Join us on telegram group

www.fmz.com (used to be BotVs) is a quantitative strategy trading platform where you can easily learn, write, share, and trade quantitative strategies.

  • Our platform has many advantages:

    • 1、Cross-platform, support all major trading exchanges, strategy wrote on our platform is suitable for all major exchanges.
    • 2、Easy to get started, the specific API documentation and the classical template strategies helps users to get started really quick.
    • 3、It has an effective simulate backtesting system.
    • 4、Support sending e-mails, pushing messages to your phone.
    • 5、Web-based control mechanism, can be acessed through your phone.
    • 6、Support for complete Python\C++\JavaScript programming
    • 7、Support spots and futures trading, and will support more exchanges in the future.
    • 8、The cost is extremely low. 0.125 RMB per hour, based on current exchange rate: USDCNY 6.9303, which means 0.01804 dollar per hour.
    • 9、No API-KEY or passwords are saved in our website. FMZ has been running for more than four years without any security issues.

FMZ (BOTVS) ahora soporta todos los contratos en BitMEX

  • #### El comercio en testnet:
function main() {
    exchange.IO("base", "https://testnet.bitmex.com")
}
  • #### El código de prueba:
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));
}
  • #### Check your account information at BitMEX.

Uso de la API de intercambio de BitMEX

Log the information by bot, which is the same with that on BitMEX.

Uso de la API de intercambio de BitMEX

  • #### Log positions after changing leverage, the leverage has been changed (Ajustar el apalancamiento después de la orden de precio de mercado, comparar la información de la posición anterior y posterior )

Uso de la API de intercambio de BitMEX

  • #### Use Go function to cover your positions at the same time. (Invoque la función Go para cubrir sus posiciones al mismo tiempo)
    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);

Uso de la API de intercambio de BitMEX

  • #### Let’s try to post orders and cancel it. (Vamos a intentar poner órdenes y cancelarlo)
  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));

Uso de la API de intercambio de BitMEX

La información de las órdenes pendientes.

 [{"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"}]
  • Nota: No se puede hacer esto.

    • #### 1 , BitMEX sólo supoort K-line periods of 1m, 5m, 1h, 1d.

    Con los últimos hosts, la base puede sintetizar automáticamente K-line, y algunos datos de K-line que BITMEX no soporta también pueden sintetizarse, por lo que la configuración de K-line no se limita a1分钟、5分钟、1小时、1天Estos ciclos, todos los ciclos se pueden configurar.

    Uso de la API de intercambio de BitMEX

    • #### 2 Test holding long and short positions at the same time. (Posiciones largas y cortas al mismo tiempo)
    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));
    

    Uso de la API de intercambio de BitMEX

    • 3. El apalancamiento puede ser cambiado mientras se mantiene la posición.

    • 4 Soporte para la función exchange.IO para más API.

    Uso de la API de intercambio de BitMEX

    // exchange.IO example
    exchange.SetContractType("XBTUSD");
    Log(exchange.IO("api", "POST", "position/leverage", "symbol=XBTUSD&leverage=4"));
    Log(exchange.IO("api", "GET", "user"));
    

    The raw information of position/leverage API (La información cruda de la API de posición/apalancamiento devuelta directamente por la API de posición/apalancamiento)

    {"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"}