BitMEX 거래소 API 메모

저자:초목, 2019-04-04 11:40:52로 제작, 2024-02-05 20:09:52로 업데이트

BitMEX 거래소 API 사용 사항 (BitMEX exchange API note)

img

FMZ 플랫폼 API 문서 텔레그램 그룹에 가입하세요

www.fmz.com(BotVs로 사용되었던) 은 양적 전략 거래 플랫폼으로 양적 전략을 쉽게 배우고, 작성하고, 공유하고 거래할 수 있습니다.

  • 우리의 플랫폼은 많은 장점을 가지고 있습니다:

    • 1, 크로스 플랫폼, 모든 주요 거래소를 지원, 우리의 플랫폼에 작성 된 전략은 모든 주요 거래소에 적합합니다.
    • 2、시작하기 쉬우며, 특정 API 문서와 고전적인 템플릿 전략은 사용자가 매우 빠르게 시작할 수 있도록 도와줍니다.
    • 3, 그것은 효과적인 시뮬레이션 백테스팅 시스템을 가지고 있습니다.
    • 4、메일 전송을 지원합니다.
    • 5, 웹 기반 제어 메커니즘, 휴대 전화로 액세스 할 수 있습니다.
    • 6、완전 파이썬\C++\자바스크립트 프로그래밍 지원
    • 7、스팟과 선물 거래를 지원하고, 앞으로 더 많은 거래소를 지원할 것입니다.
    • 8、비용은 매우 낮습니다. 현재 환율을 기준으로 시간당 0.125 RMB: USDCNY 6.9303, 즉 시간당 0.01804 달러입니다.
    • 9、우리 웹사이트에는 API 키나 비밀번호가 저장되지 않습니다. FMZ는 보안 문제 없이 4년 넘게 운영되고 있습니다.

FMZ (BOTVS) 는 이제 BitMEX의 모든 계약을 지원합니다!

  • 테스트 코드:

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));
}
  • BitMEX에서 계좌 정보를 확인하세요.

    img

    바트로 정보를 기록합니다. BitMEX와 동일합니다.

    img

  • 레버리지 변경 후 로그 포지션, 레버리지가 변경되었습니다.

    img

  • Go 함수를 사용해서 자신의 위치를 동시에 커버할 수 있습니다.

      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);
    

    img

  • Let's try post orders and cancel it. Let's try post orders and cancel it. Let's try post orders and cancel it. Let's try post orders and cancel it. Let's try post orders and cancel it. Let's try post orders and cancel it. Let's try post orders and cancel it. Let's try post orders and cancel it. Let's try post orders and cancel it. Let's try post orders and cancel it. Let's try hang 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));
    

    img

    The pending orders information (중계 주문 정보)

 [{"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"}]
  • 참고:

    • 1, BitMEX only supoort K-line periods of 1m, 5m, 1h, 1d. ((BitMEX의 K-line 주기는 1분, 5분, 1시간, 1일의 주기를만 지원한다.))

      최신 관리자를 사용하여 하위층은 자동으로 K 라인을 합성할 수 있으며, BITMEX가 지원하지 않는 일부 K 라인 주기 데이터도 합성할 수 있으므로 K 라인 주기 설정 시에는 더 이상 제한되지 않습니다.1分钟、5分钟、1小时、1天이 주기는 모든 주기를 설정할 수 있습니다.

      img

    • 2, 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));
      

      img

    • 3、The leverage can be changed while holding position. (금지 후 레버리지를 조정할 수 있다.)

    • 지원exchange.IO더 많은 API를 위한 function.

      img

      // 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 (거래소 API를 직접 호출하면)

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

더 많은