Платформа FMZ API Doc Присоединяйтесь к нам в группе Telegram
www.fmz.com(ранее BotVs) - это платформа для торговли количественной стратегией, где вы можете легко изучать, писать, делиться и торговать количественными стратегиями.
FMZ (BOTVS) теперь поддерживает все контракты на 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));
}
Запишите информацию ботом, что то же самое, что и на 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));
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"}]
Используя новейшие хостеры, базовый слой может автоматически синтезировать K-линии, а некоторые K-линиевые циклы, которые не поддерживаются BITMEX, также могут быть синтезированы, так что при настройке K-линейных циклов они больше не ограничиваются1分钟、5分钟、1小时、1天
Эти циклы, все циклы могут быть настроены.
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"));
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"}
q25459768Спасибо.
КуунгПожалуйста, запустите впн с помощью локального хостера, используйте shadowsocks, global, bitmex веб-страницы можно зайти, но программа не работает.
Цветок расцветёт.Пожалуйста, botvs поддерживает ли Bitmex ограничение цены на заказ, что равносильно тому, что при заказе в Bitmex выбирать пассивный заказ.
Бобо188С getrecords, bitmex возвращает только 100 данных, но bitmex поддерживает максимум 500, как получить больше? спасибо
КиссоулПолучается, что данные, полученные GetAccount, не соответствуют действительности. {"Stocks": 0.00841059, "FrozenStocks": 0.0092248, "Balance": 0, "FrozenBalance: 0} FrozenStocks потерял один ноль, фактически 0.0092248.
БелеевКак это решить, если вы вызвали остановку интерфейса bitmex с помощью exchange.IO (("api", httpMethod, resource, params)? Я хотел бы получить этот URL bitmex: https://www.bitmex.com/api/v1/orderBook/L2? symbol=XBT&depth=1, используя следующий код в соответствии с документацией. def main ((): depth = exchanges[0].IO (("api", "GET", "/api/v1/orderBook/L2","symbol=XBT&depth=1") Log ((depth)) В результате в журнале появилась ошибка: Futures_BitMEX ошибка Futures_OP 4: 401: {"error":{"message":"Signature not valid.","name":"HTTPError"}} Мой aksk - это нормально, потому что другие API могут вызывать через, помогите посмотреть, почему это так?
Виктор997Привет, я не могу добавить Droker, он говорит неправильный пароль. Мне нужна помощь со всеми этапами, если это возможно, я мог бы только добавить платформу. Спасибо, Виктор997.
Восемь марокКогда BitMEX сможет поддерживать режим websocekt, сейчас ограничение на частоту 300 транзакций за 5 минут слишком большое
кедзоhttps://dn-filebox.qbox.me/bf29e11e9f2d707808ccd006406bb3026a794876.png Почему я не вижу Bitmex в добавленной платформе, в том числе и Kraken в скриншоте?
итрецкПривет, я новичок в botvs, как я могу использовать это для bitmex?
ЛуизаПожалуйста, спросите, есть ли на вашей платформе система обратной связи для BitMex.
JПоследнее значение данных K-строки, возвращаемых BitMEX GetRecords, не является реальным, что не позволяет вычислять показатели в реальном времени. Эта проблема существует уже давно и является недостатком самого API BitMEX, который не был решен. BotVS собирает данные BitMEX в режиме реального времени, может ли он дополнить эти данные BitMEX в режиме реального времени?
JКак получить данные K-линии BitMEX?
Нинг-цзыДрем, я обнаружил проблему, после того, как bitMEX установил курс на юани, не удалось совершить сделку ~ не знаю, что это за проблема, пожалуйста, Дрем, пожалуйста
JЭто слишком круто, чтобы использовать рычаги.
Изобретатели количественного измерения - мечтыshadowsocks не является настоящим глобальным агентом, и не имеет доступа к сети для всех компьютеров, и в настоящее время проще всего использовать хостинг с сервером в другом регионе.
Бобо188Не могли бы вы дать мне пример, пожалуйста? Спасибо!
Изобретатели количественного измерения - мечтыС помощью HttpQuery можно напрямую получить доступ к биржам, интерфейсам, параметрам и данным.
Изобретатели количественного измерения - мечтыЕсли вы хотите посмотреть мой QQ: 359706687, я помогу вам.
Изобретатели количественного измерения - мечтыДа, вы вызываете интерфейс для получения глубины, который должен быть незашифрованным без подписи. Для зашифрованных запросов используйте вызов exchange.IO, для незашифрованных используйте HttpQuery (python использует urlib library), HttpQuery обрабатывает незашифрованные запросы.
Изобретатели количественного измерения - мечтыСпасибо за поддержку! Могу ли я получить ответ о том, какие виды вашей системы, что вы хотите запустить докер. BotVS поддерживается: - Windows 64 бит, 32 бит (CLI, интерфейс) - MAC OSX (линия cmd) - Линукс 64 бита, 32 бита (cmd линия) - ARM Linux (линия CMD) После этого, я сделаю процесс, который шаг за шагом добавить докер. Ждем сообщения!
Изобретатели количественного измерения - мечтыПротокол WS BITMEX пока не поддерживается.
кедзоЯ не знаю.
Изобретатели количественного измерения - мечтыПлатформы на дискете Пока нет обратной проверки данных, планируется поддержка. Вы сменили пробный браузер, возможно, браузер, в результате чего не отображается спускающийся контроллер.
Изобретатели количественного измерения - мечтыИспользование шага: 1, Запустить программу под названием робот, где скачать в этом месте: https://dn-filebox.qbox.me/cfe3c7fab12e72b6dae4ca238dde150e5d8bcd56.png 2, Добавить платформу: конфигурация BitMEX API Ключ: https://dn-filebox.qbox.me/5527bc725b11109774c5bdf152c80974542d59ed.png https://dn-filebox.qbox.me/c953a7570513cb6e5800a4775df67cbcbc9135b8.png https://dn-filebox.qbox.me/6a8077d08bae2ac3ba5c4f57eb88af5c0683e4f6.png 3, Добавьте робота и стратегию связывания с роботом: https://dn-filebox.qbox.me/290a20859a186b27af4058019259134b6b48bda5.png https://dn-filebox.qbox.me/5e797e71b6c7c0bfda4860f7b1073aa69b499f64.png https://dn-filebox.qbox.me/74307cc14fa0039695e4608c955c2b7d71789b10.png
итрецкДа, но каковы шаги на сайте для использования BitMex на BotVS?
Изобретатели количественного измерения - мечтыСпасибо за использование BotVS ^^, BotVS уже поддерживает BitMEX.
Изобретатели количественного измерения - мечтыЗдравствуйте, пока что система отслеживания не поддерживает BitMEX.
Изобретатели количественного измерения - мечтыМожно глубоко скопировать push-in.
JСпасибо! Тогда я выдвигаю другую переменную.
Изобретатели количественного измерения - мечтыJ - величина ~ Этот массив, полученный GetRecords, передается ссылкой, и элементы push появляются, если push в следующий раз будет загружен.
Изобретатели количественного измерения - мечтыЯ попробую, подождите.
JЯ хотел бы добавить эти последние данные в режиме реального времени, но у меня возникла проблема. exchange.SetContractType (('XBTUSD')) // Получить данные с помощью GetRecords (()) records = exchange.GetRecords ((() Log ((records)) // затем добавляем последнее значение. Здесь можно добавить любую цифру, только для тестирования. records.push (((( Time:records[records.length-1].Time + 3600000, Close:records[records.length-1].Close + 1 }) Log ((records)) // Отдохнуть 10 секунд и перезвонить GetRecords ((() Sleep ((10000) records = exchange.GetRecords ((() // Почему данные, которые были добавлены в прошлый раз, остаются? Log ((records))
Изобретатели количественного измерения - мечтыХорошо, спасибо, что предложили, я проверю, запись, отчет!
Изобретатели количественного измерения - мечтыДа, BITMEX - это контракт.
JЯсно, что сначала нужно установить валюту. exchanges.SetContractType (('XBTUSD')) records = exchanges.GetRecords ((()
Изобретатели количественного измерения - мечтыХорошо, давайте проверим.
Нинг-цзыНу, это тоже возможно, я попробую.
Изобретатели количественного измерения - мечтыМожно использовать _N ограничить дефицитные числа цены, многие биржи ограничивают дефицитные числа предложений, как правило, не более 4-х дефицитных цифр.
Нинг-цзыСэлл ((12319.94890, 100.00000): 400: {"error":{"message":"Invalid price tickSize","name":"HTTPError"}}, ощущение, что цена не была переведена в доллары, и она была опубликована, так что цена необычно отклонилась, и не была приведена в список.
Изобретатели количественного измерения - мечтыХорошо, я проверю это прямо сейчас.