avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Uso da API de câmbio BitMEX

Criado em: 2017-05-08 18:39:32, atualizado em: 2023-07-27 20:40:27
comments   51
hits   68223

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.

O FMZ (BOTVS) agora suporta todos os contratos no BitMEX

  • #### A plataforma de negociação de criptomoedas (trade on testnet):
function main() {
    exchange.IO("base", "https://testnet.bitmex.com")
}
  • #### Código de teste:
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 da API de câmbio BitMEX

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

Uso da API de câmbio BitMEX

  • #### Log positions after changing leverage, the leverage has been changed (ajustar a alavancagem após a ordem de preço de baixa, comparar informações de posse anteriores e posteriores )

Uso da API de câmbio BitMEX

  • #### Use Go function to cover your positions at the same time. (Chamar função Go para cobrir suas posições ao mesmo tempo)
    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 da API de câmbio BitMEX

  • #### Let’s try post orders and cancel it. (Let’s try post orders and cancel it. (Let’s try to post orders and cancel it. (Let’s try to post orders and cancel it. (Let’s try to post orders and cancel it.))
  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 da API de câmbio BitMEX

The pending orders’ information. (Informações sobre as ordens pendentes obtidas)

 [{"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:

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

    Usando o mais recente host, a base pode sintetizar automaticamente o K-line, e alguns dados de ciclo de K-line que não são suportados pelo BITMEX também podem ser sintetizados, portanto, não é mais limitado a K-line quando se configura o ciclo de K-line1分钟、5分钟、1小时、1天Estes períodos, todos os períodos podem ser configurados.

    Uso da API de câmbio BitMEX

    • #### 2 Test holding long and short positions at the same time. Test holding long and short positions at the same time.
    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 da API de câmbio BitMEX

    • 3 The leverage can be changed while holding position. (A alavancagem pode ser alterada enquanto se mantém a posição)

    • 4 Suporte a função exchange.IO para mais API.

    Uso da API de câmbio 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 (Informação bruta da API de posição/alavancagem)

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