Вexchange.Buy()
Функция используется для размещения заказов на покупку.Buy()
функция является членом функции обмена объекта {@var/EXCHANGE exchange}.Buy()
функция работает на обменном счете, связанном с объектом обменаexchange
Цель функций (методов) членовexchange
Объект связан только сexchange
, и не будет повторяться после документации.
Успешный заказ возвращает ID заказа, неудачный заказ возвращает нулевое значение.
АтрибутId
структуры порядка {@struct/Order Order} платформы FMZ состоит из кода продукта биржи и идентификатора оригинального заказа биржи, разделенных английскими запятой.Id
формат спотовой торговой парыETH_USDT
порядок биржи OKX:ETH-USDT,1547130415509278720
- Да.
Когда вы звонитеexchange.Buy()
функция для размещения заказа, возвратного значения заказаId
согласуется сId
атрибут структуры порядка {@struct/Order Order}.
строка, нулевое значение
обмен.покупка ((цена, сумма) обмен.покупка ((цена, сумма,...args)
Вprice
Параметр используется для установки цены заказа.
цены
неправда
Номер
Вamount
Параметр используется для установки суммы заказа.
сумма
Истинно
Номер
Расширенные параметры, которые могут выводить сопроводительную информацию в этот журнал заказов,arg
Параметры могут быть переданы более чем одному.
арг
ложное
string, number, bool, object, array, null и любой другой тип, поддерживаемый системой
function main() {
var id = exchange.Buy(100, 1);
Log("id:", id);
}
def main():
id = exchange.Buy(100, 1)
Log("id:", id)
void main() {
auto id = exchange.Buy(100, 1);
Log("id:", id);
}
Номер порядка, возвращенныйexchange.Buy()
может использоваться для запроса информации о заказе и отмены заказа.
// The following is an error call
function main() {
exchange.SetContractType("quarter")
// Set the shorting direction
exchange.SetDirection("sell")
// If you place a buy order, an error will be reported, and shorting can only be sold
var id = exchange.Buy(50, 1)
// Set the long direction
exchange.SetDirection("buy")
// If you place a sell order, it will report an error, go long, only buy
var id2 = exchange.Sell(60, 1)
// Set direction to close long positions
exchange.SetDirection("closebuy")
// If you place a buy order, it will report an error, close long, only sell
var id3 = exchange.Buy(-1, 1)
// Set direction to close short positions
exchange.SetDirection("closesell")
// If you place a sell order, it will report an error, close short, only buy
var id4 = exchange.Sell(-1, 1)
}
# The following is an error call
def main():
exchange.SetContractType("quarter")
exchange.SetDirection("sell")
id = exchange.Buy(50, 1)
exchange.SetDirection("buy")
id2 = exchange.Sell(60, 1)
exchange.SetDirection("closebuy")
id3 = exchange.Buy(-1, 1)
exchange.SetDirection("closesell")
id4 = exchange.Sell(-1, 1)
// The following is an error call
void main() {
exchange.SetContractType("quarter");
exchange.SetDirection("sell");
auto id = exchange.Buy(50, 1);
exchange.SetDirection("buy");
auto id2 = exchange.Sell(60, 1);
exchange.SetDirection("closebuy");
auto id3 = exchange.Buy(-1, 1);
exchange.SetDirection("closesell");
auto id4 = exchange.Sell(-1, 1);
}
При размещении ордера на фьючерсный контракт на криптовалюту необходимо позаботиться о том, чтобы направление торговли было установлено правильно, поскольку несоответствие между направлением торговли и функцией торговли приведет к ошибке:
direction is sell, invalid order type Buy
direction is buy, invalid order type Sell
direction is closebuy, invalid order type Buy
direction is closesell, invalid order type Sell
// For example, the trading pair: ETH_BTC, place a buy order at the market price
function main() {
// Place a buy order at the market price and buy ETH coins with a value of 0.1 BTC (denominated currency)
exchange.Buy(-1, 0.1)
}
def main():
exchange.Buy(-1, 0.1)
void main() {
exchange.Buy(-1, 0.1);
}
Порядок на рынке.
При размещении ордера на фьючерсный контракт вы должны обратить внимание на то, правильно ли установлено направление торговли, так как будет сообщена ошибка, если направление торговли и функция торговли не совпадают.
Параметрprice
Установлено на-1
для размещения рыночных ордеров, который требует интерфейса размещения ордеров биржи для поддержки рыночных ордеров.amount
При размещении рыночных заказов на криптовалютные фьючерсные контракты параметр суммыamount
есть количество контрактов. Есть несколько криптовалютных бирж, которые не поддерживают интерфейс рыночного заказа во время торговли в режиме реального времени. Количество заказов для рыночных заказов на некоторых спотовых биржах - это количество торговых монет. Пожалуйста, обратитесь кСпециальные инструкции по обменуId
В соответствии сexchange.Buy()
функция может отличаться от возвратной стоимости ордераId
описано в настоящем документе.
{@fun/Trade/exchange.Sell exchange.Sell}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}, {@fun/Futures/exchange.SetDirection exchange.SetDirection}
Вexchange.Sell()
Функция используется для размещения ордеров продажи.
Успешный заказ возвращает ID заказа, неудачный заказ возвращает нулевое значение.Id
структуры порядка {@struct/Order Order} платформы FMZ состоит из кода продукта биржи и идентификатора оригинального заказа биржи, разделенных английскими запятой.Id
формат спотовой торговой парыETH_USDT
порядок биржи OKX:ETH-USDT,1547130415509278720
Когда звонишьexchange.Sell()
функция для размещения заказа, возвратного значения заказаId
согласуется сId
атрибут структуры порядка {@struct/Order Order}.
строка, нулевое значение
обмен.продажа ((цена, сумма) обмен.продажа ((цена, сумма,...args)
Вprice
Параметр используется для установки цены заказа.
цены
неправда
Номер
Вamount
Параметр используется для установки суммы заказа.
сумма
Истинно
Номер
Расширенные параметры, которые могут выводить сопроводительную информацию в этот журнал заказов,arg
Параметры могут быть переданы более чем одному.
арг
ложное
string, number, bool, object, array, null и любой другой тип, поддерживаемый системой
function main(){
var id = exchange.Sell(100, 1)
Log("id:", id)
}
def main():
id = exchange.Sell(100, 1)
Log("id:", id)
void main() {
auto id = exchange.Sell(100, 1);
Log("id:", id);
}
Номер порядка, возвращенныйexchange.Sell()
может использоваться для запроса информации о заказе и отмены заказов.
// The following is an error call
function main() {
exchange.SetContractType("quarter")
// Set the shorting direction
exchange.SetDirection("sell")
// If you place a buy order, an error will be reported, and shorting can only be sold
var id = exchange.Buy(50, 1)
// Set the long direction
exchange.SetDirection("buy")
// If you place a sell order, it will report an error, go long, only buy
var id2 = exchange.Sell(60, 1)
// Set direction to close long positions
exchange.SetDirection("closebuy")
// If you place a buy order, it will report an error, close long, only sell
var id3 = exchange.Buy(-1, 1)
// Set direction to close short positions
exchange.SetDirection("closesell")
// If you place a sell order, it will report an error, close short, only buy
var id4 = exchange.Sell(-1, 1)
}
# The following is an error call
def main():
exchange.SetContractType("quarter")
exchange.SetDirection("sell")
id = exchange.Buy(50, 1)
exchange.SetDirection("buy")
id2 = exchange.Sell(60, 1)
exchange.SetDirection("closebuy")
id3 = exchange.Buy(-1, 1)
exchange.SetDirection("closesell")
id4 = exchange.Sell(-1, 1)
// The following is an error call
void main() {
exchange.SetContractType("quarter");
exchange.SetDirection("sell");
auto id = exchange.Buy(50, 1);
exchange.SetDirection("buy");
auto id2 = exchange.Sell(60, 1);
exchange.SetDirection("closebuy");
auto id3 = exchange.Buy(-1, 1);
exchange.SetDirection("closesell");
auto id4 = exchange.Sell(-1, 1);
}
При размещении ордера на фьючерсный контракт на криптовалюту необходимо позаботиться о том, чтобы направление торговли было установлено правильно, поскольку несоответствие между направлением торговли и функцией торговли приведет к ошибке:
direction is sell, invalid order type Buy
direction is buy, invalid order type Sell
direction is closebuy, invalid order type Buy
direction is closesell, invalid order type Sell
// For example, the trading pair: ETH_BTC, place a sell order at the market price
function main() {
// Note: place a market order to sell, sell 0.2 ETH
exchange.Sell(-1, 0.2)
}
def main():
exchange.Sell(-1, 0.2)
void main() {
exchange.Sell(-1, 0.2);
}
Порядок на рынке.
При размещении заказа на фьючерсный контракт вы должны обратить внимание на то, правильно ли установлено направление торговли, так как будет сообщена ошибка, если направление торговли и функция торговли не совпадают.
Параметрprice
Установлено на-1
для размещения рыночных ордеров, который требует, чтобы интерфейс размещения ордеров биржи поддерживал рыночные ордера.amount
При размещении рыночных ордеров на криптовалютные фьючерсные контракты, параметр суммыamount
Есть несколько криптовалютных бирж, которые не поддерживают интерфейс рыночных заказов во время торговли в режиме реального времени.
Если вы используете более старую версию докера, возвращается значение заказаId
В соответствии сexchange.Sell()
функция может отличаться от возвратной стоимости ордераId
описано в настоящем документе.
{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}, {@fun/Futures/exchange.SetDirection exchange.SetDirection}
Вexchange.CreateOrder()
функция используется для размещения заказа.
Если заказ успешно размещен, возвращается идентификатор заказа; если заказ не выполняется, возвращается значение null.Id
структуры порядка {@struct/Order Order} платформы FMZ состоит из кода продукта биржи и идентификатора оригинального заказа биржи, разделенных английскими запятой.Id
формат ордера спотовой торговой парыETH_USDT
на бирже OKX составляет:ETH-USDT,1547130415509278720
Когда звонишьexchange.CreateOrder(symbol, side, price, amount)
функция для размещения заказа, возвращаемая стоимость заказаId
согласуется сId
свойство структуры порядка {@struct/Order Order}.
строка, нулевое значение
exchange.CreateOrder ((символ, сторона, цена, сумма) exchange.CreateOrder ((символ, сторона, цена, сумма,...args)
Параметрsymbol
используется для указания конкретной торговой пары и кода контракта ордера.exchange.CreateOrder(symbol, side, price, amount)
функция размещения заказа,exchange
является объектом спотового обмена. Если валютой ордера является USDT, а валютой торгов - BTC, параметрsymbol
является:"BTC_USDT"
, в формате торговой пары, определенной платформой FMZ.exchange.CreateOrder(symbol, side, price, amount)
функция размещения заказа,exchange
является объектом фьючерсного обмена. Если ордер является ордером BTCsymbol
является:"BTC_USDT.swap"
, а формат представляет собой сочетаниеторговые парыикод контрактаопределяется платформой FMZ, разделенной символом exchange.CreateOrder(symbol, side, price, amount)
функция размещения заказа,exchange
является объектом фьючерсного обмена. Если ордер является ордером BTCsymbol
является:"BTC_USDT.BTC-240108-40000-C"
(взять Binance Option BTC-240108-40000-C в качестве примера), и формат является комбинациейторговые парыопределены платформой FMZ и конкретным кодом контракта опциона, определенным биржей, разделенным символом side
параметр используется для указания направления торговли ордера.
Для объектов спотового обмена необязательные значенияside
параметры:buy
, sell
. buy
означает покупку, иsell
означает продажу.
Для фьючерсных обменных объектов необязательные значенияside
параметры:buy
, closebuy
, sell
, closesell
. buy
означает открытие длинной позиции,closebuy
означает закрытие длинной позиции,sell
означает открытие короткой позиции, иclosesell
означает закрытие короткой позиции.
сторона
неправда
строка
Параметрprice
Цена -1 указывает на то, что заказ является рыночным.
цены
Истинно
Номер
Параметрamount
Укажите, что когда ордер представляет собой ордер на покупку на рынке, количество ордера - это сумма покупки; количество ордера ордера на покупку на рынке некоторых спотовых бирж - это количество торговых монет.Специальные инструкции по обменув руководстве пользователя.
сумма
Истинно
Номер
Расширенные параметры могут выводить дополнительную информацию в этот журнал заказов.arg
параметры могут быть переданы.
арг
ложное
Любой тип, поддерживаемый системой, например строка, число, bool, объект, массив, нулевое значение и т. д.
function main() {
var id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01) // Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
// var id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01) // Futures exchange objects place orders for BTC's U-standard perpetual contracts
Log("Order Id:", id)
}
def main():
id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01) # Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
# id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01) # Futures exchange objects place orders for BTC's U-standard perpetual contracts
Log("Order Id:", id)
void main() {
auto id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01); // Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
// auto id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01); // Futures exchange objects place orders for BTC's U-standard perpetual contracts
Log("Order Id:", id);
}
Объекты спотового обмена и фьючерсные обмены называютexchange.CreateOrder()
функция размещения заказа.
{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}
Вexchange.CancelOrder()
функция используется для отмены заказа.
АтрибутId
структуры порядка {@struct/Order Order} платформы FMZ состоит из кода продукта биржи и идентификатора оригинального заказа биржи, разделенных английскими запятой.Id
формат ордера спотовой торговой парыETH_USDT
на бирже OKX составляет:ETH-USDT,1547130415509278720
- Да.
ПараметрorderId
прошел в, когда звонитьexchange.CancelOrder()
Функция отмены заказа соответствуетId
свойство структуры порядка {@struct/Order Order}.
Вexchange.CancelOrder()
функция возвращает истинное значение, напримерtrue
означает, что запрос на отмену ордера был отправлен успешно.false
, означает, что запрос на отмену ордера не был отправлен. Вернутое значение представляет только успех или неудачу запроса, отправленного для определения того, отменяет ли биржа заказ.exchange.GetOrders()
чтобы определить, отменяется ли приказ.
Буль
Обмен.ОтменаЗаказа ((ЗаказId) Обмен.Отменить Заказ ((ЗаказId,...args)
ВorderId
Параметр используется для указания ордера, который должен быть отменен.
Упорядочен
Истинно
число, строка
Расширенные параметры, вы можете вывести прилагаемую информацию к этому журналу вывода,arg
Параметры могут быть переданы более чем одному.
арг
ложное
string, number, bool, object, array, null и любой другой тип, поддерживаемый системой
function main(){
var id = exchange.Sell(99999, 1)
exchange.CancelOrder(id)
}
def main():
id = exchange.Sell(99999, 1)
exchange.CancelOrder(id)
void main() {
auto id = exchange.Sell(99999, 1);
exchange.CancelOrder(id);
}
Отмените заказ.
function main() {
if (exchange.GetName().includes("Futures_")) {
Log("Set the contract as: perpetual contract, set the trade direction as: open long position.")
exchange.SetContractType("swap")
exchange.SetDirection("buy")
}
var ticker = exchange.GetTicker()
exchange.Buy(ticker.Last * 0.5, 0.1)
var orders = exchange.GetOrders()
for (var i = 0 ; i < orders.length ; i++) {
exchange.CancelOrder(orders[i].Id, "Cancelled orders:", orders[i])
Sleep(500)
}
}
def main():
if exchange.GetName().find("Futures_") != -1:
Log("Set the contract as: perpetual contract, set the trade direction as: open long position.")
exchange.SetContractType("swap")
exchange.SetDirection("buy")
ticker = exchange.GetTicker()
exchange.Buy(ticker["Last"] * 0.5, 0.1)
orders = exchange.GetOrders()
for i in range(len(orders)):
exchange.CancelOrder(orders[i]["Id"], "Cancelled orders:", orders[i])
Sleep(500)
void main() {
if (exchange.GetName().find("Futures_") != std::string::npos) {
Log("Set the contract as: perpetual contract, set the trade direction as: open long position.");
exchange.SetContractType("swap");
exchange.SetDirection("buy");
}
auto ticker = exchange.GetTicker();
exchange.Buy(ticker.Last * 0.5, 0.1);
auto orders = exchange.GetOrders();
for (int i = 0 ; i < orders.size() ; i++) {
exchange.CancelOrder(orders[i].Id, "Cancelled orders:", orders[i]);
Sleep(500);
}
}
Функции API FMZ, которые могут производить функции вывода журналов, такие как:Log()
, exchange.Buy()
, exchange.CancelOrder()
может быть последовал некоторым сопутствующим параметрам выхода после необходимых параметров.exchange.CancelOrder(orders[i].Id, orders[i])
, так что при отмене заказа ID которогоorders[i].Id
, информация о заказе выводится с ним. То есть структура {@struct/Order Order}orders[i]
.
Если вы используете более старую версию докера, параметр orderId функции exchange.CancelOrder() может отличаться от orderId, описанного в текущем документе.
{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}
Вexchange.GetOrder()
функция используется для получения информации о заказе.
Запрос деталей порядка в соответствии с номером порядка и возвращение структуры {@struct/Order Order}, если запрос удастся, или возвращение null, если запрос не удастся. {@struct/Order Order}, нулевое значение
Обмен.GetOrder ((OrderId)
ВorderId
Параметр используется для указания порядка запроса.
АтрибутId
структуры порядка {@struct/Order Order} платформы FMZ состоит из кода продукта биржи и идентификатора оригинального заказа биржи, разделенных английскими запятой.Id
формат ордера спотовой торговой парыETH_USDT
на бирже OKX составляет:ETH-USDT,1547130415509278720
- Да.
ПараметрorderId
прошел в, когда звонитьexchange.GetOrder()
Функция запроса заказа соответствуетId
свойство структуры порядка {@struct/Order Order}.
Приказ неправда строка
function main(){
var id = exchange.Sell(1000, 1)
// Parameter id is the order number, you need to fill in the number of the order you want to query
var order = exchange.GetOrder(id)
Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:",
order.DealAmount, "Status:", order.Status, "Type:", order.Type)
}
def main():
id = exchange.Sell(1000, 1)
order = exchange.GetOrder(id)
Log("Id:", order["Id"], "Price:", order["Price"], "Amount:", order["Amount"], "DealAmount:",
order["DealAmount"], "Status:", order["Status"], "Type:", order["Type"])
void main() {
auto id = exchange.Sell(1000, 1);
auto order = exchange.GetOrder(id);
Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:",
order.DealAmount, "Status:", order.Status, "Type:", order.Type);
}
Вexchange.GetOrder()
Функция не поддерживается некоторыми биржами.AvgPrice
атрибут в структуре {@struct/Order Order} возвращаемого значения - это средняя цена транзакции. Некоторые биржи не поддерживают это поле, а если нет, то оно установлено на 0.
Если вы используете более старую версию докера,orderId
параметрexchange.GetOrder()
функция может отличаться отorderId
описано в текущей документации.
Обмены, которые не поддерживаютexchange.GetOrder()
Функция:
Имя функции | Не поддерживаемые спотовые обмены | Фьючерсные биржи без поддержки |
---|---|---|
Получить Ордер | Zaif / Coincheck / Bitstamp | – |
{@struct/Order Order}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}
Вexchange.GetOrders()
Функция используется для получения невыполненных заказов.
Вexchange.GetOrders()
функция возвращает массив {@struct/Order Order} структур, если запрос на данные удается, и возвращает нулевые значения, если запрос на данные не удается.
{@struct/Order Order} массив, нулевое значение
Обмен.GetOrders ((() обмен.GetOrders (символ)
Параметрsymbol
используется для установкисимвол транзакцииилидиапазон символов транзакцийчтобы его допросили.
Для обменных объектов на месте, еслиsymbol
параметр не будет передан, будут запрошены незавершенные данные заказа всех спотовых продуктов.
Для фьючерсных обменных объектов, еслиsymbol
параметр не передается, по умолчанию запрос не завершенных данных о заказе всех сортов в диапазоне измерений текущей торговой пары и кода контракта.
символ ложное строка
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
function main() {
var arrSymbol = ["ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"]
for (var symbol of arrSymbol) {
var t = exchange.GetTicker(symbol)
exchange.CreateOrder(symbol, "buy", t.Last / 2, 0.01)
}
var spotOrders = exchange.GetOrders()
var tbls = []
for (var orders of [spotOrders]) {
var tbl = {type: "table", title: "test GetOrders", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
for (var order of orders) {
tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
// Print out the information once and then return to prevent the order from being executed during the subsequent backtest and affecting data observation
return
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''
import json
def main():
arrSymbol = ["ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"]
for symbol in arrSymbol:
t = exchange.GetTicker(symbol)
exchange.CreateOrder(symbol, "buy", t["Last"] / 2, 0.01)
spotOrders = exchange.GetOrders()
tbls = []
for orders in [spotOrders]:
tbl = {"type": "table", "title": "test GetOrders", "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], "rows": []}
for order in orders:
tbl["rows"].append([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
tbls.append(tbl)
LogStatus("`" + json.dumps(tbls) + "`")
return
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
void main() {
auto arrSymbol = {"ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"};
for (const auto& symbol : arrSymbol) {
auto t = exchange.GetTicker(symbol);
exchange.CreateOrder(symbol, "buy", t.Last / 2, 0.01);
}
auto spotOrders = exchange.GetOrders();
json tbls = R"([])"_json;
std::vector<std::vector<Order>> arr = {spotOrders};
for (const auto& orders : arr) {
json tbl = R"({
"type": "table",
"title": "test GetOrders",
"cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"],
"rows": []
})"_json;
for (const auto& order : orders) {
json arrJson = R"([])"_json;
arrJson.push_back("Symbol");
arrJson.push_back("Id");
arrJson.push_back(order.Price);
arrJson.push_back(order.Amount);
arrJson.push_back(order.DealAmount);
arrJson.push_back(order.AvgPrice);
arrJson.push_back(order.Status);
arrJson.push_back(order.Type);
arrJson.push_back(order.Offset);
arrJson.push_back(order.ContractType);
tbl["rows"].push_back(arrJson);
}
tbls.push_back(tbl);
}
LogStatus(_D(), "\n", "`" + tbls.dump() + "`");
return;
}
Используйте объект спотовой биржи для размещения ордеров на покупку нескольких различных торговых пар по половине текущей цены, а затем запросите информацию о остающихся ордерах.
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
function main() {
var arrSymbol = ["BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]
for (var symbol of arrSymbol) {
var t = exchange.GetTicker(symbol)
exchange.CreateOrder(symbol, "buy", t.Last / 2, 1)
exchange.CreateOrder(symbol, "sell", t.Last * 2, 1)
}
var defaultOrders = exchange.GetOrders()
var swapOrders = exchange.GetOrders("USDT.swap")
var futuresOrders = exchange.GetOrders("USDT.futures")
var btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap")
var tbls = []
var arr = [defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders]
var tblDesc = ["defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"]
for (var index in arr) {
var orders = arr[index]
var tbl = {type: "table", title: tblDesc[index], cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
for (var order of orders) {
tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
// Print out the information once and then return to prevent the order from being executed during the subsequent backtest and affecting data observation
return
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
'''
import json
def main():
arrSymbol = ["BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]
for symbol in arrSymbol:
t = exchange.GetTicker(symbol)
exchange.CreateOrder(symbol, "buy", t["Last"] / 2, 1)
exchange.CreateOrder(symbol, "sell", t["Last"] * 2, 1)
defaultOrders = exchange.GetOrders()
swapOrders = exchange.GetOrders("USDT.swap")
futuresOrders = exchange.GetOrders("USDT.futures")
btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap")
tbls = []
arr = [defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders]
tblDesc = ["defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"]
for index in range(len(arr)):
orders = arr[index]
tbl = {"type": "table", "title": tblDesc[index], "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], "rows": []}
for order in orders:
tbl["rows"].append([order["Symbol"], order["Id"], order["Price"], order["Amount"], order["DealAmount"], order["AvgPrice"], order["Status"], order["Type"], order["Offset"], order["ContractType"]])
tbls.append(tbl)
LogStatus("`" + json.dumps(tbls) + "`")
return
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
void main() {
auto arrSymbol = {"BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"};
for (const auto& symbol : arrSymbol) {
auto t = exchange.GetTicker(symbol);
exchange.CreateOrder(symbol, "buy", t.Last / 2, 1);
exchange.CreateOrder(symbol, "sell", t.Last * 2, 1);
}
auto defaultOrders = exchange.GetOrders();
auto swapOrders = exchange.GetOrders("USDT.swap");
auto futuresOrders = exchange.GetOrders("USDT.futures");
auto btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap");
json tbls = R"([])"_json;
std::vector<std::vector<Order>> arr = {defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders};
std::string tblDesc[] = {"defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"};
for (int index = 0; index < arr.size(); index++) {
auto orders = arr[index];
json tbl = R"({
"type": "table",
"cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"],
"rows": []
})"_json;
tbl["title"] = tblDesc[index];
for (const auto& order : orders) {
json arrJson = R"([])"_json;
arrJson.push_back(order.Symbol);
arrJson.push_back(to_string(order.Id)); // The Id attribute type in the Order structure is TId, which is encoded using a C++ function to_string built into the FMZ platform.
arrJson.push_back(order.Price);
arrJson.push_back(order.Amount);
arrJson.push_back(order.DealAmount);
arrJson.push_back(order.AvgPrice);
arrJson.push_back(order.Status);
arrJson.push_back(order.Type);
arrJson.push_back(order.Offset);
arrJson.push_back(order.ContractType);
tbl["rows"].push_back(arrJson);
}
tbls.push_back(tbl);
}
LogStatus(_D(), "\n", "`" + tbls.dump() + "`");
return;
}
Использование фьючерсных обменных объектов для размещения заказов на несколько различных торговых пар и кодов контрактов. размещение заказов по ценам, удаленным от цены контрагента, хранение заказов в невыполненном состоянии и запрос заказов несколькими способами.
function main() {
var orders = exchange.GetOrders("BTC_USDT") // Examples of spot products
// var orders = exchange.GetOrders("BTC_USDT.swap") // Examples of futures products
Log("orders:", orders)
}
def main():
orders = exchange.GetOrders("BTC_USDT") # Examples of spot products
# orders = exchange.GetOrders("BTC_USDT.swap") # Examples of futures products
Log("orders:", orders)
void main() {
auto orders = exchange.GetOrders("BTC_USDT"); // Examples of spot products
// auto orders = exchange.GetOrders("BTC_USDT.swap"); // Examples of futures products
Log("orders:", orders);
}
Когда вы звонитеexchange.GetOrders()
Функция, пропускать вSymbol
параметр для запроса данных о заказах для конкретной торговой пары и кода контракта.
ВGetOrders
функция, сценарии использования параметра символа обобщены следующим образом:
Классификация обмена | символ Параметры | Объем запроса | Примечание |
---|---|---|---|
Площадь | Не передавать параметр символа | Запрос всех спотовых торговых пар | Для всех сценариев вызова, если интерфейс обмена не поддерживает его, будет сообщена ошибка и будет возвращено нулевое значение. |
Площадь | Укажите тип торговли, параметр символа: |
Запрос указанной торговой пары BTC_USDT | Для объектов спотового обмена формат параметра символа: |
Фьючерсы | Не передавать параметр символа | Запрос всех торговых продуктов в пределах текущего диапазона размеров торговой пары и кода контракта | Если текущая торговая пара BTC_USDT и код контракта swap, будут запрошены все постоянные контракты с маржировкой USDT. Это эквивалентно вызовуGetOrders("USDT.swap") |
Фьючерсы | Укажите тип торговли, параметр символа: |
Запрос постоянного контракта на основе USDT для определенного BTC | Формат символа параметра для фьючерсных биржевых объектов: комбинацияторговые парыикод контрактаопределены платформой FMZ, разделенные символами". . |
Фьючерсы | Укажите диапазон торговых продуктов, параметр символа: |
Запрос всех бессрочных контрактов на основе USDT | - |
Фьючерсные биржи, поддерживающие опционы | Не передавать параметр символа | Запрос всех опционных контрактов в пределах текущего диапазона размеров торговых пар | Если текущая торговая пара BTC_USDT, контракт устанавливается на опционный контракт, например, опционный контракт Binance: BTC-240108-40000-C |
Фьючерсные биржи, поддерживающие опционы | Уточнить конкретные торговые продукты | Запрос указанного опциона | Например, для Binance Futures Exchange параметр символа: BTC_USDT.BTC-240108-40000-C |
Фьючерсные биржи, поддерживающие опционы | Укажите диапазон торговых продуктов, параметр символа: |
Запрос всех контрактов на опционы на основе USDT | - |
ВGetOrders
функция, фьючерсный обмен объект запрос
диапазон измерений обобщается следующим образом:
символ Параметры | Определение диапазона запроса | Примечание |
---|---|---|
USDT.swap | Периодический контрактный диапазон на основе USDT. | Для |
размеры, которые не поддерживаются интерфейсом API обмена, будет сообщена ошибка и возвращено нулевое значение, когда звонит. USDT.futures. USDT-основанный диапазон контрактов на доставку. ∙ ∙ ∙ USD.swap ∙ ∙ ∙ Диапазон валютных постоянных Контракты. USD.futures. Диапазон доставки на основе валюты Контракты. Оптимизация USDT.Опция USDT.Опционный контракт на основе USDT. Оптиции в долларах США. Оптиции в валютах. ∙ ∙ USDT.futures_combo ∙ Ряд комбинаций CFD. ∙ Фьючерс_Дерибит Биржа ∙∙∙ USD.futures_ff ∙∙ Ряд контрактов на поставку смешанной маржи. ∙∙ Фьючерс_Кракен Биржа. USD.swap_pf. Диапазон смешанных маржинальных вечных контрактов. Фьючерс_Кракен Биржа.
Когда счет, представленный обменным объектомexchange
не имеет ожидаемых заказов в рамкахдиапазон запросаиликонкретные торговые инструменты(активные заказы в невыполненном состоянии), вызов этой функции возвращает пустой массив, то есть:[]
- Да.
При вызове функции GetOrders с этими биржами, если параметр инструмента не передается, запрашиваются только незавершенные заказы текущего инструмента, а не незавершенные заказы всех инструментов (поскольку интерфейс обмена не поддерживает это).
Zaif, MEXC, LBank, Korbit, Coinw, BitMart, Bithumb, BitFlyer, BigONE. Я не знаю, как это сделать.
Обмены, которые не поддерживаютexchange.GetOrders()
Функция:
Имя функции | Не поддерживаемые спотовые обмены | Фьючерсные биржи без поддержки |
---|---|---|
GetOrders | – | Фьючерсы_Бибокс |
{@struct/Order Order}, {@fun/Trade/exchange.GetOrder exchange.GetOrder}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}
Вexchange.GetHistoryOrders()
Функция используется для получения текущей торговой пары, исторических заказов на контракты; она поддерживает спецификацию конкретных торговых сортов.
Вexchange.GetHistoryOrders()
функция возвращает массив {@struct/Order Order} структур, если запрос на данные удается, и null, если запрос не удается.
{@struct/Order Order} массивы, нулевые значения
Обмен.GetHistoryOrders ((() exchange.GetHistoryOrders (символ) exchange.GetHistoryOrders ((символ, с тех пор) exchange.GetHistoryOrders ((символ, с тех пор, предел) Обмен.GetHistoryOrders ((поскольку) exchange.GetHistoryOrders ((поскольку, ограничение)
Вsymbol
Параметр используется для указания торгового символа.BTC_USDT
Торговая пара, например,exchange
является объектом спотового обмена, формат параметра дляsymbol
этоBTC_USDT
Если это объект биржи фьючерсов, например, вечный контракт, формат параметра дляsymbol
является:BTC_USDT.swap
- Да.
Если вы запрашиваете данные ордера опционных контрактов, установить параметрsymbol
до"BTC_USDT.BTC-240108-40000-C"
Формат представляет собой комбинациюторговые парыопределены платформой FMZ и конкретным кодом контракта опциона, определенным биржей, разделенным символом
символ
ложное
строка
Вsince
Параметр используется для указания времени начала запроса в миллисекундах.
с тех пор
ложное
Номер
Вlimit
Параметр используется для указания количества заказов для запроса.
предел
ложное
Номер
function main() {
var historyOrders = exchange.GetHistoryOrders()
Log(historyOrders)
}
def main():
historyOrders = exchange.GetHistoryOrders()
Log(historyOrders)
void main() {
auto historyOrders = exchange.GetHistoryOrders();
Log(historyOrders);
}
symbol
, since
, limit
параметры не указаны, запрос по умолчанию - текущая торговая пара, исторические заказы контракта. Запросы исторических заказов в пределах определенного диапазона ближе всего к текущему времени, диапазон запроса зависит от одного диапазона запроса обменного интерфейса.symbol
параметр указан, запрос истории заказов для установленного типа торговли.since
параметр указан, запрос в направлении текущего времени с использованиемsince
Время запечатлено как время начала.limit
параметр указан, запрос возвращается после достаточного количества записей.Обмены, которые не поддерживаютexchange.GetHistoryOrders()
Функция:
Имя функции | Не поддерживаемые спотовые обмены | Фьючерсные биржи без поддержки |
---|---|---|
Заказы GetHistory | Zaif / Upbit / Coincheck / Bitstamp / Bithumb / BitFlyer / BigONE | Фьючерсы_dYdX / Фьючерсы_Бибокс / Фьючерсы_АполлоX |
{@struct/Order Order}, {@fun/Trade/exchange.GetOrder exchange.GetOrder}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}
exchange.SetPrecision()
Функция используется для установки точностиexchange
Объект обменаценыисумма заказа, после настройки, система будет игнорировать избыточные данные автоматически.
Смена.УстановкаПрецизия ((ценаПрецизия, суммаПрецизия)
ВpricePrecision
Параметр используется для контроля точности данных о ценах.
ЦенаПрецизия
неправда
Номер
ВamountPrecision
Параметр используется для контроля точности количества данных, которые должны быть заказаны.
суммаПрецизия
Истинно
Номер
function main(){
// Set the decimal precision of price to 2 bits, and the decimal precision of variety order amount to 3 bits
exchange.SetPrecision(2, 3)
}
def main():
exchange.SetPrecision(2, 3)
void main() {
exchange.SetPrecision(2, 3);
}
Система обратного тестирования не поддерживает эту функцию, и числовая точность системы обратного тестирования обрабатывается автоматически.
{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}
Установите текущий обменный курс обменного объекта.
Exchange.SetRate ((курс)
Вrate
параметр используется для определения обменного курса конверсии.
ставка
неправда
Номер
function main(){
Log(exchange.GetTicker())
// Set exchange rate conversion
exchange.SetRate(7)
Log(exchange.GetTicker())
// Set to 1, no conversion
exchange.SetRate(1)
}
def main():
Log(exchange.GetTicker())
exchange.SetRate(7)
Log(exchange.GetTicker())
exchange.SetRate(1)
void main() {
Log(exchange.GetTicker());
exchange.SetRate(7);
Log(exchange.GetTicker());
exchange.SetRate(1);
}
Если стоимость обменного курса установлена с использованиемexchange.SetRate()
Затем вся информация о ценах, такие как тикеры, глубины, цены заказа и т. д. для биржи, представленной текущимexchange
обменный объект будет конвертироваться, умножив его на установленный обменный курс 7.exchange
является обменом с долларом США в качестве номинальной валюты.exchange.SetRate(7)
, все цены на живом рынке будут конвертироваться в цены, близкие кCNYНоминальное число умножить на 7.
{@fun/Market/exchange.GetRate exchange.GetRate} - Я не знаю.
Вexchange.IO()
функция используется для других вызовов интерфейсов, связанных с объектом обмена.
Вexchange.IO()
функция вызывает другие интерфейсы, связанные с объектом обмена, возвращая запрошенные данные ответа при успешном вызове, и возвращает null при неудачном вызове.
string, number, bool, object, array, null и любой другой тип, поддерживаемый системой
exchange.IO(k,...args)
Вk
параметр используется для настройки типа вызова, с необязательными значениями"api"
, "currency"
, "base"
, "trade_margin"
, "trade_normal"
, "public_base"
, "mbase"
, selfTradePreventionMode
, simulate
, cross
, dual
, unified
и так далее.
k
неправда
строка
Расширенные параметры, переданные в соответствии с конкретным сценарием вызова,arg
Из-за полиморфного механизмаexchange.IO()
Для определения числа и типа параметров,exchange.IO()
Функции неопределенны.
арг
Истинно
string, number, bool, object, array, null и любые другие типы, поддерживаемые системой
function main() {
var arrOrders = [
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
]
// Call exchange.IO to access the exchange's bulk order interface directly
var ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", JSON.stringify(arrOrders))
Log(ret)
}
import json
def main():
arrOrders = [
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
]
ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", json.dumps(arrOrders))
Log(ret)
void main() {
json arrOrders = R"([
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
])"_json;
auto ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", arrOrders.dump());
Log(ret);
}
Использованиеexchange.IO("api", httpMethod, resource, params, raw)
Форма вызоваexchange.IO()
Это позволит вам расширить функциональность, которая не добавлена к платформе FMZ.POST
Запрос не требует от вас беспокоиться о шифровании, подписании или проверке параметров, которые уже обрабатываются FMZ внизу, пока вы заполняете соответствующие параметры.OKX ExchangeФьючерсные контракты, и использовать параметрraw
для передачи параметров порядка:
var amount = 1
var price = 10
var basecurrency = "ltc"
function main () {
// Note that both amount.toString() and price.toString() have a ' character on the left and right side
var message = "symbol=" + basecurrency + "&amount='" + amount.toString() + "'&price='" + price.toString() + "'&side=buy" + "&type=limit"
var id = exchange.IO("api", "POST", "/v1/order/new", message)
}
amount = 1
price = 10
basecurrency = "ltc"
def main():
message = "symbol=" + basecurrency + "&amount='" + str(amount) + "'&price='" + str(price) + "'&side=buy" + "&type=limit"
id = exchange.IO("api", "POST", "/v1/order/new", message)
void main() {
auto amount = 1.0;
auto price = 10.0;
auto basecurrency = "ltc";
string message = format("symbol=%s&amount=\"%.1f\"&price=\"%.1f\"&side=buy&type=limit", basecurrency, amount, price);
auto id = exchange.IO("api", "POST", "/v1/order/new", message);
}
Если ключевое значение вparams
параметр (т.е. Http запрос параметр) является строкой, он должен быть написан в одиночных кавычках (т.е. символ ') вокруг значения параметра, чтобы обернуть значение параметра.
function main() {
var ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
Log(ret)
}
def main():
ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
Log(ret)
void main() {
auto ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC");
Log(ret);
}
Он поддерживает передачу полных параметров url, которые могут пропустить операцию переключения базового адреса (вызовexchange.SetBase()
функции).
function main(){
var ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
Log(ret)
}
def main():
ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
Log(ret)
void main() {
auto ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT");
Log(ret);
}
Пример вызова без параметраraw
:
function main() {
// For example, if you set the current trading pair of the exchange object to BTC_USDT at the beginning of the live trading, print the current trading pair tickers
Log(exchange.GetTicker())
// Switch the trading pair to LTC_BTC
exchange.IO("currency", "LTC_BTC")
Log(exchange.GetTicker())
}
def main():
Log(exchange.GetTicker())
exchange.IO("currency", "LTC_BTC")
Log(exchange.GetTicker())
void main() {
Log(exchange.GetTicker());
exchange.IO("currency", "LTC_BTC");
Log(exchange.GetTicker());
}
Переключите торговую пару текущей биржи, так что она будет переключать торговую пару, настроенную по кодупри создании торговли в режиме реального времениилипри обратном тестировании.
function main () {
// exchanges[0] is the first exchange object added when the live trading is created
exchanges[0].IO("base", "https://api.huobi.pro")
}
def main():
exchanges[0].IO("base", "https://api.huobi.pro")
void main() {
exchanges[0].IO("base", "https://api.huobi.pro");
}```
For example, the default base address when the exchange object is wrapped is ```https://api.huobipro.com```, and when you need to switch to ```https://api.huobi.pro```, use the following code to switch:
```javascript
function main() {
exchange.SetBase("https://api.bitfinex.com")
exchange.IO("mbase", "https://api-pub.bitfinex.com")
}
def main():
exchange.SetBase("https://api.bitfinex.com")
exchange.IO("mbase", "https://api-pub.bitfinex.com")
void main() {
exchange.SetBase("https://api.bitfinex.com");
exchange.IO("mbase", "https://api-pub.bitfinex.com");
}
Для бирж с разными базовыми адресами для интерфейса тикера и торгового интерфейса, например, Bitfinex Futures имеет два адреса, один для интерфейса тикера и другой для торгового интерфейса.exchange.SetBase("xxx")
. Фьючерсы Bitfinex переключаются на общедоступный интерфейс с использованием базового адресаexchange.IO("mbase", "xxx")
.
I. Для бирж, ориентированных на криптовалюты, другие вызовы интерфейсов API, которые не являются единообразными, с параметромk
Установлено на"api"
:
exchange.IO("api", httpMethod, resource, params, raw)
POST
, GET
, и т.д.URL
.Вexchange.IO("api", httpMethod, resource, params, raw)
вызов функции будет получать доступ к интерфейсу обмена и возвращает null, если вызов не удастся и произойдет ошибка.
Только реальная торговля поддерживает звонкиexchange.IO("api", httpMethod, resource, params, raw)
function.
II. Для переключения торговых пар параметрk
Установлено на"currency"
:
exchange.IO("currency", currency)
currency: Параметр представляет собой тип строки с единым форматами верхних букв, используя подчерк для разделенияbaseCurrency
отquoteCurrency
, например:BTC_USDT
.
ETH_BTC
Можно только переключиться наLTC_BTC
, не кLTC_USDT
.exchange.IO("currency", currency)
чтобы сменить торговые пары.III. Используется для переключения на режим учетной записи с объектом левериджного воздействия криптовалютной спотовой биржи:
k
Установлено на"trade_margin"
Для размещения ордеров и получения активов счета будет доступ к интерфейсу спотового левериджа биржи.
Если биржа проводит различие между полной маржой и изолированной маржой при спотовом рычаге, используется:exchange.IO("trade_super_margin")
перейти на полную маржу для счета с кредитным плечом, иexchange.IO("trade_margin")
перейти на изолированную маржу для счета с кредитным плечом.k
Установлено на"trade_normal"
перейти на обычный режим спотового счета.Спотовые биржи, поддерживающие переключение между моделями счетов с кредитным плечом:
Обмены | Особые замечания |
---|---|
ОКX | Торговые пары в режиме учетного счета с кредитным плечом отличаются от обычных, некоторые торговые пары могут их не иметь.exchange.IO("trade_super_margin") перейти на полную позицию для счетов с кредитным плечом и использоватьexchange.IO("trade_margin") Использоватьtrade_normal Использоватьexchange.IO("tdMode", "cross") для прямого указания режима использования кредитного плеча. |
Хьюби | Торговые пары с использованием рычага на счетах отличаются от обычных, некоторые торговые пары могут их не иметь.trade_margin перейти на позицию счета с кредитным плечом по позициям, использоватьtrade_super_margin Использоватьtrade_normal перейти на обычный режим "валюта-валюта". |
Binance | Режим счета с использованием кредитного плеча делится на позицию по позиции и полную позицию, использованиеtrade_margin чтобы переключиться на положение по положению, использоватьtrade_super_margin перейти на полное положение, использоватьtrade_normal перейти на обычный режим "валюта-валюта". |
Ворота | Режим счета с использованием кредитного плеча делится на позицию по позиции и полную позицию, использованиеtrade_margin чтобы переключиться на положение по положению, использоватьtrade_super_margin перейти на полное положение, использоватьtrade_normal перейти на обычный режим "валюта-валюта". |
AscendEx | Использованиеexchange.IO("trade_margin") перейти на режим счета с кредитным плечом иexchange.IO("trade_normal") чтобы вернуться в обычный режим учетной записи. |
Ух ты! | Использованиеexchange.IO("trade_margin") перейти на режим счета с кредитным плечом иexchange.IO("trade_normal") чтобы вернуться в обычный режим учетной записи. |
CoinEx | Использованиеexchange.IO("trade_margin") перейти на режим счета с кредитным плечом иexchange.IO("trade_normal") чтобы вернуться в обычный режим учетной записи. |
IV. Другие функции переключения:Посмотрите наexchange.IO()
функция дляДругие функции переключенияв руководстве пользователя.
{@fun/NetSettings/exchange.SetBase exchange.SetBase}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@var EXCHANGE_OP_IO_CONTROL}
Вexchange.Log()
функция используется для вывода журнала размещения и вывода заказов в области столбца журнала. При вызове никаких заказов не размещается, выводится и записывается только журнал транзакций.
Обмен.Логотип заказаТорговля, цена, сумма Обмен.Логотип заказаТорговый номер, цена, сумма,...
ВorderType
параметр используется для настройки типа выходного журнала, необязательными значениями являются {@var/LOG_TYPE/LOG_TYPE_BUY LOG_TYPE_BUY}, {@var/LOG_TYPE/LOG_TYPE_SELL LOG_TYPE_SELL}, {@var/LOG_TYPE/LOG_TYPE_CANCEL LOG_TYPE_CANCEL}.
Порядок Тип
Истинно
Номер
Вprice
Параметр используется для установки цены, отображаемой в журнале вывода.
цены
Истинно
Номер
Вamount
Параметр используется для установки количества размещенных заказов, отображаемых в журнале вывода.
сумма
Истинно
Номер
Расширенные параметры, которые могут выводить сопутствующую информацию в этот журнал,arg
Параметры могут быть переданы более чем одному.
арг
ложное
string, number, bool, object, array, null и любой другой тип, поддерживаемый системой
var id = 123
function main() {
// Order type buy, price 999, amount 0.1
exchange.Log(LOG_TYPE_BUY, 999, 0.1)
// Cancel the order
exchange.Log(LOG_TYPE_CANCEL, id)
}
id = 123
def main():
exchange.Log(LOG_TYPE_BUY, 999, 0.1)
exchange.Log(LOG_TYPE_CANCEL, id)
void main() {
auto id = 123;
exchange.Log(LOG_TYPE_BUY, 999, 0.1);
exchange.Log(LOG_TYPE_CANCEL, id);
}
Использованиеexchange.Log(orderType, price, amount)
Одно из наиболее распространенных сценариев - использовать {@fun/Trade/exchange.IOexchange.IO} функция для доступа к интерфейсу биржи для создания условных заказов, но с использованиемexchange.IO()
Функция не выводит информацию о журнале транзакций в записи журнала торговли в режиме реального времени.exchange.Log()
Функция может быть использована для дополнения выходного журнала с целью записи информации о размещении заказов, и то же самое относится к операциям по снятию заказов.
КогдаorderType
параметр:LOG_TYPE_CANCEL
,price
Параметр - это идентификатор порядка отозванного заказа, который используется для печати журнала вывода, когда заказ отозван непосредственно с помощьюexchange.IO()
Функция.exchange.Log()
функция - это членская функция обменного объекта {@var/EXCHANGE exchange} в отличие от глобальной функции {@fun/Log Log}.
{@fun/Log Log}, {@var/EXCHANGE exchange}, {@var/LOG_TYPE/LOG_TYPE_BUY LOG_TYPE_BUY}, {@var/LOG_TYPE/LOG_TYPE_SELL LOG_TYPE_SELL}, {@var/LOG_TYPE/LOG_TYPE_CANCEL LOG_TYPE_CANCEL}
Вexchange.Encode()
Функция используется для расчетов шифрования подписи.
Вexchange.Encode()
функция возвращает вычисленное значение кодирования хэша.
строка
exchange.Encode ((algo, inputФормат, выходФормат, данные) exchange.Encode ((algo, inputFormat, outputFormat, data, keyФормат, ключ)
Параметрalgo
является алгоритмом, используемым для расчета кодирования. Поддерживаемые настройки: algo
также поддерживает: algo
также поддерживает: алгоритм algo
может быть написано как ed25519.seed
расчеты.
что-то
неправда
строка
Используется для определения формата данныхdata
параметр.inputFormat
параметр может быть установлен на один из: hex
base64
кодируется, и outputFormat
параметр поддерживает следующие настройки: hex
base64
кодируется, и data
это данные, которые должны быть обработаны.
данные
неправда
строка
Используется для определения формата данныхkey
параметр.key
параметр может быть установлен на один из: hex
base64
кодируется, и key
параметр используется для указания ключа, используемого в расчете подписи, и он может быть использован в качестве строки простого текста."{{accesskey}}"
, "{{secretkey}}"
ссылаясь наaccessKey
иsecretKey
Конфигурировано в объекте обмена {@var/EXCHANGE exchange}.
Ключ
ложное
строка
function main() {
var APIKEY = "your Access Key(Bitmex API ID)"
var expires = parseInt(Date.now() / 1000) + 10
var signature = exchange.Encode("sha256", "string", "hex", "GET/realtime" + expires, "hex", "{{secretkey}}")
var client = Dial("wss://www.bitmex.com/realtime", 60)
var auth = JSON.stringify({args: [APIKEY, expires, signature], op: "authKeyExpires"})
var pos = 0
client.write(auth)
client.write('{"op": "subscribe", "args": "position"}')
while (true) {
bitmexData = client.read()
if(bitmexData.table == 'position' && pos != parseInt(bitmexData.data[0].currentQty)){
Log('position change', pos, parseInt(bitmexData.data[0].currentQty), '@')
pos = parseInt(bitmexData.data[0].currentQty)
}
}
}
import time
def main():
APIKEY = "your Access Key(Bitmex API ID)"
expires = int(time.time() + 10)
signature = exchange.Encode("sha256", "string", "hex", "GET/realtime" + expires, "hex", "{{secretkey}}")
client = Dial("wss://www.bitmex.com/realtime", 60)
auth = json.dumps({"args": [APIKEY, expires, signature], "op": "authKeyExpires"})
pos = 0
client.write(auth)
client.write('{"op": "subscribe", "args": "position"}')
while True:
bitmexData = json.loads(client.read())
if "table" in bitmexData and bitmexData["table"] == "position" and len(bitmexData["data"]) != 0 and pos != bitmexData["data"][0]["currentQty"]:
Log("position change", pos, bitmexData["data"][0]["currentQty"], "@")
pos = bitmexData["data"][0]["currentQty"]
void main() {
auto APIKEY = "your Access Key(Bitmex API ID)";
auto expires = Unix() + 10;
auto signature = exchange.Encode("sha256", "string", "hex", format("GET/realtime%d", expires), "hex", "{{secretkey}}");
auto client = Dial("wss://www.bitmex.com/realtime", 60);
json auth = R"({"args": [], "op": "authKeyExpires"})"_json;
auth["args"].push_back(APIKEY);
auth["args"].push_back(expires);
auth["args"].push_back(signature);
auto pos = 0;
client.write(auth.dump());
client.write("{\"op\": \"subscribe\", \"args\": \"position\"}");
while(true) {
auto bitmexData = json::parse(client.read());
if(bitmexData["table"] == "position" && bitmexData["data"][0].find("currentQty") != bitmexData["data"][0].end() && pos != bitmexData["data"][0]["currentQty"]) {
Log("test");
Log("position change", pos, bitmexData["data"][0]["currentQty"], "@");
pos = bitmexData["data"][0]["currentQty"];
}
}
}
Пример сдвига изменения позиции BitMEX (протокол wss):
Только реальная торговля поддерживает звонкиexchange.Encode()
Функция."{{accesskey}}"
, "{{secretkey}}"
ссылки действительны только в том случае, еслиexchange.Encode()
функция используется.
{@var/EXCHANGE exchange}, {@fun/Global/Encode Encode}
Многопоточные асинхронные функции поддержки могут превратить операции всех поддерживаемых функций в асинхронное одновременное выполнение.
Вexchange.Go()
Функция возвращает одновременный объект сразу, и вы можете использоватьwait()
Метод этого одновременного объекта для получения результата одновременного запроса.
объект
обмен.Пойди (метод) обмен.Go ((метод,...args)
Вmethod
параметр используется для указания имени параллельной функции. Обратите внимание, что параметр является строкой имени функции, а не ссылкой на функцию.
метод
Истинно
строка
Параметры доодновременное выполнение функций, может быть более одного параметраarg
. Тип и количество параметровarg
зависит от параметровфункция одновременного исполнения- Да.
арг
ложное
string, number, bool, object, array, function, null и все другие типы, поддерживаемые системой
function main(){
// The following four operations are concurrently executed asynchronously by multiple threads and do not take time and return immediately
var a = exchange.Go("GetTicker")
var b = exchange.Go("GetDepth")
var c = exchange.Go("Buy", 1000, 0.1)
var d = exchange.Go("GetRecords", PERIOD_H1)
// Call the wait method to wait for the return of the ticker results asynchronously
var ticker = a.wait()
// Returns the depth, or null if it fails
var depth = b.wait()
// return order number, limited to 1 second timeout, if timeout, returns undefined, the object can continue to call wait if the last wait timeout
var orderId = c.wait(1000)
if(typeof(orderId) == "undefined") {
// Timeout, reacquire
orderId = c.wait()
}
var records = d.wait()
}
def main():
a = exchange.Go("GetTicker")
b = exchange.Go("GetDepth")
c = exchange.Go("Buy", 1000, 0.1)
d = exchange.Go("GetRecords", PERIOD_H1)
ticker, ok = a.wait()
depth, ok = b.wait()
orderId, ok = c.wait(1000)
if ok == False:
orderId, ok = c.wait()
records, ok = d.wait()
void main() {
auto a = exchange.Go("GetTicker");
auto b = exchange.Go("GetDepth");
auto c = exchange.Go("Buy", 1000, 0.1);
auto d = exchange.Go("GetRecords", PERIOD_H1);
Ticker ticker;
Depth depth;
Records records;
TId orderId;
a.wait(ticker);
b.wait(depth);
if(!c.wait(orderId, 300)) {
c.wait(orderId);
}
d.wait(records);
}
Exchange.Go()
Пример использования функции, для определенияundefined
использоватьtypeof(xx) === "undefined"
, потому чтоnull == undefined
действителен в JavaScript.
function main() {
var d = exchange.Go("GetRecords", PERIOD_H1)
// Waiting for K-line results
var records = d.wait()
// Here waits an asynchronous operation that has been waited and finished, it will return null, and log the error message
var ret = d.wait()
}
def main():
d = exchange.Go("GetRecords", PERIOD_H1)
records, ok = d.wait()
ret, ok = d.wait()
void main() {
auto d = exchange.Go("GetRecords", PERIOD_H1);
Records records;
d.wait(records);
Records ret;
d.wait(ret);
}
Звонитьwait()
Метод на одновременном объекте, который был выпущен, сообщает об ошибке:
function main() {
while(true) {
var beginTS = new Date().getTime()
var arrRoutine = []
var arrTicker = []
var arrName = []
for(var i = 0; i < exchanges.length; i++) {
arrRoutine.push(exchanges[i].Go("GetTicker"))
arrName.push(exchanges[i].GetName())
}
for(var i = 0; i < arrRoutine.length; i++) {
arrTicker.push(arrRoutine[i].wait())
}
var endTS = new Date().getTime()
var tbl = {
type: "table",
title: "ticker",
cols: ["index", "name", "latest-deal-price"],
rows: []
}
for(var i = 0; i < arrTicker.length; i++) {
tbl.rows.push([i, arrName[i], arrTicker[i].Last])
}
LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", endTS - beginTS, "millisecond", "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(500)
}
}
import time
import json
def main():
while True:
beginTS = time.time()
arrRoutine = []
arrTicker = []
arrName = []
for i in range(len(exchanges)):
arrRoutine.append(exchanges[i].Go("GetTicker"))
arrName.append(exchanges[i].GetName())
for i in range(len(exchanges)):
ticker, ok = arrRoutine[i].wait()
arrTicker.append(ticker)
endTS = time.time()
tbl = {
"type": "table",
"title": "ticker",
"cols": ["index", "name", "latest-deal-price"],
"rows": []
}
for i in range(len(arrTicker)):
tbl["rows"].append([i, arrName[i], arrTicker[i]["Last"]])
LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", endTS - beginTS, "second", "\n", "`" + json.dumps(tbl) + "`")
Sleep(500)
void main() {
while(true) {
int length = exchanges.size();
auto beginTS = UnixNano() / 1000000;
Ticker arrTicker[length] = {};
string arrName[length] = {};
// Note that to add several exchange objects, several exchanges[n].Go functions have to be executed here, this example is to add four exchange objects, the details can be modified
auto r0 = exchanges[0].Go("GetTicker");
auto r1 = exchanges[1].Go("GetTicker");
auto r2 = exchanges[2].Go("GetTicker");
auto r3 = exchanges[3].Go("GetTicker");
GoObj *arrRoutine[length] = {&r0, &r1, &r2, &r3};
for(int i = 0; i < length; i++) {
arrName[i] = exchanges[i].GetName();
}
for(int i = 0; i < length; i++) {
Ticker ticker;
arrRoutine[i]->wait(ticker);
arrTicker[i] = ticker;
}
auto endTS = UnixNano() / 1000000;
json tbl = R"({
"type": "table",
"title": "ticker",
"cols": ["index", "name", "latest-deal-price"],
"rows": []
})"_json;
for(int i = 0; i < length; i++) {
json arr = R"(["", "", ""])"_json;
arr[0] = format("%d", i);
arr[1] = arrName[i];
arr[2] = format("%f", arrTicker[i].Last);
tbl["rows"].push_back(arr);
}
LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", format("%d", endTS - beginTS), "millisecond", "\n", "`" + tbl.dump() + "`");
Sleep(500);
}
}
Одновременный доступ к нескольким биржевым тикерам:
function main() {
/*
Testing with OKX futures order interface
POST /api/v5/trade/order
*/
var beginTS = new Date().getTime()
var param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
var ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
var ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
var ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
var id1 = ret1.wait()
var id2 = ret2.wait()
var id3 = ret3.wait()
var endTS = new Date().getTime()
Log("id1:", id1)
Log("id2:", id2)
Log("id3:", id3)
Log("Concurrent order placement time consumption:", endTS - beginTS, "millisecond")
}
import time
import json
def main():
beginTS = time.time()
param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
id1, ok1 = ret1.wait()
id2, ok2 = ret2.wait()
id3, ok3 = ret3.wait()
endTS = time.time()
Log("id1:", id1)
Log("id2:", id2)
Log("id3:", id3)
Log("Concurrent order placement time consumption:", endTS - beginTS, "second")
void main() {
auto beginTS = UnixNano() / 1000000;
json param = R"({"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"})"_json;
auto ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
auto ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
auto ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
json id1 = R"({})"_json;
json id2 = R"({})"_json;
json id3 = R"({})"_json;
ret1.wait(id1);
ret2.wait(id2);
ret3.wait(id3);
auto endTS = UnixNano() / 1000000;
Log("id1:", id1);
Log("id2:", id2);
Log("id3:", id3);
Log("Concurrent order placement time consumption:", endTS - beginTS, "millisecond");
}
Одновременные призывыexchange.IO("api", ...)
Функция:
Эта функция создает задачи выполнения с несколькими потоками только при выполнении в реальной торговле, обратное тестирование не поддерживает одновременное выполнение задач с несколькими потоками (обратное тестирование доступно, но все еще выполняется последовательно).
Послеexchange.Go()
функция возвращает объект, егоwait()
функция вызвана через этот объект, чтобы получить данные, возвращенные нитью.wait()
Функция должна быть вызвана, чтобы получить данные, прежде чем нить будет выпущена автоматически.wait()
Если функция не указана, нить не будет выпущена автоматически, даже если произойдет тайм-аут. Результат нитки должен быть получен до того, как она будет выпущена автоматически (независимо от успеха или неудачи вызова интерфейса для одновременного доступа). Проще говоря, запрашиваемый нить должна быть получена с помощьюwait()
Функция независимо от того, удается или не удается выполнение, и ресурс потока, запрошенныйexchange.Go()
функция должна быть автоматически освобождена докером.
Вwait()
Метод поддерживает параметр тайм-аут:
Без параметра тайм-аута, то есть,wait()
, или с параметром времени отключения 0, то есть,wait(0)
.wait()
блокирует функцию и ждет, пока не закончится выполнение параллельного потока, возвращая результат выполнения параллельного потока.
Установите параметр тайм-аута -1, т.е.wait(-1)
.wait()
функция возвращает сразу, с различными значениями возврата для разных языков программирования, см. этот подраздел для примера вызова.
Установите конкретный параметр задержки,wait(300)
, иwait()
Функция будет ждать максимум 300 миллисекунд, прежде чем вернуться.
Если результатом финальногоwait()
функция не получена, ресурсы потока не будут автоматически высвобождены, что приведет к накоплению запрошенных потоков, и более 2000 сообщат об ошибке:"too many routine wait, max is 2000"
- Да.
Поддерживаемые функции:GetTicker
, GetDepth
, GetTrades
, GetRecords
, GetAccount
, GetOrders
, GetOrder
, CancelOrder
, Buy
, Sell
, GetPositions
, IO
Все эти функции выполняются на основе текущего обменного объекта {@var/EXCHANGE exchange} при одновременном вызове.
Разница между языком Python и языком JavaScript заключается в том, чтоwait()
функция одновременных объектов в языке Python возвращает два параметра. Первый параметр является результатом, возвращенным асинхронным вызовом API, а второй параметр указывает, завершился ли асинхронный вызов.
def main():
d = exchange.Go("GetRecords", PERIOD_D1)
# ok will return True definitely, unless the strategy is stopped
ret, ok = d.wait()
# If the wait times out, or if it waits for an instance that has already ended, ok returns False
ret, ok = d.wait(100)
{@fun/Global/Mail_Go Mail_Go}, {@fun/Global/HttpQuery_Go HttpQuery_Go}, {@fun/Global/EventLoop EventLoop}
Рынок Счет