Возвращает номер текущей версии системы.
Номер текущей версии системы, например:3.6
- Да.
строка
Версия ((()
function main() {
Log("version:", Version())
}
def main():
Log("version:", Version())
void main() {
Log("version:", Version());
}
Номер версии системы - это номер версии программы Docker
Функция сна, вызывающая паузу программы на некоторое время.
Сон ((миллисекунда)
Вmillisecond
Параметр используется для установки продолжительности сна и количества миллисекунд.
миллисекунды
Истинно
Номер
function main() {
Sleep(1000 * 10) // Wait for 10 seconds
Log("Waited for 10 seconds")
}
def main():
Sleep(1000 * 10)
Log("Waited for 10 seconds")
void main() {
Sleep(1000 * 10);
Log("Waited for 10 seconds");
}
Например, при выполненииSleep(1000)
Он поддерживает операции с временем сна менее 1 миллисекунды, например, настройкаSleep(0.1)
. Он поддерживает минимальный параметр0.000001
, т.е. наносекундная спячка, где 1 наносекунда равна1e-6
миллисекунд.
При написании стратегий вPython
язык,Sleep(millisecond)
Не рекомендуется использовать эту функцию для выборов с интервалом, операций с временем ожидания.time.sleep(second)
ФункцияPython
Это...time
Это потому, что использованиеtime.sleep(second)
функция в стратегии заставляет программу стратегии ждать определенный период времени фактически при обратном тестировании (не пропуская временные ряды системы обратного тестирования), поэтому она заставляет стратегию проводить обратное тестирование очень медленно.
Определить, является ли среда управления стратегией системой обратного тестирования.
Стратегия возвращает истинное значение, например:true
при запуске в среде системы обратного тестирования стратегия возвращает ложное значение, например:false
при работе в среде реального трейдинга.
Буль
Виртуальная?
function main() {
if (IsVirtual()) {
Log("The current backtest system environment.")
} else {
Log("The current live trading environment.")
}
}
def main():
if IsVirtual():
Log("The current backtest system environment.")
else:
Log("The current live trading environment.")
void main() {
if (IsVirtual()) {
Log("The current backtest system environment.");
} else {
Log("The current live trading environment.");
}
}
Определить, является ли текущая рабочая среда системой обратного тестирования, которая используется для совместимости с разницей между обратным тестированием и живой торговлей.
Отправь мне письмо.
Успешная доставка электронной почты возвращает истинное значение, например,true
, и неудачная доставка возвращает ложное значение, например,false
- Да.
Буль
Почта ((smtpСервер, smtpИмя пользователя, smtpПароль, mailTo, заголовок, тело)
Используется для определенияSMTP
адрес обслуживания отправителя электронной почты.
smtpServer
неправда
строка
Используется для указания адреса электронной почты отправителя.
smtpUsername (имя пользователя)
неправда
строка
ВSMTP
пароль для почтового ящика отправителя электронной почты.
smtpPassword (пароль)
неправда
строка
Используется для указания адреса электронной почты получателя.
mailTo
неправда
строка
Заголовок электронной почты.
Заголовок
неправда
строка
Корпус почты.
тело
неправда
строка
function main(){
Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
}
def main():
Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
void main() {
Mail("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body");
}
ВsmtpPassword
параметр устанавливает пароль дляSMTP
Сервис, а не пароль почтового ящика.
При установкеsmtpServer
параметр, если вам нужно изменить порт, вы можете добавить номер порта прямо в параметреsmtpServer
Например: QQ mailsmtp.qq.com:587
, который доступен для тестирования.
Если сообщается ошибка:unencryped connection
, вам нужно изменитьsmtpServer
В соответствии сMail
Формат параметра:ssl://xxx.com:xxx
, например,ssl
МетодSMTP
для почты QQ:ssl://smtp.qq.com:465
илиsmtp://xxx.com:xxx
- Да.
Это не работает в системе обратного тестирования.
{@fun/Global/Mail_Go Mail_Go} Я не знаю.
Асинхронная версияMail
function.
ВMail_Go
Функция возвращает одновременный объект сразу, и вы можете использоватьwait
Успешная доставка почты возвращает истинное значение, например,true
, и неудачная доставка возвращает ложное значение, например,false
- Да.
объект
Mail_Go ((smtpServer, smtpUsername, smtpPassword, mailTo, название, корпус)
Он используется для определенияSMTP
сервисный адрес отправителя электронной почты.
smtpServer
Истинно
строка
Он используется для указания адреса электронной почты отправителя электронной почты.
smtpUsername (имя пользователя)
Истинно
строка
ВSMTP
пароль для почтового ящика отправителя электронной почты.
smtpPassword (пароль)
Истинно
строка
Используется для указания адреса электронной почты получателя электронной почты.
mailTo
Истинно
строка
Заголовок электронной почты.
Заголовок
Истинно
строка
Корпус почты.
тело
Истинно
строка
function main() {
var r1 = Mail_Go("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
var r2 = Mail_Go("smtp.163.com", "asdf@163.com", "password", "111@163.com", "title", "body")
var ret1 = r1.wait()
var ret2 = r2.wait()
Log("ret1:", ret1)
Log("ret2:", ret2)
}
# Not supported.
// Not supported.
Это не работает в системе обратного тестирования.
{@fun/Global/Mail Mail} Я не знаю.
Профиль ошибок.
УстановитеErrorFilter (фильтр)
Регулярная строка выражений. фильтры неправда строка
function main() {
SetErrorFilter("502:|503:|tcp|character|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF|reused")
}
def main():
SetErrorFilter("502:|503:|tcp|character|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF|reused")
void main() {
SetErrorFilter("502:|503:|tcp|character|unexpected|network|timeout|WSARecv|Connect|GetAddr|no such|reset|http|received|EOF|reused");
}
Фильтрация распространенных ошибок.
function main() {
// A random query for a non-existent order with an id of 123, allowing the interface to report an error deliberately
var order = exchange.GetOrder("123")
Log(order)
// Filter http502 errors, GetOrder interface errors, after setting the error filter, the second call to GetOrder will no longer report errors
SetErrorFilter("502:|GetOrder")
order = exchange.GetOrder("123")
Log(order)
}
def main():
order = exchange.GetOrder("123")
Log(order)
SetErrorFilter("502:|GetOrder")
order = exchange.GetOrder("123")
Log(order)
void main() {
TId orderId;
Order order = exchange.GetOrder(orderId);
Log(order);
SetErrorFilter("502:|GetOrder");
order = exchange.GetOrder(orderId);
Log(order);
}
Отфильтровать сообщение об ошибке интерфейса.
Регистрации ошибок, совпадающие с этим регулярным выражением, не будут загружены в систему журналов. Вы можете вызвать его несколько раз (без ограничения на количество раз), чтобы установить несколько условий фильтра. Регулярные выражения, установленные несколько раз, будут накапливаться и вступать в силу одновременно. Вы можете установить пустую строку для сброса регулярного выражения, используемого для фильтрации журналов ошибок:SetErrorFilter("")
Фильтрованные журналы больше не записываются в файл базы данных, соответствующий идентификатору торговли в каталоге Docker, чтобы предотвратить частое сообщение об ошибках от раздутия файла базы данных.
Получите идентификатор торгового процесса.
Возвращение идентификатора торгового процесса. строка
GetPid ((()
function main(){
var id = GetPid()
Log(id)
}
def main():
id = GetPid()
Log(id)
void main() {
auto id = GetPid();
Log(id);
}
Получил последнее сообщение об ошибке.
Последнее сообщение об ошибке. строка
ПолучитьLastError()
function main(){
// Because the order number 123 does not exist, so there will be an error.
exchange.GetOrder("123")
var error = GetLastError()
Log(error)
}
def main():
exchange.GetOrder("123")
error = GetLastError()
Log(error)
void main() {
// Order ID type: TId, so you can't pass in a string, we place an order that doesn't meet the exchange specification to trigger
exchange.GetOrder(exchange.Buy(1, 1));
auto error = GetLastError();
Log(error);
}
Это не работает в системе обратного тестирования.
Получает команду стратегического взаимодействия.
Формат возвращенной команды:ControlName:Data
. ControlName
это название контрольного элемента, иData
Если интерактивный элемент управления не имеет входных ящиков, выпадающих ящиков и других компонентов (например, кнопка управления без входных ящиков), то возвращенный формат командыControlName
, который возвращает только название элемента управления.
строка
Получить команду ((()
function main(){
while(true) {
var cmd = GetCommand()
if (cmd) {
Log(cmd)
}
Sleep(1000)
}
}
def main():
while True:
cmd = GetCommand()
if cmd:
Log(cmd)
Sleep(1000)
void main() {
while(true) {
auto cmd = GetCommand();
if(cmd != "") {
Log(cmd);
}
Sleep(1000);
}
}
Выявляет команду взаимодействия и используетLog
Функция вывода команды взаимодействия при ее обнаружении.
function main() {
while (true) {
LogStatus(_D())
var cmd = GetCommand()
if (cmd) {
Log("cmd:", cmd)
var arr = cmd.split(":")
if (arr[0] == "buy") {
Log("Buy, the control without number")
} else if (arr[0] == "sell") {
Log("Sell, the control with the number of:", arr[1])
} else {
Log("Other controls trigger:", arr)
}
}
Sleep(1000)
}
}
def main():
while True:
LogStatus(_D())
cmd = GetCommand()
if cmd:
Log("cmd:", cmd)
arr = cmd.split(":")
if arr[0] == "buy":
Log("Buy, the control without number")
elif arr[0] == "sell":
Log("Sell, the control with the number of:", arr[1])
else:
Log("Other controls trigger:", arr)
Sleep(1000)
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
void split(const string& s,vector<string>& sv,const char flag = ' ') {
sv.clear();
istringstream iss(s);
string temp;
while (getline(iss, temp, flag)) {
sv.push_back(temp);
}
return;
}
void main() {
while(true) {
LogStatus(_D());
auto cmd = GetCommand();
if (cmd != "") {
vector<string> arr;
split(cmd, arr, ':');
if(arr[0] == "buy") {
Log("Buy, the control without number");
} else if (arr[0] == "sell") {
Log("Sell, the control with the number of:", arr[1]);
} else {
Log("Other controls trigger:", arr);
}
}
Sleep(1000);
}
}
Например, стратегия интерактивного управления добавляет контроль без поля ввода, интерактивный контроль называется:buy
, информация о описании контроля:buy
Продолжайте добавлением элемента управления с окном ввода. Интерактивный элемент управления называется:sell
и сообщение о описании контроля:sell
Код взаимодействия разработан в стратегии для ответа на различные элементы управления взаимодействием:
Это не работает в системе обратного тестирования.
Получить значение мета написано при генерации кода регистрации стратегии.
Meta
данные.
строка
GetMeta ((()
function main() {
// The maximum asset value of the denominated currency allowed by the strategy.
var maxBaseCurrency = null
// Get the metadata when creating the registration code.
var level = GetMeta()
// Detecting the conditions corresponding to Meta.
if (level == "level1") {
// -1 for unrestricted
maxBaseCurrency = -1
} else if (level == "level2") {
maxBaseCurrency = 10
} else if (level == "level3") {
maxBaseCurrency = 1
} else {
maxBaseCurrency = 0.5
}
while(1) {
Sleep(1000)
var ticker = exchange.GetTicker()
// Detect asset values
var acc = exchange.GetAccount()
if (maxBaseCurrency != -1 && maxBaseCurrency < acc.Stocks + acc.FrozenStocks) {
// Stop executing strategy trading logic
LogStatus(_D(), "level:", level, "Positions exceeding the usage limit of the registration code will no longer execute the strategy trading logic!")
continue
}
// Other trading logic
// Normal output of status bar information
LogStatus(_D(), "level:", level, "The strategy is working properly! ticker data: \n", ticker)
}
}
def main():
maxBaseCurrency = null
level = GetMeta()
if level == "level1":
maxBaseCurrency = -1
elif level == "level2":
maxBaseCurrency = 10
elif level == "level3":
maxBaseCurrency = 1
else:
maxBaseCurrency = 0.5
while True:
Sleep(1000)
ticker = exchange.GetTicker()
acc = exchange.GetAccount()
if maxBaseCurrency != -1 and maxBaseCurrency < acc["Stocks"] + acc["FrozenStocks"]:
LogStatus(_D(), "level:", level, "Positions exceeding the usage limit of the registration code will no longer execute the strategy trading logic!")
continue
# Other trading logic
# Normal output of status bar information
LogStatus(_D(), "level:", level, "The strategy is working properly! ticker data: \n", ticker)
void main() {
auto maxBaseCurrency = 0.0;
auto level = GetMeta();
if (level == "level1") {
maxBaseCurrency = -1;
} else if (level == "level2") {
maxBaseCurrency = 10;
} else if (level == "level3") {
maxBaseCurrency = 1;
} else {
maxBaseCurrency = 0.5;
}
while(1) {
Sleep(1000);
auto ticker = exchange.GetTicker();
auto acc = exchange.GetAccount();
if (maxBaseCurrency != -1 && maxBaseCurrency < acc.Stocks + acc.FrozenStocks) {
// Stop execution strategy trading logic.
LogStatus(_D(), "level:", level, "Positions exceeding the usage limit of the registration code will no longer execute the strategy trading logic!");
continue;
}
// Other trading logic
// Normal output of status bar information
LogStatus(_D(), "level:", level, "The strategy is working properly! ticker data: \n", ticker);
}
}
Пример сценария применения: использованиеMeta
ограничить объем активов, которыми управляет стратегия.
Сценарий применения: необходимо сделать капитальные лимиты для разных стратегических арендаторов.Meta
значение, установленное при генерации регистрационного кода, не может превышать 190 символов, аGetMeta()
Если нет метаданных (Meta
) устанавливается при генерировании кода регистрации стратегии,GetMeta()
Функция возвращает null. Она не работает в системе обратного тестирования.
Для примитивныхSocket
Доступ, поддержкаtcp
, udp
, tls
, unix
Поддержка 4 популярных протоколов связи:mqtt
, nats
, amqp
, kafka
Поддержка подключения к базам данных:sqlite3
, mysql
, postgres
, clickhouse
.
ВDial()
Обычный вызов возвращает объект соединения, который имеет три метода:read
, write
иclose
.read
Для считывания данных используетсяwrite
С помощью этого метода передаются данные иclose
метод используется для закрытия соединения.
Вread
метод поддерживает следующие параметры:
ws.read()
.ws.read(2000)
указывает время задержки в две секунды (2000 миллисекунд).-1
означает, что функция возвращает сообщения немедленно, независимо от наличия или отсутствия сообщений, например:ws.read(-1)
- Да.
Передача параметра-2
означает, что функция возвращает сразу с сообщением или без него, но возвращается только последнее сообщение, а буферизированное сообщение отбрасывается.ws.read(-2)
.read()
описание буфера функции:
Входящие данные, отправляемые протоколом WebSocket, могут вызывать накопление данных, если временной интервал между стратегиейread()
Эти данные хранятся в буфере, который имеет структуру данных очереди с максимальным числом 2000.
Сценарий | Нет параметра | Параметр: -1 | Параметр: -2 | Параметр: 2000, в миллисекундах |
---|---|---|---|---|
Данные уже в буфере | Немедленно верните старые данные | Немедленно верните старые данные | Немедленно верните последние данные | Немедленно верните старые данные |
Нет данных в буфере | Возвращение при блокировке данных | Немедленно верните нуль | Немедленно верните нуль | Подождите 2000 мс, верните null, если нет данных, верните null, если есть данные |
Соединение WebSocket отключено или повторно подключено базовым | read() функция возвращает пустую строку, т.е.: |
объект
Выбрать адрес Назови (адрес, время выхода)
Адрес запроса. Адрес неправда строка секунды таймаута, Тайм-аут ложное Номер
function main(){
// Dial supports tcp://,udp://,tls://,unix://protocol, you can add a parameter to specify the number of seconds for the timeout
var client = Dial("tls://www.baidu.com:443")
if (client) {
// write can be followed by a numeric parameter to specify the timeout, write returns the number of bytes successfully sent
client.write("GET / HTTP/1.1\nConnection: Closed\n\n")
while (true) {
// read can be followed by a numeric parameter specifying the timeout in milliseconds. Returning null indicates an error or timeout or that the socket has been closed
var buf = client.read()
if (!buf) {
break
}
Log(buf)
}
client.close()
}
}
def main():
client = Dial("tls://www.baidu.com:443")
if client:
client.write("GET / HTTP/1.1\nConnection: Closed\n\n")
while True:
buf = client.read()
if not buf:
break
Log(buf)
client.close()
void main() {
auto client = Dial("tls://www.baidu.com:443");
if(client.Valid) {
client.write("GET / HTTP/1.1\nConnection: Closed\n\n");
while(true) {
auto buf = client.read();
if(buf == "") {
break;
}
Log(buf);
}
client.close();
}
}
Пример вызова функции Dial:
function main() {
LogStatus("Connecting...")
// Accessing WebSocket interface of Binance
var client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")
if (!client) {
Log("Connection failed, program exited")
return
}
while (true) {
// read returns only the data retrieved after the read call
var buf = client.read()
if (!buf) {
break
}
var table = {
type: 'table',
title: 'Ticker Chart',
cols: ['Currency', 'Highest', 'Lowest', 'Buy 1', 'Sell 1', 'Last traded price', 'Volume', 'Update time'],
rows: []
}
var obj = JSON.parse(buf)
_.each(obj, function(ticker) {
table.rows.push([ticker.s, ticker.h, ticker.l, ticker.b, ticker.a, ticker.c, ticker.q, _D(ticker.E)])
})
LogStatus('`' + JSON.stringify(table) + '`')
}
client.close()
}
import json
def main():
LogStatus("Connecting...")
client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr")
if not client:
Log("Connection failed, program exited")
return
while True:
buf = client.read()
if not buf:
break
table = {
"type" : "table",
"title" : "Ticker Chart",
"cols" : ['Currency', 'Highest', 'Lowest', 'Buy 1', 'Sell 1', 'Last traded price', 'Volume', 'Update time'],
"rows" : []
}
obj = json.loads(buf)
for i in range(len(obj)):
table["rows"].append([obj[i]["s"], obj[i]["h"], obj[i]["l"], obj[i]["b"], obj[i]["a"], obj[i]["c"], obj[i]["q"], _D(int(obj[i]["E"]))])
LogStatus('`' + json.dumps(table) + '`')
client.close()
void main() {
LogStatus("Connecting...");
auto client = Dial("wss://stream.binance.com:9443/ws/!ticker@arr");
if(!client.Valid) {
Log("Connection failed, program exited");
return;
}
while(true) {
auto buf = client.read();
if(buf == "") {
break;
}
json table = R"({
"type" : "table",
"title" : "Ticker Chart",
"cols" : ["Currency", "Highest", "Lowest", "Buy 1", "Sell 1", "Last traded price", "Volume", "Update time"],
"rows" : []
})"_json;
json obj = json::parse(buf);
for(auto& ele : obj.items()) {
table["rows"].push_back({ele.value()["s"], ele.value()["h"], ele.value()["l"], ele.value()["b"], ele.value()["a"], ele.value()["c"],
ele.value()["q"], _D(ele.value()["E"])});
}
LogStatus("`" + table.dump() + "`");
}
client.close();
}
Для доступа к интерфейсу WebSocket Binance:
var ws = null
function main(){
var param = {
"op": "subscribe",
"args": [{
"channel": "tickers",
"instId": "BTC-USDT"
}]
}
// When calling Dial function, specify reconnect=true to set reconnection mode and payload to be the message sent when reconnecting. When the WebSocket connection is disconnected, it will reconnect and send messages automatically.
ws = Dial("wss://ws.okx.com:8443/ws/v5/public|compress=gzip_raw&mode=recv&reconnect=true&payload="+ JSON.stringify(param))
if(ws){
var pingCyc = 1000 * 20
var lastPingTime = new Date().getTime()
while(true){
var nowTime = new Date().getTime()
var ret = ws.read()
Log("ret:", ret)
if(nowTime - lastPingTime > pingCyc){
var retPing = ws.write("ping")
lastPingTime = nowTime
Log("Send : ping", "#FF0000")
}
LogStatus("Current time:", _D())
Sleep(1000)
}
}
}
function onexit() {
ws.close()
Log("exit")
}
import json
import time
ws = None
def main():
global ws
param = {
"op": "subscribe",
"args": [{
"channel": "tickers",
"instId": "BTC-USDT"
}]
}
ws = Dial("wss://ws.okx.com:8443/ws/v5/public|compress=gzip_raw&mode=recv&reconnect=true&payload=" + json.dumps(param))
if ws:
pingCyc = 1000 * 20
lastPingTime = time.time() * 1000
while True:
nowTime = time.time() * 1000
ret = ws.read()
Log("ret:", ret)
if nowTime - lastPingTime > pingCyc:
retPing = ws.write("ping")
lastPingTime = nowTime
Log("Send: ping", "#FF0000")
LogStatus("Current time:", _D())
Sleep(1000)
def onexit():
ws.close()
Log("exit")
auto objWS = Dial("wss://ws.okx.com:8443/ws/v5/public|compress=gzip_raw&mode=recv&reconnect=true");
void main() {
json param = R"({
"op": "subscribe",
"args": [{
"channel": "tickers",
"instId": "BTC-USDT"
}]
})"_json;
objWS.write(param.dump());
if(objWS.Valid) {
uint64_t pingCyc = 1000 * 20;
uint64_t lastPingTime = Unix() * 1000;
while(true) {
uint64_t nowTime = Unix() * 1000;
auto ret = objWS.read();
Log("ret:", ret);
if(nowTime - lastPingTime > pingCyc) {
auto retPing = objWS.write("ping");
lastPingTime = nowTime;
Log("Send: ping", "#FF0000");
}
LogStatus("Current time:", _D());
Sleep(1000);
}
}
}
void onexit() {
objWS.close();
Log("exit");
}
Доступ к интерфейсу OKX
var ws = null
function main(){
var param = {"sub": "market.btcusdt.detail", "id": "id1"}
ws = Dial("wss://api.huobi.pro/ws|compress=gzip&mode=recv&reconnect=true&payload="+ JSON.stringify(param))
if(ws){
while(1){
var ret = ws.read()
Log("ret:", ret)
// Respond to heartbeat packet operations
try {
var jsonRet = JSON.parse(ret)
if(typeof(jsonRet.ping) == "number") {
var strPong = JSON.stringify({"pong" : jsonRet.ping})
ws.write(strPong)
Log("Respond to ping, send pong:", strPong, "#FF0000")
}
} catch(e) {
Log("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
}
LogStatus("Current time:", _D())
Sleep(1000)
}
}
}
function onexit() {
ws.close()
Log("Execute the ws.close() function")
}
import json
ws = None
def main():
global ws
param = {"sub" : "market.btcusdt.detail", "id" : "id1"}
ws = Dial("wss://api.huobi.pro/ws|compress=gzip&mode=recv&reconnect=true&payload=" + json.dumps(param))
if ws:
while True:
ret = ws.read()
Log("ret:", ret)
# Respond to heartbeat packet operations
try:
jsonRet = json.loads(ret)
if "ping" in jsonRet and type(jsonRet["ping"]) == int:
strPong = json.dumps({"pong" : jsonRet["ping"]})
ws.write(strPong)
Log("Respond to ping, send pong:", strPong, "#FF0000")
except Exception as e:
Log("e:", e)
LogStatus("Current time:", _D())
Sleep(1000)
def onexit():
ws.close()
Log("Execute the ws.close() function")
using namespace std;
void main() {
json param = R"({"sub" : "market.btcusdt.detail", "id" : "id1"})"_json;
auto ws = Dial("wss://api.huobi.pro/ws|compress=gzip&mode=recv&reconnect=true&payload=" + param.dump());
if(ws.Valid) {
while(true) {
auto ret = ws.read();
Log("ret:", ret);
// Respond to heartbeat packet operations
try
{
auto jsonRet = json::parse(ret);
if(jsonRet["ping"].is_number()) {
json pong = R"({"pong" : 0})"_json;
pong["pong"] = jsonRet["ping"];
auto strPong = pong.dump();
ws.write(strPong);
Log("Respond to ping, send pong:", strPong, "#FF0000");
}
} catch(exception &e)
{
Log("e:", e.what());
}
LogStatus("Current time:", _D());
Sleep(1000);
}
}
}
void onexit() {
// ws.close();
Log("Execute the ws.close() function");
}
Доступ к интерфейсу Huobi's WebSocket:
function getLogin(pAccessKey, pSecretKey, pPassphrase) {
// Signature function for login
var ts = (new Date().getTime() / 1000).toString()
var login = {
"op": "login",
"args":[{
"apiKey" : pAccessKey,
"passphrase" : pPassphrase,
"timestamp" : ts,
"sign" : exchange.HMAC("sha256", "base64", ts + "GET" + "/users/self/verify", pSecretKey) // exchange.HMAC has been deprecated and is temporarily supported. Please use the latest exchange.Encode function instead.
}]
}
return login
}
var client_private = null
function main() {
// Because the read function uses a timeout setting, filtering the timeout reports errors that would otherwise be output with redundant errors
SetErrorFilter("timeout")
// Position channel subscription information
var posSubscribe = {
"op": "subscribe",
"args": [{
"channel": "positions",
"instType": "ANY"
}]
}
var accessKey = "xxx"
var secretKey = "xxx"
var passphrase = "xxx"
client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
client_private.write(JSON.stringify(getLogin(accessKey, secretKey, passphrase)))
Sleep(3000) // When logging in, you cannot subscribe to private channels immediately, you need to wait for server response
client_private.write(JSON.stringify(posSubscribe))
if (client_private) {
var lastPingTS = new Date().getTime()
while (true) {
var buf = client_private.read(-1)
if (buf) {
Log(buf)
}
// Detect disconnection, reconnect
if (buf == "" && client_private.write(JSON.stringify(posSubscribe)) == 0) {
Log("Disconnection detected, close connection, reconnect")
client_private.close()
client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
client_private.write(JSON.stringify(getLogin(accessKey, secretKey, passphrase)))
Sleep(3000)
client_private.write(JSON.stringify(posSubscribe))
}
// Send heartbeat packets
var nowPingTS = new Date().getTime()
if (nowPingTS - lastPingTS > 10 * 1000) {
client_private.write("ping")
lastPingTS = nowPingTS
}
}
}
}
function onexit() {
var ret = client_private.close()
Log("Close the connection!", ret)
}
import json
import time
def getLogin(pAccessKey, pSecretKey, pPassphrase):
ts = str(time.time())
login = {
"op": "login",
"args":[{
"apiKey" : pAccessKey,
"passphrase" : pPassphrase,
"timestamp" : ts,
"sign" : exchange.HMAC("sha256", "base64", ts + "GET" + "/users/self/verify", pSecretKey)
}]
}
return login
client_private = None
def main():
global client_private
SetErrorFilter("timeout")
posSubscribe = {
"op": "subscribe",
"args": [{
"channel": "positions",
"instType": "ANY"
}]
}
accessKey = "xxx"
secretKey = "xxx"
passphrase = "xxx"
client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
client_private.write(json.dumps(getLogin(accessKey, secretKey, passphrase)))
Sleep(3000)
client_private.write(json.dumps(posSubscribe))
if client_private:
lastPingTS = time.time() * 1000
while True:
buf = client_private.read(-1)
if buf:
Log(buf)
if buf == "" and client_private.write(json.dumps(posSubscribe)) == 0:
Log("Disconnection detected, close connection, reconnect")
ret = client_private.close()
client_private = Dial("wss://ws.okx.com:8443/ws/v5/private")
client_private.write(json.dumps(getLogin(accessKey, secretKey, passphrase)))
Sleep(3000)
client_private.write(json.dumps(posSubscribe))
nowPingTS = time.time() * 1000
if nowPingTS - lastPingTS > 10 * 1000:
client_private.write("ping")
lastPingTS = nowPingTS
def onexit():
ret = client_private.close()
Log("Close the connection!", ret)
auto client_private = Dial("wss://ws.okx.com:8443/ws/v5/private");
json getLogin(string pAccessKey, string pSecretKey, string pPassphrase) {
auto ts = std::to_string(Unix());
json login = R"({
"op": "login",
"args": [{
"apiKey": "",
"passphrase": "",
"timestamp": "",
"sign": ""
}]
})"_json;
login["args"][0]["apiKey"] = pAccessKey;
login["args"][0]["passphrase"] = pPassphrase;
login["args"][0]["timestamp"] = ts;
login["args"][0]["sign"] = exchange.HMAC("sha256", "base64", ts + "GET" + "/users/self/verify", pSecretKey);
return login;
}
void main() {
SetErrorFilter("timeout");
json posSubscribe = R"({
"op": "subscribe",
"args": [{
"channel": "positions",
"instType": "ANY"
}]
})"_json;
auto accessKey = "xxx";
auto secretKey = "xxx";
auto passphrase = "xxx";
client_private.write(getLogin(accessKey, secretKey, passphrase).dump());
Sleep(3000);
client_private.write(posSubscribe.dump());
if (client_private.Valid) {
uint64_t lastPingTS = Unix() * 1000;
while (true) {
auto buf = client_private.read(-1);
if (buf != "") {
Log(buf);
}
if (buf == "") {
if (client_private.write(posSubscribe.dump()) == 0) {
Log("Disconnection detected, close connection, reconnect");
client_private.close();
client_private = Dial("wss://ws.okx.com:8443/ws/v5/private");
client_private.write(getLogin(accessKey, secretKey, passphrase).dump());
Sleep(3000);
client_private.write(posSubscribe.dump());
}
}
uint64_t nowPingTS = Unix() * 1000;
if (nowPingTS - lastPingTS > 10 * 1000) {
client_private.write("ping");
lastPingTS = nowPingTS;
}
}
}
}
void onexit() {
client_private.close();
Log("exit");
}
Для доступа к интерфейсу аутентификации WebSocket OKX
var client = null
function main() {
// client = Dial("sqlite3://:memory:") // Using an in-memory database
client = Dial("sqlite3://test1.db") // Open/connect to the database file in the docker's directory
// record handle
var sqlite3Handle = client.fd()
Log("sqlite3Handle:", sqlite3Handle)
// Querying tables in the database
var ret = client.exec("SELECT name FROM sqlite_master WHERE type='table'")
Log(ret)
}
function onexit() {
Log("Execute client.close()")
client.close()
}
// Not supported
// Not supported
Объект соединения, возвращаемый функцией Dial при подключении к базе данных, имеет две уникальные для него функции метода:
exec(sqlString)
: Используется для выполнения SQL заявлений таким же образом, какDBExec()
function.fd()
:fd()
функция возвращает ручку (например, переменная ручка является рукой), которая будет использоваться другими потоками для повторного подключения (даже если объект, созданный Dial, уже был закрыт при исполненииclose()
с функцией закрытия соединения) путем прохождения ручки вDial()
функция, например,Dial(handle)
Подключение для повторного использования.
Ниже приведен пример функции Dial, соединяющейsqlite3
database.Подробная информацияaddress
параметр, разделенный|
символ после обычного адреса:wss://ws.okx.com:8443/ws/v5/public
Если есть.|
символы в строке параметров, затем||
Часть после этого - некоторые параметры параметров функции, и каждый параметр связан с&
Например,ss5
параметры прокси и сжатия могут быть установлены вместе следующим образом:Dial("wss://ws.okx.com:8443/ws/v5/public|proxy=socks5://xxx:9999&compress=gzip_raw&mode=recv")
Функции, поддерживаемые параметром адреса функции Dial | Описание параметров |
---|---|
Параметры, связанные с сжатием данных протокола WebSocket: compress=value parameter | compress - это метод сжатия, параметры сжатия: gzip_raw, gzip и т. д. Если метод gzip не является стандартным gzip, вы можете использовать расширенный метод: gzip_raw |
Параметры, относящиеся к сжатию данных протокола WebSocket: mode=value parameter | режим - это режим сжатия, параметр режима может быть двойным, отправка, recv. dual - это двустороннее сжатие, отправка сжатых данных, прием сжатых данных. отправка - это отправка сжатых данных. recv - это прием сжатых данных, локальная декомпрессия. |
Протокол WebSocket устанавливает базовые параметры, связанные с автоматическим воссоединением: reconnect=значение параметра | reconnect означает установить reconnect, reconnect=true означает включить reconnect. По умолчанию reconnect отсутствует, если этот параметр не установлен. |
Протокол WebSocket устанавливает базовые параметры, связанные с автоматическим воссоединением: interval=value parameter | интервал - это интервал повторных попыток, в миллисекундах, интервал=10000 - это интервал повторных попыток 10 секунд, по умолчанию 1 секунда, когда он не установлен, то есть интервал=1000. |
Протокол WebSocket устанавливает базовые параметры, связанные с автоматическим воссоединением: полезная нагрузка=значение параметра | полезная нагрузка - это сообщение подписки, которое необходимо отправить при повторном подключении WebSocket, например: полезная нагрузка=okokok. |
Параметры, относящиеся к носкам5 прокси: proxy=значение параметра | Прокси - это настройка прокси ss5, формат значения параметра: socks5://name:pwd@192.168.0.1:1080, имя - это имя пользователя сервера ss5, pwd - это пароль входа на сервер ss5, 1080 - это порт службы ss5. |
ВDial()
Функция поддерживается только для торговли в реальном времени.
При подключении к базе данных с помощью функции Dial строка подключения записывается со ссылкой на проект драйвера языка go для каждой базы данных.
Базы данных поддерживаются | Движущие проекты | Соединительная строка | Примечания |
---|---|---|---|
Склайт3 | github.com/mattn/go-sqlite3 | sqlite3://файл:test.db?cache=shared&mode=memory | Вsqlite3:// Префикс указывает, что используется база данных sqlite3, пример вызова:Dial("sqlite3://test1.db") |
mysql | github.com/go-sql-driver/mysql | mysql://username:yourpassword@tcp(localhost:3306)/yourdatabase?charset=utf8mb4 | – |
послерост | github.com/lib/pq | postgres://user=postgres dbname=yourdatabase sslmode=disable password=yourpassword host=localhost port=5432 | – |
Кликхаус | github.com/ClickHouse/clickhouse-go | clickhouse://tcp://host:9000?username=username&password=yourpassword&database=youdatabase | – |
Пожалуйста, обратите внимание, что когдаpayload
содержание, установленное вaddress
параметр содержит символы=
или других специальных символов, это может повлиять на анализaddress
параметрDial
функция, например следующий пример.
Пример вызова частного интерфейса websocket backPack Exchange:
var client = null
function main() {
// Base64-encoded public key of the key pair, i.e. the access key configured on FMZ
var base64ApiKey = "xxx"
var ts = String(new Date().getTime())
var data = "instruction=subscribe×tamp=" + ts + "&window=5000"
// Since signEd25519 returns a base64 encoding, it contains the character "="
var signature = signEd25519(data)
// The payload may contain the character "=" after being encoded by JSON
payload = {
"method": "SUBSCRIBE",
"params": ["account.orderUpdate"],
"signature": [base64ApiKey, signature, ts, "5000"]
}
client = Dial("wss://ws.backpack.exchange")
client.write(JSON.stringify(payload))
if (!client) {
Log("Connection failed, program exited")
return
}
while (true) {
var buf = client.read()
Log(buf)
}
}
function onexit() {
client.close()
}
function signEd25519(data) {
return exchange.Encode("ed25519.seed", "raw", "base64", data, "base64", "{{secretkey}}")
}
Следующий вызов в коде работает нормально:
client = Dial("wss://ws.backpack.exchange")
client.write(JSON.stringify(payload))
Если вы напишете это прямо вpayload
, он будет работать неправильно, например:
client = Dial("wss://ws.backpack.exchange|payload=" + JSON.stringify(payload))
В настоящее время только JavaScript поддерживает использованиеmqtt
, nats
, amqp
, иkafka
Код стратегии языка JavaScript используется в качестве примера, чтобы показать использование четырех протоколов:mqtt
, nats
, amqp
, иkafka
:
// We need to configure and deploy proxy servers for each protocol first.
// For the sake of demonstration, the subscription (read operation) and publishing (write operation) of the topic test_topic are all performed in the current strategy.
var arrConn = []
var arrName = []
function main() {
LogReset(1)
conn_nats = Dial("nats://admin@127.0.0.1:4222?topic=test_topic")
conn_mqtt = Dial("mqtt://127.0.0.1:1883?topic=test_topic")
conn_amqp = Dial("amqp://q:admin@127.0.0.1:5672/?queue=test_Queue")
conn_kafka = Dial("kafka://localhost:9092/test_topic")
arrConn = [conn_nats, conn_amqp, conn_mqtt, conn_kafka]
arrName = ["nats", "amqp", "mqtt", "kafka"]
while (true) {
for (var i in arrConn) {
var conn = arrConn[i]
var name = arrName[i]
// Write data
conn.write(name + ", time: " + _D() + ", test msg.")
// Read data
var readMsg = conn.read(1000)
Log(name + " readMsg: ", readMsg, "#FF0000")
}
Sleep(1000)
}
}
function onexit() {
for (var i in arrConn) {
arrConn[i].close()
Log("close", arrName[i], "connect")
}
}
Подробная документация:Исследование FMZ: Практика протокола связи между стратегиями торговли в режиме реального времени
Отправьте запрос на http.
Возвращает данные ответа запроса.JSON
string, он может быть проанализированJSON.parse()
Функция вJavaScript
языковой стратегии,json::parse()
Функция вC++
Если в структуре опций значение отладки установлено на true, возвращаемое значение является объектом (JSON); если значение отладки установлено на false, возвращаемое значение является строкой.
строка, объект
HttpQuery ((url) HttpQuery ((url, параметры)
URL-адрес запроса HTTP. URL-адрес Истинно строка Например, настройки, связанные с запросом HTTP, могут быть структурированы следующим образом:
{
method: "POST",
body: "a=10&b=20&c=30",
charset: "UTF-8",
cookie: "session_id=12345; lang=en",
profile: "chrome_103",
debug: false,
headers: {"TEST-HTTP-QUERY": "123"},
timeout: 1000
}
tls
Отпечатки пальцев.
Поддерживаемые настройки включают следующие параметры:
chrome_:"chrome_103"
, "chrome_104"
, "chrome_105"
, "chrome_106"
, "chrome_107"
, "chrome_108"
, "chrome_109"
, "chrome_110"
, "chrome_111"
, "chrome_112"
, "chrome_117"
...
Сафари:"safari_15_6_1"
, "safari_16_0"
, "safari_ipad_15_6"
, "safari_ios_15_5"
, "safari_ios_15_6"
, "safari_ios_16_0"
...
Firefox_:"firefox_102"
, "firefox_104"
, "firefox_105"
, "firefox_106"
, "firefox_108"
, "firefox_110"
, "firefox_117"
...
опера_:"opera_89"
, "opera_90"
, "opera_91"
...
Заландо:"zalando_android_mobile"
, "zalando_ios_mobile"
...
Ники."nike_ios_mobile"
, "nike_android_mobile"
...
Облакостроитель:"cloudscraper"
...
Мммм."mms_ios"
...
mesh_:"mesh_ios"
, "mesh_ios_1"
, "mesh_ios_2"
, "mesh_android"
, "mesh_android_1"
, "mesh_android_2"
...
Подтверждение:"confirmed_ios"
, "confirmed_android"
...
Хорошо."okhttp4_android_7"
, "okhttp4_android_8"
, "okhttp4_android_9"
, "okhttp4_android_10"
, "okhttp4_android_11"
, "okhttp4_android_12"
, "okhttp4_android_13"
,true
,HttpQuery
Призыв функции возвращает полное сообщение ответа.false
, только данные вBody
сообщения ответа возвращается.profile
поле может быть оставлено в стороне.варианты ложное объект
function main(){
// An example of GET access without parameters
var info = JSON.parse(HttpQuery("https://www.okx.com/api/v5/public/time"))
Log(info)
// An example of GET access with parameters
var ticker = JSON.parse(HttpQuery("https://www.okx.com/api/v5/market/books?instId=BTC-USDT"))
Log(ticker)
}
import json
import urllib.request
def main():
# HttpQuery does not support Python, you can use the urllib/urllib2 library instead
info = json.loads(urllib.request.urlopen("https://www.okx.com/api/v5/public/time").read().decode('utf-8'))
Log(info)
ticker = json.loads(urllib.request.urlopen("https://www.okx.com/api/v5/market/books?instId=BTC-USDT").read().decode('utf-8'))
Log(ticker)
void main() {
auto info = json::parse(HttpQuery("https://www.okx.com/api/v5/public/time"));
Log(info);
auto ticker = json::parse(HttpQuery("https://www.okx.com/api/v5/market/books?instId=BTC-USDT"));
Log(ticker);
}
Пример доступа к интерфейсу API публичного тикера OKX.
function main() {
// Setting proxy and sending an http request for this time, no username, no password, this http request will be sent through the proxy
HttpQuery("socks5://127.0.0.1:8889/http://www.baidu.com/")
// Setting proxy and sending an http request for this time, enter the user name and password, only the current call to HttpQuery takes effect, and then call HttpQuery again ("http://www.baidu.com") so that the proxy will not be used.
HttpQuery("socks5://username:password@127.0.0.1:8889/http://www.baidu.com/")
}
# HttpQuery does not support Python, you can use the urllib/urllib2 library instead
void main() {
HttpQuery("socks5://127.0.0.1:8889/http://www.baidu.com/");
HttpQuery("socks5://username:password@127.0.0.1:8889/http://www.baidu.com/");
}
Функция HttpQuery использует настройки прокси.
ВHttpQuery()
Функция поддерживает толькоJavaScript
, C++
язык,Python
язык может использоватьurllib
Библиотека для отправки запросов Http напрямую.HttpQuery()
используется в основном для доступа к интерфейсам биржи, которые не требуют подписи, например, общедоступным интерфейсам, таким как информация о тикерах.HttpQuery()
может использоваться в системе обратного тестирования для отправки запросов (толькоGET
Для получения данных, используемые в рамках реактестирования, используется 20 посещений различныхURLs
, иHttpQuery()
Когда те же самыеURL
Второй раз,HttpQuery()
Функция возвращает кэшированные данные, и больше не возникает фактических сетевых запросов.
{@fun/Global/HttpQuery_Go]
Отправляет запрос HTTP, асинхронную версиюHttpQuery
function.
ВHttpQuery_Go()
Функция немедленно возвращает одновременный объект, который может быть использован для получения результата запроса HTTP с использованиемwait
МетодJSON.parse()
Функция может быть использована для анализаJSON.parse()
Функция вJavaScript
языковой стратегии.
объект
HttpQuery_Go ((url) HttpQuery_Go ((url, параметры)
URL-адрес запроса HTTP. URL-адрес Истинно строка Например, настройки, связанные с запросом HTTP, могут быть структурированы следующим образом:
{
method: "POST",
body: "a=10&b=20&c=30",
charset: "UTF-8",
cookie: "session_id=12345; lang=en",
// profile: "",
debug: false,
headers: {"TEST-HTTP-QUERY": "123"},
timeout: 1000
}
tls
fingerprints.true
, этоHttpQuery_Go
Призыв функции возвращает полное сообщение ответа.false
, только данные вBody
сообщения ответа возвращается.profile
поле может быть оставлено в стороне.варианты ложное объект
function main() {
// Create the first asynchronous thread
var r1 = HttpQuery_Go("https://www.okx.com/api/v5/market/tickers?instType=SPOT")
// Create the second asynchronous thread
var r2 = HttpQuery_Go("https://api.huobi.pro/market/tickers")
// Get the return value of the first asynchronous thread call
var tickers1 = r1.wait()
// Get the return value of the second asynchronous thread call
var tickers2 = r2.wait()
// Print results
Log("tickers1:", tickers1)
Log("tickers2:", tickers2)
}
# Not supported
// Not supported
Асинхронный доступ к общественному интерфейсу биржи для агрегированных данных тикеров.
ВHttpQuery_Go()
Функция поддерживает толькоJavaScript
,Python
язык может быть использован сurllib
Библиотека для отправки запросов Http напрямую.HttpQuery_Go()
используется в основном для доступа к интерфейсам, которые не требуют подписи на бирже, таким как общедоступные интерфейсы, такие как информация о тикерах.HttpQuery_Go
Функция не поддерживается системой обратного тестирования.
{@fun/Global/HttpQuery HttpQuery} (См. также:
Эта функция кодирует данные в соответствии с введенными параметрами.
ВEncode
функция возвращает данные после кодирования и шифрования.
строка
Зашифровка ((algo, inputFormat, outputFormat, data) Зашифровка ((algo, inputFormat, outputFormat, data, keyФормат, ключ)
Параметрalgo
- алгоритм, используемый при расчете кодирования.raw
(не используется алгоритм), "знак", algo
также поддерживает: algo
также поддерживает: алгоритм algo
может быть написано как ed25519.seed
расчеты.
что-то
неправда
строка
Используется для определения формата данныхdata
параметр.inputFormat
параметр может быть установлен как один из следующих:raw
, hex
, base64
, string
. hex
base64
кодируется, и outputFormat
параметр может быть установлен как один из следующих:raw
, hex
, base64
, string
. hex
base64
кодируется, и data
это данные, которые должны быть обработаны.
данные
неправда
строка
Используется для определения формата данныхkey
параметр.key
параметр может быть установлен как один из следующих:raw
, hex
, base64
, string
. hex
base64
кодируется, и key
секретный ключ, используемый дляHMAC
Параметрkey
требуется, когда параметрalgo
Установлено наsign
илиsignTx
.key
параметр не используется дляHMAC
шифрование, когдаalgo
параметр установлен на
function main() {
Log(Encode("raw", "raw", "hex", "example", "raw", "123")) // 6578616d706c65
Log(Encode("raw", "raw", "hex", "example")) // 6578616d706c65
Log(Encode("sha256", "raw", "hex", "example", "raw", "123")) // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
Log(Encode("sha256", "raw", "hex", "example", "", "123")) // 50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c
Log(Encode("sha256", "raw", "hex", "example", null, "123")) // 50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c
Log(Encode("sha256", "raw", "hex", "example", "string", "123")) // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
Log(Encode("raw", "raw", "hex", "123")) // 313233
Log(Encode("raw", "raw", "base64", "123")) // MTIz
Log(Encode("sha256", "raw", "hex", "example", "hex", "313233")) // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
Log(Encode("sha256", "raw", "hex", "example", "base64", "MTIz")) // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
}
def main():
Log(Encode("raw", "raw", "hex", "example", "raw", "123")) # 6578616d706c65
Log(Encode("raw", "raw", "hex", "example", "", "")) # 6578616d706c65
Log(Encode("sha256", "raw", "hex", "example", "raw", "123")) # 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
Log(Encode("sha256", "raw", "hex", "example", "", "123")) # 50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c
Log(Encode("sha256", "raw", "hex", "example", "string", "123")) # 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
Log(Encode("raw", "raw", "hex", "123", "", "")) # 313233
Log(Encode("raw", "raw", "base64", "123", "", "")) # MTIz
Log(Encode("sha256", "raw", "hex", "example", "hex", "313233")) # 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
Log(Encode("sha256", "raw", "hex", "example", "base64", "MTIz")) # 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
void main() {
Log(Encode("raw", "raw", "hex", "example", "raw", "123")); // 6578616d706c65
Log(Encode("raw", "raw", "hex", "example")); // 6578616d706c65
Log(Encode("sha256", "raw", "hex", "example", "raw", "123")); // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
Log(Encode("sha256", "raw", "hex", "example", "", "123")); // 50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c
Log(Encode("sha256", "raw", "hex", "example", "string", "123")); // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
Log(Encode("raw", "raw", "hex", "123")); // 313233
Log(Encode("raw", "raw", "base64", "123")); // MTIz
Log(Encode("sha256", "raw", "hex", "example", "hex", "313233")); // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
Log(Encode("sha256", "raw", "hex", "example", "base64", "MTIz")); // 698d54f0494528a759f19c8e87a9f99e75a5881b9267ee3926bcf62c992d84ba
}
Пример вызова функции Encode.
function main(){
var ret1 = Encode("text.encoder.utf8", "raw", "hex", "hello") // e4bda0e5a5bd
Log(ret1)
var ret2 = Encode("text.decoder.utf8", "hex", "string", ret1)
Log(ret2)
var ret3 = Encode("text.encoder.gbk", "raw", "hex", "hello") // c4e3bac3
Log(ret3)
var ret4 = Encode("text.decoder.gbk", "hex", "string", ret3)
Log(ret4)
}
def main():
ret1 = Encode("text.encoder.utf8", "raw", "hex", "hello", "", "") # e4bda0e5a5bd
Log(ret1)
ret2 = Encode("text.decoder.utf8", "hex", "string", ret1, "", "")
Log(ret2)
ret3 = Encode("text.encoder.gbk", "raw", "hex", "hello", "", "") # c4e3bac3
Log(ret3)
ret4 = Encode("text.decoder.gbk", "hex", "string", ret3, "", "")
Log(ret4)
void main(){
auto ret1 = Encode("text.encoder.utf8", "raw", "hex", "hello"); // e4bda0e5a5bd
Log(ret1);
auto ret2 = Encode("text.decoder.utf8", "hex", "string", ret1);
Log(ret2);
auto ret3 = Encode("text.encoder.gbk", "raw", "hex", "hello"); // c4e3bac3
Log(ret3);
auto ret4 = Encode("text.decoder.gbk", "hex", "string", ret3);
Log(ret4);
}
Параметрalgo
также поддерживает:
ВEncode()
Функция поддерживается только для живой торговли.key
иkeyFormat
параметры не переданы, тоkey
шифрование не используется.
Получите наносекундную временную отметку текущего момента.
ВUnixNano()
Функция возвращает наносекундный временной штемпель.
Номер
UnixNano ((()
function main() {
var time = UnixNano() / 1000000
Log(_N(time, 0))
}
def main():
time = UnixNano()
Log(time)
void main() {
auto time = UnixNano();
Log(time);
}
Если вам нужно получить миллисекундные временные отметки, вы можете использовать следующий код:
{@fun/Global/Unix Unix}
Получите временную отметку текущего момента на втором уровне.
Возвращает временную отметку второго уровня. Номер
Unix ((()
function main() {
var t = Unix()
Log(t)
}
def main():
t = Unix()
Log(t)
void main() {
auto t = Unix();
Log(t);
}
{@fun/Global/UnixNano UnixNano} Я не знаю.
Получить информацию о устройстве, где расположен докер.
Информация о системе. строка
GetOS ((()
function main() {
Log("GetOS:", GetOS())
}
def main():
Log("GetOS:", GetOS())
void main() {
Log("GetOS:", GetOS());
}
Например, призыв кGetOS()
функция для докера, работающего наMac OSоперационная система может вернуть:darwin/amd64
Потому что компьютеры Apple имеют несколько аппаратных архитектур.darwin
это названиеMac OS system.
Вычисляет хеш MD5 параметраdata
.
Хэш-значение MD5. строка
MD5 (данные)
Данные, требующие вычисления MD5. данные неправда строка
function main() {
Log("MD5", MD5("hello world"))
}
def main():
Log("MD5", MD5("hello world"))
void main() {
Log("MD5", MD5("hello world"));
}
ЗвонитьMD5("hello world")
функция, возвращаемое значение:5eb63bbbe01eeed093cb22bb8f5acdc3
.
{@fun/Global/EncodeEncode} - Я не знаю.
Функции интерфейса базы данных.
Объект, содержащий результат выполнениякв. мзаявление, например:
{"columns":["TS","HIGH","OPEN","LOW","CLOSE","VOLUME"],"values":[[1518970320000,100,99.1,90,100,12345.6]]}
объект
DBExec ((sql)
кв. мстрока заявлений. кв. м неправда строка
function main() {
var strSql = [
":CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
].join("")
var ret = DBExec(strSql)
Log(ret)
// Add a piece of data
Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
// Query data
Log(DBExec(":SELECT * FROM TEST_TABLE;"))
}
def main():
arr = [
":CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
]
strSql = ""
for i in range(len(arr)):
strSql += arr[i]
ret = DBExec(strSql)
Log(ret)
# Add a piece of data
Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
# Query data
Log(DBExec(":SELECT * FROM TEST_TABLE;"))
void main() {
string strSql = ":CREATE TABLE TEST_TABLE(\
TS INT PRIMARY KEY NOT NULL,\
HIGH REAL NOT NULL,\
OPEN REAL NOT NULL,\
LOW REAL NOT NULL,\
CLOSE REAL NOT NULL,\
VOLUME REAL NOT NULL)";
auto ret = DBExec(strSql);
Log(ret);
// Add a piece of data
Log(DBExec(":INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"));
// Query data
Log(DBExec(":SELECT * FROM TEST_TABLE;"));
}
Поддержка базы данных в памяти дляDBExec
параметры функции, если:кв. мЗаявление начинается с:
Он подходит для операций с базами данных, которые не требуют постоянного сохранения, например:
function main() {
var strSql = [
"CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
].join("")
var ret = DBExec(strSql)
Log(ret)
}
def main():
arr = [
"CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
]
strSql = ""
for i in range(len(arr)):
strSql += arr[i]
ret = DBExec(strSql)
Log(ret)
void main() {
string strSql = "CREATE TABLE TEST_TABLE(\
TS INT PRIMARY KEY NOT NULL,\
HIGH REAL NOT NULL,\
OPEN REAL NOT NULL,\
LOW REAL NOT NULL,\
CLOSE REAL NOT NULL,\
VOLUME REAL NOT NULL)";
auto ret = DBExec(strSql);
Log(ret);
}
Создайте стол.
function main() {
var strSql = [
"CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
].join("")
Log(DBExec(strSql))
// Add a piece of data
Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
// Query data
Log(DBExec("SELECT * FROM TEST_TABLE;"))
// Modify data
Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000))
// Delete data
Log(DBExec("DELETE FROM TEST_TABLE WHERE HIGH=?", 110))
}
def main():
arr = [
"CREATE TABLE TEST_TABLE(",
"TS INT PRIMARY KEY NOT NULL,",
"HIGH REAL NOT NULL,",
"OPEN REAL NOT NULL,",
"LOW REAL NOT NULL,",
"CLOSE REAL NOT NULL,",
"VOLUME REAL NOT NULL)"
]
strSql = ""
for i in range(len(arr)):
strSql += arr[i]
Log(DBExec(strSql))
# Add a piece of data
Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"))
# Query data
Log(DBExec("SELECT * FROM TEST_TABLE;"))
# Modify data
Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000))
# Delete data
Log(DBExec("DELETE FROM TEST_TABLE WHERE HIGH=?", 110))
void main() {
string strSql = "CREATE TABLE TEST_TABLE(\
TS INT PRIMARY KEY NOT NULL,\
HIGH REAL NOT NULL,\
OPEN REAL NOT NULL,\
LOW REAL NOT NULL,\
CLOSE REAL NOT NULL,\
VOLUME REAL NOT NULL)";
Log(DBExec(strSql));
// Add a piece of data
Log(DBExec("INSERT INTO TEST_TABLE (TS, HIGH, OPEN, LOW, CLOSE, VOLUME) VALUES (1518970320000, 100, 99.1, 90, 100, 12345.6);"));
// Query data
Log(DBExec("SELECT * FROM TEST_TABLE;"));
// Modify data
Log(DBExec("UPDATE TEST_TABLE SET HIGH=? WHERE TS=?", 110, 1518970320000));
// Delete data
Log(DBExec("DELETE FROM TEST_TABLE WHERE HIGH=?", 110));
}
Добавить, удалить, проверить и изменить записи в таблице.
ФункцияDBExec()
может работать с базой данных торговли в режиме реального времени (SQLite database) путем передачи параметров.SQLiteСистема зарезервировала таблицы в базе данных торгов:kvdb
, cfg
, log
, profit
, chart
, не используйте эти столы.СделкиНе рекомендуется выполнять такие операции, которые могут вызвать конфликты в системе.DBExec()
Функция поддерживается только для торговли в режиме реального времени.
{@fun/Global/_G _G}
Создайте UUID.
32-разрядный UUID. строка
UUID (()
function main() {
var uuid1 = UUID()
var uuid2 = UUID()
Log(uuid1, uuid2)
}
def main():
uuid1 = UUID()
uuid2 = UUID()
Log(uuid1, uuid2)
void main() {
auto uuid1 = UUID();
auto uuid2 = UUID();
Log(uuid1, uuid2);
}
ВUUID()
Функция поддерживает только прямую торговлю.
Слушайте события, он возвращается, когда есть какие-либоWebSocket
читаемые данные или одновременные задачи, такие как:exchange.Go()
, HttpQuery_Go()
, и т. д. завершены.
Если возвращенный объект не является нулевым,Event
содержится в содержании возврата - тип запуска события. Например, следующая структура значения возврата:
{"Seq":1,"Event":"Exchange_GetTrades","ThreadId":0,"Index":3,"Nano":1682068771309583400}
объект
EventLoop ((() СобытиеLoop ((Timeout)
Параметрtimeout
это время выхода, в миллисекундах.timeout
ждет, пока событие произойдет, прежде чем вернется, если оно установлено на 0, если оно больше 0, оно устанавливает событие, чтобы ждать задержки, и возвращает самое последнее событие сразу, если оно меньше 0.
Тайм-аут
ложное
Номер
function main() {
var routine_getTicker = exchange.Go("GetTicker")
var routine_getDepth = exchange.Go("GetDepth")
var routine_getTrades = exchange.Go("GetTrades")
// Sleep(2000), if the Sleep statement is used here, it will cause the subsequent EventLoop function to miss the previous events, because after waiting for 2 seconds, the concurrent function has received the data, and the subsequent EventLoop listening mechanism started, it misses these events.
// These events will not be missed unless EventLoop(-1) is called at the beginning of the first line of code to first initialize the EventLoop's listening mechanism.
// Log("GetDepth:", routine_getDepth.wait()) If the wait function is called in advance to retrieve the result of a concurrent call to the GetDepth function, the event that the GetDepth function receives the result of the request will not be returned in the EventLoop function.
var ts1 = new Date().getTime()
var ret1 = EventLoop(0)
var ts2 = new Date().getTime()
var ret2 = EventLoop(0)
var ts3 = new Date().getTime()
var ret3 = EventLoop(0)
Log("The first concurrent task completed was:", _D(ts1), ret1)
Log("The second concurrent task completed was:", _D(ts2), ret2)
Log("The third concurrent task completed was:", _D(ts3), ret3)
Log("GetTicker:", routine_getTicker.wait())
Log("GetDepth:", routine_getDepth.wait())
Log("GetTrades:", routine_getTrades.wait())
}
import time
def main():
routine_getTicker = exchange.Go("GetTicker")
routine_getDepth = exchange.Go("GetDepth")
routine_getTrades = exchange.Go("GetTrades")
ts1 = time.time()
ret1 = EventLoop(0)
ts2 = time.time()
ret2 = EventLoop(0)
ts3 = time.time()
ret3 = EventLoop(0)
Log("The first concurrent task completed was:", _D(ts1), ret1)
Log("The second concurrent task completed was:", _D(ts2), ret2)
Log("The third concurrent task completed was:", _D(ts3), ret3)
Log("GetTicker:", routine_getTicker.wait())
Log("GetDepth:", routine_getDepth.wait())
Log("GetTrades:", routine_getTrades.wait())
void main() {
auto routine_getTicker = exchange.Go("GetTicker");
auto routine_getDepth = exchange.Go("GetDepth");
auto routine_getTrades = exchange.Go("GetTrades");
auto ts1 = Unix() * 1000;
auto ret1 = EventLoop(0);
auto ts2 = Unix() * 1000;
auto ret2 = EventLoop(0);
auto ts3 = Unix() * 1000;
auto ret3 = EventLoop(0);
Log("The first concurrent task completed was:", _D(ts1), ret1);
Log("The second concurrent task completed was:", _D(ts2), ret2);
Log("The third concurrent task completed was:", _D(ts3), ret3);
Ticker ticker;
Depth depth;
Trades trades;
routine_getTicker.wait(ticker);
routine_getDepth.wait(depth);
routine_getTrades.wait(trades);
Log("GetTicker:", ticker);
Log("GetDepth:", depth);
Log("GetTrades:", trades);
}
Первый звонокEventLoop()
Функция в коде инициирует механизм для этого прослушиваемого события, и если первыйEventLoop()
призыв начинается после обратного вызова события, он пропустит предыдущие события.EventLoop()
если функция не вызвана вовремя, чтобы вывести их во время выполнения программы, последующие вызовы событий за пределами кэша 500 будут потеряны.EventLoop()
функция не влияет на кэш очереди базовой системы WebSocket или кэши одновременных функций, таких какexchange.Go()
Для этих кэшей все еще необходимо использовать соответствующие методы для извлечения данных.EventLoop()
Функция для данных, которые были получены доEventLoop()
Основная цельEventLoop()
В этом случае, если вы хотите, чтобы ваша система получила новые сетевые данные, вы должны установить, что эта система получает новые сетевые данные.EventLoop()
функция возвращает событие, просто проходит через все источники данных.exchange.Go()
Попробуйте получить данные.EventLoop()
Функция поддерживает только прямую торговлю.
Слушать события в главной нитке при вызове из главной функцииmain()
В стратегиях, написанных вJavaScript
язык,threading.Thread()
функция создает нить, которая также может быть вызвана в функции выполнения thread
{@fun/Global/Dial Dial}, {@fun/Trade/exchange.Go exchange.Go}, {@fun/Global/HttpQuery_Go HttpQuery_Go}
В__Serve
Функция используется для создания службы HTTP, службы TCP и службы Websocket (на основе протокола HTTP).
Возвращает строку, которая записывает IP-адрес и порт созданной службы.127.0.0.1:8088
, [::]:8089
.
строка
__Serve ((serveURI, обработчик) __Serve ((serveURI, обработчик,...args)
ВserveURI
параметр используется для настройки протокола, IP-адреса, порта и других настроек связи службы, таких какhttp://0.0.0.0:8088?gzip=true
, то есть,http://:8088?gzip=true
.
serveURI
настройка параметров, таких какtcp://127.0.0.1:6666?tls=true
; вы можете добавить сертификаты и частные ключи, такие какtls=true&cert_pem=xxxx&cert_key_pem=xxxx
.serveURI
настройки параметров, например:http://127.0.0.1:6666?gzip=true
; вы можете установить настройки сжатия:gzip=true
- Да.
ВserveURI
параметр используется для Https, напримерhttps://127.0.0.1:6666?tls=true&gzip=true
; вы можете добавитьcert_pem
иcert_key_pem
параметры для загрузки сертификата.служитьURI
неправда
строка
Вhandler
Параметр используется для передачи в функции обработки маршрутизации (протокол HTTP), функции обработки сообщений (протокол TCP) и функции обработки потока (Websocket).
Функция обратного вызова, передаваемая параметромhandler
может определять несколько параметров, первым параметром является объект ctx (контекстный объект).
управляющий
неправда
Функция
Фактический параметр функции обратного вызова передается как параметрhandler
. Может быть несколько параметровarg
, например:
__Serve("http://:8088", function(ctx, a, b, c) {
Log(`ctx.host():`, ctx.host(), ", a=", a, ", b=", b, ", c=", c)
}, 1, 2, 3)
Параметры1
, 2
, 3
прошел в, когда звонить__Serve()
функция соответствует параметрамa
, b
, c
прошел в функции обратного вызова.
арг ложное string, number, bool, object, array, function, null value и другие типы, поддерживаемые системой
function main() {
let httpServer = __Serve("http://:8088?gzip=true", function (ctx) {
Log("http connect from: ", ctx.remoteAddr(), "->", ctx.localAddr())
let path = ctx.path()
if (path == "/") {
ctx.write(JSON.stringify({
path: ctx.path(),
method: ctx.method(),
headers: ctx.headers(),
cookie: ctx.header("Cookie"),
remote: ctx.remoteAddr(),
query: ctx.rawQuery()
}))
} else if (path == "/tickers") {
let ret = exchange.GetTickers()
if (!ret) {
ctx.setStatus(500)
ctx.write(GetLastError())
} else {
ctx.write(JSON.stringify(ret))
}
} else if (path == "/wss") {
if (ctx.upgrade("websocket")) { // upgrade to websocket
while (true) {
let r = ctx.read(10)
if (r == "") {
break
} else if (r) {
if (r == "ticker") {
ctx.write(JSON.stringify(exchange.GetTicker()))
} else {
ctx.write("not support")
}
}
}
Log("websocket closed", ctx.remoteAddr())
}
} else {
ctx.setStatus(404)
}
})
let echoServer = __Serve("tcp://:8089", function (ctx) {
Log("tcp connect from: ", ctx.remoteAddr(), "->", ctx.localAddr())
while (true) {
let d = ctx.read()
if (!d) {
break
}
ctx.write(d)
}
Log("connect closed")
})
Log("http serve on", httpServer, "tcp serve on", echoServer)
for (var i = 0; i < 5; i++) {
if (i == 2) {
// test Http
var retHttp = HttpQuery("http://127.0.0.1:8088?num=123&limit=100", {"debug": true})
Log("retHttp:", retHttp)
} else if (i == 3) {
// test TCP
var tcpConn = Dial("tcp://127.0.0.1:8089")
tcpConn.write("Hello TCP Server")
var retTCP = tcpConn.read()
Log("retTCP:", retTCP)
} else if (i == 4) {
// test Websocket
var wsConn = Dial("ws://127.0.0.1:8088/wss|compress=gzip")
wsConn.write("ticker")
var retWS = wsConn.read(1000)
Log("retWS:", retWS)
// no depth
wsConn.write("depth")
retWS = wsConn.read(1000)
Log("retWS:", retWS)
}
Sleep(1000)
}
}
# Unsupported
// Unsupported
Websocket
Вы можете установить ветвь маршрутизации в пути и разработать код реализации дляWebsocket
Вы можете ознакомиться с образцом кода в этом разделе.Функция обратного вызова, передаваемая параметромhandler
получаетctx
параметр.ctx
параметр - это контекстный объект, используемый для получения и записи данных, с следующими методами:
HTTP/1.1
, tcp
.http://127.0.0.1:8088?num=123
, и функция обработки обратного вызова, передаваемая параметромhandler
доходы"123"
когдаctx.query("num")
называется.User-Agent
в заголовках текущей просьбы:ctx.header("User-Agent")
.GET
, POST
, и т.д.ctx
Контекстный объект к протоколу Websocket; возвращение булевого значения (правда), если переключение удалось, и булевого значения (ложь), если оно не удалось.read
Метод не поддерживается в обычном протоколе HTTP. Вы можете указать параметр задержкиtimeout_ms
в миллисекундах.JSON.stringify()
чтобы закодировать объект JSON в строку и затем написать его.WebSocket
протокол, вы можете использовать этот метод для передачи зашифрованной строки клиенту.{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go}
Функция выполняет глобальную функцию словаря, которая может быть сохранена.
Постоянно сохраненные данные ключевых значений вk-v
пары ключевых значений.
строка, число, bool, объект, массив, нулевое значение
_G() _G(k) _G(k, v)
Параметрk
является именем ключа в сохраненной паре ключей и значений и не чувствителен к большим и малым буквам.
k
ложное
строка, нулевое значение
Параметрv
является ключевым значением в сохраненной паре ключей-значений, которая может быть любыми данными, которые могут бытьJSON
сериализирована.
v
ложное
строка, число, bool, объект, массив, нулевое значение
function main(){
// Set a global variable num with a value of 1
_G("num", 1)
// Change a global variable num to the value of the string ok
_G("num", "ok")
// Delete the global variable num
_G("num", null)
// Returns the value of the global variable num
Log(_G("num"))
// Delete all global variables
_G(null)
// Return to live trading ID
var robotId = _G()
}
def main():
_G("num", 1)
_G("num", "ok")
_G("num", None)
Log(_G("num"))
_G(None)
robotId = _G()
void main() {
_G("num", 1);
_G("num", "ok");
_G("num", NULL);
Log(_G("num"));
_G(NULL);
// Not support auto robotId = _G();
}
Отдельная база данных для каждой торговли в режиме реального времени, данные, сохраненные_G()
В случае завершения обратного тестирования, данные, сохраненные в системе обратного тестирования_G()
При использовании_G()
Функция сохранения сохраненных данных должна использоваться разумно в соответствии с памятью и жестким диском аппаратного устройства и не должна злоупотребляться.
При звонке_G()
в режиме реального времени и никаких параметров не передается,_G()
функция возвращаетId
При звонке на_G()
функция, параметрv
передается как NULL, чтобы указать на удалениеk-v
При вызове_G()
функция, только параметрk
проходит в строке, и_G()
функция возвращает значение ключа, соответствующее сохраненному параметруk
Когда звонишь_G()
функция, только параметрk
передается в нулевом значении, что указывает на то, что все записиk-v
пара ключевых значений удаляется.k-v
пары ключей-значений были сохранены постоянно,_G()
функция вызвана снова, передавая имя ключа, который был сохранен постоянно в качестве параметраk
. Передача нового значения ключа в качестве параметраv
Обновлю это.k-v
пара ключевых значений.
{@fun/Global/DBExec DBExec}
Преобразует миллисекундные временные отметки илиDate
Объекты для временных строк.
Временная цепь. строка
_D ((() _D (отметка времени) _D ((часовой штамп, fmt)
Миллисекундная временная марка илиDate
Объект.
Временная печать
ложное
Номер, предмет
Форматировать строку,JavaScript
формат языка по умолчанию:yyyy-MM-dd hh:mm:ss
; Python
формат языка по умолчанию:%Y-%m-%d %H:%M:%S
; C++
формат языка по умолчанию:%Y-%m-%d %H:%M:%S
- Да.
ФМТ
ложное
строка
function main(){
var time = _D()
Log(time)
}
def main():
strTime = _D()
Log(strTime)
void main() {
auto strTime = _D();
Log(strTime);
}
Получить и распечатать текущую временную строку:
function main() {
Log(_D(1574993606000))
}
def main():
# Running this code on a server in Beijing time: 2019-11-29 10:13:26 , a docker on another server in another region results in: 2019-11-29 02:13:26
Log(_D(1574993606))
void main() {
Log(_D(1574993606000));
}
Время - 1574993606000, с использованием кода конверсии:
function main() {
Log(_D(1574993606000, "yyyy--MM--dd hh--mm--ss")) // 2019--11--29 10--13--26
}
def main():
# 1574993606 is timestamped in seconds.
Log(_D(1574993606, "%Y--%m--%d %H--%M--%S")) # 2019--11--29 10--13--26
void main() {
Log(_D(1574993606000, "%Y--%m--%d %H--%M--%S")); // 2019--11--29 10--13--26
}
Форматирование с параметромfmt
отличается отJavaScript
, Python
, иC++
языки, как показано в следующих примерах:
Возвращает текущую временную строку без прохождения любых параметров._D()
Функция вPython
Стратегия, вы должны знать, что параметры прошли временные отметки второго уровня (миллисекундного уровня временных отметки в JavaScript и C ++ стратегии, где 1 секунда равна 1000 миллисекунд)._D()
функция для анализа временной последовательности с читаемой временной меткой в живой торговли, вы должны обратить внимание на часовой пояс и время настройки операционной системы, где расположена программа Docker._D()
функция анализирует временную метку в читаемую временную строку в зависимости от времени системы докера.
{@fun/Global/UnixNano UnixNano}, {@fun/Global/Unix Unix}
Форматируйте число с плавающей запятой.
Форматированное число с плавающей запятой в соответствии с настройкой точности. Номер
_N() _N(num) _N ((num, точность)
Номер с плавающей запятой, который нужно отформатировать.
число
неправда
Номер
Настройка точности форматирования, параметрprecision
является целым числом, и параметрprecision
По умолчанию 4.
точность
ложное
Номер
function main(){
var i = 3.1415
Log(i)
var ii = _N(i, 2)
Log(ii)
}
def main():
i = 3.1415
Log(i)
ii = _N(i, 2)
Log(ii)
void main() {
auto i = 3.1415;
Log(i);
auto ii = _N(i, 2);
Log(ii);
}
Например,_N(3.1415, 2)
удалит значение после3.1415
два знака за десятичной запятой и функция возвращает3.14
.
function main(){
var i = 1300
Log(i)
var ii = _N(i, -3)
// Check the logs and see that it is 1000
Log(ii)
}
def main():
i = 1300
Log(i)
ii = _N(i, -3)
Log(ii)
void main() {
auto i = 1300;
Log(i);
auto ii = _N(i, -3);
Log(ii);
}
Если вам нужно изменить все цифры N слева от запятой на 0, вы можете написать это так:
Параметрprecision
может быть положительным целым числом, отрицательным целым числом.
{@fun/Trade/exchange.SetPrecision exchange.SetPrecision} - Я не знаю.
Попробуйте заново функцию допустимости ошибок интерфейса.
Возвратное значение функции обратного вызова при ее выполнении. Все типы поддерживаются системой, кромеЛогическое ложное значениеинулевое значение.
_C (((pfn) _C ((pfn,...args)
Параметрpfn
является функцией ссылки, которая являетсяфункция обратного вызова- Да.
пфн
неправда
Функция
Параметры дофункции обратного вызова, может быть более одного параметраarg
. Тип и количество параметровarg
зависит от параметровфункция обратного вызова- Да.
арг
ложное
строка, число, bool, объект, массив, функция, все типы поддерживаются системой, такие как нулевые значения
function main(){
var ticker = _C(exchange.GetTicker)
// Adjust _C() function retry interval to 2 seconds
_CDelay(2000)
var depth = _C(exchange.GetDepth)
Log(ticker)
Log(depth)
}
def main():
ticker = _C(exchange.GetTicker)
_CDelay(2000)
depth = _C(exchange.GetDepth)
Log(ticker)
Log(depth)
void main() {
auto ticker = _C(exchange.GetTicker);
_CDelay(2000);
auto depth = _C(exchange.GetDepth);
Log(ticker);
Log(depth);
}
Для ошибочно-толерантных функций без параметров:
function main(){
var records = _C(exchange.GetRecords, PERIOD_D1)
Log(records)
}
def main():
records = _C(exchange.GetRecords, PERIOD_D1)
Log(records)
void main() {
auto records = _C(exchange.GetRecords, PERIOD_D1);
Log(records);
}
Для функций с параметрами, которые допускают ошибки:
var test = function(a, b){
var time = new Date().getTime() / 1000
if(time % b == 3){
Log("Eligible!", "#FF0000")
return true
}
Log("Retry!", "#FF0000")
return false
}
function main(){
var ret = _C(test, 1, 5)
Log(ret)
}
import time
def test(a, b):
ts = time.time()
if ts % b == 3:
Log("Eligible!", "#FF0000")
return True
Log("Retry!", "#FF0000")
return False
def main():
ret = _C(test, 1, 5)
Log(ret)
// C++ does not support fault tolerance for custom functions in this way
Он также может быть использован для отказоустойчивости пользовательских функций:
В_C()
function будет продолжать вызвать указанную функцию, пока она не вернется успешно (функция, на которую ссылается параметрpfn
доходынулевойилиложныйкогда вызовут, перепробует вызватьpfn
Например,_C(exchange.GetTicker)
. Интервал повторного попытки по умолчанию составляет 3 секунды, вы можете вызвать_CDelay()
функция для установки интервала повторных попыток._CDelay(1000)
средства для изменения интервала повторных попыток_C()
Функция на 1 секунду.
Пропускная способность к ошибкам может быть выполнена для, но не ограничивается, следующими функциями:
exchange.GetTicker()
exchange.GetDepth()
exchange.GetTrades()
exchange.GetRecords()
exchange.GetAccount()
exchange.GetOrders()
exchange.GetOrder()
exchange.GetPositions()
Все могут быть вызваны_C()
Функция допустимости неисправностей_C()
функция не ограничивается вышеперечисленной функцией допустимости неисправности, параметромpfn
является ссылкой на функцию, а не вызовом функции.
Заметьте, что это_C(exchange.GetTicker)
, нет_C(exchange.GetTicker())
.Возвращает количество периодов пересечения массиваarr1
и массивarr2
.
Количество перекрестных периодов массиваarr1
и массивarr2
- Да.
Номер
_Кросс ((arr1, arr2)
Элементы - это массивы типаnumber
- Да.
Arr1
неправда
массив
Элементы - это массивы типаnumber
- Да.
arr2
неправда
массив
// Fast line indicator
var arr1 = [1,2,3,4,5,6,8,8,9]
// Slow line indicator
var arr2 = [2,3,4,5,6,7,7,7,7]
function main(){
Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2))
Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1))
}
arr1 = [1,2,3,4,5,6,8,8,9]
arr2 = [2,3,4,5,6,7,7,7,7]
def main():
Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2))
Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1))
void main() {
vector<double> arr1 = {1,2,3,4,5,6,8,8,9};
vector<double> arr2 = {2,3,4,5,6,7,7,7,7};
Log("_Cross(arr1, arr2) : ", _Cross(arr1, arr2));
Log("_Cross(arr2, arr1) : ", _Cross(arr2, arr1));
}
Набор данных может быть смоделирован для проверки функции _Cross ((Arr1, Arr2):
Если возвращение значения_Cross()
Если функция является положительным числом, она указывает на период восходящего проникновения, если она является отрицательным числом, она указывает на период нисходящего проникновения, 0 означает то же самое, что текущая цена.Анализ и инструкции по использованию встроенной функции _Кросс.
ФункцияJSONParse()
используется для анализаJSON
strings.
JSON
Объект.
объект
JSONParse ((s)
JSON
Строка.
с
неправда
строка
function main() {
let s1 = '{"num": 8754613216564987646512354656874651651358}'
Log("JSON.parse:", JSON.parse(s1)) // JSON.parse: {"num":8.754613216564988e+39}
Log("JSONParse:", JSONParse(s1)) // JSONParse: {"num":"8754613216564987646512354656874651651358"}
let s2 = '{"num": 123}'
Log("JSON.parse:", JSON.parse(s2)) // JSON.parse: {"num":123}
Log("JSONParse:", JSONParse(s2)) // JSONParse: {"num":123}
}
import json
def main():
s1 = '{"num": 8754613216564987646512354656874651651358}'
Log("json.loads:", json.loads(s1)) # json.loads: map[num:8.754613216564987e+39]
Log("JSONParse:", JSONParse(s1)) # JSONParse: map[num:8754613216564987646512354656874651651358]
s2 = '{"num": 123}'
Log("json.loads:", json.loads(s2)) # json.loads: map[num:123]
Log("JSONParse:", JSONParse(s2)) # JSONParse: map[num:123]
void main() {
auto s1 = "{\"num\":8754613216564987646512354656874651651358}";
Log("json::parse:", json::parse(s1));
// Log("JSONParse:", JSONParse(s1)); // The function is not supported.
auto s2 = "{\"num\":123}";
Log("json::parse:", json::parse(s2));
// Log("JSONParse:", JSONParse(s2)); // The function is not supported.
}
Строки JSON с большими значениями можно правильно анализировать, и это будет анализировать большие значения в виде типов строки.JSONParse()
функция не поддерживается в системе обратного тестирования.
Журналы выводов.
Регистрация (...msgs)
Параметрmsg
является содержанием вывода, и параметрmsg
может пройти более одного.
СМС
ложное
строка, число, bool, объект, массив, любой тип, поддерживаемый системой, например null.
function main() {
Log("msg1", "msg2", "msg3")
}
def main():
Log("msg1", "msg2", "msg3")
void main() {
Log("msg1", "msg2", "msg3");
}
Многочисленныеmsg
параметры могут быть переданы:
function main() {
Log("Hello, FMZ Quant!@")
Sleep(1000 * 5)
// Add #ff0000 to the string to print the log in red and push the message
Log("Hello, #ff0000@")
}
def main():
Log("Hello, FMZ Quant!@")
Sleep(1000 * 5)
Log("Hello, #ff0000@")
void main() {
Log("Hello, FMZ Quant!@");
Sleep(1000 * 5);
Log("Hello, #ff0000@");
}
Он поддерживает настройку цвета сообщения вывода, если мы используем настройки цвета и нажмите в то же время, мы должны установить цвет в первую очередь и использовать@
Персонаж, который будет толкать последним.
function main() {
Log("`data:image/png;base64,AAAA`")
}
def main():
Log("`data:image/png;base64,AAAA`")
void main() {
Log("`data:image/png;base64,AAAA`");
}
ВLog()
функция поддерживает печатьbase64
кодированные изображения, начиная с`
и заканчивается`
, например:
import matplotlib.pyplot as plt
def main():
plt.plot([3,6,2,4,7,1])
Log(plt)
ВLog()
Функция поддерживает прямую печатьPython
Это...matplotlib.pyplot
До тех пор, пока объект содержитsavefig
С помощью этого метода можно напечататьLog
функция, например:
function main() {
Log("[trans]中文|abc[/trans]")
}
def main():
Log("[trans]中文|abc[/trans]")
void main() {
Log("[trans]中文|abc[/trans]");
}
ВLog()
Функция поддерживает переключение языков.Log()
функция выводит текст, который автоматически переключается на соответствующий язык на основе настройки языка на странице платформы, например:
ВLog()
функция выводит сообщение о журнале в области журнала реального времени торгового процесса или системы обратного тестирования, и журнал сохраняется в базе данных реального времени торгового процесса при запуске реального времени торговли.Log()
функция выводит сообщение, заканчивающееся@
Нажмите на адрес электронной почты, адрес WebHook и т. д.Нажмите настройкиПодача сообщений не поддерживаетсяИнструменты отладки, система обратного тестирования. Существует ограничение частоты для push сообщения. Конкретные правила ограничения следующие: в течение 20-секундного цикла живой торговли будет сохранено и push только последнее push сообщение, а другие сообщения будут отфильтрованы и не push (вывод push log функцией Log будет распечатан и отображаться в регистре).
ДляWebHook
push, вы можете использовать сервисную программу, написаннуюGolang
:
package main
import (
"fmt"
"net/http"
)
func Handle (w http.ResponseWriter, r *http.Request) {
defer func() {
fmt.Println("req:", *r)
}()
}
func main () {
fmt.Println("listen http://localhost:9090")
http.HandleFunc("/data", Handle)
http.ListenAndServe(":9090", nil)
}
УстановленоWebHook
вНажмите настройки: http://XXX.XX.XXX.XX:9090/data?data=Hello_FMZ
- Да.
После того, как я провел записьGolang
Программа обслуживания, мы начинаем запускать стратегию живой торговли, следующая стратегия написана вJavaScript
Изучение языка, стратегия выполняетLog()
Функция и подталкивание сообщения:
function main() {
Log("msg", "@")
}
Программа обслуживания, написанная вGolang
язык получает нажатие и сервисная программа печатает сообщение:
listen http://localhost:9090
req: {GET /data?data=Hello_FMZ HTTP/1.1 1 1 map[User-Agent:[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/xx.x.xxxx.xxx Safari/537.36] Accept-Encoding:[gzip]] {} <nil> 0 [] false 1XX.XX.X.XX:9090 map[] map[] <nil> map[] XXX.XX.XXX.XX:4xxx2 /data?data=Hello_FMZ <nil> <nil> <nil> 0xc420056300
{@fun/Log/LogReset LogReset}, {@fun/Log/LogVacuum LogVacuum}, {@fun/Log/LogReset LogReset}, {@fun/Log/LogVacuum LogVacuum}, {@fun/Log/LogVacuum LogVacuum}, {@fun/Log/LogReset LogReset}, {@fun/Log/LogVacuum LogVacuum}, {@fun/Log/LogVacuum LogVacuum}, {@fun/Log/LogVacuum}, {@fun/Log/LogVacuum}, {@fun/LogVacuum},
Запишите стоимость прибыли и убытков, напечатайте стоимость прибыли и убытков и набросьте кривую возврата на основе стоимости прибыли и убытков.
LogProfit (прибыль) LogProfit ((прибыль,... аргументы)
Параметрprofit
Это данные о доходах, которые даются алгоритмом проектирования и расчетов в стратегии.
прибыль
Истинно
Номер
Расширенный параметр для вывода дополнительной информации в журнале доходов,arg
Параметры могут быть переданы более чем одному.
арг
ложное
строка, число, bool, объект, массив, любой тип, поддерживаемый системой, например null.
function main() {
// Print 30 points on the earnings chart
for(var i = 0; i < 30; i++) {
LogProfit(i, '&')
Sleep(500)
}
}
def main():
for i in range(30):
LogProfit(i, '&')
Sleep(500)
void main() {
for(int i = 0; i < 30; i++) {
LogProfit(i, '&');
Sleep(500);
}
}
ВLogProfit
функция, если она заканчивается символом&
, составляет только график доходов и не печатает журнал доходов.
{@fun/Log/LogProfitReset LogProfitReset} - Я не знаю.
Уберите все журналы доходов, графики доходов.
LogProfitReset (() LogProfitReset ((остаться)
Вremain
Параметр используется для указания количества записей в журнале (значения целых чисел), которые необходимо хранить.
оставаться
ложное
Номер
function main() {
// Print 30 points on the revenue chart, then reset and keep only the last 10 points
for(var i = 0; i < 30; i++) {
LogProfit(i)
Sleep(500)
}
LogProfitReset(10)
}
def main():
for i in range(30):
LogProfit(i)
Sleep(500)
LogProfitReset(10)
void main() {
for(int i = 0; i < 30; i++) {
LogProfit(i);
Sleep(500);
}
LogProfitReset(10);
}
{@fun/Log/LogProfit LogProfit} Я не знаю.
Выходная информация в строке состояния системы обратного тестирования или страницы торговли в режиме реального времени.
LogStatus ((...msgs)
Параметрmsg
является содержанием вывода, и параметрmsg
может пройти более одного.
СМС
ложное
строка, число, bool, объект, массив, любой тип, поддерживаемый системой, например null.
function main() {
LogStatus('This is a general status alert')
LogStatus('This is a status alert in red font #ff0000')
LogStatus('This is a multi-line status message \n I am the second line')
}
def main():
LogStatus('This is a general status alert')
LogStatus('This is a status alert in red font #ff0000')
LogStatus('This is a multi-line status message \n I am the second line')
void main() {
LogStatus("This is a general status alert");
LogStatus("This is a status alert in red font #ff0000");
LogStatus("This is a multi-line status message \n I am the second line");
}
Поддерживает настройку цвета выходного содержимого:
function main() {
var table = {type: 'table', title: 'Position information', cols: ['Column 1', 'Column 2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}
// JSON serialization with the ` character on both sides, as a complex message format (support tables currently)
LogStatus('`' + JSON.stringify(table) + '`')
// Table information can also appear in multiple rows
LogStatus('First line of message\n`' + JSON.stringify(table) + '`\n third line of message')
// It supports multiple tables at the same time, will be displayed in a group with TAB
LogStatus('`' + JSON.stringify([table, table]) + '`')
// You can also construct a button in the form, and use the GetCommand strategy to receive the contents of the cmd attribute
var table = {
type: 'table',
title: 'Position operations',
cols: ['Column 1', 'Column 2', 'Action'],
rows: [
['abc', 'def', {'type':'button', 'cmd': 'coverAll', 'name': 'Close out positions'}]
]
}
LogStatus('`' + JSON.stringify(table) + '`')
// Or construct a separate button
LogStatus('`' + JSON.stringify({'type':'button', 'cmd': 'coverAll', 'name': 'Close out positions'}) + '`')
// Customizable button style (bootstrap's button attribute)
LogStatus('`' + JSON.stringify({'type':'button', 'class': 'btn btn-xs btn-danger', 'cmd': 'coverAll', 'name': 'Close out positions'}) + '`')
}
import json
def main():
table = {"type": "table", "title": "Position information", "cols": ["Column 1", "Column 2"], "rows": [["abc", "def"], ["ABC", "support color #ff0000"]]}
LogStatus('`' + json.dumps(table) + '`')
LogStatus('First line of message\n`' + json.dumps(table) + '`\n third line of message')
LogStatus('`' + json.dumps([table, table]) + '`')
table = {
"type" : "table",
"title" : "Position operations",
"cols" : ["Column 1", "Column 2", "Action"],
"rows" : [
["abc", "def", {"type": "button", "cmd": "coverAll", "name": "Close out positions"}]
]
}
LogStatus('`' + json.dumps(table) + '`')
LogStatus('`' + json.dumps({"type": "button", "cmd": "coverAll", "name": "Close out positions"}) + '`')
LogStatus('`' + json.dumps({"type": "button", "class": "btn btn-xs btn-danger", "cmd": "coverAll", "name": "Close out positions"}) + '`')
void main() {
json table = R"({"type": "table", "title": "Position information", "cols": ["Column 1", "Column 2"], "rows": [["abc", "def"], ["ABC", "support color #ff0000"]]})"_json;
LogStatus("`" + table.dump() + "`");
LogStatus("First line of message\n`" + table.dump() + "`\n third line of message");
json arr = R"([])"_json;
arr.push_back(table);
arr.push_back(table);
LogStatus("`" + arr.dump() + "`");
table = R"({
"type" : "table",
"title" : "Position operations",
"cols" : ["Column 1", "Column 2", "Action"],
"rows" : [
["abc", "def", {"type": "button", "cmd": "coverAll", "name": "Close out positions"}]
]
})"_json;
LogStatus("`" + table.dump() + "`");
LogStatus("`" + R"({"type": "button", "cmd": "coverAll", "name": "Close out positions"})"_json.dump() + "`");
LogStatus("`" + R"({"type": "button", "class": "btn btn-xs btn-danger", "cmd": "coverAll", "name": "Close out positions"})"_json.dump() + "`");
}
Пример вывода данных в строке состояния:
function main() {
var table = {
type: "table",
title: "status bar button style",
cols: ["default", "original", "success", "info", "warning", "danger"],
rows: [
[
{"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
{"type":"button", "class": "btn btn-xs btn-primary", "name": "original"},
{"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
{"type":"button", "class": "btn btn-xs btn-info", "name": "info"},
{"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
{"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
]
]
}
LogStatus("`" + JSON.stringify(table) + "`")
}
import json
def main():
table = {
"type": "table",
"title": "status bar button style",
"cols": ["default", "original", "success", "info", "warning", "danger"],
"rows": [
[
{"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
{"type":"button", "class": "btn btn-xs btn-primary", "name": "original"},
{"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
{"type":"button", "class": "btn btn-xs btn-info", "name": "info"},
{"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
{"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
]
]
}
LogStatus("`" + json.dumps(table) + "`")
void main() {
json table = R"({
"type": "table",
"title": "status bar button style",
"cols": ["default", "original", "success", "info", "warning", "danger"],
"rows": [
[
{"type":"button", "class": "btn btn-xs btn-default", "name": "default"},
{"type":"button", "class": "btn btn-xs btn-primary", "name": "original"},
{"type":"button", "class": "btn btn-xs btn-success", "name": "success"},
{"type":"button", "class": "btn btn-xs btn-info", "name": "info"},
{"type":"button", "class": "btn btn-xs btn-warning", "name": "warning"},
{"type":"button", "class": "btn btn-xs btn-danger", "name": "danger"}
]
]
})"_json;
LogStatus("`" + table.dump() + "`");
}
Он поддерживает проектирование кнопок управления в строке состояния (старая структура кнопок):
function main() {
var table = {
type: "table",
title: "Status bar button disable, description function test",
cols: ["Column 1", "Column 2", "Column 3"],
rows: []
}
var button1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"}
var button2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": true}
var button3 = {"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enable", "disabled": false}
table.rows.push([button1, button2, button3])
LogStatus("`" + JSON.stringify(table) + "`")
}
import json
def main():
table = {
"type": "table",
"title": "Status bar button disable, description function test",
"cols": ["Column 1", "Column 2", "Column 3"],
"rows": []
}
button1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"}
button2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": True}
button3 = {"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enable", "disabled": False}
table["rows"].append([button1, button2, button3])
LogStatus("`" + json.dumps(table) + "`")
void main() {
json table = R"({
"type": "table",
"title": "Status bar button disable, description function test",
"cols": ["Column 1", "Column 2", "Column 3"],
"rows": []
})"_json;
json button1 = R"({"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button"})"_json;
json button2 = R"({"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button, set to disabled", "disabled": true})"_json;
json button3 = R"({"type": "button", "name": "button3", "cmd": "button3", "description": "This is the third button, set to enable", "disabled": false})"_json;
json arr = R"([])"_json;
arr.push_back(button1);
arr.push_back(button2);
arr.push_back(button3);
table["rows"].push_back(arr);
LogStatus("`" + table.dump() + "`");
}
Установите отключенную функцию описания кнопки строки состояния (старая структура кнопки):
function test1() {
Log("Calling custom functions")
}
function main() {
while (true) {
var table = {
type: 'table',
title: 'operation',
cols: ['column1', 'column2', 'Action'],
rows: [
['a', '1', {
'type': 'button',
'cmd': "CoverAll",
'name': 'Close out positions'
}],
['b', '1', {
'type': 'button',
'cmd': 10,
'name': 'Send values'
}],
['c', '1', {
'type': 'button',
'cmd': _D(),
'name': 'Calling functions'
}],
['d', '1', {
'type': 'button',
'cmd': 'test1',
'name': 'Calling custom functions'
}]
]
}
LogStatus(_D(), "\n", '`' + JSON.stringify(table) + '`')
var str_cmd = GetCommand()
if (str_cmd) {
Log("Received interaction data str_cmd:", "type:", typeof(str_cmd), "value:", str_cmd)
if(str_cmd == "test1") {
test1()
}
}
Sleep(500)
}
}
import json
def test1():
Log("Calling custom functions")
def main():
while True:
table = {
"type": "table",
"title": "operation",
"cols": ["column1", "column2", "Action"],
"rows": [
["a", "1", {
"type": "button",
"cmd": "CoverAll",
"name": "Close out positions"
}],
["b", "1", {
"type": "button",
"cmd": 10,
"name": "Send values"
}],
["c", "1", {
"type": "button",
"cmd": _D(),
"name": "Calling functions"
}],
["d", "1", {
"type": "button",
"cmd": "test1",
"name": "Calling custom functions"
}]
]
}
LogStatus(_D(), "\n", "`" + json.dumps(table) + "`")
str_cmd = GetCommand()
if str_cmd:
Log("Received interaction data str_cmd:", "type:", typeof(str_cmd), "value:", str_cmd)
if str_cmd == "test1":
test1()
Sleep(500)
void test1() {
Log("Calling custom functions");
}
void main() {
while(true) {
json table = R"({
"type": "table",
"title": "operation",
"cols": ["column1", "column2", "Action"],
"rows": [
["a", "1", {
"type": "button",
"cmd": "CoverAll",
"name": "Close out positions"
}],
["b", "1", {
"type": "button",
"cmd": 10,
"name": "Send values"
}],
["c", "1", {
"type": "button",
"cmd": "",
"name": "Calling functions"
}],
["d", "1", {
"type": "button",
"cmd": "test1",
"name": "Calling custom functions"
}]
]
})"_json;
table["rows"][2][2]["cmd"] = _D();
LogStatus(_D(), "\n", "`" + table.dump() + "`");
auto str_cmd = GetCommand();
if(str_cmd != "") {
Log("Received interaction data str_cmd:", "type:", typeof(str_cmd), "value:", str_cmd);
if(str_cmd == "test1") {
test1();
}
}
Sleep(500);
}
}
В сочетании сGetCommand()
Функция, создать функцию взаимодействия кнопки строки состояния (старая структура кнопки):
function main() {
var tbl = {
type: "table",
title: "operation",
cols: ["column1", "column2"],
rows: [
["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of open positions", "type": "number", "defValue": 1}}],
["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
]
}
LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
while (true) {
var cmd = GetCommand()
if (cmd) {
Log("cmd:", cmd)
}
Sleep(1000)
}
}
import json
def main():
tbl = {
"type": "table",
"title": "operation",
"cols": ["column1", "column2"],
"rows": [
["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of open positions", "type": "number", "defValue": 1}}],
["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
]
}
LogStatus(_D(), "\n", "`" + json.dumps(tbl) + "`")
while True:
cmd = GetCommand()
if cmd:
Log("cmd:", cmd)
Sleep(1000)
void main() {
json tbl = R"({
"type": "table",
"title": "operation",
"cols": ["column1", "column2"],
"rows": [
["Open position operation", {"type": "button", "cmd": "open", "name": "open position", "input": {"name": "number of open positions", "type": "number", "defValue": 1}}],
["Close position operation", {"type": "button", "cmd": "coverAll", "name": "close all positions"}]
]
})"_json;
LogStatus(_D(), "\n", "`" + tbl.dump() + "`");
while(true) {
auto cmd = GetCommand();
if(cmd != "") {
Log("cmd:", cmd);
}
Sleep(1000);
}
}
Вводные данные также поддерживаются при построении кнопок строки состояния для взаимодействия, и команды взаимодействия захватываютсяGetCommand()
В конце концов.input
элементы (старая структура кнопки) к структуре данных кнопки управления в строке состояния, например, добавление"input": {"name": "number of open positions", "type": "number", "defValue": 1}
до{"type": "button", "cmd": "open", "name": "open position"}
вызовет появление всплывающего окна с элементом управления окна ввода при нажатии кнопки (значение по умолчанию в окне ввода составляет 1, что является данными, установленнымиdefValue
Вы можете ввести данные, которые будут отправлены вместе с командой кнопки. Например, при запуске следующего тестового кода, после нажатия кнопки "открыть положениеGetCommand()
Функция затем захватит сообщение:open:111
.
function main() {
var tbl = {
type: "table",
title: "Demonstrate grouping button control",
cols: ["operation"],
rows: []
}
// Creating a grouping button control structure
var groupBtn = {
type: "button",
cmd: "open",
name: "open positions",
group: [
{"name": "orderType", "description": "下单方式|order type", "type": "selected", "defValue": "market order|pending order"},
{"name": "tradePrice@orderType==1", "description": "交易价格|trade price", "type": "number", "defValue": 100},
{"name": "orderAmount", "description": "委托数量|order amount", "type": "string", "defValue": 100},
{"name": "boolean", "description": "yes/no|boolean", "type": "boolean", "defValue": true}
]
}
// test button 1
var testBtn1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button."}
var testBtn2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button.", "input": {"name": "number of positions opened", "type": "number", "defValue": 1}}
// Add groupBtn to tbl
tbl.rows.push([groupBtn])
// It supports multiple buttons in a cell of a status bar table, i.e. the data in a cell is an array of button structures: [testBtn1, testBtn2].
tbl.rows.push([[testBtn1, testBtn2]])
while (true) {
LogStatus("`" + JSON.stringify(tbl) + "`", "\n", "The grouping button control can also be set directly on the status bar in addition to being set on the status bar form:", "`" + JSON.stringify(groupBtn) + "`")
var cmd = GetCommand()
if (cmd) {
Log("cmd:", cmd)
}
Sleep(5000)
}
}
import json
def main():
tbl = {
"type": "table",
"title": "Demonstrate grouping button control",
"cols": ["operation"],
"rows": []
}
groupBtn = {
"type": "button",
"cmd": "open",
"name": "open positions",
"group": [
{"name": "orderType", "description": "下单方式|order type", "type": "selected", "defValue": "market order|pending order"},
{"name": "tradePrice@orderType==1", "description": "交易价格|trade price", "type": "number", "defValue": 100},
{"name": "orderAmount", "description": "委托数量|order amount", "type": "string", "defValue": 100},
{"name": "boolean", "description": "yes/no|boolean", "type": "boolean", "defValue": True}
]
}
testBtn1 = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button."}
testBtn2 = {"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button.", "input": {"name": "number of positions opened", "type": "number", "defValue": 1}}
tbl["rows"].append([groupBtn])
tbl["rows"].append([[testBtn1, testBtn2]])
while True:
LogStatus("`" + json.dumps(tbl) + "`", "\n", "The grouping button control can also be set directly on the status bar in addition to being set on the status bar form:", "`" + json.dumps(groupBtn) + "`")
cmd = GetCommand()
if cmd:
Log("cmd:", cmd)
Sleep(5000)
void main() {
json tbl = R"({
"type": "table",
"title": "Demonstrate grouping button control",
"cols": ["operation"],
"rows": []
})"_json;
json groupBtn = R"({
"type": "button",
"name": "open positions",
"cmd": "open",
"group": [
{"name": "orderType", "description": "下单方式|order type", "type": "selected", "defValue": "market order|pending order"},
{"name": "tradePrice@orderType==1", "description": "交易价格|trade price", "type": "number", "defValue": 100},
{"name": "orderAmount", "description": "委托数量|order amount", "type": "string", "defValue": 100},
{"name": "boolean", "description": "yes/no|boolean", "type": "boolean", "defValue": true}
]})"_json;
json testBtn1 = R"({"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button."})"_json;
json testBtn2 = R"({"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button.", "input": {"name": "number of positions opened", "type": "number", "defValue": 1}})"_json;
tbl["rows"].push_back({groupBtn});
tbl["rows"].push_back({{testBtn1, testBtn2}});
while(true) {
LogStatus("`" + tbl.dump() + "`", "\n", "The grouping button control can also be set directly on the status bar in addition to being set on the status bar form:", "`" + groupBtn.dump() + "`");
auto cmd = GetCommand();
if(cmd != "") {
Log("cmd:", cmd);
}
Sleep(5000);
}
}
Он поддерживает группированные кнопки управления (старая структура кнопок), функционально совместимые скнопки строки состояния, поддерживающие ввод данных(установлено с помощью поля GetCommand()
Разница в том, что с"group"
Поле настройки, когда кнопка нажимается, чтобы запустить взаимодействие, диалог, который появляется на странице содержит наборгруппавводных элементов управления, установленных для одновременного ввода группы данных.
Некоторые моменты, которые следует отметить о"group"
поле в структуре кнопки управления строкой состояния и группы кнопок управления:
type
В группе, поддерживает только следующие четыре типа, иdefValue
property - это значение по умолчанию.
|
символ для разделения каждой опции в выпадающем окне, как она установлена.
"name": "tradePrice@orderType==1"
Установка, которая делаетtradeЦенаУправление вводом доступно только приПорядок Типвыпадающий элемент управления выбран какЗаказ в ожидании.|
символы для разделения содержания описания на китайском и английском языках.name
, description
в группе иname
, description
в структуре кнопок не имеют одинаковых определений, хотя имеют одинаковые имена полей.
Определениеname
в группе также отличается от определенияname
вход.Log("cmd:", cmd)
Заявление в следующем примере испытания:cmd: open:{"orderType":1,"tradePrice":99,"orderAmount":"99","boolean":true}
, т.е. то, что возвращаетсяGetCommand()
функция, когда происходит взаимодействие:open:{"orderType":1,"tradePrice":99,"orderAmount":"99","boolean":true}
.type
свойство кнопки управления поддерживает только:"button"
- Да.
Кнопки управления, поддерживающие ввод данных, т.е.input
набор свойств,type
свойство в конфигурации информацииinput
поле поддерживает несколько типов элементов управления.
Обратите внимание на следующие примеры:function main() {
// Status bar button control (set input field to implement) testBtn1 button triggered by the page in the drop-down box control using the options field to set options, using the defValue field to set the default options. This is different from the other examples in this chapter, which use defValue to set the options directly.
var testBtn1 = {
type: "button",
name: "testBtn1",
cmd: "cmdTestBtn1",
input: {name: "testBtn1ComboBox", type: "selected", options: ["A", "B"], defValue: 1}
}
/*
Status bar button control (set input field implementation) testBtn2 button triggered by the page in the drop-down box control using the options field to set the options, options field in the options field not only supports the string,
the use of the ```{text: "description", value: "value"}``` structure is also supported. Use the defValue field to set the default option, which can be multiple choice (multiple choice via array structure). Multiple choice requires setting the additional field multiple to a true value.
*/
var testBtn2 = {
type: "button",
name: "testBtn2",
cmd: "cmdTestBtn2",
input: {
name: "testBtn2MultiComboBox",
type: "selected",
description: "Implementing dropdown box multi-selection",
options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}],
defValue: ["A", "C"],
multiple: true
}
}
// Status bar grouping button control (set group field implementation) testBtn3 button triggered by the page in the drop-down box control using the options field to set options, also supports the direct use of defValue set options.
var testBtn3 = {
type: "button",
name: "testBtn3",
cmd: "cmdTestBtn3",
group: [
{name: "comboBox1", label: "labelComboBox1", description: "Dropdown box 1", type: "selected", defValue: 1, options: ["A", "B"]},
{name: "comboBox2", label: "labelComboBox2", description: "Dropdown box 2", type: "selected", defValue: "A|B"},
{name: "comboBox3", label: "labelComboBox3", description: "Dropdown box 3", type: "selected", defValue: [0, 2], multiple: true, options: ["A", "B", "C"]},
{
name: "comboBox4",
label: "labelComboBox4",
description: "Dropdown box 4",
type: "selected",
defValue: ["A", "C"],
multiple: true,
options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}, {text: "Option D", value: "D"}]
}
]
}
while (true) {
LogStatus("`" + JSON.stringify(testBtn1) + "`\n", "`" + JSON.stringify(testBtn2) + "`\n", "`" + JSON.stringify(testBtn3) + "`\n")
var cmd = GetCommand()
if (cmd) {
Log(cmd)
}
Sleep(5000)
}
}
import json
def main():
testBtn1 = {
"type": "button",
"name": "testBtn1",
"cmd": "cmdTestBtn1",
"input": {"name": "testBtn1ComboBox", "type": "selected", "options": ["A", "B"], "defValue": 1}
}
testBtn2 = {
"type": "button",
"name": "testBtn2",
"cmd": "cmdTestBtn2",
"input": {
"name": "testBtn2MultiComboBox",
"type": "selected",
"description": "Implementing dropdown box multi-selection",
"options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}],
"defValue": ["A", "C"],
"multiple": True
}
}
testBtn3 = {
"type": "button",
"name": "testBtn3",
"cmd": "cmdTestBtn3",
"group": [
{"name": "comboBox1", "label": "labelComboBox1", "description": "Dropdown box 1", "type": "selected", "defValue": 1, "options": ["A", "B"]},
{"name": "comboBox2", "label": "labelComboBox2", "description": "Dropdown box 2", "type": "selected", "defValue": "A|B"},
{"name": "comboBox3", "label": "labelComboBox3", "description": "Dropdown box 3", "type": "selected", "defValue": [0, 2], "multiple": True, "options": ["A", "B", "C"]},
{
"name": "comboBox4",
"label": "labelComboBox4",
"description": "Dropdown box 4",
"type": "selected",
"defValue": ["A", "C"],
"multiple": True,
"options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}, {"text": "Option D", "value": "D"}]
}
]
}
while True:
LogStatus("`" + json.dumps(testBtn1) + "`\n", "`" + json.dumps(testBtn2) + "`\n", "`" + json.dumps(testBtn3) + "`\n")
cmd = GetCommand()
if cmd:
Log(cmd)
Sleep(5000)
void main() {
json testBtn1 = R"({
"type": "button",
"name": "testBtn1",
"cmd": "cmdTestBtn1",
"input": {"name": "testBtn1ComboBox", "type": "selected", "options": ["A", "B"], "defValue": 1}
})"_json;
json testBtn2 = R"({
"type": "button",
"name": "testBtn2",
"cmd": "cmdTestBtn2",
"input": {
"name": "testBtn2MultiComboBox",
"type": "selected",
"description": "Implementing dropdown box multi-selection",
"options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}],
"defValue": ["A", "C"],
"multiple": true
}
})"_json;
json testBtn3 = R"({
"type": "button",
"name": "testBtn3",
"cmd": "cmdTestBtn3",
"group": [
{"name": "comboBox1", "label": "labelComboBox1", "description": "Dropdown box 1", "type": "selected", "defValue": 1, "options": ["A", "B"]},
{"name": "comboBox2", "label": "labelComboBox2", "description": "Dropdown box 2", "type": "selected", "defValue": "A|B"},
{"name": "comboBox3", "label": "labelComboBox3", "description": "Dropdown box 3", "type": "selected", "defValue": [0, 2], "multiple": true, "options": ["A", "B", "C"]},
{
"name": "comboBox4",
"label": "labelComboBox4",
"description": "Dropdown box 4",
"type": "selected",
"defValue": ["A", "C"],
"multiple": true,
"options": [{"text": "Option A", "value": "A"}, {"text": "Option B", "value": "B"}, {"text": "Option C", "value": "C"}, {"text": "Option D", "value": "D"}]
}
]
})"_json;
while (true) {
LogStatus("`" + testBtn1.dump() + "`\n", "`" + testBtn2.dump() + "`\n", "`" + testBtn3.dump() + "`\n");
auto cmd = GetCommand();
if (cmd != "") {
Log(cmd);
}
Sleep(5000);
}
}
Когда кнопка управления группой в строке состояния (используется путем установкиgroup
поле) и кнопку управления строкой состояния (используется путем установкиinput
поле) нажимаются, чтобы запустить взаимодействие (старая структура кнопки), контрольный элемент выпадающего окна в диалоговом окне, который появляется на странице, также поддерживает несколько выборов.
var symbols = ["BTC_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "BNB_USDT.swap", "SOL_USDT.swap"]
function createBtn(tmp, group) {
var btn = JSON.parse(JSON.stringify(tmp))
_.each(group, function(eleByGroup) {
btn["group"].unshift(eleByGroup)
})
return btn
}
function main() {
var arrManager = []
_.each(symbols, function(symbol) {
arrManager.push({
"symbol": symbol,
})
})
// Btn
var tmpBtnOpen = {
"type": "button",
"cmd": "open",
"name": "Open a position and place an order",
"group": [{
"type": "selected",
"name": "tradeType",
"label": "Order type",
"description": "Market order, limit order",
"default": 0,
"group": "Trading setup",
"settings": {
"options": ["Market order", "Limit order"],
"required": true,
}
}, {
"type": "selected",
"name": "direction",
"label": "Trading direction",
"description": "Buy, sell",
"default": "buy",
"group": "Trading setup",
"settings": {
"render": "segment",
"required": true,
"options": [{"name": "buy", "value": "buy"}, {"name": "sell", "value": "sell"}],
}
}, {
"type": "number",
"name": "price",
"label": "price",
"description": "The price of the order",
"group": "Trading setup",
"filter": "tradeType==1",
"settings": {
"required": true,
}
}, {
"type": "number",
"name": "amount",
"label": "Order quantity",
"description": "Order quantity",
"group": "Trading setup",
"settings": {
"required": true,
}
}],
}
while (true) {
var tbl = {"type": "table", "title": "dashboard", "cols": ["symbol", "actionOpen"], "rows": []}
_.each(arrManager, function(m) {
var btnOpen = createBtn(tmpBtnOpen, [{"type": "string", "name": "symbol", "label": "Trading instruments", "default": m["symbol"], "settings": {"required": true}}])
tbl["rows"].push([m["symbol"], btnOpen])
})
var cmd = GetCommand()
if (cmd) {
Log("Receive interaction:", cmd)
// Parsing interaction messages: open:{"symbol":"LTC_USDT.swap","tradeType":0,"direction":"buy","amount":111}
// According to the first colon: the previous instruction determines which button template triggers the message
var arrCmd = cmd.split(":", 2)
if (arrCmd[0] == "open") {
var msg = JSON.parse(cmd.slice(5))
Log("Trading instruments:", msg["symbol"], ", Trading direction:", msg["direction"], ", Order type:", msg["tradeType"] == 0 ? "Market order" : "Limit order", msg["tradeType"] == 0 ? ", Order price: current market price" : ", Order price:" + msg["price"], ", Order quantity:", msg["amount"])
}
}
LogStatus(_D(), "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(1000)
}
}
import json
symbols = ["BTC_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "BNB_USDT.swap", "SOL_USDT.swap"]
def createBtn(tmp, group):
btn = json.loads(json.dumps(tmp))
for eleByGroup in group:
btn["group"].insert(0, eleByGroup)
return btn
def main():
arrManager = []
for symbol in symbols:
arrManager.append({"symbol": symbol})
# Btn
tmpBtnOpen = {
"type": "button",
"cmd": "open",
"name": "Open a position and place an order",
"group": [{
"type": "selected",
"name": "tradeType",
"label": "Order type",
"description": "Market order, limit order",
"default": 0,
"group": "Trading setup",
"settings": {
"options": ["Market order", "Limit order"],
"required": True,
}
}, {
"type": "selected",
"name": "direction",
"label": "Trading direction",
"description": "Buy, sell",
"default": "buy",
"group": "Trading Setup",
"settings": {
"render": "segment",
"required": True,
"options": [{"name": "买入", "value": "buy"}, {"name": "卖出", "value": "sell"}],
}
}, {
"type": "number",
"name": "price",
"label": "price",
"description": "The price of the order",
"group": "Trading Setup",
"filter": "tradeType==1",
"settings": {
"required": True,
}
}, {
"type": "number",
"name": "amount",
"label": "Order quantity",
"description": "Order quantity",
"group": "Trading Setup",
"settings": {
"required": True,
}
}],
}
while True:
tbl = {"type": "table", "title": "dashboard", "cols": ["symbol", "actionOpen"], "rows": []}
for m in arrManager:
btnOpen = createBtn(tmpBtnOpen, [{"type": "string", "name": "symbol", "label": "交易品种", "default": m["symbol"], "settings": {"required": True}}])
tbl["rows"].append([m["symbol"], btnOpen])
cmd = GetCommand()
if cmd != "" and cmd != None:
Log("Receive interaction:", cmd)
# Parsing interaction messages: open:{"symbol":"LTC_USDT.swap","tradeType":0,"direction":"buy","amount":111}
# According to the first colon: the previous instruction determines which button template triggers the message
arrCmd = cmd.split(":")
if arrCmd[0] == "open":
msg = json.loads(cmd[5:])
Log("Trading instruments:", msg["symbol"], ", Trading direction:", msg["direction"], ", Order type:", "Market order" if msg["tradeType"] == 0 else "Limit order", ", Order price: current market price" if msg["tradeType"] == 0 else ", Order price:" + str(msg["price"]), ", Order quantity:", msg["amount"])
# Output status bar information
LogStatus(_D(), "\n", "`" + json.dumps(tbl) + "`")
Sleep(1000)
// Omit...
Используйте новейшую структуру кнопок для создания кнопок в таблице строки состояния. Дополнительная информация:Руководство пользователя - Интерактивные элементы управления в строке состояния.
function main() {
var table = {
type: 'table',
title: 'position operation',
cols: ['column1', 'column2', 'Action'],
rows: [
['abc', 'def', {'type':'button', 'cmd': 'coverAll', 'name': 'close positions'}]
]
}
var ticker = exchange.GetTicker()
// Add a row of data, merge the first and second cells, and output the ticker variable in the merged cell
table.rows.push([{body : JSON.stringify(ticker), colspan : 2}, "abc"])
LogStatus('`' + JSON.stringify(table) + '`')
}
import json
def main():
table = {
"type" : "table",
"title" : "position operation",
"cols" : ["column1", "column2", "Action"],
"rows" : [
["abc", "def", {"type": "button", "cmd": "coverAll", "name": "close positions"}]
]
}
ticker = exchange.GetTicker()
table["rows"].append([{"body": json.dumps(ticker), "colspan": 2}, "abc"])
LogStatus("`" + json.dumps(table) + "`")
void main() {
json table = R"({
"type" : "table",
"title" : "position operation",
"cols" : ["column1", "column2", "Action"],
"rows" : [
["abc", "def", {"type": "button", "cmd": "coverAll", "name": "close positions"}]
]
})"_json;
auto ticker = exchange.GetTicker();
json jsonTicker = R"({"Buy": 0, "Sell": 0, "High": 0, "Low": 0, "Volume": 0, "Last": 0, "Time": 0})"_json;
jsonTicker["Buy"] = ticker.Buy;
jsonTicker["Sell"] = ticker.Sell;
jsonTicker["Last"] = ticker.Last;
jsonTicker["Volume"] = ticker.Volume;
jsonTicker["Time"] = ticker.Time;
jsonTicker["High"] = ticker.High;
jsonTicker["Low"] = ticker.Low;
json arr = R"([{"body": {}, "colspan": 2}, "abc"])"_json;
arr[0]["body"] = jsonTicker;
table["rows"].push_back(arr);
LogStatus("`" + table.dump() + "`");
}
Горизонтальное объединение ячеек в таблице, составленнойLogStatus()
Функция:
function main() {
var table = {
type: 'table',
title: 'table demo',
cols: ['columnA', 'columnB', 'columnC'],
rows: [
['A1', 'B1', {'type':'button', 'cmd': 'coverAll', 'name': 'C1'}]
]
}
var ticker = exchange.GetTicker()
var name = exchange.GetName()
table.rows.push([{body : "A2 + B2:" + JSON.stringify(ticker), colspan : 2}, "C2"])
table.rows.push([{body : "A3 + A4 + A5:" + name, rowspan : 3}, "B3", "C3"])
// A3 is merged by the first cell in the previous row
table.rows.push(["B4", "C4"])
// A2 is merged by the first cell of the previous row
table.rows.push(["B5", "C5"])
table.rows.push(["A6", "B6", "C6"])
LogStatus('`' + JSON.stringify(table) + '`')
}
import json
def main():
table = {
"type" : "table",
"title" : "table demo",
"cols" : ["columnA", "columnB", "columnC"],
"rows" : [
["A1", "B1", {"type": "button", "cmd": "coverAll", "name": "C1"}]
]
}
ticker = exchange.GetTicker()
name = exchange.GetName()
table["rows"].append([{"body": "A2 + B2:" + json.dumps(ticker), "colspan": 2}, "C2"])
table["rows"].append([{"body": "A3 + A4 + A5:" + name, "rowspan": 3}, "B3", "C3"])
table["rows"].append(["B4", "C4"])
table["rows"].append(["B5", "C5"])
table["rows"].append(["A6", "B6", "C6"])
LogStatus("`" + json.dumps(table) + "`")
void main() {
json table = R"({
"type" : "table",
"title" : "table demo",
"cols" : ["columnA", "columnB", "columnC"],
"rows" : [
["A1", "B1", {"type": "button", "cmd": "coverAll", "name": "C1"}]
]
})"_json;
// For testing purposes, the code is short and easy to read, and the constructed data is used here
json jsonTicker = R"({"High": 0, "Low": 0, "Buy": 0, "Sell": 0, "Last": 0, "Time": 0, "Volume": 0})"_json;
auto name = exchange.GetName();
json arr1 = R"([{"body": "", "colspan": 2}, "C2"])"_json;
arr1[0]["body"] = "A2 + B2:" + jsonTicker.dump();
json arr2 = R"([{"body": "", "rowspan": 3}, "B3", "C3"])"_json;
arr2[0]["body"] = "A3 + A4 + A5:" + name;
table["rows"].push_back(arr1);
table["rows"].push_back(arr2);
table["rows"].push_back(R"(["B4", "C4"])"_json);
table["rows"].push_back(R"(["B5", "C5"])"_json);
table["rows"].push_back(R"(["A6", "B6", "C6"])"_json);
LogStatus("`" + table.dump() + "`");
}
Вертикально слить ячейки в таблице, нарисованнойLogStatus()
Функция:
function main() {
var table1 = {type: 'table', title: 'table1', cols: ['column1', 'column2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}
var table2 = {type: 'table', title: 'table2', cols: ['column1', 'column2'], rows: [ ['abc', 'def'], ['ABC', 'support color #ff0000']]}
LogStatus('`' + JSON.stringify([table1, table2]) + '`')
}
import json
def main():
table1 = {"type": "table", "title": "table1", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]}
table2 = {"type": "table", "title": "table2", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]}
LogStatus("`" + json.dumps([table1, table2]) + "`")
void main() {
json table1 = R"({"type": "table", "title": "table1", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]})"_json;
json table2 = R"({"type": "table", "title": "table2", "cols": ["column1", "column2"], "rows": [ ["abc", "def"], ["ABC", "support color #ff0000"]]})"_json;
json arr = R"([])"_json;
arr.push_back(table1);
arr.push_back(table2);
LogStatus("`" + arr.dump() + "`");
}
Показать таблицу строки состояния:
function main(){
var tab1 = {
type : "table",
title : "table1",
cols : ["1", "2"],
rows : []
}
var tab2 = {
type : "table",
title : "table2",
cols : ["1", "2", "3"],
rows : []
}
var tab3 = {
type : "table",
title : "table3",
cols : ["A", "B", "C"],
rows : []
}
tab1.rows.push(["jack", "lucy"])
tab2.rows.push(["A", "B", "C"])
tab3.rows.push(["A", "B", "C"])
LogStatus('`' + JSON.stringify(tab1) + '`\n' +
'`' + JSON.stringify(tab2) + '`\n' +
'`' + JSON.stringify(tab3) + '`')
Log("exit")
}
import json
def main():
tab1 = {
"type": "table",
"title": "table1",
"cols": ["1", "2"],
"rows": []
}
tab2 = {
"type": "table",
"title": "table2",
"cols": ["1", "2", "3"],
"rows": []
}
tab3 = {
"type": "table",
"title": "table3",
"cols": ["A", "B", "C"],
"rows": []
}
tab1["rows"].append(["jack", "lucy"])
tab2["rows"].append(["A", "B", "C"])
tab3["rows"].append(["A", "B", "C"])
LogStatus("`" + json.dumps(tab1) + "`\n" +
"`" + json.dumps(tab2) + "`\n" +
"`" + json.dumps(tab3) + "`")
void main() {
json tab1 = R"({
"type": "table",
"title": "table1",
"cols": ["1", "2"],
"rows": []
})"_json;
json tab2 = R"({
"type": "table",
"title": "table2",
"cols": ["1", "2", "3"],
"rows": []
})"_json;
json tab3 = R"({
"type": "table",
"title": "table3",
"cols": ["A", "B", "C"],
"rows": []
})"_json;
tab1["rows"].push_back(R"(["jack", "lucy"])"_json);
tab2["rows"].push_back(R"(["A", "B", "C"])"_json);
tab3["rows"].push_back(R"(["A", "B", "C"])"_json);
LogStatus("`" + tab1.dump() + "`\n" +
"`" + tab2.dump() + "`\n" +
"`" + tab3.dump() + "`");
}
В дополнение к отображению таблиц на страницах, несколько таблиц также могут отображаться в порядке сверху вниз:
function main() {
var tbl = {
type : "table",
title : "test scroll",
scroll : "auto",
cols : ["col 0", "col 1", "col 2", "col 3", "col 4", "col 5", "col 6", "col 7", "col 8", "col 9", "col 10",
"col 11", "col 12", "col 13", "col 14", "col 15", "col 16", "col 17", "col 18", "col 19", "col 20"],
rows : []
}
for (var i = 1 ; i < 100 ; i++) {
tbl.rows.push([i, "1," + i, "2," + i, "3," + i, "4," + i, "5," + i, "6," + i, "7," + i, "8," + i, "9," + i, "10," + i,
"11," + i, "12," + i, "13," + i, "14," + i, "15," + i, "16," + i, "17," + i, "18," + i, "19," + i, "20," + i])
}
LogStatus("`" + JSON.stringify(tbl) + "`")
}
import json
def main():
tbl = {
"type" : "table",
"title" : "test scroll",
"scroll" : "auto",
"cols" : ["col 0", "col 1", "col 2", "col 3", "col 4", "col 5", "col 6", "col 7", "col 8", "col 9", "col 10",
"col 11", "col 12", "col 13", "col 14", "col 15", "col 16", "col 17", "col 18", "col 19", "col 20"],
"rows" : []
}
for index in range(1, 100):
i = str(index)
tbl["rows"].append([i, "1," + i, "2," + i, "3," + i, "4," + i, "5," + i, "6," + i, "7," + i, "8," + i, "9," + i, "10," + i,
"11," + i, "12," + i, "13," + i, "14," + i, "15," + i, "16," + i, "17," + i, "18," + i, "19," + i, "20," + i])
LogStatus("`" + json.dumps(tbl) + "`")
void main() {
json table = R"({
"type" : "table",
"title" : "test scroll",
"scroll" : "auto",
"cols" : ["col 0", "col 1", "col 2", "col 3", "col 4", "col 5", "col 6", "col 7", "col 8", "col 9", "col 10",
"col 11", "col 12", "col 13", "col 14", "col 15", "col 16", "col 17", "col 18", "col 19", "col 20"],
"rows" : []
})"_json;
for (int index = 1; index < 100; ++index) {
std::string i = std::to_string(index);
table["rows"].push_back({i, "1," + i, "2," + i, "3," + i, "4," + i, "5," + i, "6," + i, "7," + i, "8," + i, "9," + i, "10," + i,
"11," + i, "12," + i, "13," + i, "14," + i, "15," + i, "16," + i, "17," + i, "18," + i, "19," + i, "20," + i});
}
LogStatus("`" + table.dump() + "`");
}
Поддержка установки горизонтального и вертикального режима прокрутки таблицы строки состояния.scroll
атрибут к"auto"
, когда число вертикальных строк таблицы полосы состояния превышает 20 строк, содержимое будет прокручиваться.scroll
атрибут может быть использован для устранения проблемы задержки записи большого количества данных в строку состояния во время торговли в режиме реального времени.
Выпуск информации изLogStatus()
Функция, когда ведется прямая торговля, не сохраняется в базе данных прямых торгов, но обновляет только содержимое текущей строки состояния прямых торгов.
ВLogStatus()
функция поддерживает печатьbase64
кодированные изображения, начиная с`
и заканчивается`
Например:LogStatus("`data:image/png;base64,AAAA`")
- Да.
ВLogStatus()
Функция поддерживает прохождениеmatplotlib.pyplot
объекты прямо вPython
, пока объект содержитsavefig
метод, он может быть передан в качестве параметра кLogStatus()
функция, например:
import matplotlib.pyplot as plt
def main():
plt.plot([3,6,2,4,7,1])
LogStatus(plt)
Когда стратегия работает в режиме реального времени, если вы просматриваете историю на странице реального времени, панель статуса будет бездействовать и перестанет обновляться. Только данные панели статуса обновляются, когда журнал находится на первой странице.base64
кодированные изображения в строке состояния, и он также поддерживает выходbase64
Поскольку строка данных зашифрованного изображения, как правило, очень длинная, код образца не отображается.
{@fun/Global/GetCommand GetCommand} - Что ты делаешь?
Включить или отключить регистрацию информации о заказах.
EnableLog (включен)
Еслиenable
параметр установлен на ложное значение, напримерfalse
, журнал заказов (т.е. журнал, генерируемый такими функциями, какexchange.Buy()
) не печатается и не записывается в базу данных торгов в режиме реального времени.
позволить
Истинно
Буль
function main() {
EnableLog(false)
}
def main():
EnableLog(False)
void main() {
EnableLog(false);
}
{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}, {@fun/Trade/exchange.CancelOrder exchange.CancelOrder}
Настроить функцию рисования диаграммы.
Объект с графиком. объект
Диаграмма (варианты)
Вoptions
Параметр - это конфигурация диаграммы.Chart()
параметр функцииoptions
являетсяJSON
сериализируемыйHighStocks
параметр дляHighcharts.StockChart
Дополнительный__isStock
атрибут добавляется над нативным параметром, и если__isStock:false
Если вы указываете, то он отображается как обычный график.__isStock
атрибут установлен на ложное значение, напримерfalse
, т.е. используемая диаграммаHighcharts
Если__isStock
атрибут установлен на истинное значение, напримерtrue
, т.е. используемая диаграммаHighstocks
График (по умолчанию)__isStock
Это правда, например.true
Вы можете запроситьБиблиотека графиков HighStocks- Да.
варианты
неправда
объект, массив объектов
function main() {
var cfgA = {
extension: {
layout: 'single', // No grouping, display separately, default to group 'group'
height: 300, // Specify the height
},
title: {
text: 'handicap chart'
},
xAxis: {
type: 'datetime'
},
series: [{
name: 'buy one',
data: [],
}, {
name: 'sell one',
data: [],
}]
}
var cfgB = {
title: {
text: 'spread chart'
},
xAxis: {
type: 'datetime'
},
series: [{
name: 'spread',
type: 'column',
data: [],
}]
}
var cfgC = {
__isStock: false,
title: {
text: 'pie chart'
},
series: [{
type: 'pie',
name: 'one',
data: [
["A", 25],
["B", 25],
["C", 25],
["D", 25],
] // Instead of updating the initial data with the add function, the sequence can be updated by changing the chart configuration directly.
}]
};
var cfgD = {
extension: {
layout: 'single',
col: 8, // Specify the cell value for the width, the total value is 12
height: '300px',
},
title: {
text: 'handicap chart'
},
xAxis: {
type: 'datetime'
},
series: [{
name: 'buy one',
data: [],
}, {
name: 'sell one',
data: [],
}]
}
var cfgE = {
__isStock: false,
extension: {
layout: 'single',
col: 4,
height: '300px',
},
title: {
text: 'pie chart2'
},
series: [{
type: 'pie',
name: 'one',
data: [
["A", 25],
["B", 25],
["C", 25],
["D", 25],
]
}]
};
var chart = Chart([cfgA, cfgB, cfgC, cfgD, cfgE]);
chart.reset()
// Add a number of points to the pie chart, add can only update the data points added by add, built-in data points cannot be updated later.
chart.add(3, {
name: "ZZ",
y: Math.random() * 100
});
while (true) {
Sleep(1000)
var ticker = exchange.GetTicker()
if (!ticker) {
continue;
}
var diff = ticker.Sell - ticker.Buy
cfgA.subtitle = {
text: 'buy one ' + ticker.Buy + ', sell one ' + ticker.Sell,
};
cfgB.subtitle = {
text: 'spread ' + diff,
};
chart.add([0, [new Date().getTime(), ticker.Buy]]);
chart.add([1, [new Date().getTime(), ticker.Sell]]);
// Equivalent to updating the first data series of the second chart
chart.add([2, [new Date().getTime(), diff]]);
chart.add(4, [new Date().getTime(), ticker.Buy]);
chart.add(5, [new Date().getTime(), ticker.Buy]);
cfgC.series[0].data[0][1] = Math.random() * 100;
cfgE.series[0].data[0][1] = Math.random() * 100;
// update is actually the same as resetting the chart's configuration
chart.update([cfgA, cfgB, cfgC, cfgD, cfgE]);
}
}
import random
import time
def main():
cfgA = {
"extension" : {
"layout" : "single",
"height" : 300,
"col" : 8
},
"title" : {
"text" : "handicap chart"
},
"xAxis" : {
"type" : "datetime"
},
"series" : [{
"name" : "buy one",
"data" : []
}, {
"name" : "sell one",
"data" : []
}]
}
cfgB = {
"title" : {
"text" : "spread chart"
},
"xAxis" : {
"type" : "datetime",
},
"series" : [{
"name" : "spread",
"type" : "column",
"data" : []
}]
}
cfgC = {
"__isStock" : False,
"title" : {
"text" : "pie chart"
},
"series" : [{
"type" : "pie",
"name" : "one",
"data" : [
["A", 25],
["B", 25],
["C", 25],
["D", 25],
]
}]
}
cfgD = {
"extension" : {
"layout" : "single",
"col" : 8,
"height" : "300px"
},
"title" : {
"text" : "handicap chart"
},
"series" : [{
"name" : "buy one",
"data" : []
}, {
"name" : "sell one",
"data" : []
}]
}
cfgE = {
"__isStock" : False,
"extension" : {
"layout" : "single",
"col" : 4,
"height" : "300px"
},
"title" : {
"text" : "pie chart2"
},
"series" : [{
"type" : "pie",
"name" : "one",
"data" : [
["A", 25],
["B", 25],
["C", 25],
["D", 25]
]
}]
}
chart = Chart([cfgA, cfgB, cfgC, cfgD, cfgE])
chart.reset()
chart.add(3, {
"name" : "ZZ",
"y" : random.random() * 100
})
while True:
Sleep(1000)
ticker = exchange.GetTicker()
if not ticker :
continue
diff = ticker["Sell"] - ticker["Buy"]
cfgA["subtitle"] = {
"text" : "buy one" + str(ticker["Buy"]) + "sell one" + str(ticker["Sell"])
}
cfgB["subtitle"] = {
"text" : "spread " + str(diff)
}
chart.add(0, [time.time() * 1000, ticker["Buy"]])
chart.add(1, [time.time() * 1000, ticker["Sell"]])
chart.add(2, [time.time() * 1000, diff])
chart.add(4, [time.time() * 1000, ticker["Buy"]])
chart.add(5, [time.time() * 1000, ticker["Buy"]])
cfgC["series"][0]["data"][0][1] = random.random() * 100
cfgE["series"][0]["data"][0][1] = random.random() * 100
void main() {
json cfgA = R"({
"extension" : {
"layout" : "single",
"height" : 300,
"col" : 8
},
"title" : {
"text" : "handicap chart"
},
"xAxis" : {
"type" : "datetime"
},
"series" : [{
"name" : "buy one",
"data" : []
}, {
"name" : "sell one",
"data" : []
}]
})"_json;
json cfgB = R"({
"title" : {
"text" : "spread chart"
},
"xAxis" : {
"type" : "datetime"
},
"series" : [{
"name" : "spread",
"type" : "column",
"data" : []
}]
})"_json;
json cfgC = R"({
"__isStock" : false,
"title" : {
"text" : "pie chart"
},
"series" : [{
"type" : "pie",
"name" : "one",
"data" : [
["A", 25],
["B", 25],
["C", 25],
["D", 25]
]
}]
})"_json;
json cfgD = R"({
"extension" : {
"layout" : "single",
"col" : 8,
"height" : "300px"
},
"title" : {
"text" : "handicap chart"
},
"series" : [{
"name" : "buy one",
"data" : []
}, {
"name" : "sell one",
"data" : []
}]
})"_json;
json cfgE = R"({
"__isStock" : false,
"extension" : {
"layout" : "single",
"col" : 4,
"height" : "300px"
},
"title" : {
"text" : "pie chart2"
},
"series" : [{
"type" : "pie",
"name" : "one",
"data" : [
["A", 25],
["B", 25],
["C", 25],
["D", 25]
]
}]
})"_json;
auto chart = Chart({cfgA, cfgB, cfgC, cfgD, cfgE});
chart.reset();
json zz = R"({
"name" : "ZZ",
"y" : 0
})"_json;
zz["y"] = rand() % 100;
chart.add(3, zz);
while(true) {
Sleep(1000);
auto ticker = exchange.GetTicker();
if(!ticker.Valid) {
continue;
}
auto diff = ticker.Sell - ticker.Buy;
json cfgASubTitle = R"({"text" : ""})"_json;
cfgASubTitle["text"] = format("buy one %f , sell one %f", ticker.Buy, ticker.Sell);
cfgA["subtitle"] = cfgASubTitle;
json cfgBSubTitle = R"({"text" : ""})"_json;
cfgBSubTitle["text"] = format("spread %f", diff);
cfgB["subtitle"] = cfgBSubTitle;
chart.add(0, {Unix() * 1000, ticker.Buy});
chart.add(1, {Unix() * 1000, ticker.Sell});
chart.add(2, {Unix() * 1000, diff});
chart.add(4, {Unix() * 1000, ticker.Buy});
chart.add(5, {Unix() * 1000, ticker.Buy});
cfgC["series"][0]["data"][0][1] = rand() % 100;
cfgE["series"][0]["data"][0][1] = rand() % 100;
chart.update({cfgA, cfgB, cfgC, cfgD, cfgE});
}
}
Конфигурация чертежа с несколькими диаграммами:
extension.layout
атрибут
Если атрибут установлен с значением extension.height
атрибут
Атрибут используется для настройки высоты диаграммы, либо в виде числового значения, либо в виде extension.col
атрибут
Атрибут используется для установки ширины диаграммы, ширина страницы делится на 12 ячеек, набор 8, то есть диаграмма занимает 8 ячеек ширины.// This chart is an object in the JavaScript language, and before using the Chart function, we need to declare an object variable chart to configure the chart. var chart = {
// This field marks whether the chart is a general chart or not, if you are interested, you can change it to false and run it.
__isStock: true,
// Scaling tool
tooltip: {xDateFormat: '%Y-%m-%d %H:%M:%S, %A'},
// title
title : { text : 'spread analysis chart'},
// selection range
rangeSelector: {
buttons: [{type: 'hour',count: 1, text: '1h'}, {type: 'hour',count: 3, text: '3h'}, {type: 'hour', count: 8, text: '8h'}, {type: 'all',text: 'All'}],
selected: 0,
inputEnabled: false
},
// Coordinate axis horizontal axis that is: x-axis, the current setting type is: time
xAxis: { type: 'datetime'},
// Coordinate axis vertical axis that is: y-axis, default value adjusted with the size of the data
yAxis : {
// title
title: {text: 'spread'},
// Whether to enable the right vertical axis
opposite: false
},
// Data series, this sttribute holds the individual data series (lines, K-charts, labels, etc...)
series : [
// The index is 0, and the data array holds the data of the index series
{name : "line1", id : "line1,buy1Price", data : []},
// Index is 1, set dashStyle:'shortdash' i.e.: set the dashed line
{name : "line2", id : "line2,lastPrice", dashStyle : 'shortdash', data : []}
]
} function main(){
// Call the Chart function to initialize the chart
var ObjChart = Chart(chart)
// Clear out
ObjChart.reset()
while(true){
// Gets the timestamp of this poll, i.e. a millisecond timestamp. It's used to determine the position of the X-axis written to the chart.
var nowTime = new Date().getTime()
// Get the ticker data
var ticker = _C(exchange.GetTicker)
// Get buy one price from the return value of the ticker data
var buy1Price = ticker.Buy
// To obtain the final transaction price, we add 1 in order not to overlap the 2 lines
var lastPrice = ticker.Last + 1
// Data sequence with timestamp as X-value and buy one price as Y-value passed into index 0
ObjChart.add(0, [nowTime, buy1Price])
// ditto
ObjChart.add(1, [nowTime, lastPrice])
Sleep(2000)
}
}```
```python
import time
chart = {
"__isStock" : True,
"tooltip" : {"xDateFormat" : "%Y-%m-%d %H:%M:%S, %A"},
"title" : {"text" : "spread analysis chart"},
"rangeSelector" : {
"buttons" : [{"type": "count", "count": 1, "text": "1h"}, {"type": "hour", "count": 3, "text": "3h"}, {"type": "hour", "count": 8, "text": "8h"}, {"type": "all", "text": "All"}],
"selected": 0,
"inputEnabled": False
},
"xAxis": {"type": "datetime"},
"yAxis": {
"title": {"text": "spread"},
"opposite": False
},
"series": [{
"name": "line1", "id": "line1,buy1Price", "data": []
}, {
"name": "line2", "id": "line2,lastPrice", "dashStyle": "shortdash", "data": []
}]
}
def main():
ObjChart = Chart(chart)
ObjChart.reset()
while True:
nowTime = time.time() * 1000
ticker = exchange.GetTicker()
buy1Price = ticker["Buy"]
lastPrice = ticker["Last"] + 1
ObjChart.add(0, [nowTime, buy1Price])
ObjChart.add(1, [nowTime, lastPrice])
Sleep(2000)
void main() {
// When writing strategies in C++, try not to declare global variables that are not of the base type, so the chart configuration object is declared inside the main function.
json chart = R"({
"__isStock" : true,
"tooltip" : {"xDateFormat" : "%Y-%m-%d %H:%M:%S, %A"},
"title" : {"text" : "spread analysis chart"},
"rangeSelector" : {
"buttons" : [{"type": "count", "count": 1, "text": "1h"}, {"type": "hour", "count": 3, "text": "3h"}, {"type": "hour", "count": 8, "text": "8h"}, {"type": "all", "text": "All"}],
"selected": 0,
"inputEnabled": false
},
"xAxis": {"type": "datetime"},
"yAxis": {
"title": {"text": "spread"},
"opposite": false
},
"series": [{
"name": "line1", "id": "line1,buy1Price", "data": []
}, {
"name": "line2", "id": "line2,lastPrice", "dashStyle": "shortdash", "data": []
}]
})"_json;
auto ObjChart = Chart(chart);
ObjChart.reset();
while(true) {
auto nowTime = Unix() * 1000;
auto ticker = exchange.GetTicker();
auto buy1Price = ticker.Buy;
auto lastPrice = ticker.Last + 1.0;
ObjChart.add(0, {nowTime, buy1Price});
ObjChart.add(1, {nowTime, lastPrice});
Sleep(2000);
}
}
Пример простого рисунка:
// Objects used to initialize the chart
var chart = {
// Chart title
title: {text: "line value triggers the plotLines value"},
// Y-axis related settings
yAxis: {
// A horizontal line perpendicular to the Y-axis, used as a trigger line, is a structural array that can set multiple trigger lines
plotLines: [{
// The value of the trigger line, how much it set, this line will be displayed in the corresponding value position
value: 0,
// Set the color of the trigger line
color: 'red',
// Width
width: 2,
// Displaying labels
label: {
// Label text
text: 'Trigger value',
// Centered label position
align: 'center'
}
}]
},
// X-axis related settings, here the setting type is time axis
xAxis: {type: "datetime"},
series: [
{name: "sin", type: "spline", data: []},
// This is an important data series, you can set multiple data series, according to the array index control
{name: "cos", type: "spline", data: []}
]
}
function main(){
// Circumference
var pi = 3.1415926535897
// Variables for recording timestamps
var time = 0
// Angle
var angle = 0
// Coordinate y values for receiving sine and cosine values
var y = 0
// Call the API interface to initialize the chart with the chart object
var objChart = Chart(chart)
// Initially, clear the chart
objChart.reset()
// Set the value of the trigger line to 1
chart.yAxis.plotLines[0].value = 1
// Loop
while(true){
// Get the timestamp of the current moment
time = new Date().getTime()
// Angle increases by 5 degrees every 500ms and calculates the sine value
y = Math.sin(angle * 2 * pi / 360)
// Write the calculated y value to the data series of the corresponding index of the chart, the first parameter of the add function is the specified data series index
objChart.add(0, [time, y])
// Calculate the cosine value
y = Math.cos(angle * 2 * pi / 360)
objChart.add(1, [time, y])
// Increase by 5 degrees
angle += 5
// Pause for 5 seconds to avoid drawing too often and growing data too fast
Sleep(5000)
}
}
import math
import time
chart = {
"title": {"text": "line value triggers the plotLines value"},
"yAxis": {
"plotLines": [{
"value": 0,
"color": "red",
"width": 2,
"label": {
"text": "trigger value",
"align": "center"
}
}]
},
"xAxis": {"type": "datetime"},
"series": [{"name": "sin", "type": "spline", "data": []},
{"name": "cos", "type": "spline", "data": []}]
}
def main():
pi = 3.1415926535897
ts = 0
angle = 0
y = 0
objChart = Chart(chart)
objChart.reset()
chart["yAxis"]["plotLines"][0]["value"] = 1
while True:
ts = time.time() * 1000
y = math.sin(angle * 2 * pi / 360)
objChart.add(0, [ts, y])
y = math.cos(angle * 2 * pi / 360)
objChart.add(1, [ts, y])
angle += 5
Sleep(5000)
void main() {
json chart = R"({
"title": {"text": "line value triggers the plotLines value"},
"yAxis": {
"plotLines": [{
"value": 0,
"color": "red",
"width": 2,
"label": {
"text": "trigger value",
"align": "center"
}
}]
},
"xAxis": {"type": "datetime"},
"series": [{"name": "sin", "type": "spline", "data": []},
{"name": "cos", "type": "spline", "data": []}]
})"_json;
auto pi = 3.1415926535897;
auto ts = 0;
auto angle = 0.0;
auto y = 0.0;
auto objChart = Chart(chart);
objChart.reset();
chart["yAxis"]["plotLines"][0]["value"] = 1;
while(true) {
ts = Unix() * 1000;
y = sin(angle * 2 * pi / 360);
objChart.add(0, {ts, y});
y = cos(angle * 2 * pi / 360);
objChart.add(1, {ts, y});
angle += 5;
Sleep(5000);
}
}
Пример рисунка тригонометрической кривой:
/*backtest
start: 2020-03-11 00:00:00
end: 2020-04-09 23:59:00
period: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
var chartCfg = {
subtitle: {
text: "subtitle",
},
yAxis: [{
height: "40%",
lineWidth: 2,
title: {
text: 'PnL',
},
tickPixelInterval: 20,
minorGridLineWidth: 1,
minorTickWidth: 0,
opposite: true,
labels: {
align: "right",
x: -3,
}
}, {
title: {
text: 'Profit',
},
top: "42%",
height: "18%",
offset: 0,
lineWidth: 2
}, {
title: {
text: 'Vol',
},
top: '62%',
height: '18%',
offset: 0,
lineWidth: 2
}, {
title: {
text: 'Asset',
},
top: '82%',
height: '18%',
offset: 0,
lineWidth: 2
}],
series: [{
name: 'PnL',
data: [],
id: 'primary',
tooltip: {
xDateFormat: '%Y-%m-%d %H:%M:%S'
},
yAxis: 0
}, {
type: 'column',
lineWidth: 2,
name: 'Profit',
data: [],
yAxis: 1,
}, {
type: 'column',
name: 'Trade',
data: [],
yAxis: 2
}, {
type: 'area',
step: true,
lineWidth: 0,
name: 'Long',
data: [],
yAxis: 2
}, {
type: 'area',
step: true,
lineWidth: 0,
name: 'Short',
data: [],
yAxis: 2
}, {
type: 'line',
step: true,
color: '#5b4b00',
name: 'Asset',
data: [],
yAxis: 3
}, {
type: 'pie',
innerSize: '70%',
name: 'Random',
data: [],
center: ['3%', '6%'],
size: '15%',
dataLabels: {
enabled: false
},
startAngle: -90,
endAngle: 90,
}],
};
function main() {
let c = Chart(chartCfg);
let preTicker = null;
while (true) {
let t = exchange.GetTicker();
c.add(0, [t.Time, t.Last]); // PnL
c.add(1, [t.Time, preTicker ? t.Last - preTicker.Last : 0]); // profit
let r = Math.random();
var pos = parseInt(t.Time/86400);
c.add(2, [t.Time, pos/2]); // Vol
c.add(3, [t.Time, r > 0.8 ? pos : null]); // Long
c.add(4, [t.Time, r < 0.8 ? -pos : null]); // Short
c.add(5, [t.Time, Math.random() * 100]); // Asset
// update pie
chartCfg.series[chartCfg.series.length-1].data = [
["A", Math.random()*100],
["B", Math.random()*100],
];
c.update(chartCfg)
preTicker = t;
}
}
'''backtest
start: 2020-03-11 00:00:00
end: 2020-04-09 23:59:00
period: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''
import random
chartCfg = {
"subtitle": {
"text": "subtitle"
},
"yAxis": [{
"height": "40%",
"lineWidth": 2,
"title": {
"text": 'PnL'
},
"tickPixelInterval": 20,
"minorGridLineWidth": 1,
"minorTickWidth": 0,
"opposite": True,
"labels": {
"align": "right",
"x": -3
}
}, {
"title": {
"text": 'Profit'
},
"top": "42%",
"height": "18%",
"offset": 0,
"lineWidth": 2
}, {
"title": {
"text": 'Vol'
},
"top": '62%',
"height": '18%',
"offset": 0,
"lineWidth": 2
}, {
"title": {
"text": 'Asset'
},
"top": '82%',
"height": '18%',
"offset": 0,
"lineWidth": 2
}],
"series": [{
"name": 'PnL',
"data": [],
"id": 'primary',
"tooltip": {
"xDateFormat": '%Y-%m-%d %H:%M:%S'
},
"yAxis": 0
}, {
"type": 'column',
"lineWidth": 2,
"name": 'Profit',
"data": [],
"yAxis": 1
}, {
"type": 'column',
"name": 'Trade',
"data": [],
"yAxis": 2
}, {
"type": 'area',
"step": True,
"lineWidth": 0,
"name": 'Long',
"data": [],
"yAxis": 2
}, {
"type": 'area',
"step": True,
"lineWidth": 0,
"name": 'Short',
"data": [],
"yAxis": 2
}, {
"type": 'line',
"step": True,
"color": '#5b4b00',
"name": 'Asset',
"data": [],
"yAxis": 3
}, {
"type": 'pie',
"innerSize": '70%',
"name": 'Random',
"data": [],
"center": ['3%', '6%'],
"size": '15%',
"dataLabels": {
"enabled": False
},
"startAngle": -90,
"endAngle": 90
}]
}
def main():
c = Chart(chartCfg)
preTicker = None
while True:
t = exchange.GetTicker()
c.add(0, [t["Time"], t["Last"]])
profit = t["Last"] - preTicker["Last"] if preTicker else 0
c.add(1, [t["Time"], profit])
r = random.random()
pos = t["Time"] / 86400
c.add(2, [t["Time"], pos / 2])
long = pos if r > 0.8 else None
c.add(3, [t["Time"], long])
short = -pos if r < 0.8 else None
c.add(4, [t["Time"], short])
c.add(5, [t["Time"], random.random() * 100])
# update pie
chartCfg["series"][len(chartCfg["series"]) - 1]["data"] = [
["A", random.random() * 100],
["B", random.random() * 100]
]
c.update(chartCfg)
preTicker = t
/*backtest
start: 2020-03-11 00:00:00
end: 2020-04-09 23:59:00
period: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
void main() {
json chartCfg = R"({
"subtitle": {
"text": "subtitle"
},
"yAxis": [{
"height": "40%",
"lineWidth": 2,
"title": {
"text": "PnL"
},
"tickPixelInterval": 20,
"minorGridLineWidth": 1,
"minorTickWidth": 0,
"opposite": true,
"labels": {
"align": "right",
"x": -3
}
}, {
"title": {
"text": "Profit"
},
"top": "42%",
"height": "18%",
"offset": 0,
"lineWidth": 2
}, {
"title": {
"text": "Vol"
},
"top": "62%",
"height": "18%",
"offset": 0,
"lineWidth": 2
}, {
"title": {
"text": "Asset"
},
"top": "82%",
"height": "18%",
"offset": 0,
"lineWidth": 2
}],
"series": [{
"name": "PnL",
"data": [],
"id": "primary",
"tooltip": {
"xDateFormat": "%Y-%m-%d %H:%M:%S"
},
"yAxis": 0
}, {
"type": "column",
"lineWidth": 2,
"name": "Profit",
"data": [],
"yAxis": 1
}, {
"type": "column",
"name": "Trade",
"data": [],
"yAxis": 2
}, {
"type": "area",
"step": true,
"lineWidth": 0,
"name": "Long",
"data": [],
"yAxis": 2
}, {
"type": "area",
"step": true,
"lineWidth": 0,
"name": "Short",
"data": [],
"yAxis": 2
}, {
"type": "line",
"step": true,
"color": "#5b4b00",
"name": "Asset",
"data": [],
"yAxis": 3
}, {
"type": "pie",
"innerSize": "70%",
"name": "Random",
"data": [],
"center": ["3%", "6%"],
"size": "15%",
"dataLabels": {
"enabled": false
},
"startAngle": -90,
"endAngle": 90
}]
})"_json;
Chart c = Chart(chartCfg);
Ticker preTicker;
while(true) {
auto t = exchange.GetTicker();
c.add(0, {t.Time, t.Last});
auto profit = preTicker.Valid ? t.Last - preTicker.Last : 0;
c.add(1, {t.Time, profit});
auto r = rand() % 100;
auto pos = t.Time / 86400.0;
c.add(2, {t.Time, pos / 2.0});
auto longPos = r > 0.8 ? pos : NULL;
c.add(3, {t.Time, longPos});
auto shortPos = r < 0.8 ? -pos : NULL;
c.add(4, {t.Time, shortPos});
c.add(5, {t.Time, rand() % 100});
// update pie
json pie = R"([["A", 0], ["B", 0]])"_json;
pie[0][1] = rand() % 100;
pie[1][1] = rand() % 100;
chartCfg["series"][chartCfg["series"].size() - 1]["data"] = pie;
c.update(chartCfg);
preTicker = t;
}
}
Сложные примеры использования гибридных диаграмм:
// update pie
chartCfg.series[chartCfg.series.length-1].data = [
["A", Math.random()*100],
["B", Math.random()*100],
];
c.update(chartCfg)
# update pie
chartCfg["series"][len(chartCfg["series"]) - 1]["data"] = [
["A", random.random() * 100],
["B", random.random() * 100]
]
c.update(chartCfg)
// update pie
json pie = R"([["A", 0], ["B", 0]])"_json;
pie[0][1] = rand() % 100;
pie[1][1] = rand() % 100;
chartCfg["series"][chartCfg["series"].size() - 1]["data"] = pie;
c.update(chartCfg);
Типовые схемыpie
Например, код в приведенном выше примере обновляет график, используяc.update(chartCfg)
после обновления данных следующим образом:
ВChart()
функция возвращает объект диаграмма, который имеет 4 метода:add()
, reset()
, update()
, del()
.
update()
Метод:
Вupdate()
Параметр этого метода - объект конфигурации диаграммы (JSON).del()
Метод:
Вdel()
Метод может удалить серию данных указанного индекса на основе параметра прошедшей серии.add()
Метод:
Вadd()
Метод может записывать данные на графике, с следующими параметрами в порядке:series
: используется для установки индекса серии данных, который является целым числом.data
: используется для настройки конкретных данных для записи, это массив.index
(необязательно): используется для настройки индекса данных, это целое число. Укажите конкретное положение индекса измененных данных, и он поддерживает отрицательные числа, настройка-1
относится к последним данным набора данных.
Например, при рисовании линии изменять данные в последней точке линии:chart.add(0, [1574993606000, 13.5], -1)
, т.е. изменить данные на предпоследней первой точке диаграммыseries[0].data
- Да.
Вindex
параметр не установлен, что означает, что данные добавляются в последнюю точку текущей серии данных.reset()
Метод:
Вreset()
Метод используется для опустошения данных диаграммы.reset()
Метод может принимать параметрremain
чтобы указать количество записей, которые нужно сохранить.remain
пропускается для очистки всех данных.{@fun/Log/KLineChart KLineChart} Я не знаю.
Функция используется для пользовательского рисования в время выполнения стратегии с использованием метода рисования, аналогичногоPine
language.
Объект диаграммы.KLineChart()
функция возвращает объект диаграмма с несколькими методами, среди которых вам нужно обратить внимание наbegin()
иclose()
. Операция чертежа должна начинаться сbegin()
вызов функции и конец сclose()
вызов функции при пересечении данных KLine для выполнения операции чертежа.
объект
KLineChart ((возможности)
Вoptions
Параметр - это конфигурация диаграммы.
варианты
неправда
объект, массив объектов
function main() {
// Call the KLineChart function to create a chart control object c
let c = KLineChart({
overlay: true
})
// Use the Spot Exchange object test to get K-line data. If you use the futures exchange object test, you need to set up the contract first.
let bars = exchange.GetRecords()
if (!bars) {
return
}
// Execute the drawing operation by traversing over the K-line data. The drawing operation must start with the ```c.begin(bar)``` function call and end with the ```c.close()``` function call.
bars.forEach(function(bar, index) {
c.begin(bar)
c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)')
if (bar.Close > bar.Open) {
c.bgcolor('rgba(0, 255, 0, 0.5)')
}
let h = c.plot(bar.High, 'high')
let l = c.plot(bar.Low, 'low')
c.fill(h, l, {
color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)'
})
c.hline(bar.High)
c.plotarrow(bar.Close - bar.Open)
c.plotshape(bar.Low, {
style: 'diamond'
})
c.plotchar(bar.Close, {
char: 'X'
})
c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
if (bar.Close > bar.Open) {
// long/short/closelong/closeshort
c.signal("long", bar.High, 1.5)
} else if (bar.Close < bar.Open) {
c.signal("closelong", bar.Low, 1.5)
}
c.close()
})
}
def main():
# Call the KLineChart function to create a chart control object c
c = KLineChart({
"overlay": True
})
# Use the Spot Exchange object test to get K-line data. If you use the futures exchange object test, you need to set up the contract first.
bars = exchange.GetRecords()
if not bars:
return
for bar in bars:
c.begin(bar)
c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)')
if bar.Close > bar.Open:
c.bgcolor('rgba(0, 255, 0, 0.5)')
h = c.plot(bar.High, 'high')
l = c.plot(bar.Low, 'low')
c.fill(h, l, 'rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(255, 0, 0, 0.2)')
c.hline(bar.High)
c.plotarrow(bar.Close - bar.Open)
c.plotshape(bar.Low, style = 'diamond')
c.plotchar(bar.Close, char = 'X')
c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
if bar.Close > bar.Open:
# long/short/closelong/closeshort
c.signal("long", bar.High, 1.5)
elif bar.Close < bar.Open:
c.signal("closelong", bar.Low, 1.5)
c.close()
// Not supported for now
Если объект управления графиком необходим для рисования в зоне рисования стратегии, используйтеKLineChart()
Параметр к объектуKLineChart()
функция - это структура конфигурации диаграммы, используемая в коде ссылки проста:{overlay: true}
. Эта структура конфигурации диаграмма устанавливает только содержание рисунка, которое должно выводиться на основной диаграмме.overlay
устанавливается на значение false, напримерfalse
, содержание на графике выводится на вторичном графике. Если вам нужно указать чертежную функцию, чтобы нарисовать на главном графике, вы также можете указать параметрoverlay
как истинное значение в конкретном вызове функции, например:true
.
c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)') // Use the example illustrated in the reference code in this example, without further ado
c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)')
// Not supported for now
Функции интерфейса чертежаPine
язык, поддерживаемый в операции черчения:barcolor
, который устанавливает цвет линии К.
barcolor ((цвет, смещение, редактируемые, show_last, заголовок, отображение) параметры отображения необязательны:
ни один , все
c.bgcolor('rgba(0, 255, 0, 0.5)')
c.bgcolor('rgba(0, 255, 0, 0.5)')
// Not supported for now
bgcolor
, заполняет фон линии K указанным цветом.
bgcolor ((цвет, смещение, редактируемые, show_last, заголовок, отображение, наложение) параметры отображения необязательны:
ни один , все
c.plot(bar.High, 'high')
c.plot(bar.Open < bar.Close ? NaN : bar.Close, "Close", {style: "linebr"}) // Support for drawing discontinuous data lines
h = c.plot(bar.High, 'high')
h = c.plot(None if bar.Open < bar.Close else bar.Close, "Close", style = "linebr") # Support for drawing discontinuous data lines
// Not supported for now
plot
, изображает ряд данных на графике.
plot ((серия, заголовок, цвет, ширина строки, стиль, цена отслеживания, histbase, смещение, присоединение, редактируемое, показать_последний, отображение) параметры стиля необязательны:
stepline_diamond , stepline , cross , areabr , area , circles , columns , histogram , linebr , line параметры отображения необязательны: ни один , все
let h = c.plot(bar.High, 'high')
let l = c.plot(bar.Low, 'low')
c.fill(h, l, {color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)'})
h = c.plot(bar.High, 'high')
l = c.plot(bar.Low, 'low')
c.fill(h, l, color = 'rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(255, 0, 0, 0.2)'})
// Not supported for now
fill
, заполнить фон между двумя участками илиhline
с предоставленными цветами.
заполнить ((линия1, линия2, цвет, заголовок, редактируемый, заполнить пробелы, отобразить) параметры отображения необязательны:
ни один , все
С тех порJavaScript
язык не может указать входящие параметры на основе названий функций формальных параметров, чтобы решить эту проблему, вы можете использовать{key: value}
структура для указания параметров, которые должны быть переданы определенному формальному названию параметра.
Например, в коде ссылки используется{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0, 0.2)'}
Указываетcolor
параметрfill
Функция.
Если вам нужно указать несколько параметров с последовательными названиями форм параметров, вы можете использовать{key1: value1, key2: value2, key3: value3}
- Да.
Например, в этом примере дополнительныйtitle
параметр указан:{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0, 0.2)', title: 'fill'}
- Да.
Для цветного значения, вы можете установить его с'rgba(255, 0, 0, 0, 0.2)'
или с'#FF0000'
.
c.hline(bar.High)
c.hline(bar.High)
// Not supported for now
hline
, горизонтальная линия представлена на заданном фиксированном ценовом уровне.
hline ((цена, название, цвет, стиль строки, ширина строки, редактируемый, отображаемый) параметры стиля строки необязательны:
полосатый , точечный , твердый параметры отображения необязательны: ни один , все
c.plotarrow(bar.Close - bar.Open)
c.plotarrow(bar.Close - bar.Open)
// Not supported for now
plotarrow
, изображайте стрелки вверх и вниз на диаграмме.
Plotarrow ((серия, заголовок, цветовая разборка, цветовой снижение, смещение, мини-высота, максимальная высота, редактируемые, show_last, отображение) параметры отображения необязательны:
ни один , все
c.plotshape(bar.Low, {style: 'diamond'})
c.plotshape(bar.Low, style = 'diamond')
// Not supported for now
plotshape
, нарисуйте на графике визуальные формы.
Plotshape (серия, заголовок, стиль, местоположение, цвет, смещение, текст, textcolor, редактируемый, размер, show_last, отображение) параметры стиля необязательны:
diamond size.autoЭто размер. параметры отображения необязательны:, square , label_down , label_up , arrow_down , arrow_up , circle , flag , triangle_down , triangle_up , cross , xcross параметры расположения необязательны: верхняя полоса , нижняя полоса , верхняя , нижняя , абсолютная параметры размера необязательны: 10px , 14px , 20px , 40px , 80px , сравнивая size.tiny, size.small, size.normal, size.large, size.huge на языке Пайн. ни один , все
c.plotchar(bar.Close, {char: 'X'})
c.plotchar(bar.Close, char = 'X')
// Not supported for now
plotchar
, нарисуйте визуальные формы на графике с использованием любого определенного символа Unicode.
plotchar ((серия, заголовок, char, местоположение, цвет, смещение, текст, textcolor, редактируемый, размер, show_last, отображение) параметры расположения необязательны:
верхняя полоса size.autoЭто размер. параметры отображения необязательны:, нижняя полоса , верхняя , нижняя , абсолютная параметры размера необязательны: 10px , 14px , 20px , 40px , 80px , сравнивая size.tiny, size.small, size.normal, size.large, size.huge на языке Пайн. ни один , все
c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
// Not supported for now
plotcandle
, изобразить K-линейный график на графике.
plotcandle ((открыть, высоко, низко, близко, название, цвет, wickcolor, редактируемый, show_last, bordercolor, display) параметры отображения необязательны:
ни один , все
c.signal("long", bar.High, 1.5)
c.signal("long", bar.High, 1.5)
// Not supported for now
signal
, функция, недоступная на языке Pine, используется для чертежей сигналов покупки и продажи здесь.
сигнал ((направление, цена, qty, id) Параметр
long передается для указания направления транзакции, вы можете выбрать long , closelong , short , closeshort . bar.High
это положение маркерного сигнала по оси Y. Переданный параметр 1.5 указывает количество транзакций сигнала. Четвертый параметр может быть передан для замены выведенного текстового содержания по умолчанию, а текст выведенного сигнала - направление транзакции, напримерcloselong .
c.reset()
c.reset()
// Not supported for now
reset
, функция, недоступная на языке Pine, используется для опустошения данных диаграммы.
Перезагрузить (остаться) В
reset()
метод может принимать один параметр,remain
, чтобы указать количество данных, которые необходимо хранить.remain
означает очистку всех данных.
Стратегия пользовательский рисунок может использовать только один из способовKLineChart()
функции илиChart()
Для некоторых цветовых и стилевых настроек, используемых вKLineChart()
Функция вызов, пожалуйста, обратитесь кИспользуйте функцию KLineChart, чтобы упростить проектирование чертежей стратегии.
{@fun/Log/Chart Chart} (Смеется)
Очистите бревно.
LogReset ((остаться)
Вremain
Параметр используется для установки количества последних записей журнала.
оставаться
ложное
Номер
function main() {
// Keep the last 10 logs and clear the rest
LogReset(10)
}
def main():
LogReset(10)
void main() {
LogReset(10);
}
Журнал запуска для каждого начала стратегии в режиме реального времени считается одним, поэтому, если параметры не передаются и нет вывода журнала в начале стратегии, никакие журналы не будут отображаться вообще, ожидая возвращения журнала докера (не исключение).
{@fun/Log Log}, {@fun/Log/LogVacuum LogVacuum}, {@fun/Log Log}, {@fun/Log/LogVacuum LogVacuum}, {@fun/Log/LogVacuum}, {@fun/Log/LogVacuum LogVacuum}, {@fun/Log/LogVacuum}, {@fun/Log/LogVacuum LogVacuum}, {@fun/LogVacuum}, {@fun/Log/LogVacuum}, {@fun/LogVacuum}, {@fun/LogVacuum},
Используется для восстановления места хранения, занятогоSQLiteпри удалении данных после вызоваLogReset()
Функция очистки журнала.
Логавакуум ((()
function main() {
LogReset()
LogVacuum()
}
def main():
LogReset()
LogVacuum()
void main() {
LogReset()
LogVacuum()
}
Причина в том, чтоSQLite
не восстанавливает занимаемое пространство при удалении данных, и он должен выполнятьVACUUM
Операция перемещения файлов происходит при вызове этой функции, и задержка большая, поэтому рекомендуется вызвать в подходящий временной интервал.
{@fun/Log/LogReset LogReset} - Я не знаю.
Он используется для вывода информации о отлаживании в столбце 123456
,console.log
функция выводит информацию о отлаживании на живой странице торговли, и в то же время, создать файл журнала с расширением.log
и написать информацию отладки в/logs/storage/123456/
в каталоге докера, к которому принадлежит прямая торговля, с префиксом файлового имениstdout_
.
консоль.log ((...msgs)
Параметрmsg
является содержанием вывода, и параметрmsg
может пройти более одного.
СМС
ложное
string, number, bool, object, array, null и другие типы, поддерживаемые системой.
function main() {
console.log("test console.log")
}
# Not supported
// Not supported
JavaScript
язык поддерживает эту функцию.[object Object]
, так что постарайтесь вывести как можно больше читаемой информации.{@fun/Log/console.error консоль.error}
Используется для вывода ошибок в поле 123456
,console.error
функция создает файл журнала с расширением.log
в/logs/storage/123456/
каталог докера, где живая торговля принадлежит, и пишет выход ошибки с префиксомstderr_
.
консоль.ошибка...
Параметрmsg
является содержанием вывода, и параметрmsg
может пройти более одного.
СМС
ложное
string, number, bool, object, array, null и другие типы, поддерживаемые системой.
function main() {
console.error("test console.error")
}
# Not supported
// Not supported
JavaScript
язык поддерживает эту функцию.[object Object]
, так что постарайтесь вывести как можно больше читаемой информации.{@fun/Log/console.log консоль.log}
Получить структуру {@struct/Ticker Ticker} спота или контракта, соответствующую в настоящее время установленной торговой паре, код контракта, т.е. данные тикера.GetTicker ()
функция является членом функции обмена объекта {@var/EXCHANGE exchange}, использованиеexchange
функции (методы) элемента объекта, относящиеся только кexchange
, и это не будет повторяться в документе.
Вexchange.GetTicker()
функция возвращает структуру {@struct/Ticker Ticker} при успешном запросе данных и возвращает нулевое значение при неудачном запросе данных.
{@struct/TickerTicker}, нулевое значение
Обмен.GetTicker ((() Обмен.GetTicker (символ)
Параметрsymbol
используется для указания конкретной торговой пары и кода контракта, соответствующего запрашиваемым данным {@struct/Ticker Ticker}.
При звонкеexchange.GetTicker(symbol)
функция,exchange
Если вам нужно запросить рыночные данные с номинальной валютой в USDT и валютой торговли в BTC, параметрsymbol
является:"BTC_USDT"
, а формат - формат торговой пары, определенный платформой FMZ.
При звонкеexchange.GetTicker(symbol)
функция,exchange
Если вам нужно запросить рыночные данные BTCsymbol
является:"BTC_USDT.swap"
, а формат представляет собой сочетаниеторговые парыикод контрактаопределяется платформой FMZ, разделенной символом exchange.GetTicker(symbol)
функция,exchange
Если вам нужно запросить рыночные данные о U-стандартном опционном контракте BTCsymbol
является:"BTC_USDT.BTC-240108-40000-C"
(в качестве примера Binance Option BTC-240108-40000-C), формат представляет собой комбинациюторговые парыопределены платформой FMZ и конкретным кодом контракта опциона, определенным биржей, разделенным символом
символ ложное строка
function main(){
// If it is a futures exchange object, set the contract code first, e.g. set it as a perpetual contract
// exchange.SetContractType("swap")
var ticker = exchange.GetTicker()
/*
The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
At this point, the ticker is null, and it will cause an error when accessing ticker.High, so when testing this code, make sure that the exchange interface can be accessed.
*/
Log("Symbol:", ticker.Symbol, "High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Open:", ticker.Open, "Volume:", ticker.Volume)
}
def main():
ticker = exchange.GetTicker()
Log("Symbol:", ticker["Symbol"], "High:", ticker["High"], "Low:", ticker["Low"], "Sell:", ticker["Sell"], "Buy:", ticker["Buy"], "Last:", ticker["Last"], "Open:", ticker.Open, "Volume:", ticker["Volume"])
void main() {
auto ticker = exchange.GetTicker();
Log("Symbol:", ticker.Symbol, "High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Open:", ticker.Open, "Volume:", ticker.Volume);
}
Для фьючерсных обменных объектов (т.е.exchange
илиexchanges[0]
), необходимо установить код контракта с помощьюexchange.SetContractType()
функция перед вызовом функции тикера, которая не будет повторяться.
function main() {
var ticker = exchange.GetTicker("BTC_USDT")
Log(ticker)
}
def main():
ticker = exchange.GetTicker("BTC_USDT")
Log(ticker)
void main() {
auto ticker = exchange.GetTicker("BTC_USDT");
Log(ticker);
}
Используйтеsymbol
параметр для запроса рыночных данных для определенного символа (символ спота).
ВTicker
Данные, возвращенныеexchange.GetTicker()
В случае, когдаHigh
иLow
Это симулируемые ценности, взятые из продажи и покупки на рынке в тот момент.Ticker
Данные, возвращенныеexchange.GetTicker()
В то время, какHigh
иLow
значения основаны на данных, возвращенных обменом в капсулахTick
интерфейс, который включает в себя самые высокие и самые низкие цены в течение определенного периода (обычно в течение 24 часов).
Обмены, которые не поддерживаютexchange.GetTicker()
Функция:
Имя функции | Не поддерживаемые спотовые обмены | Фьючерсные биржи без поддержки |
---|---|---|
GetTicker | – | Фьючерсы_Aevo |
{@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.GetRecords exchange.GetRecords}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange.GetTickers exchange.GetTickers exchange.GetTickers}, {@fun/Market/exchange
Получить структуру {@struct/Depth Depth} спота или контракта, соответствующую в настоящее время установленной торговой паре, код контракта, т.е. данные книги ордеров.
Вexchange.GetDepth()
функция возвращает структуру {@struct/Depth Depth}, если запрос на данные удается, и возвращает null, если запрос на данные не удается.
{@struct/Depth Depth}, нулевое значение
Обмен.ПолучитьГлубину() Обмен.Символ GetDepth (()
Параметрsymbol
используется для указания конкретной торговой пары и кода контракта, соответствующих запрошенным данным {@struct/Depth Depth}. Если этот параметр не будет передан, данные книги ордеров текущей установленной торговой пары и код контракта будут запрошены по умолчанию.exchange.GetDepth(symbol)
функция,exchange
Если вам нужно запросить получение данных ордерной книги с номинальной валютой в USDT и валютой транзакции в BTC, параметрsymbol
является:"BTC_USDT"
, а формат - формат торговой пары, определенный платформой FMZ.exchange.GetDepth(symbol)
функция,exchange
Если вам нужно запросить данные ордерной книги BTCsymbol
является:"BTC_USDT.swap"
, а формат представляет собой сочетаниеторговые парыикод контрактаопределяется платформой FMZ, разделенной символом exchange.GetDepth(symbol)
функция,exchange
Если вам нужно запросить данные ордерной книги U-стандартного опционного контракта BTCsymbol
является:"BTC_USDT.BTC-240108-40000-C"
(в качестве примера Binance Option BTC-240108-40000-C), формат представляет собой комбинациюторговые парыопределены платформой FMZ и конкретным кодом контракта опциона, определенным биржей, разделенным символом
function main(){
var depth = exchange.GetDepth()
/*
The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
At this point, the depth is null, which will cause an error when accessing depth.Asks[1].Price, so make sure you can access the exchange interface when testing the code.
*/
var price = depth.Asks[1].Price
Log("Sell 2 price is:", price)
}
def main():
depth = exchange.GetDepth()
price = depth["Asks"][1]["Price"]
Log("Sell 2 price is:", price)
void main() {
auto depth = exchange.GetDepth();
auto price = depth.Asks[1].Price;
Log("Sell 2 price is:", price);
}
Испытаниеexchange.GetDepth()
Функция:
function main() {
// BTC U-based perpetual contract
var depth = exchange.GetDepth("BTC_USDT.swap")
Log(depth)
}
def main():
depth = exchange.GetDepth("BTC_USDT.swap")
Log(depth)
void main() {
auto depth = exchange.GetDepth("BTC_USDT.swap");
Log(depth);
}
Когда конфигурацияexchange
Объект является объектом фьючерсного обмена, используйтеsymbol
параметр для запроса данных книги заказов конкретного символа (символ фьючерса).
В системе обратного тестирования данные для каждого класса возвращаютсяexchange.GetDepth()
Функция при использованииСимуляция клещаВ системе обратного тестирования данные, возвращаемыеexchange.GetDepth()
Функция при использованииНастоящий ТикОбратное тестирование - это глубокий снимок второго уровня.
{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.GetRecords exchange.GetRecords}
Получить массив структуры {@struct/Trade Trade} спота или контракта, соответствующий в настоящее время установленной торговой паре, код контракта, т.е. данные о рыночных сделках.
Вexchange.GetTrades()
функция возвращает массив {@struct/Trade Trade} структур, если запрос на данные удается, и возвращает нулевые значения, если запрос на данные не удается.
{@struct/Trade Trade} массивы, нулевые значения
Обмен.GetTrades ((() exchange.GetTrades (символ)
Параметрsymbol
используется для указания конкретной торговой пары и кода контракта, соответствующего запрошенным данным массива {@struct/Trade Trade}. Если этот параметр не будет передан, по умолчанию будут запрошены последние данные записи транзакции текущей установленной торговой пары и кода контракта.exchange.GetTrades(symbol)
функция,exchange
Если вам нужно запросить получение данных ордерной книги с валютой, деноминированной в USDT, и валютой торговли в BTC, параметрsymbol
является:"BTC_USDT"
, а формат - формат торговой пары, определенный платформой FMZ.exchange.GetTrades(symbol)
функция,exchange
Если вам нужно запросить данные ордерной книги BTCsymbol
является:"BTC_USDT.swap"
, а формат представляет собой сочетаниеторговые парыикод контрактаопределяется платформой FMZ, разделенной символом exchange.GetTrades(symbol)
функция,exchange
Если вам нужно запросить данные ордерной книги BTCsymbol
является:"BTC_USDT.BTC-240108-40000-C"
(в качестве примера Binance Option BTC-240108-40000-C), формат представляет собой комбинациюторговые парыопределены платформой FMZ и конкретным кодом контракта опциона, определенным биржей, разделенным символом
function main(){
var trades = exchange.GetTrades()
/*
The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
At this point, trade is null. When accessing trade[0].Id, it will cause an error. Therefore, when testing this code, ensure that you can access the exchange interface.
*/
Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type)
}
def main():
trades = exchange.GetTrades()
Log("id:", trades[0]["Id"], "time:", trades[0]["Time"], "Price:", trades[0]["Price"], "Amount:", trades[0]["Amount"], "type:", trades[0]["Type"])
void main() {
auto trades = exchange.GetTrades();
Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type);
}
Проверитьexchange.GetTrades()
Функция:
function main() {
// BTC's U-based perpetual contract
var trades = exchange.GetTrades("BTC_USDT.swap")
Log(trades)
}
def main():
trades = exchange.GetTrades("BTC_USDT.swap")
Log(trades)
void main() {
auto trades = exchange.GetTrades("BTC_USDT.swap");
Log(trades);
}
Когда конфигурацияexchange
Объект является объектом фьючерсного обмена, используйтеsymbol
параметр для запроса данных записи рыночных сделок для определенного символа (символ фьючерса).
exchange.GetTrades()
Функция для получения текущих торговых пар, истории транзакций рынка (не их собственной), соответствующей контрактам. Некоторые биржи не поддерживают эту функцию, и конкретные данные, возвращенные, показывают, насколько диапазон записей транзакций зависит от биржи и должен обрабатываться в соответствии с конкретной ситуацией.exchange.GetRecords ()
функция возвращает тот же порядок данных, то есть последний элемент массива является данными, ближайшими к текущему времени.
Вexchange.GetTrades()
функция возвращает пустой массив при использованииСимуляция клещаДанные, возвращаемыеexchange.GetTrades()
функция при использованииНастоящий ТикBacktesting в системе backtesting - это данные о потоке заказов, т.е. массив {@struct/Trade Trade}.
Обмены, которые не поддерживаютexchange.GetTrades()
Функция:
Имя функции | Не поддерживаемые спотовые обмены | Фьючерсные биржи без поддержки |
---|---|---|
GetTrades | – | Фьючерсы_BitMart / Фьючерсы_Bibox |
{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetRecords exchange.GetRecords}
Получить массив структуры {@struct/Record Record} спота или контракта, соответствующий в настоящее время установленной торговой паре, код контракта, т.е. данные K-линии.
Вexchange.GetRecords()
функция возвращает массив структур {@struct/Record Record} при успешном запросе данных и возвращает нулевые значения при неудачном запросе данных.
{@struct/Record Record} массивы, нулевые значения
Обмен.GetRecords ((() Обмен.GetRecords (символ) exchange.GetRecords (символ, точка) exchange.GetRecords ((символ, период, предел) Обмен.GetRecords (промежуток) Обмен.GetRecords ((период, лимит)
Параметрsymbol
используется для указания конкретной торговой пары и кода контракта, соответствующих запрошенным данным массива {@struct/Record Record}. Если этот параметр не будет передан, по умолчанию будут запрошены данные K-линии текущей установленной торговой пары и кода контракта.exchange.GetRecords(symbol)
функция,exchange
Если вам нужно запросить получение данных с деноминированной валютой в USDT и валютой транзакции в BTC, параметрsymbol
является:"BTC_USDT"
, а формат - формат торговой пары, определенный платформой FMZ.exchange.GetRecords(symbol)
функция,exchange
Если вам нужно запросить данные ордерной книги BTCsymbol
является:"BTC_USDT.swap"
, а формат представляет собой сочетаниеторговые парыикод контрактаопределяется платформой FMZ, разделенной символом exchange.GetRecords(symbol)
функция,exchange
Если вам нужно запросить данные ордерной книги BTCsymbol
является:"BTC_USDT.BTC-240108-40000-C"
(в качестве примера Binance Option BTC-240108-40000-C), формат представляет собой комбинациюторговые парыопределены платформой FMZ и конкретным кодом контракта опциона, определенным биржей, разделенным символом period
указывает период запрошенных данных K-линии, например: {@var/PERIOD/PERIOD_M1 PERIOD_M1}, {@var/PERIOD/PERIOD_M5 PERIOD_M5}, {@var/PERIOD/PERIOD_M15 PERIOD_M15} и т. д. Значение параметраperiod
Если этот параметр не выполняется, период запрошенных по умолчанию данных K-линии является по умолчанию периодом K-линии текущей конфигурации стратегии реального времени / обратного теста.
Период
ложное
Номер
Параметрlimit
используется для указания длины запрашиваемых данных K-линии. Если этот параметр не передан, длина запроса по умолчанию - это максимальное количество строк K-линии, запрашиваемых в момент обмена интерфейсом K-линии. Этот параметр может привести к поиску данных K-линии обмена, и время потребления вызова функции увеличится во время поискового запроса.
предел
ложное
Номер
function main() {
// Print K-line data with a K-line period of 120 seconds (2 minutes)
Log(exchange.GetRecords(60 * 2))
// Print K-line data with a K-line period of 5 minutes
Log(exchange.GetRecords(PERIOD_M5))
}
def main():
Log(exchange.GetRecords(60 * 2))
Log(exchange.GetRecords(PERIOD_M5))
void main() {
Log(exchange.GetRecords(60 * 2)[0]);
Log(exchange.GetRecords(PERIOD_M5)[0]);
}
Получите данные по К-линии для индивидуального периода.
function main() {
var records = exchange.GetRecords(PERIOD_H1)
/*
The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
At this point, records is null. When accessing records[0].Time, it will cause an error. Therefore, when testing this code, ensure that you can access the exchange interface.
*/
Log("The first k-line data is Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High)
Log("The second k-line data is Time:", records[1].Time ,"Close:", records[1].Close)
Log("Current K-line (latest)", records[records.length-1], "Previous K-line", records[records.length-2])
}
def main():
records = exchange.GetRecords(PERIOD_H1)
Log("The first k-line data is Time:", records[0]["Time"], "Open:", records[0]["Open"], "High:", records[0]["High"])
Log("The second k-line data Time:", records[1]["Time"], "Close:", records[1]["Close"])
Log("Current K-line (latest)", records[-1], "Previous K-line", records[-2])
void main() {
auto records = exchange.GetRecords(PERIOD_H1);
Log("The first k-line data is Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High);
Log("The second k-line data Time:", records[1].Time, "Close:", records[1].Close);
Log("Current K-line (latest)", records[records.size() - 1], "Previous K-line", records[records.size() - 2]);
}
Выходные K-линейные строки:
function main() {
var records = exchange.GetRecords("BTC_USDT.swap", 60, 100)
Log(records)
}
def main():
records = exchange.GetRecords("BTC_USDT.swap", 60, 100)
Log(records)
void main() {
auto records = exchange.GetRecords("BTC_USDT.swap", 60, 100);
Log(records);
}
Когда конфигурацияexchange
Объект является объектом фьючерсного обмена, используйтеsymbol
, period
, иlimit
параметры для запроса данных K-линии конкретного продукта (будущий продукт).
По умолчанию K-линейный период может быть установлен на страницах backtest и реального трейдинга.exchange.GetRecords()
Если при вызове функции не указан параметр, соответствующие данные K-линии возвращаются в соответствии с периодом K-линии, установленным в обратном тесте и реальных параметрах рынка.
Возвращаемое значение - массивRecord
В случае, если вы хотите, чтобы использовать эти структуры, возвращенные K-линейные данные будут накапливаться с течением времени, верхний предел накопленных K-линейных баров влияет наexchange.SetMaxBarLen()
Ограничение по умолчанию составляет 5000 баров, когда оно не установлено. Когда данные K-линии достигают ограничения накопления K-линейной строки, они обновляются путем добавления K-линейной строки и удаления самой ранней K-линейной строки (например, очереди в / из).Trade
структурированный массив) в реальном времени для генерации K-линий.
Если интерфейс K-линии обмена поддерживает поиск страниц, несколько запросов API будут выполнены при вызовеexchange.SetMaxBarLen()
Функция для установки большей длины K-линии.
Когдаexchange.GetRecords()
Если функция называется изначально, количество полученных K-линейных баров различается между обратным тестированием и реальной торговлей: - Система обратного тестирования будет получать определенное количество K-линейных баров до начала временного диапазона обратного тестирования заранее (по умолчанию 5000, настройки системы обратного тестирования и количество данных повлияют на окончательное количество возвращенных данных), как первоначальные K-линейные данные. - Количество K-линейных баров, полученных во время фактической торговли, основано на максимальном количестве данных, которые могут быть получены из интерфейса K-линии биржи.
Вperiod
параметр установлен на 5, что является запросом на получение данных K-линии с периодом 5 секунд.period
Параметр не делится на 60 (т. е. представленный период не делится на минуты).exchange.GetTrades()
Для получения данных записи транзакций и синтеза необходимых данных K-линии.period
параметр делится на 60, то требуемые K-линейные данные синтезируются с использованием минимум 1-минутных K-линейных данных (если возможно, требуемые K-линейные данные синтезируются с использованием большего периода).
Симулируемое обратное тестирование уровня в системе обратного тестирования требует установки базового периода K-линии (когда система обратного тестирования имитирует обратное тестирование уровня, соответствующие данные K-линии используются для генерации данных Tick в соответствии с установленным базовым периодом K-линии). Следует отметить, что период данных K-линии, полученных в стратегии, не должен быть меньше базового периода K-линии.
ВC++
язык имеет следующий пример кода, если вам нужно построить свои собственные данные K-линии:
#include <sstream>
void main() {
Records r;
r.Valid = true;
for (auto i = 0; i < 10; i++) {
Record ele;
ele.Time = i * 100000;
ele.High = i * 10000;
ele.Low = i * 1000;
ele.Close = i * 100;
ele.Open = i * 10;
ele.Volume = i * 1;
r.push_back(ele);
}
// Output display: Records[10]
Log(r);
auto ma = TA.MA(r,10);
// Output display: [nan,nan,nan,nan,nan,nan,nan,nan,nan,450]
Log(ma);
}
Обмены, которые не поддерживаютexchange.GetRecords()
Функция:
Имя функции | Не поддерживаемые спотовые обмены | Фьючерсные биржи без поддержки |
---|---|---|
GetRecords | Zaif / Coincheck / BitFlyer | Фьючерсы_Aevo |
{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.SetMaxBarLen exchange.SetMaxBarLen}
Получите период K-линии, установленный на странице веб-сайта платформы FMZ Quant Trading при обратном тестировании и выполнении стратегии в режиме реального времени, т.е. период K-линии по умолчанию, используемый при вызовеexchange.GetRecords()
Функция без передачи параметров.
Период K-линии в секундах, целое число в секундах. Номер
Обмен.GetPeriod ((()
function main() {
// For example, the K-line period set on the website page of the FMZ Quant Trading platform during backtesting and live trading is 1 hour.
var period = exchange.GetPeriod()
Log("K-line period:", period / (60 * 60), "hours")
}
def main():
period = exchange.GetPeriod()
Log("K-line period:", period / (60 * 60), "hours")
void main() {
auto period = exchange.GetPeriod();
Log("K-line period:", period / (60 * 60.0), "hours");
}
{@fun/Market/exchange.GetRecords exchange.GetRecords} Я не знаю.
Установите максимальную длину линии К.
Обмен.SetMaxBarLen ((n)
Параметрn
используется для указания максимальной длины линии K.
n
неправда
Номер
function main() {
exchange.SetMaxBarLen(50)
var records = exchange.GetRecords()
Log(records.length, records)
}
def main():
exchange.SetMaxBarLen(50)
r = exchange.GetRecords()
Log(len(r), r)
void main() {
exchange.SetMaxBarLen(50);
auto r = exchange.GetRecords();
Log(r.size(), r[0]);
}
Вexchange.SetMaxBarLen()
функция влияет на два аспекта для криптовалютной стратегии время выполнения:
{@fun/Market/exchange.GetRecords exchange.GetRecords} Я не знаю.
Получить оригинальный контент возвращается к последнемуrest
запрос на текущий объект обмена ({@var/EXCHANGE exchange}, {@var/EXCHANGE/exchanges exchanges}).
Данные ответа дляrest
Просьба.
строка
Обмен.GetRawJSON ((()
function main(){
exchange.GetAccount();
var obj = JSON.parse(exchange.GetRawJSON());
Log(obj);
}
import json
def main():
exchange.GetAccount()
obj = json.loads(exchange.GetRawJSON())
Log(obj)
void main() {
auto obj = exchange.GetAccount();
// C++ does not support the GetRawJSON function
Log(obj);
}
Вexchange.GetRawJSON()
Функция поддерживается только для реальной торговли.C++
language.
{@var/EXCHANGE обмен}
Получить обменный курс, установленный для обменного объекта.
Текущая стоимость обменного курса объекта обмена. Номер
Обмен.GetRate ((()
function main(){
Log(exchange.GetTicker())
// Set up exchange rate conversion
exchange.SetRate(7)
Log(exchange.GetTicker())
Log("Current exchange rate:", exchange.GetRate())
}
def main():
Log(exchange.GetTicker())
exchange.SetRate(7)
Log(exchange.GetTicker())
Log("Current exchange rate:", exchange.GetRate())
void main() {
Log(exchange.GetTicker());
exchange.SetRate(7);
Log(exchange.GetTicker());
Log("Current exchange rate:", exchange.GetRate());
}
Еслиexchange.SetRate()
не был призван установить курс конверсии,exchange.GetRate()
функция возвращает значение курса по умолчанию 1. То есть данные, относящиеся к показанной валюте (quoteCurrency), не были конвертированы.
Если значение обменного курса установлено с использованиемexchange.SetRate()
, например,exchange.SetRate(7)
Затем вся информация о ценах, такие как котировки, глубины и цены заказа, полученные черезexchange
обменный объект будет конвертироваться путем умножения на установленный обменный курс7
- Да.
Еслиexchange
соответствует обмену с долларом США в качестве номинальной валюты, после вызоваexchange.SetRate(7)
, все цены на живом рынке будут преобразованы в цену, близкую к юаню, путем умножения7
В данный момент стоимость обменного курса, полученная с использованиемexchange.GetRate()
это7
.
{@fun/Trade/exchange.SetRate exchange.SetRate} (Секретный обмен)
Вexchange.SetData()
Функция используется для настройки данных, загружаемых при запуске стратегии.
Длина строки после параметраvalue
Кодировка JSON.
Номер
exchange.SetData ((ключ, значение)
Название сбора данных.
ключ
неправда
строка
Данные, которые должны быть загруженыexchange.SetData()
Функция имеет структуру данных массива.exchange.GetData()
функция при запросе внешних данных, т.е.:"schema": ["time", "data"]
- Да.
стоимость
неправда
массив
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
var data = [
[1579536000000, "abc"],
[1579622400000, 123],
[1579708800000, {"price": 123}],
[1579795200000, ["abc", 123, {"price": 123}]]
]
exchange.SetData("test", data)
while(true) {
Log(exchange.GetData("test"))
Sleep(1000)
}
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''
def main():
data = [
[1579536000000, "abc"],
[1579622400000, 123],
[1579708800000, {"price": 123}],
[1579795200000, ["abc", 123, {"price": 123}]]
]
exchange.SetData("test", data)
while True:
Log(exchange.GetData("test"))
Sleep(1000)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
void main() {
json data = R"([
[1579536000000, "abc"],
[1579622400000, 123],
[1579708800000, {"price": 123}],
[1579795200000, ["abc", 123, {"price": 123}]]
])"_json;
exchange.SetData("test", data);
while(true) {
Log(exchange.GetData("test"));
Sleep(1000);
}
}
Это требует, чтобы данные для параметраvalue
быть в том же формате, что иdata
Вы можете видеть, что временная метка1579622400000
соответствует времени2020-01-22 00:00:00
, и что когда программа стратегии выполняется после этого времени, вызватьexchange.GetData()
Функция для получения данных до следующей временной отметки данных1579708800000
, то есть, время2020-01-23 00:00:00
Что ты получишь[1579622400000, 123]
В следующем примере, во время выполнения (обратное тестирование или живая торговля), текущий момент достигает или превышает временную отметку1579795200000
,exchange.GetData()
функция вызвана и возвращается значение:{"Time":1579795200000,"Data":["abc", 123,{"price":123}]}
. "Time":1579795200000
соответствует1579795200000
в данных[1579795200000, ["abc", 123, {"price": 123}]]
. "Data":["abc", 123, {"price": 123}]
соответствует данным["abc", 123, {"price": 123}]]
в[1579795200000, ["abc", 123, {"price": 123}]]
.
Загруженными данными могут быть любые экономические показатели, отраслевые данные, соответствующие показатели и т.д., используемые для стратегической количественной оценки всей количественно определяемой информации.
{@fun/Market/exchange.GetData exchange.GetData} (См. также:
Вexchange.GetData()
Функция используется для загрузки данныхexchange.SetData()
функция или предоставляется внешней ссылкой.
Записи в сборе данных. объект
Обмен.GetData ((ключ) Обмен.GetData ((ключ, время)
Название сбора данных. Ключ Истинно строка Используется для настройки времени выхода кэша в миллисекундах. Тайм-аут ложное Номер
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
exchange.SetData("test", [[1579536000000, _D(1579536000000)], [1579622400000, _D(1579622400000)], [1579708800000, _D(1579708800000)]])
while(true) {
Log(exchange.GetData("test"))
Sleep(1000 * 60 * 60 * 24)
}
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''
def main():
exchange.SetData("test", [[1579536000000, _D(1579536000000/1000)], [1579622400000, _D(1579622400000/1000)], [1579708800000, _D(1579708800000/1000)]])
while True:
Log(exchange.GetData("test"))
Sleep(1000 * 60 * 60 * 24)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
void main() {
json arr = R"([[1579536000000, ""], [1579622400000, ""], [1579708800000, ""]])"_json;
arr[0][1] = _D(1579536000000);
arr[1][1] = _D(1579622400000);
arr[2][1] = _D(1579708800000);
exchange.SetData("test", arr);
while(true) {
Log(exchange.GetData("test"));
Sleep(1000 * 60 * 60 * 24);
}
}
Звонок, чтобы записать данные непосредственно.
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
while(true) {
Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
Sleep(1000)
}
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''
def main():
while True:
Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
Sleep(1000)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
void main() {
while(true) {
Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
Sleep(1000);
}
}
Он поддерживает запрос данных через внешние ссылки, формат запрашиваемых данных для:
{
"schema":["time","data"],
"data":[
[1579536000000, "abc"],
[1579622400000, 123],
[1579708800000, {"price": 123}],
[1579795200000, ["abc", 123, {"price": 123}]]
]
}
Где?schema
Формат данных для каждой записи в теле загруженных данных, установленный на["time", "data"]
соответствующий формату данных по вводу вdata
атрибут.
Что хранится вdata
атрибут - это тело данных, причем каждая запись состоит из временной отметки на уровне миллисекунд и содержимого данных (которые могут быть любыми данными, кодируемыми JSON).
Сервисная программа для тестирования, написанная на Go:
package main
import (
"fmt"
"net/http"
"encoding/json"
)
func Handle (w http.ResponseWriter, r *http.Request) {
defer func() {
fmt.Println("req:", *r)
ret := map[string]interface{}{
"schema": []string{"time","data"},
"data": []interface{}{
[]interface{}{1579536000000, "abc"},
[]interface{}{1579622400000, 123},
[]interface{}{1579708800000, map[string]interface{}{"price":123}},
[]interface{}{1579795200000, []interface{}{"abc", 123, map[string]interface{}{"price":123}}},
},
}
b, _ := json.Marshal(ret)
w.Write(b)
}()
}
func main () {
fmt.Println("listen http://localhost:9090")
http.HandleFunc("/data", Handle)
http.ListenAndServe(":9090", nil)
}
Данные ответа программы при получении запроса:
{
"schema":["time","data"],
"data":[
[1579536000000, "abc"],
[1579622400000, 123],
[1579708800000, {"price": 123}],
[1579795200000, ["abc", 123, {"price": 123}]]
]
}
Код стратегии испытания:
function main() {
Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
}
def main():
Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
void main() {
Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"));
}
Способ вызова для получения данных внешней ссылки.
function main() {
Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data")) // The xxx part of the link is the code of the query data, here xxx is an example.
}
def main():
Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"))
void main() {
Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"));
}
Запрос данных для запроса, созданного на платформеданные, требуя, чтобы формат данных ответа был (должен содержать время, поля данных, описанные в схеме):
{
"data": [],
"schema": ["time", "data"]
}
Поле exchange.GetData()
призвана функция, возвращается объект JSON, например:{"Time":1579795200000, "Data":"..."}
.
Получить данные сразу для обратного тестирования и кэширования одной минуты данных для торговли в режиме реального времени.from
(с указанием времени в секундах),to
(время в секундах) к запросу, параметры, такие какperiod
(подлежащий период K-линии, установленный в миллисекундах) используются для определения временных рамок, в течение которых должны быть получены данные.
{@fun/Market/exchange.SetData exchange.SetData} - что это такое?
Вexchange.GetMarkets()
Функция используется для получения информации о валютном рынке.
Словарь, содержащий структуру {@struct/Market Market}. объект
Обмен.GetMarkets ((()
function main() {
var markets = exchange.GetMarkets()
var currency = exchange.GetCurrency()
// Get the current contract code can also use exchange.GetContractType() function
var ct = "swap"
var key = currency + "." + ct
Log(key, ":", markets[key])
}
def main():
markets = exchange.GetMarkets()
currency = exchange.GetCurrency()
ct = "swap"
key = currency + "." + ct
Log(key, ":", markets[key])
void main() {
auto markets = exchange.GetMarkets();
auto currency = exchange.GetCurrency();
auto ct = "swap";
auto key = currency + "." + ct;
Log(key, ":", markets[key]);
}
Пример вызова на объект биржи фьючерсов:
/*backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
function main() {
var arrSymbol = ["SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]
var tbl1 = {
type: "table",
title: "markets1",
cols: ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
rows: []
}
var markets1 = exchange.GetMarkets()
for (var key in markets1) {
var market = markets1[key]
tbl1.rows.push([key, market.Symbol, market.BaseAsset, market.QuoteAsset, market.TickSize, market.AmountSize, market.PricePrecision, market.AmountPrecision, market.MinQty, market.MaxQty, market.MinNotional, market.MaxNotional, market.CtVal])
}
for (var symbol of arrSymbol) {
exchange.GetTicker(symbol)
}
var tbl2 = {
type: "table",
title: "markets2",
cols: ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
rows: []
}
var markets2 = exchange.GetMarkets()
for (var key in markets2) {
var market = markets2[key]
tbl2.rows.push([key, market.Symbol, market.BaseAsset, market.QuoteAsset, market.TickSize, market.AmountSize, market.PricePrecision, market.AmountPrecision, market.MinQty, market.MaxQty, market.MinNotional, market.MaxNotional, market.CtVal])
}
LogStatus("`" + JSON.stringify([tbl1, tbl2]) + "`")
}
'''backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
'''
import json
def main():
arrSymbol = ["SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]
tbl1 = {
"type": "table",
"title": "markets1",
"cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
"rows": []
}
markets1 = exchange.GetMarkets()
for key in markets1:
market = markets1[key]
tbl1["rows"].append([key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]])
for symbol in arrSymbol:
exchange.GetTicker(symbol)
tbl2 = {
"type": "table",
"title": "markets2",
"cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
"rows": []
}
markets2 = exchange.GetMarkets()
for key in markets2:
market = markets2[key]
tbl2["rows"].append([key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]])
LogStatus("`" + json.dumps([tbl1, tbl2]) + "`")
/*backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
void main() {
auto arrSymbol = {"SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"};
json tbl1 = R"({
"type": "table",
"title": "markets1",
"cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
"rows": []
})"_json;
auto markets1 = exchange.GetMarkets();
for (auto& [key, market] : markets1.items()) {
json arrJson = {key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]};
tbl1["rows"].push_back(arrJson);
}
for (const auto& symbol : arrSymbol) {
exchange.GetTicker(symbol);
}
json tbl2 = R"({
"type": "table",
"title": "markets2",
"cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
"rows": []
})"_json;
auto markets2 = exchange.GetMarkets();
for (auto& [key, market] : markets2.items()) {
json arrJson = {key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]};
tbl2["rows"].push_back(arrJson);
}
json tbls = R"([])"_json;
tbls.push_back(tbl1);
tbls.push_back(tbl2);
LogStatus("`" + tbls.dump() + "`");
}
Используйте объект фьючерсного обмена для вызоваexchange.GetMarkets()
Перед вызовом любой рыночной функции GetMarkets возвращает только рыночные данные текущей торговой пары по умолчанию. После вызова рыночной функции он возвращает рыночные данные всех запрошенных сортов. Вы можете обратиться к следующему примеру теста:
Вexchange.GetMarkets()
функция возвращает словарь с ключом, названным названием торгового сорта, и для спотовых фиксаций, форматированных как торговая пара, например:
{
"BTC_USDT" : {...}, // The key value is the Market structure
"LTC_USDT" : {...},
...
}
Для бирж фьючерсных контрактов, поскольку может существовать несколько контрактов для одного сорта, например:BTC_USDT
Торговые пары, есть постоянные контракты, квартальные контракты и так далее.exchange.GetMarkets()
функция возвращает словарь с именем ключа пары в сочетании с кодом контракта, например:
{
"BTC_USDT.swap" : {...}, // The key value is the Market structure
"BTC_USDT.quarter" : {...},
"LTC_USDT.swap" : {...},
...
}
exchange.GetMarkets()
Функция поддерживает прямую торговлю, систему обратного тестирования.exchange.GetMarkets()
Функция возвращает информацию о рынке только для сортов, которые торгуются онлайн на бирже.exchange.GetMarkets()
функция не поддерживает опционные контракты.Обмены, которые не поддерживаютexchange.GetMarkets()
Функция:
Имя функции | Не поддерживаемые спотовые обмены | Фьючерсные биржи без поддержки |
---|---|---|
GetMarkets | Coincheck / Bithumb / BitFlyer | – |
{@struct/Market Market} (Рыночный рынок)
Вexchange.GetTickers()
Функция используется для получения обменных агрегированных данных тикеров (массив структуры {@struct/Ticker Ticker}).exchange
возвращает данные тикеров для всех торговых пар, когда речь идет об объекте спотового обмена;exchange
возвращает данные тикера для всех контрактов, когда речь идет об обмене фьючерсами.
Вexchange.GetTickers()
Функция возвращает массив {@struct/Ticker Ticker} структур, когда ему удается запросить данные, и null, когда ему не удается.
{@struct/Ticker Ticker} массивы, нулевые значения
Обмен.GetTickers ((()
function main() {
var tickers = exchange.GetTickers()
if (tickers && tickers.length > 0) {
Log("Number of tradable items on the exchange:", tickers.length)
}
}
def main():
tickers = exchange.GetTickers()
if tickers and len(tickers) > 0:
Log("Number of tradable items on the exchange:", len(tickers))
void main() {
auto tickers = exchange.GetTickers();
if (tickers.Valid && tickers.size() > 0) {
Log("Number of tradable items on the exchange:", tickers.size());
}
}
Позвониexchange.GetTickers()
функция получения агрегированных рыночных данных.
/*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 = ["ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"]
// Before requesting other trading pair market data, call Get Tickers
var tickers1 = exchange.GetTickers()
var tbl1 = {type: "table", title: "tickers1", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
for (var ticker of tickers1) {
tbl1.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
}
// Request market data for other trading pairs
for (var symbol of arrSymbol) {
exchange.GetTicker(symbol)
}
// Call GetTickers again
var tickers2 = exchange.GetTickers()
var tbl2 = {type: "table", title: "tickers2", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
for (var ticker of tickers2) {
tbl2.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
}
LogStatus("`" + JSON.stringify([tbl1, tbl2]) + "`")
}
'''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 = ["ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"]
tickers1 = exchange.GetTickers()
tbl1 = {"type": "table", "title": "tickers1", "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], "rows": []}
for ticker in tickers1:
tbl1["rows"].append([ticker["Symbol"], ticker["High"], ticker["Open"], ticker["Low"], ticker["Last"], ticker["Buy"], ticker["Sell"], ticker["Time"], ticker["Volume"]])
for symbol in arrSymbol:
exchange.GetTicker(symbol)
tickers2 = exchange.GetTickers()
tbl2 = {"type": "table", "title": "tickers2", "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], "rows": []}
for ticker in tickers2:
tbl2["rows"].append([ticker["Symbol"], ticker["High"], ticker["Open"], ticker["Low"], ticker["Last"], ticker["Buy"], ticker["Sell"], ticker["Time"], ticker["Volume"]])
LogStatus("`" + json.dumps([tbl1, tbl2]) + "`")
/*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"}]
*/
json tickerToJson(const Ticker& ticker) {
json arrJson;
arrJson.push_back(ticker.Symbol);
arrJson.push_back(ticker.High);
arrJson.push_back(ticker.Open);
arrJson.push_back(ticker.Low);
arrJson.push_back(ticker.Last);
arrJson.push_back(ticker.Buy);
arrJson.push_back(ticker.Sell);
arrJson.push_back(ticker.Time);
arrJson.push_back(ticker.Volume);
return arrJson;
}
void main() {
std::string arrSymbol[] = {"ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"};
auto tickers1 = exchange.GetTickers();
json tbl1 = R"({
"type": "table",
"cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"],
"rows": []
})"_json;
tbl1["title"] = "tickers1";
for (const auto& ticker : tickers1) {
json arrJson = tickerToJson(ticker);
tbl1["rows"].push_back(arrJson);
}
for (const std::string& symbol : arrSymbol) {
exchange.GetTicker(symbol);
}
auto tickers2 = exchange.GetTickers();
json tbl2 = R"({
"type": "table",
"cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"],
"rows": []
})"_json;
tbl2["title"] = "tickers2";
for (const auto& ticker : tickers2) {
json arrJson = tickerToJson(ticker);
tbl2["rows"].push_back(arrJson);
}
json tbls = R"([])"_json;
tbls.push_back(tbl1);
tbls.push_back(tbl2);
LogStatus("`" + tbls.dump() + "`");
}
Используйте объект спотового обмена и вызовитеexchange.GetTickers()
Перед вызовом любой рыночной функции GetTickers возвращает только данные тикера текущей торговой пары по умолчанию. После вызова рыночной функции он возвращает данные тикера всех запрошенных сортов. Вы можете обратиться к следующему примеру теста:
Обмены, которые не поддерживаютexchange.GetTickers()
Функция:
Имя функции | Не поддерживаемые спотовые обмены | Фьючерсные биржи без поддержки |
---|---|---|
GetTickers | Zaif / WOO / Gemini / Coincheck / BitFlyer / Bibox | Фьючерсы_WOO / Фьючерсы_dYdX / Фьючерсы_Deribit / Фьючерсы_Bibox / Фьючерсы_Aevo |
{@struct/TickerTicker}, {@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetTicker exchange.GetTicker}
В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}
Вexchange.GetAccount()
Функция используется для запроса информации обменного счета.GetAccount()
Функция является функцией-членом объекта обмена {@var/EXCHANGE exchange}.exchange
Объект связан только сexchange
, и не будет повторяться после документации.
Запрос информации о активе счета и возвращение структуры {@struct/Account Account} если запрос удастся или Null, если он не удастся. {@struct/Account Account}, нулевое значение
Обмен.GetAccount ((()
function main(){
// Switching trading pairs
exchange.IO("currency", "BTC_USDT")
// Take OKX futures as an example, set the contract as the current week's contract, the current trading pair is BTC_USDT, so the current contract is BTC's U-nominal current week contract
exchange.SetContractType("this_week")
// Get current account asset data
var account = exchange.GetAccount()
// Available balance of USDT as margin
Log(account.Balance)
// USDT freeze amount as margin
Log(account.FrozenBalance)
// Current asset equity
Log(account.Equity)
// The unrealized profit and loss of all positions held with the current asset as margin
Log(account.UPnL)
}
def main():
exchange.IO("currency", "BTC_USDT")
exchange.SetContractType("this_week")
account = exchange.GetAccount()
Log(account["Balance"])
Log(account["FrozenBalance"])
Log(account["Equity"])
Log(account["UPnL"])
void main() {
exchange.IO("currency", "BTC_USDT");
exchange.SetContractType("this_week");
auto account = exchange.GetAccount();
Log(account.Balance);
Log(account.FrozenBalance);
Log(account["Equity"])
Log(account["UPnL"])
}
Настройте торговые пары, коды контрактов, и получите информацию о текущем счете.
Если объект обмена установлен на обмен фьючерсных контрактов криптовалют, и переключен на контракт сUSDT
как маржа (см. {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType} функции для того, как переключиться).USDT
в качестве маржи, которая фиксируется вBalance
, FrozenBalance
атрибуты структуры {@struct/Account Account}.
Если объект обмена установлен на биржу фьючерсных контрактов на криптовалюту и переведен на валютный контракт, актив представляется в валюте в качестве маржи и регистрируется вStocks
, FrozenStocks
атрибуты структуры {@struct/Account Account}.
При использовании унифицированного счета Binance Futures, при вызовеexchange.GetAccount()
Функция запроса информации о счете, объединенные данные - это сумма всех активов, конвертированных вДоллар США. Он отображается вBalance
Если вам нужно рассчитать сумму конвертации других активов, вы можете использовать сумму конвертации в долларах США, разделенную на цену индекса (актива, который должен быть конвертирован), а затем разделенную на ставку залога (актива, который должен быть конвертирован), чтобы рассчитать ее.
{@struct/Account Account}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}, {@struct/Account Account}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}
Вexchange.GetAssets
функция используется для запроса информации об активах биржевого счета.
Вexchange.GetAssets()
функция возвращает массив {@struct/Asset Asset} структур, если запрос на данные удается, или null, если запрос не удается.
{@struct/Asset Asset} массив, нулевое значение
Обмен.GetAssets ((()
function main() {
// exchange.SetCurrency("BTC_USDT") // You can set up trading pairs
// exchange.SetContractType("swap") // You can set up contracts
var assets = exchange.GetAssets()
Log(assets)
}
def main():
# exchange.SetCurrency("BTC_USDT") # You can set up trading pairs
# exchange.SetContractType("swap") # You can set up contracts
assets = exchange.GetAssets()
Log(assets)
void main() {
// exchange.SetCurrency("BTC_USDT"); // You can set up trading pairs
// exchange.SetContractType("swap"); // You can set up contracts
auto assets = exchange.GetAssets();
Log(assets);
}
Получить информацию о активах обменного счета,exchange.GetAssets()
возвращает массив с элементами структуры активов.
ВGetAssets()
Функция объекта Futures Exchange возвращает маржинальные активы по текущей торговой паре (на основе валюты, на основе USDT, на основе USDC и т.д.).
{@struct/Asset Asset}
Вexchange.GetName()
Функция используется для получения названия обмена, к которому связан текущий объект обмена.
Вexchange.GetName()
функция возвращает название биржи, определенной платформой FMZ Quant Trading.
строка
exchange.GetName ((()
function main() {
Log("The exchange object exchange is judged to be Binance spot, and the result is judged to be:", exchange.GetName() == "Binance")
}
def main():
Log("The exchange object exchange is judged to be Binance spot, and the result is judged to be:", exchange.GetName() == "Binance")
void main() {
Log("The exchange object exchange is judged to be Binance spot, and the result is judged to be:", exchange.GetName() == "Binance");
}
Вexchange.GetName()
Функция обычно используется для идентификации обменных объектов, таких какexchange
илиexchanges[1]
, exchanges[2]
В коде стратегии названия криптовалютных фьючерсных контрактов имеют фиксированный префиксFutures_
.
{@fun/Account/exchange.GetLabel exchange.GetLabel} - Я не знаю.
Вexchange.GetLabel()
функция используется для получения пользовательского ярлыка, который был установлен при настройке объекта обмена.
Вexchange.GetLabel()
функция возвращает пользовательскую этикетку, которая была установлена при настройке объекта обмена.
строка
Обмен.GetLabel ((()
function main() {
Log("exchange label:", exchange.GetLabel())
}
def main():
Log("exchange label:", exchange.GetLabel())
void main() {
Log("exchange label:", exchange.GetLabel());
}
Объекты обмена, такие какexchange
илиexchanges[1]
, exchanges[2]
в коде стратегии обозначаются тегом "set tag".
{@var/EXCHANGE обмен}
Вexchange.GetCurrency()
Функция используется для получения текущей установленной торговой пары.
Вexchange.GetCurrency()
функция возвращает торговую пару, установленную текущим объектом {@var/EXCHANGE exchange}.
строка
Обмен.GetCurrency ((()
function main() {
Log("the current trading pair of exchange is:", exchange.GetCurrency())
}
def main():
Log("the current trading pair of exchange is:", exchange.GetCurrency())
void main() {
Log("the current trading pair of exchange is:", exchange.GetCurrency());
}
Формат торговой пары имеет однородное большое значение, используя подчеркивания для разделенияbaseCurrency
иquoteCurrency
, например:BTC_USDT
.
{@fun/Account/exchange.SetCurrency exchange.SetCurrency} (Ссылка на ссылку на ссылку на ссылку)
Вexchange.SetCurrency()
функция используется для переключения текущей торговой пары объекта обмена {@var/EXCHANGE exchange}.
exchange.SetCurrency ((валюта)
Вcurrency
Параметр используется для установки торговой пары, которая должна быть переключена.baseCurrency
отquoteCurrency
, например:BTC_USDT
- Да.
Валюта
неправда
строка
function main() {
var ticker = exchange.GetTicker()
Log(ticker)
Log(exchange.GetAccount())
// Switching trading pairs, pay attention to the changes of ticker data and account information after switching
exchange.SetCurrency("LTC_USDT")
Log("Switch to LTC_USDT")
ticker = exchange.GetTicker()
Log(ticker)
Log(exchange.GetAccount())
}
def main():
ticker = exchange.GetTicker()
Log(ticker)
Log(exchange.GetAccount())
exchange.SetCurrency("LTC_USDT")
Log("Switch to LTC_USDT")
ticker = exchange.GetTicker()
Log(ticker)
Log(exchange.GetAccount())
void main() {
auto ticker = exchange.GetTicker();
Log(ticker);
Log(exchange.GetAccount());
exchange.SetCurrency("LTC_USDT");
Log("Switch to LTC_USDT");
ticker = exchange.GetTicker();
Log(ticker);
Log(exchange.GetAccount());
}
exchange.IO("currency", "BTC_USDT")
метод переключения, пожалуйста, см. {@funexcahnge.IO}.BTC_USDT
может быть переключена наLTC_USDT
, не кLTC_BTC
.BTC_USDT
, количествоBTC
равняется 3, числоUSDT
В это время переключается наLTC_USDT
Немедленно после переключения количество торговых валют равняется нулю, т.е. количествоLTC_USDT
в счете равен 0, то есть количествоLTC
на счете 0, и переключенная торговая пара разделяет количествоUSDT
, что составляет 10 000.{@fun/Account/exchange.GetCurrency exchange.GetCurrency} (Версия на английском языке)
Вexchange.GetQuoteCurrency()
Функция используется для получения названия деноминированной валюты текущей торговой пары, т.е.quoteCurrency
.
Вexchange.GetQuoteCurrency()
Функция возвращает название валюты текущей торговой пары.
строка
Обмен.GetQuoteCurrency ((()
function main() {
exchange.SetCurrency("BTC_USDT")
Log("BTC_USDT denominated currency name:", exchange.GetQuoteCurrency())
// exchange.SetCurrency("ETH_BTC")
// Log("ETH_BTC denominated currency name:", exchange.GetQuoteCurrency())
}
def main():
exchange.SetCurrency("BTC_USDT")
Log("BTC_USDT denominated currency name:", exchange.GetQuoteCurrency())
# exchange.SetCurrency("ETH_BTC")
# Log("ETH_BTC denominated currency name:", exchange.GetQuoteCurrency())
void main() {
exchange.SetCurrency("BTC_USDT");
Log("BTC_USDT denominated currency name:", exchange.GetQuoteCurrency());
// exchange.SetCurrency("ETH_BTC")
// Log("ETH_BTC denominated currency name:", exchange.GetQuoteCurrency())
}
Например: {@var/EXCHANGE exchange} exchange objectBTC_USDT
,exchange.GetQuoteCurrency()
функция возвращаетUSDT
. Если текущая торговая параETH_BTC
,exchange.GetQuoteCurrency()
функция возвращаетBTC
.
{@fun/Account/exchange.GetCurrency exchange.GetCurrency}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}
Вexchange.GetPositions()
Функция используется для получения информации о положении;GetPositions()
функция является членом функции обмена объекта {@var/EXCHANGE exchange}.GetPositions()
функция получает информацию о позиции обменного счета, связанного с обменным объектомexchange
Цель функций (методов) членовexchange
Объект связан только сexchange
и не повторится здесь.
Вexchange.GetPositions()
функция возвращает массив {@struct/Position Position} структур, если запрос на данные удается, и возвращает нулевое значение, если запрос на данные не удается.
{@struct/Position Position} массивы, нулевые значения
Обмен.GetPositions ((() Обмен.GetPositions (символ)
Параметрsymbol
используется для установкиторговый символилидиапазон торговых символовчтобы его допросили.
Еслиsymbol
параметр не передается, по умолчанию требуются данные о положении всех символов в диапазоне измерений текущей торговой пары и кода контракта.
символ ложное строка
/*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) {
exchange.CreateOrder(symbol, "buy", -1, 1)
exchange.CreateOrder(symbol, "sell", -1, 1)
}
var defaultPositions = exchange.GetPositions()
var swapPositions = exchange.GetPositions("USDT.swap")
var futuresPositions = exchange.GetPositions("USDT.futures")
var btcUsdtSwapPositions = exchange.GetPositions("BTC_USDT.swap")
var tbls = []
var arr = [defaultPositions, swapPositions, futuresPositions, btcUsdtSwapPositions]
var tblDesc = ["defaultPositions", "swapPositions", "futuresPositions", "btcUsdtSwapPositions"]
for (var index in arr) {
var positions = arr[index]
var tbl = {type: "table", title: tblDesc[index], cols: ["Symbol", "MarginLevel", "Amount", "FrozenAmount", "Price", "Profit", "Type", "ContractType", "Margin"], rows: [] }
for (var pos of positions) {
tbl.rows.push([pos.Symbol, pos.MarginLevel, pos.Amount, pos.FrozenAmount, pos.Price, pos.Profit, pos.Type, pos.ContractType, pos.Margin])
}
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:
exchange.CreateOrder(symbol, "buy", -1, 1)
exchange.CreateOrder(symbol, "sell", -1, 1)
defaultPositions = exchange.GetPositions()
swapPositions = exchange.GetPositions("USDT.swap")
futuresPositions = exchange.GetPositions("USDT.futures")
btcUsdtSwapPositions = exchange.GetPositions("BTC_USDT.swap")
tbls = []
arr = [defaultPositions, swapPositions, futuresPositions, btcUsdtSwapPositions]
tblDesc = ["defaultPositions", "swapPositions", "futuresPositions", "btcUsdtSwapPositions"]
for index in range(len(arr)):
positions = arr[index]
tbl = {"type": "table", "title": tblDesc[index], "cols": ["Symbol", "MarginLevel", "Amount", "FrozenAmount", "Price", "Profit", "Type", "ContractType", "Margin"], "rows": []}
for pos in positions:
tbl["rows"].append([pos["Symbol"], pos["MarginLevel"], pos["Amount"], pos["FrozenAmount"], pos["Price"], pos["Profit"], pos["Type"], pos["ContractType"], pos["Margin"]])
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) {
exchange.CreateOrder(symbol, "buy", -1, 1);
exchange.CreateOrder(symbol, "sell", -1, 1);
}
auto defaultPositions = exchange.GetPositions();
auto swapPositions = exchange.GetPositions("USDT.swap");
auto futuresPositions = exchange.GetPositions("USDT.futures");
auto btcUsdtSwapPositions = exchange.GetPositions("BTC_USDT.swap");
json tbls = R"([])"_json;
std::vector<std::vector<Position>> arr = {defaultPositions, swapPositions, futuresPositions, btcUsdtSwapPositions};
std::string tblDesc[] = {"defaultPositions", "swapPositions", "futuresPositions", "btcUsdtSwapPositions"};
for (int index = 0; index < arr.size(); index++) {
auto positions = arr[index];
json tbl = R"({
"type": "table",
"cols": ["Symbol", "MarginLevel", "Amount", "FrozenAmount", "Price", "Profit", "Type", "ContractType", "Margin"],
"rows": []
})"_json;
tbl["title"] = tblDesc[index];
for (const auto& pos : positions) {
json arrJson = R"([])"_json;
arrJson.push_back(pos.Symbol);
arrJson.push_back(pos.MarginLevel);
arrJson.push_back(pos.Amount);
arrJson.push_back(pos.FrozenAmount);
arrJson.push_back(pos.Price);
arrJson.push_back(pos.Profit);
arrJson.push_back(pos.Type);
arrJson.push_back(pos.ContractType);
arrJson.push_back(pos.Margin);
tbl["rows"].push_back(arrJson);
}
tbls.push_back(tbl);
}
LogStatus(_D(), "\n", "`" + tbls.dump() + "`");
return;
}
Использование фьючерсных обменных объектов для размещения рыночных заказов на несколько различных торговых пар и кодов контрактов.
Фьючерсные контракты на криптовалюты отличаются от спотовых контрактов на криптовалюты, которые имеют только логическую концепцию позиции.торговые пары, код контрактаПожалуйста, обратитесь к {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType} функциям.
ВGetPositions
функция, сценарии использования параметра символа обобщены следующим образом:
Классификация обмена | символ Параметры | Объем запроса | Примечание |
---|---|---|---|
Фьючерсы | Не передавать параметр символа | Запрос всех торговых продуктов в пределах текущего диапазона размеров торговой пары и кода контракта | Если текущая торговая пара BTC_USDT и код контракта swap, все постоянные контракты на основе USDT будут запрошены.GetPositions("USDT.swap") |
Фьючерсы | Укажите торговый продукт, параметр символа: |
Запрос постоянного контракта на основе USDT определенного BTC | Для фьючерсных обменных объектов формат символа параметра: комбинацияторговые парыикод контрактаопределены платформой FMZ, разделенные символами". . |
Фьючерсы | Укажите диапазон торговых продуктов, параметр символа: |
Запрос всех бессрочных контрактов на основе USDT | - |
Фьючерсные биржи, поддерживающие опционы | Не передавать параметр символа | Запрос всех опционных контрактов в пределах текущего диапазона размеров торговых пар | Если текущая торговая пара BTC_USDT, контракт устанавливается на опционный контракт, например, опционный контракт Binance: BTC-240108-40000-C |
Фьючерсные биржи, поддерживающие опционы | Укажите конкретный товар торговли | Запрос указанного опциона | Например, для Binance Futures Exchange параметр символа: BTC_USDT.BTC-240108-40000-C |
Фьючерсные биржи, поддерживающие опционы | Укажите диапазон торговых продуктов, параметр символа: |
Запрос всех контрактов на опционы на основе USDT | - |
ВGetPositions
Функция, объект биржи фьючерсов
диапазон измерений запроса обобщается следующим образом:
символ Параметры | Определение сферы применения запроса | Примечание |
---|---|---|
USDT.swap | Периодический контрактный диапазон на основе USDT. | Для |
размеры, которые не поддерживаются интерфейсом API обмена, будет сообщена ошибка и возвращено нулевое значение, когда звонит.
USDT.futures. USDT-основанный диапазон контрактов на доставку.
∙ ∙ ∙ USD.swap ∙ ∙ ∙ Сфера постоянного обмена на основе валюты Контракты.
USD.futures. Обхват доставки на основе валюты Контракты.
Оптимизация USDT.Опция USDT.Опционный контракт на основе USDT.
Оптиции в долларах США. Оптиции в валютах.
∙ ∙ USDT.futures_combo ∙ Ряд комбинаций CFD. ∙ Фьючерс_Дерибит Биржа
Ограничения контрактов на поставку смешанной маржи. Фьючерс_Кракен Биржа.
USD.swap_pf. Смешанный маржинальный диапазон постоянного контракта. Фьючерс_Кракен Биржа.
Совместима сexchange.GetPosition()
звонить,GetPosition
то же самое, чтоGetPositions
.
Когда счет, представленный обменным объектомexchange
не занимает никаких позиций вдиапазон запросаиликонкретные торговые инструменты,exchange.GetPositions()
функция возвращает пустой массив, например:[]
.
{@struct/Position Position}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}
Вexchange.SetMarginLevel()
Функция используется для установления стоимости рычага в торговой паре или контракте, указанной вsymbol
Параметр. Совместим только с прохождением параметраmarginLevel
для установления стоимости кредитного плеча текущей торговой пары или контракта обменного объекта {@var/EXCHANGE exchange}.
exchange.SetMarginLevel ((символ, уровень маржи) Exchange.SetMarginLevel ((MarginLevel) - Установьте уровень маржи
Вsymbol
Параметр используется для указания торговой пары или контракта, для которого необходимо скорректировать значение кредитного плеча.symbol
параметрSetMarginLevel()
Функция соответствует форматуsymbol
параметрGetTicker()
Функция.
символ
ложное
строка
ВmarginLevel
параметр используется для установки значения рычага, который обычно является целым числом для бирж, и он также поддерживает настройки значения рычага плавающей точки для некоторых бирж.
Маржинальный уровень
Истинно
Номер
function main() {
exchange.SetMarginLevel(10)
// Set the leverage of BTC’s USDT-margined perpetual contract to 15
exchange.SetMarginLevel("BTC_USDT.swap", 15)
}
def main():
exchange.SetMarginLevel(10)
exchange.SetMarginLevel("BTC_USDT.swap", 15)
void main() {
exchange.SetMarginLevel(10);
exchange.SetMarginLevel("BTC_USDT.swap", 15);
}
Вexchange.SetMarginLevel()
Функция поддерживает только обменные объекты криптовалютных фьючерсных контрактов.exchange.SetMarginLevel()
функция для установки значения рычага.
Для фьючерсных контрактов на криптовалюты механизм использования рычага не является единым из-за бирж фьючерсных контрактов на криптовалюты.exchange.SetMarginLevel()
Функция не генерирует сетевой запрос, но только устанавливает переменную рычага в базовой системе FMZ (используется для передачи параметров в интерфейсе размещения заказов). Значение рычага некоторых биржевых фьючерсных контрактов является настройкой биржи, которая должна быть установлена на странице веб-сайта биржи или с помощью интерфейса API.exchange.SetMarginLevel()
Функция будет генерировать сетевой запрос и может не установить рычаг. Для этого может быть много причин, например: существует текущая позиция или ожидаемый ордер, что делает невозможным установку нового значения рычага для этой торговой пары или контракта.
Обмены, которые не поддерживаютexchange.SetMarginLevel()
Функция:
Имя функции | Не поддерживаемые спотовые обмены | Фьючерсные биржи без поддержки |
---|---|---|
Установка уровня границы | – | Фьючерсы_dYdX / Фьючерсы_Deribit |
{@var/EXCHANGE обмен}
Вexchange.SetDirection()
функция используется для настройки направления заказа функции {@fun/Trade/exchange.Buy exchange.Buy}, функции {@fun/Trade/exchange.Sell exchange.Sell} при размещении заказов на фьючерсные контракты.
Обмен.Установка направления (направление)
Вdirection
параметр используется для установки направления фьючерсного контракта при размещении ордера."buy"
, "closesell"
, "sell"
, "closebuy"
- Да.
направление
неправда
строка
function main(){
// For example, set to OKX futures contract of this week
exchange.SetContractType("this_week")
// Set leverage to 5 times
exchange.SetMarginLevel(5)
// Set the order type to long
exchange.SetDirection("buy")
// Place an order for 2 contracts at 10,000
exchange.Buy(10000, 2)
exchange.SetMarginLevel(5)
exchange.SetDirection("closebuy")
exchange.Sell(1000, 2)
}
def main():
exchange.SetContractType("this_week")
exchange.SetMarginLevel(5)
exchange.SetDirection("buy")
exchange.Buy(10000, 2)
exchange.SetMarginLevel(5)
exchange.SetDirection("closebuy")
exchange.Sell(1000, 2)
void main() {
exchange.SetContractType("this_week");
exchange.SetMarginLevel(5);
exchange.SetDirection("buy");
exchange.Buy(10000, 2);
exchange.SetMarginLevel(5);
exchange.SetDirection("closebuy");
exchange.Sell(1000, 2);
}
Вexchange.SetDirection()
функция устанавливает соответствие между направлением сделки фьючерсного контракта и функцией размещения ордера:
Функции размещения заказов | Направление, установленное параметрами функции SetDirection | Примечания |
---|---|---|
exchange.Buy | Купить и открыть длинные позиции | |
exchange.Buy | Купить и закрыть короткие позиции | |
exchange.Sell | Продажа и открытие коротких позиций | |
exchange.Sell | Продать и закрыть длинные позиции |
{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}
Вexchange.SetContractType()
Функция используется для установки текущего кода контракта обмена объекта {@var/EXCHANGE exchange}.
Вexchange.SetContractType()
функция возвращает структуру, которая содержит код биржевого контракта, соответствующий текущему коду контракта.quarter
, и структура возвращаемой стоимости этой функции:{"InstrumentID": "BTCUSD_230630", "instrument": "BTCUSD_230630"}
- Да.
объект
exchange.SetContractType ((символ)
Вsymbol
параметр используется для установки кода контракта, необязательные значения:"this_week"
, "next_week"
, "quarter"
, "next_quarter"
, "swap"
, и т.д.
Фьючерсные контракты на криптовалютыдоговор поставкикоды, если они не указаны, обычно имеют:
this_week
Контракт текущей недели.next_week
Контракт на следующей неделе.quarter
: квартальный контракт.next_quarter
: следующий квартальный контракт.Постоянные контрактыкоды в фьючерсных контрактах на криптовалюты, если они не указаны, обычно имеют:swap
- Вечный контракт.символ неправда строка
function main() {
// Set to this week contract
exchange.SetContractType("this_week")
}
def main():
exchange.SetContractType("this_week")
void main() {
exchange.SetContractType("this_week");
}
Установите текущий контракт как контракт текущей недели:
function main() {
// The default trading pair is BTC_USD, set the contract for this week, and the contract is a currency standard contract
exchange.SetContractType("this_week")
Log("ticker:", exchange.GetTicker())
// Switching trading pairs, then setting up contracts, switching to USDT as margin contracts, as opposed to currency standard contracts
exchange.IO("currency", "BTC_USDT")
exchange.SetContractType("swap")
Log("ticker:", exchange.GetTicker())
}
def main():
exchange.SetContractType("this_week")
Log("ticker:", exchange.GetTicker())
exchange.IO("currency", "BTC_USDT")
exchange.SetContractType("swap")
Log("ticker:", exchange.GetTicker())
void main() {
exchange.SetContractType("this_week");
Log("ticker:", exchange.GetTicker());
exchange.IO("currency", "BTC_USDT");
exchange.SetContractType("swap");
Log("ticker:", exchange.GetTicker());
}
При заключении договора сUSDT
в качестве маржи необходимо переключить торговую пару в коде (также можно установить торговую пару непосредственно при добавлении объекта обмена):
function main(){
// Set the contract for this week
var ret = exchange.SetContractType("this_week")
// Return information about the current week's contracts
Log(ret)
}
def main():
ret = exchange.SetContractType("this_week")
Log(ret)
void main() {
auto ret = exchange.SetContractType("this_week");
Log(ret);
}
Печать возвращаемого значенияexchange.SetContractType()
Функция:
В криптовалютной стратегии фьючерсных контрактов, возьмите пример переключения наBTC_USDT
Торговая пара: при смене торговой пары с использованиемexchange.SetCurrency("BTC_USDT")
илиexchange.IO("currency", "BTC_USDT")
функции, после переключения, вы должны использоватьexchange.SetContractType()
Система определяет, является ли новый торговый парывалютный стандартный контрактилиСтандартный контракт в USDTНапример, если торговая пара установлена наBTC_USDT
, используйтеexchange.SetContractType("swap")
функция настройки кода контракта наswap
В данный момент он установлен наBTC
дляСтандарт USDTЕсли торговая параBTC_USD
, используйтеexchange.SetContractType("swap")
функция настройки кода контракта наswap
В данный момент он установлен наBTC
Это...валютный стандартВечный контракт.
Подробная информация о поддерживаемых биржах фьючерсных контрактов на криптовалюты с названиями контрактов для каждой биржи:
Фьючерсы_OKCoin (OKX)
Установлено на постоянные контракты:exchange.SetContractType("swap")
На этой неделе контракт:exchange.SetContractType("this_week")
Контракт на следующей неделе:exchange.SetContractType("next_week")
Установлено на месячный контракт:exchange.SetContractType("month")
Контракт на следующий месяц:exchange.SetContractType("next_month")
Установлено на квартальные контракты:exchange.SetContractType("quarter")
Контракт на следующий квартал:exchange.SetContractType("next_quarter")
OKX имеет предварительные торговые контракты: дата поставки контракта является фиксированным временем.HMSTR-USDT-250207
. Установите торговую пару наHMSTR_USDT
на платформе FMZ, а затем использоватьexchange.SetContractType("HMSTR-USDT-250207")
чтобы установить контракт.
Для функций, поддерживающихsymbol
параметры, такие как:exchange.GetTicker()
, exchange.CreateOrder()
, и т. д. Вы можете указатьsymbol
параметр:HMSTR_USDT.HMSTR-USDT-250207
для получения рыночных данных по данному контракту или размещения заказа.
Фьючерсы_HuobiDM (фьючерсы Хуоби)
На этой неделе контракт:exchange.SetContractType("this_week")
- Да.
Контракт на следующей неделе:exchange.SetContractType("next_week")
- Да.
Установлено на квартальные контракты:exchange.SetContractType("quarter")
- Да.
Контракт на следующий квартал:exchange.SetContractType("next_quarter")
- Да.
Установлено на постоянные контракты:exchange.SetContractType("swap")
- Да.
Он поддерживает контракты сUSDT
в качестве маржи, взятьBTC
Договор на примере: использованиеexchange.IO("currency", "BTC_USDT")
перейти на контракт, который используетUSDT
как маржа.
Или установить текущую торговую пару наBTC_USDT
После переключения торговых пар, вы должны позвонитьexchange.SetContractType()
Функция снова установить контракт.
Фьючерсы_BitMEX (BitMEX)
Установлено на постоянные контракты:exchange.SetContractType("swap")
- Да.
Контракты на поставку фьючерсов на бирже BitMEX - это ежемесячные контракты с следующими кодами контрактов (с января по декабрь):
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
Заключение договоров поставки:exchange.SetContractType("December")
Например, когда торговая пара установлена наXBT_USDT
,exchange.SetContractType("December")
Функция вызвана для установки контракта на декабрьскую поставку в USDT на основе BTC (соответствующий фактическому коду контрактаXBTUSDTZ23
).
Фьючерсы_BitMEX Контрактная информация
Код контракта, определенный Futures_BitMEX | Соответствующая торговая пара в FMZ | Соответствующий код контракта в FMZ | Примечание |
---|---|---|---|
DOGEUSD | DOGE_USD | обмен | В долларах США, XBT расплачивается. |
ПОЛОЖЕНИЕ | DOGE_USDT | обмен | В USDT деноминировано, в USDT урегулировано. |
XBTETH | XBT_ETH | обмен | В ETH, в XBT. |
XBTEUR | XBT_EUR | обмен | В евро, расчеты в XBT. |
USDTUSDC | USDT_USDC | обмен | В долларах США, в XBT. |
ETHUSD_ETH | ETH_USD_ETH | обмен | В долларах США, расчеты в ETH. |
XBTH24 | XBT_USD | Март | Дата истечения срока действия: 24 марта, код месяца: H; номиналом в долларах США, расчет в XBT. |
ETHUSDZ23 | ETH_USD | Декабрь | Дата истечения срока действия: 23 декабря, код месяца: Z; номиналом в долларах США, расчет в XBT. |
XBTUSDTZ23 | XBT_USDT | Декабрь | Дата истечения срока действия: 23 декабря. Код месяца: Z; деноминированный в USDT, расчет в USDT. |
ADAZ23 | ADA_XBT | Декабрь | Дата истечения срока действия: 23 декабря, код месяца: Z ; расчет в XBT, расчет в XBT. |
P_XBTETFX23 | USDT_XXX | P_XBTETFX23 | Срок действия: 23/11/23; выраженный в процентах и расчитанный в USDT. |
Фьючерсы_GateIO
На этой неделе контракт:exchange.SetContractType("this_week")
- Да.
Контракт на следующей неделе:exchange.SetContractType("next_week")
- Да.
Установлено на квартальные контракты:exchange.SetContractType("quarter")
- Да.
Контракт на следующий квартал:exchange.SetContractType("next_quarter")
- Да.
Установлено на постоянные контракты:exchange.SetContractType("swap")
- Да.
Он поддерживает контракты сUSDT
в качестве маржи, взятьBTC
Договор на примере: использованиеexchange.IO("currency", "BTC_USDT")
перейти на контракт, который используетUSDT
как маржа.
Или установить текущую торговую пару наBTC_USDT
После переключения торговых пар, вы должны позвонитьexchange.SetContractType()
Функция снова установить контракт.
Фьючерсы_Deribit
Установлено на постоянные контракты:exchange.SetContractType("swap")
- Да.
Он поддерживает DeribitUSDC
Договор.
Контракты на поставку:"this_week"
, "next_week"
, "month"
, "quarter"
, "next_quarter"
, "third_quarter"
, "fourth_quarter"
- Да.
CFD (фьючерс_комбо):"this_week,swap"
, "next_week,swap"
, "next_quarter,this_week"
, "third_quarter,this_week"
, "month,next_week"
, есть много комбинаций.
Для опционных контрактов необходимо ввести конкретный код опционного контракта, определенный биржей, см. для подробной информации на веб-сайте Deribit.
Фьючерсы_KuCoin
Например, если торговая пара установлена наBTC_USD
и код контракта установлен, это валютный контракт:
Установлено на постоянные контракты:exchange.SetContractType("swap")
- Да.
Установлено на квартальные контракты:exchange.SetContractType("quarter")
- Да.
Контракт на следующий квартал:exchange.SetContractType("next_quarter")
.
USDT в качестве контракта на маржу:
Например, если торговая пара установлена наBTC_USDT
, а затем установить код контракта, это контракт с USDT в качестве маржи.
Установлено на постоянные контракты:exchange.SetContractType("swap")
.
Фьючерсы_Binance
Binance Futures Exchange по умолчанию в вечном контракте текущей торговой пары, код контракта:swap
- Да.
Установлено на постоянные контракты:exchange.SetContractType("swap")
, вечные контракты Binance имеют контракты, которые используютUSDT
Например,USDT
стандартный бессрочный контрактBTC
может использоваться в качестве контракта маржи, и торговая пара установлена наBTC_USDT
Binance также поддерживает вечные контракты, которые используют монеты в качестве маржи, например,BTC
Стандартный вечный контракт Binance, с торговой парой, установленной наBTC_USD
- Да.
Установлено на квартальные контракты:exchange.SetContractType("quarter")
, контракт поставки имеет валютный стандартный контракт (т.е. использует валюты в качестве маржи), например,BTC
В квартальном контракте торговая пара устанавливается на:BTC_USD
и затем установить контрактexchange.SetContractType("quarter")
, он настроен наBTC
квартальный контракт с валютным стандартным контрактом.
Контракт на следующий квартал:exchange.SetContractType("next_quarter")
, например,BTC
в случае, если в соответствии со стандартом валютного квартального контракта торговая пара установлена на:BTC_USD
, и затем установить контрактexchange.SetContractType("next_quarter")
- Да.
Binance поддерживает частичнуюUSDT
в качестве контракта на предоставление маржи,BTC
Например, установить торговую пару наBTC_USDT
, затем установить код контракта.
Поддержка контрактов Binance Options:
Формат кода опционного контракта основан на коде опционного контракта, определенном биржей:BTC-241227-15000-C
, XRP-240112-0.5-C
, BTC-241227-15000-P
Возьмите код контракта BinanceBTC-241227-15000-P
Например: BTC - это код валюты опциона, 241227 - дата осуществления, 15000 - цена осуществления, P - это опцион продажи, а C - это опцион покупки.
Подробная информация о типе опциона, будь то европейский опцион или американский опцион, приведена в соответствующей информации в опционном контракте биржи.
Биржа может ограничивать продавцов опционов и требовать от них подачи заявки на получение квалификации отдельно.
Фьючерсы_Бибокс
Код контракта для бессрочных контрактов Bibox:swap
- Да.
Установлено на постоянные контракты:exchange.SetContractType("swap")
.
Фьючерсы_Bybit
По умолчанию - постоянный контракт для текущей торговой пары, код контракта:swap
- Да.
Код контракта на этой неделе:this_week
- Да.
Код контракта на следующей неделе:next_week
- Да.
Код контракта третьей недели:third_week
- Да.
Месячный код контракта:month
- Да.
Код контракта на следующий месяц:next_month
- Да.
Код квартального контракта:quarter
- Да.
Код контракта на следующий квартал:next_quarter
- Да.
Код контракта третьего квартала:third_quarter
.
Фьючерс_Кракен
По умолчанию - постоянный контракт текущей торговой пары, код контракта:swap
.
swap
- Вечный контракт.month
: контракт текущего месяца.quarter
: квартальный контракт.next_quarter
Контракт на следующий квартал.swap_pf
: Вечный контракт с смешанной маржой.quarter_ff
: квартальный контракт с смешанной маржой.month_ff
: контракт на текущий месяц со смешанной маржой.next_quarter_ff
: контракт на смешанную маржу на следующий квартал.
Фьючерсы_Bitfinex
По умолчанию - постоянный контракт на текущую торговую пару, код контракта:swap
.
Фьючерсы_Bitget
По умолчанию - постоянный контракт на текущую торговую пару, код контракта:swap
- Да.
Торговая пара установлена наBTC_USD
для валютных стандартных контрактов, и торговая пара установлена наBTC_USDT
для договоров, заключенныхUSDT
. Демонстрационные контракты могут быть установлены с торговыми парами какSBTC_USD
, BTC_SUSDT
.
Фьючерсы_dYdX
Код контракта для бессрочных контрактов dYdX:swap
- Да.
Установлено на постоянные контракты:exchange.SetContractType("swap")
, dYdX имеет только стандартные контракты в USDT.
Фьючерсы_MEXC
Код контракта для бессрочных контрактов MEXC:swap
- Да.
Установлено на постоянные контракты:exchange.SetContractType("swap")
. Настроить торговую пару наBTC_USD
, который является валютным стандартным контрактом, и устанавливает торговую пару наBTC_USDT
, то естьUSDT
- Договор заключен.
Фьючерсы_Криптовалюта
Токены на счете наcrypto.comобменные опционы могут быть конвертированы в кредиты в долларах США для использования в качестве маржи для торговли контрактами.
Установлено на постоянный контракт:exchange.SetContractType("swap")
Пример вызоваexchange.SetContractType("swap")
функция установки бессрочного контракта на BTC, когда торговая пара установлена наBTC_USD
- Да.
Вcrypto.comКонтракты обменной доставки - это месячные контракты со следующими кодами контрактов (с января по декабрь):
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
Установите контракт поставки:exchange.SetContractType("October")
Например, когда торговая пара установлена наBTC_USD
, вызвать функциюexchange.SetContractType("October")
чтобы установить октябрьский контракт на доставку BTC.
Соответствующий код контракта на данный момент:BTCUSD-231027
.
Фьючерсы_WOO
Фьючерсы_WOOUSDT
основанные контракты с кодом постоянного контрактаswap
Например, когда торговая пара установлена наBTC_USDT
, функцияexchange.SetContractType("swap")
Призвано установить текущий контракт на USDT основанный вечный контракт для BTC.
{@fun/Futures/exchange.GetContractType exchange.GetContractType}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}
Вexchange.GetContractType()
Функция используется для получения кода контракта для текущего настройки объекта обмена {@var/EXCHANGE exchange}.
Вexchange.GetContractType()
функция возвращает код контракта, определенный платформой FMZ, например:this_week
, swap
, и т.д.
строка
exchange.GetContractType (()
function main () {
Log(exchange.SetContractType("this_week"))
Log(exchange.GetContractType())
}
def main():
Log(exchange.SetContractType("this_week"))
Log(exchange.GetContractType())
void main() {
Log(exchange.SetContractType("this_week"));
Log(exchange.GetContractType());
}
{@fun/Futures/exchange.SetContractType exchange.SetContractType} (Статьировка контракта)
Вexchange.GetFundings()
Функция используется для получения данных о ставках финансирования за текущий период.
Вexchange.GetFundings()
функция возвращает массив {@struct/Funding Funding} структур, когда запрос на данные выполняется успешно, и возвращает нулевое значение, когда запрос на данные не выполняется.
{@struct/Funding Funding} массив, нулевое значение
Обмен.GetFundings ((() обмен.GetFundings (символ)
Параметрsymbol
используется для установкисимвол транзакцииилидиапазон символов транзакцийКогдаsymbol
Если параметр не выполнен, данные текущей ставки финансирования всех инструментов будут запрошены по умолчанию в диапазоне измерений текущей торговой пары и кода контракта.
символ ложное строка
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-23 00:05:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDC"}]
*/
function main() {
// LPT_USDT.swap 4-hour period
var symbols = ["SOL_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "SOL_USDC.swap", "ETH_USDC.swap", "BTC_USD.swap", "BTC_USDT.quarter", "LPT_USDT.swap"]
for (var symbol of symbols) {
exchange.GetTicker(symbol)
}
var arr = []
var arrParams = ["no param", "LTC_USDT.swap", "USDT.swap", "USD.swap", "USDC.swap", "USDT.futures", "BTC_USDT.quarter"]
for (p of arrParams) {
if (p == "no param") {
arr.push(exchange.GetFundings())
} else {
arr.push(exchange.GetFundings(p))
}
}
var tbls = []
var index = 0
for (var fundings of arr) {
var tbl = {
"type": "table",
"title": arrParams[index],
"cols": ["Symbol", "Interval", "Time", "Rate"],
"rows": [],
}
for (var f of fundings) {
tbl["rows"].push([f.Symbol, f.Interval / 3600000, _D(f.Time), f.Rate * 100 + " %"])
}
tbls.push(tbl)
index++
}
LogStatus(_D(), "\n Requested market types:", symbols, "\n`" + JSON.stringify(tbls) + "`")
}
'''backtest
start: 2024-10-01 00:00:00
end: 2024-10-23 00:05:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDC"}]
'''
import json
def main():
# LPT_USDT.swap 4-hour period
symbols = ["SOL_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "SOL_USDC.swap", "ETH_USDC.swap", "BTC_USD.swap", "BTC_USDT.quarter", "LPT_USDT.swap"]
for symbol in symbols:
exchange.GetTicker(symbol)
arr = []
arrParams = ["no param", "LTC_USDT.swap", "USDT.swap", "USD.swap", "USDC.swap", "USDT.futures", "BTC_USDT.quarter"]
for p in arrParams:
if p == "no param":
arr.append(exchange.GetFundings())
else:
arr.append(exchange.GetFundings(p))
tbls = []
index = 0
for fundings in arr:
tbl = {
"type": "table",
"title": arrParams[index],
"cols": ["Symbol", "Interval", "Time", "Rate"],
"rows": [],
}
for f in fundings:
tbl["rows"].append([f["Symbol"], f["Interval"] / 3600000, _D(f["Time"]), str(f["Rate"] * 100) + " %"])
tbls.append(tbl)
index += 1
LogStatus(_D(), "\n Requested market types:", symbols, "\n`" + json.dumps(tbls) + "`")
/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-23 00:05:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDC"}]
*/
void main() {
// LPT_USDT.swap 4-hour period
json arrSymbol = R"([])"_json;
std::string symbols[] = {"SOL_USDT.swap", "ETH_USDT.swap", "LTC_USDT.swap", "SOL_USDC.swap", "ETH_USDC.swap", "BTC_USD.swap", "BTC_USDT.quarter", "LPT_USDT.swap"};
for (const std::string& symbol : symbols) {
exchange.GetTicker(symbol);
arrSymbol.push_back(symbol);
}
std::vector<std::vector<Funding>> arr = {};
std::string arrParams[] = {"no param", "LTC_USDT.swap", "USDT.swap", "USD.swap", "USDC.swap", "USDT.futures", "BTC_USDT.quarter"};
for (const std::string& p : arrParams) {
if (p == "no param") {
arr.push_back(exchange.GetFundings());
} else {
arr.push_back(exchange.GetFundings(p));
}
}
json tbls = R"([])"_json;
int index = 0;
for (int i = 0; i < arr.size(); i++) {
auto fundings = arr[i];
json tbl = R"({
"type": "table",
"cols": ["Symbol", "Interval", "Time", "Rate"],
"rows": []
})"_json;
tbl["title"] = arrParams[index];
for (int j = 0; j < fundings.size(); j++) {
auto f = fundings[j];
// json arrJson = {f.Symbol, f.Interval / 3600000, _D(f.Time), string(f.Rate * 100) + " %"};
json arrJson = {f.Symbol, f.Interval / 3600000, _D(f.Time), f.Rate};
tbl["rows"].push_back(arrJson);
}
tbls.push_back(tbl);
index++;
}
LogStatus(_D(), "\n Requested market types:", arrSymbol.dump(), "\n`" + tbls.dump() + "`");
}
Используйте объект фьючерсного обмена для вызоваexchange.GetFundings()
Перед вызовом любой рыночной функции GetFundings возвращает только данные о финансировании текущей торговой пары по умолчанию. После вызова рыночной функции он возвращает данные о финансировании всех запрошенных сортов. Вы можете обратиться к следующему примеру теста:
Для фьючерсных бирж, которые не поддерживают пакетный запрос данных по ставкам финансирования, еслиsymbol
параметр указывается как диапазон запроса, например:USDT.swap
илиsymbol
Параметр не передан, интерфейс будет сообщать об ошибке.GetFundings()
Функция, использующая этот тип фьючерсного обмена объекта, вы должны указатьsymbol
параметр как конкретный тип постоянного контракта для запроса текущих данных о ставках финансирования типа.
Вexchange.GetFundings()
Функция поддерживает реальные системы торговли и обратного тестирования.
Биржи, которые не поддерживают пакетную покупку данных по ставкам финансирования: Futures_Bitget, Futures_OKX, Futures_MEXC, Futures_Deribit, Futures_Crypto.symbol
параметр со специфическим кодом символа, например:ETH_USDT.swap
.
Обмены, которые не поддерживаютexchange.GetFundings()
Функция:
Имя функции | Не поддерживаемые спотовые обмены | Фьючерсные биржи без поддержки |
---|---|---|
GetFundings | – | Фьючерсы DigiFinex |
{@struct/Funding Финансирование}
Вexchange.SetBase()
Функция используется для установки базового адреса интерфейса API обмена, настроенного в объекте обмена {@var/EXCHANGE exchange}.
Exchange.SetBase (s)
Вs
параметр используется для указания базового адреса интерфейса API обмена.
с
неправда
строка
function main() {
// Use default base address
Log(exchange.GetTicker())
// Switch to https://aws.okx.com
exchange.SetBase("https://aws.okx.com")
Log(exchange.GetTicker())
}
def main():
Log(exchange.GetTicker())
exchange.SetBase("https://aws.okx.com")
Log(exchange.GetTicker())
void main() {
Log(exchange.GetTicker());
exchange.SetBase("https://aws.okx.com");
Log(exchange.GetTicker());
}
Переключение базового адреса API обмена не поддерживается в системе бэкстестинга, потому что система бэкстестинга является средой симуляции песочницы, и она не имеет доступа к интерфейсу API обмена.
{@fun/Trade/exchange.IO exchange.IO}
Вexchange.GetBase()
Функция используется для получения текущего адреса базы интерфейса API обмена.
Текущий адрес базового интерфейса API обмена. строка
Обмен.GetBase ((()
function main() {
Log(exchange.GetBase())
}
def main():
Log(exchange.GetBase())
void main() {
Log(exchange.GetBase());
}
{@fun/NetSettings/exchange.SetBase exchange.SetBase} Это не так.
Вexchange.SetProxy()
функция используется для настройки конфигурации прокси обмена {@var/EXCHANGE exchange}.
Обмен.SetProxy ((прокси)
Вproxy
параметр используется для указания конфигурации прокси.
прокси
неправда
строка
function main() {
exchange.SetProxy("socks5://192.168.1.10:8080")
// If you can't access the exchange ticker interface, set up an available ss5 proxy and you can access the ticker interface
Log(exchange.GetTicker())
}
def main():
exchange.SetProxy("socks5://192.168.1.10:8080")
Log(exchange.GetTicker())
void main() {
exchange.SetProxy("socks5://192.168.1.10:8080");
Log(exchange.GetTicker());
}
Конфигурировать объект обмена {@var/EXCHANGE exchange}socks5
Прокси:
function main(){
exchange.SetProxy("ip://10.0.3.15")
// The requested IP address is 10.0.3.15
exchange.GetTicker()
}
def main():
exchange.SetProxy("ip://10.0.3.15")
exchange.GetTicker()
void main() {
exchange.SetProxy("ip://10.0.3.15");
exchange.GetTicker();
}
В дополнениеглобальная спецификацияIP-адреса запроса от объекта обмена {@var/EXCHANGE exchange}, также поддерживается указание IP-адреса на основе {@var/EXCHANGE exchange}:
Если настройка прокси не работает,exchange.SetProxy()
Функция вернет null при вызове.exchange.SetProxy()
функция устанавливает прокси дляrest
Один прокси может быть установлен для каждого объекта обмена {@var/EXCHANGE exchange}, и доступ к интерфейсу обмена, связанному с объектом обмена {@var/EXCHANGE exchange} после установки прокси будет доступен через прокси.
Поддержка настройкиsocks5
прокси, принимая первый объект обмена добавлен {@var/EXCHANGE exchange} т.е.:exchanges[0]
Например:
exchange.SetProxy("socks5://127.0.0.1:8889")
.exchange.SetProxy("socks5://username:password@127.0.0.1:8889")
. username
это имя пользователя иpassword
это пароль.exchange.SetProxy("")
.Поддерживает настройку IP-адреса запроса от обмена {@var/EXCHANGE exchange} объекта,глобально определенный.
{@var/EXCHANGE обмен}
Вexchange.SetTimeout()
Функция используется для настройки временного пребыванияrest
запрос на объект обмена {@var/EXCHANGE exchange}.
Обмен.Настроить время (Timeout)
Вtimeout
параметр используется для указания количества миллисекунд для настройки тайм-аута.
Тайм-аут
Истинно
Номер
function main() {
exchange.SetTimeout(3000)
Log(exchange.GetTicker())
}
def main():
exchange.SetTimeout(3000)
Log(exchange.GetTicker())
void main() {
exchange.SetTimeout(3000);
Log(exchange.GetTicker());
}
Параметрtimeout
- это значение миллисекунды, 1000 миллисекунд равно 1 секунде.rest
только протокол, используется для установки тайм-аут наrest
запросов, он вступает в силу, устанавливая только один раз.exchange.SetTimeout(3000)
, устанавливаетrest
Запросить тайм-аут дляexchange
Вызов функций с сетевыми запросами, такими какexchange.GetTicker()
вызовы, которые не получают ответа в течение более 3 секунд, будут выходить из строя, а вызовы функций, которые выходят из строя, будут возвращать нулевые значения.SetTimeout()
не является глобальной функцией, это метод обмена {@var/EXCHANGE exchange}.
{@var/EXCHANGE обмен}
FMZ Quant Trading Platform действительно поддерживает многопоточную функциюJavaScript
языковой стратегии с нижней части системы и реализует следующие цели:
Объекты | Руководство | Примечания |
---|---|---|
прокрутка | Многопоточный глобальный объект | Функции членов:Thread , getThread , mainThread , и т.д. |
Нить | Объект нитки | Функции членов:peekMessage , postMessage , join , и т.д. |
Закрыть | Объект блокировки нитей | Функции членов:acquire , release Они могут быть переданы в среду потока в качестве параметров функции выполнения потока. |
Ведущий | Объект события | Функции членов:set , clear , wait , isSet Они могут быть переданы в среду потока в качестве параметра функции выполнения потока. |
ThreadCondition (Условие) | Объект условия | Функции членов:notify , notifyAll , wait , acquire , release Они могут быть переданы в среду потока в качестве параметра функции выполнения потока. |
ThreadDict | Объект словаря | Функции членов:get , set Они могут быть переданы в среду потока в качестве параметров функции выполнения потока. |
Вthreading
object - это глобальный инструмент управления многопотоками, который предоставляет такие функции, как создание одновременных потоков, блокировки потоков и объекты условий.threading
Этот объект поддерживается толькоJavaScript
языковой стратегии.
ВThread()
Функция используется для создания одновременных потоков.
ВThread()
функция возвращает aThread
объект, который используется для управления созданными параллельными потоками, коммуникацией потоков и т.д.
Thread
объект
Ведущий (забавный) Речь идет о... предметах.
Параметрfunc
является функцией для одновременного выполнения (передается по ссылке) и поддерживает передачу анонимных функций.func
может принимать несколько параметров, которые будут передаваться через...args
Поэтому список параметровfunc
должна соответствовать...args
.
Функция
неправда
Функция
Параметрarg
является фактическим параметром, переданнымfunc
(т.е. функция одновременного выполнения потока) при выполнении обратного вызова; может быть несколько параметровarg
, и перечень параметровfunc
должна соответствовать...args
.
арг
ложное
string, number, bool, object, array, function, null value и другие типы, поддерживаемые системой
Параметрitem
представляет собой массив, содержащий ссылки на функции и их параметры, которые должны быть выполнены одновременно.item
параметры могут быть переданы при вызовеThread
function.
пункт неправда массив
function test1(a, b, c) {
Log("test1:", a, b, c)
}
function main() {
var t1 = threading.Thread(test1, 1, 2, 3)
var t2 = threading.Thread(function (msg) {
Log("msg:", msg)
}, "Hello thread2")
t1.join()
t2.join()
}
Создавать одновременные потоки как для пользовательской функции, так и для анонимной функции.
function test1(msg) {
Log("msg:", msg)
test2("Hello test2")
}
function main() {
var t1 = threading.Thread(
[function(a, b, c) {Log(a, b, c)}, 1, 2, 3],
[test1, "Hello test1"],
[`function test2(msg) {Log("msg:", msg)}`])
t1.join()
}
ИспользуйтеThread(...items)
Форма для создания одновременных потоков и выполнения нескольких функций последовательно.
function ml(input) {
const net = new brain.NeuralNetwork()
net.train([
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] },
])
return net.run(input)
}
function main() {
var ret = threading.Thread([ml, [1, 0]], [HttpQuery("https://unpkg.com/brain.js")]).join()
// ret: {"id":1,"terminated":false,"elapsed":337636000,"ret":{"0":0.9339330196380615}}
Log(ret)
}
Он поддерживает передачу последовательностей функций и может импортировать внешние библиотеки динамически для одновременного вычисления.
Функция ниткиfunc
прошел вThread()
Функция для одновременного выполнения выполняется в изолированной среде, поэтому переменные за пределами потока не могут быть напрямую ссылаются, и компиляция не удастся при ссылке. В то же время ссылки на другие функции закрытия не поддерживаются в потоке. Все API, предоставляемые платформой, могут быть вызваны в потоке, но другие функции, определенные пользователем, не могут быть вызваны.
Все параллельные функции, связанные с потоком, поддерживаются только как совместимость кода в системе параллельного тестирования и не будут фактически выполняться параллельными потоками, поэтому они не будут повторяться в этой главе.
{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop}
ВgetThread()
функция используется для получения объекта потока на основе указанного ID потока.
ВgetThread()
функция возвращаетThread
Объект с threadId, указанный параметром
Thread
объект
getThread ((ThreadId)
ПараметрthreadId
Получить соответствующий объект потока, указав параметр.
Проводка неправда Номер
function main() {
var t1 = threading.Thread(function () {
Log("Hello thread1")
})
// The Thread object has a method: id(), which is used to get the thread ID. You can view the section of the document corresponding to the Thread object.
var threadId = t1.id()
var threadName = t1.name()
Log("threadId:", threadId, ", threadName:", threadName)
var t2 = threading.getThread(threadId)
Log(`threadId == t2.id():`, threadId == t2.id(), `, threadName == t2.name():`, threadName == t2.name())
}
Получить указанный объект потока черезthreadId
.
Он поддерживает систему обратного тестирования и среду торговли в реальном времени.
Если вы хотите получить нить была выполнена и выпущена, вы не можете использоватьthreading.getThread(threadId)
чтобы получить предмет нитки нитки.
{@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threads/Dict Dict}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/threading/Lock Lock}, {@fun/Threads/threading/eventLoop Loop}, {@fun/Threads/threads/threading/eventLoop}, {@fun/Threads/threads/threading/eventLoop}
ВmainThread()
Функция используется для получения объекта нитки основного нитки, то есть нитки, гдеmain()
функция в стратегии расположена.
ВmainThread()
Функция возвращает объект потока основного потока.
Thread
объект
ГлавныйThread ((()
function main() {
Log("The threadId of the main thread:", threading.mainThread().id())
}
ВозьмиThread
Объект основной нити и выходthreadId
Главной нитью.
function test() {
Log("Output the main thread ID in the test function:", threading.mainThread().id())
}
function main() {
var t1 = threading.Thread(test)
t1.join()
}
Объект нитки основной нитки также может быть получен в одновременных нитках.
Он поддерживает систему обратного тестирования и среду торговли в реальном времени.
{@fun/Threads/getThread getThread}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/threading/Lock Lock}, {@fun/Threads/threading/eventLoop Loop}, {@fun/Threads/threads/threading/eventLoop}
ВcurrentThread()
функция используется для получения объекта потока текущей потоки.
ВcurrentThread()
функция возвращает объект потока текущей потоки.
Thread
объект
текущийThread ((()
function test() {
Log("Id of the current thread:", threading.currentThread().id())
}
function main() {
var t1 = threading.Thread(test)
t1.join()
}
ВозьмиThread
объекта текущей нити и выходthreadId
текущей нити.
Он поддерживает систему обратного тестирования и среду торговли в реальном времени.
{@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/threading/Condition Condition}, {@fun/Threads/threading/event Event}, {@fun/Threads/threading/threading/Dict Dict}, {@fun/Threads/threading/threading/pending pending}, {@fun/Threads/threading/threading/Loop eventLoop}, {@fun/Threads/threading/eventLoop}, {@fun/Threads/threading/eventLoop}, {@fun/Threads/threads/threading/eventLoop}, {@fun/Threads/threads/threads/event
ВLock()
Функция используется для создания объекта блокировки потока.
ВLock()
Функция возвращает объект блокировки потока.
ThreadLock
объект
Замок ((()
function consumer(productionQuantity, dict, lock) {
for (var i = 0; i < productionQuantity; i++) {
lock.acquire()
var count = dict.get("count")
Log("consumer:", count)
Sleep(1000)
lock.release()
}
}
function producer(productionQuantity, dict, lock) {
for (var i = 0; i < productionQuantity; i++) {
lock.acquire()
dict.set("count", i)
Log("producer:", i)
Sleep(1000)
lock.release()
}
}
function main() {
var dict = threading.Dict()
dict.set("count", -1)
var lock = threading.Lock()
var productionQuantity = 10
var producerThread = threading.Thread(producer, productionQuantity, dict, lock)
var consumerThread = threading.Thread(consumer, productionQuantity, dict, lock)
consumerThread.join()
producerThread.join()
}
Два параллельных потока получают доступ к общему ресурсу.
Он поддерживает систему обратного тестирования и среду торговли в реальном времени.
{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threads/threading/ThreadThread}, {@fun/Threads/threads/threading/Condition Condition}, {@fun/Threads/threads/threading/Event Event}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threads/threading/pending pending}, {@fun/Threads/threads/threading/threading/eventLoop}
ВCondition()
функция используется для создания объекта переменной условия, который используется для достижения синхронизации и связи между потоками в многопоточной параллельной среде.Condition()
, нить может ждать, когда определенные условия не выполнены, пока другая нить не уведомит ее о том, что условие выполнено.
ВCondition()
функция возвращает aThreadCondition
object.
ThreadCondition
объект
Состояние
function consumer(productionQuantity, dict, condition) {
for (var i = 0; i < productionQuantity; i++) {
condition.acquire()
while (dict.get("array").length == 0) {
condition.wait()
}
var arr = dict.get("array")
var count = arr.shift()
dict.set("array", arr)
Log("consumer:", count, ", array:", arr)
condition.release()
Sleep(1000)
}
}
function producer(productionQuantity, dict, condition) {
for (var i = 0; i < productionQuantity; i++) {
condition.acquire()
var arr = dict.get("array")
arr.push(i)
dict.set("array", arr)
Log("producer:", i, ", array:", arr)
condition.notify()
condition.release()
Sleep(1000)
}
}
function main() {
var dict = threading.Dict()
dict.set("array", [])
var condition = threading.Condition()
var productionQuantity = 10
var producerThread = threading.Thread(producer, productionQuantity, dict, condition)
var consumerThread = threading.Thread(consumer, productionQuantity, dict, condition)
consumerThread.join()
producerThread.join()
}
Два параллельных потока получают доступ к общему ресурсу.
Система обратного тестирования не реализует эту функциональность, она только определяет ее.
{@fun/Threads/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/event Event}, {@fun/Threads/threading/Dict Dict}, {@fun/Threads/threading/pending pending}, {@fun/Threads/threading/eventLoop Loop}
ВEvent()
функция используется для созданиясобытие потокаобъект, который используется для синхронизации между потоками, позволяя одному потоку ждать уведомления или сигнала от другого потока.
ВEvent()
функция возвращает aThreadEvent
object.
ThreadEvent
объект
Событие
function consumer(productionQuantity, dict, pEvent, cEvent) {
for (var i = 0; i < productionQuantity; i++) {
while (dict.get("array").length == 0) {
pEvent.wait()
}
if (pEvent.isSet()) {
pEvent.clear()
}
var arr = dict.get("array")
var count = arr.shift()
dict.set("array", arr)
Log("consumer:", count, ", array:", arr)
cEvent.set()
Sleep(1000)
}
}
function producer(productionQuantity, dict, pEvent, cEvent) {
for (var i = 0; i < productionQuantity; i++) {
while (dict.get("array").length != 0) {
cEvent.wait()
}
if (cEvent.isSet()) {
cEvent.clear()
}
var arr = dict.get("array")
arr.push(i)
dict.set("array", arr)
Log("producer:", i, ", array:", arr)
pEvent.set()
Sleep(1000)
}
}
function main() {
var dict = threading.Dict()
dict.set("array", [])
var pEvent = threading.Event()
var cEvent = threading.Event()
var productionQuantity = 10
var producerThread = threading.Thread(producer, productionQuantity, dict, pEvent, cEvent)
var consumerThread = threading.Thread(consumer, productionQuantity, dict, pEvent, cEvent)
consumerThread.join()
producerThread.join()
}
Два параллельных потока получают доступ к общему ресурсу.
Он поддерживает систему обратного тестирования и среду торговли в реальном времени.
{@fun/Threads/getThread getThread}, {@fun/Threads/threads/mainThread mainThread}, {@fun/Threads/threads/currentThread currentThread}, {@fun/Threads/threads/threading/Lock Lock}, {@fun/Threads/threads/threading/Condition Condition}, {@fun/Threads/threads/threading/Thread Thread}, {@fun/Threads/threads/threading/Dict Dict}, {@fun/Threads/threads/threading/pending pending}, {@fun/Threads/threads/threading/eventLoop}
ВDict()
Функция используется для создания объекта словаря для передачи на одновременные потоки.
ВDict()
функция возвращает aThreadDict
object.
ThreadDict
объект
Диктант
function threadFun1(obj) {
obj["age"] = 100
while (true) {
Log("threadFun1 obj:", obj)
Sleep(5000)
}
}
function threadFun2(obj) {
while (true) {
Log("threadFun2 obj:", obj)
Sleep(5000)
}
}
function main() {
var obj = {"age": 10}
var t1 = threading.Thread(threadFun1, obj)
var t2 = threading.Thread(threadFun2, obj)
t1.join()
t2.join()
}
Передача нормального объекта на функцию выполнения параллельного потока, чтобы проверить, будет ли изменение значения ключа объекта вызывать изменения значения ключа объекта в других потоках.
function threadFun1(threadDict) {
threadDict.set("age", 100)
while (true) {
Log(`threadFun1 threadDict.get("age"):`, threadDict.get("age"))
Sleep(5000)
}
}
function threadFun2(threadDict) {
while (true) {
Log(`threadFun2 threadDict.get("age"):`, threadDict.get("age"))
Sleep(5000)
}
}
function main() {
var threadDict = threading.Dict()
threadDict.set("age", 10)
var t1 = threading.Thread(threadFun1, threadDict)
var t2 = threading.Thread(threadFun2, threadDict)
t1.join()
t2.join()
}
ПередайThreadDict
Объект, созданныйDict()
Функция выполняется одновременно с функцией выполнения потока, и проверяется, будет ли изменение значения ключа объекта приводить к изменению значения ключа объекта в других потоках.
При передаче общего объекта в функцию параллельного потока, он передается как глубокая копия.
Он поддерживает систему обратного тестирования и среду торговли в реальном времени.
{@fun/Threads/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/event Event}, {@fun/Threads/threading/threading/Thread Thread}, {@fun/Threads/threading/threading/pending pending}, {@fun/Threads/threading/eventLoop}
Вpending
Функция используется для получения количества одновременных потоков, работающих в текущей программе стратегии.
Вpending()
функция возвращает количество одновременных потоков, которые запускает текущая стратегия программы.
Номер
В ожидании))
function threadFun1() {
Log("threadFun1")
Sleep(3000)
}
function threadFun2() {
for (var i = 0; i < 3; i++) {
LogStatus(_D(), "print from threadFun2")
Sleep(3000)
}
}
function main() {
Log(`begin -- threading.pending():`, threading.pending())
var t1 = threading.Thread(threadFun1)
var t2 = threading.Thread(threadFun2)
Log(`after threading.Thread -- threading.pending():`, threading.pending())
t1.join()
t2.join()
Log(`after thread.join -- threading.pending():`, threading.pending())
}
Создать два одновременно работающих потока и вызватьpending()
Функция в разных временных узлах.
Когда стратегияmain()
Функция начинает работать, вызывая функциюpending()
непосредственно вернет 1, потому что основная нить, где стратегияmain()
функция находится также в ожидании нить.
Он поддерживает систему обратного тестирования и среду торговли в реальном времени.
{@fun/Threads/threading/getThread getThread}, {@fun/Threads/threading/mainThread mainThread}, {@fun/Threads/threading/currentThread currentThread}, {@fun/Threads/threading/Lock Lock}, {@fun/Threads/threading/Condition Condition}, {@fun/Threads/threading/Event Event}, {@fun/Threads/threading/Dict Dict}, {@fun/Threads/threading/Thread Thread}, {@fun/Threads/threading/eventLoop}
Thread
объекты могут быть созданы или возвращеныthreading.Thread()
, threading.getThread()
, threading.mainThread()
, иthreading.currentThread()
.
ВpeekMessage()
Функция используется для получения сообщения из потока.
ВpeekMessage()
функция возвращает сообщение, полученное нитью, связанной с текущим объектом нитки.
string, number, bool, object, array, null value и другие типы, поддерживаемые системой
Посмотреть сообщение (() PeekMessage ((Timeout) Посмотреть сообщение
Параметрtimeout
Если нет данных и время задержки превышает предел, будет возвращено значение NULL.timeout
устанавливается на 0 илиtimeout
параметр не будет передан, это означает, что процесс будет блокировать и ждать, пока данные не будут получены из канала.timeout
Если значение -1, это означает, что процесс не будет блокировать и возвращать данные немедленно. Если нет данных, будет возвращено значение нуль.
Тайм-аут ложное Номер
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 10; i++) {
Log("thread1 postMessage():", i)
threading.mainThread().postMessage(i)
Sleep(500)
}
})
while (true) {
var msg = threading.currentThread().peekMessage()
Log("main peekMessage():", msg)
if (msg == 9) {
break
}
Sleep(1000)
}
t1.join()
}
Отправлять сообщения в главную нить из параллельной нитки.
Когда мы пишем программы, мы должны обращать внимание на проблемы с тупиком потоков.
{@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name}, {@Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}, {@fun/Threads/Threads/eventLoop eventLoop}, {@fun/Threads/eventLoop eventLoop}
ВpostMessage()
Функция используется для отправки сообщения в тему.
mailMessage(msg)
Параметрmsg
Это послание, которое нужно отправить.
СМС Истинно Любой тип, поддерживаемый системой, например строка, число, bool, объект, массив, нулевое значение и т. д.
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 10; i++) {
Log("thread1 postMessage():", i)
threading.mainThread().postMessage(i)
Sleep(500)
}
})
for (var i = 0; i < 10; i++) {
var event = threading.mainThread().eventLoop()
Log("main event:", event)
Sleep(500)
}
t1.join()
}
Отправка сообщений в одновременных потоках и использованиеeventLoop()
чтобы получать уведомления о сообщениях.
Когда функция выполнения threadpostMessage()
Функция для отправки сигнала или данных, событие сообщения также генерируется.eventLoop()
функция получения уведомлений о сообщениях.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}, {@fun/Threads/Threads/Thread/name}, {@fun/Threads/Thread/eventLoop eventLoop}
Вjoin()
функция используется для ожидания выхода потока и восстановления системных ресурсов.
ВThreadRet
объектсодержит данные о результате выполнения.
ThreadRet
объект
Присоединяйтесь. Присоединяйтесь (Timeout)
Вtimeout
Параметр используется для установки временного пребывания в миллисекундах для ожидания окончания потока.timeout
параметр установлен на 0 илиtimeout
параметр не установлен,join()
функция будет блокировать и ждать, пока нить закончит выполнение.timeout
параметр установлен на -1,join()
Функция восстановится немедленно.
Тайм-аут ложное Номер
function main() {
var t1 = threading.Thread(function() {
Log("Hello thread1")
Sleep(5000)
})
var ret = t1.join(1000)
Log("ret:", ret) // ret: undefined
ret = t1.join()
Log("ret:", ret) // ret: {"id":1,"terminated":false,"elapsed":5003252000}
}
Проверитьjoin()
Функция timeout и вывод возвращаемого значения.
Вjoin()
время выхода и возвращения функцииundefined
.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}
Вterminate()
функция используется для принудительного прекращения потока и освобождения аппаратных ресурсов, используемых созданным потоком.
прекратить ((()
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 10; i++) {
Log("thread1 i:", i)
Sleep(1000)
}
})
Sleep(3000)
t1.terminate()
Log("after t1.terminate()")
while (true) {
LogStatus(_D())
Sleep(1000)
}
}
После принудительного прекращения действия потока не будет выхода из этого потока в журнале.
Для нитей, которые насильно заканчиваютсяterminate()
Функция, мы больше не можем использоватьjoin()
Функция ждать, пока они закончатся.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}
ВgetData()
Данные действительны, когда нить не выполняетjoin()
Функция (в ожидании успешного выхода) и не выполнилаterminate()
функцию (силовое прекращение нити).
ВgetData()
Функция возвращает значение ключа, соответствующееkey
параметр в паре ключей и значений, хранящийся в текущем контексте потока.
string, number, bool, object, array, null value и другие типы, поддерживаемые системой
getData ((() getData ((ключ)
Вkey
параметр - это название ключа для сохраненной пары ключей и значений.
ключ неправда строка
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 5; i++) {
threading.currentThread().setData("count", i)
Log(`setData("count"):`, i)
Sleep(1000)
}
})
for (var i = 0; i < 5; i++) {
var count = threading.getThread(t1.id()).getData("count")
Log(`getData("count"):`, count)
Sleep(1000)
}
t1.join()
}
Запишите значение ключаcount
в одновременной среде нить, а затем читать ключевое значениеcount
в главной нить.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Thread/eventLoop eventLoop}
ВsetData()
функция используется для хранения переменных в контексте потока.
setData ((ключ, значение)
Вkey
параметр используется для указания названия ключа для сохраненной пары ключей и значений.
ключ
неправда
строка
Вvalue
параметр используется для указания значения ключа для сохраненной пары ключей и значений.
стоимость Истинно Любой тип, поддерживаемый системой, например строка, число, bool, объект, массив, нулевое значение и т. д.
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Sleep(1000)
Log(`t1.getData("data"):`, t1.getData("data"))
t1.join()
}
Установите пару ключей-значений в паре параллельных нитей и прочитайте пару ключей-значений в основной нитке.
Данные действительны, когда нить не выполняетjoin()
Функция (в ожидании успешного выхода) и не выполнилаterminate()
значение параметраvalue
должна быть сериализируемой переменной.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Thread/Thread/eventLoop eventLoop}
Вid()
Функция используется для возвращенияthreadId
текущего многопоточного объекта.
Доходное значениеid()
функция -threadId
.
Номер
id()
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.id():`, t1.id())
t1.join()
}
Создать параллельно работающий нить и вывестиthreadId
этой параллельной нитью в основной нить.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}
Вname()
функция используется для возвращения имени текущего многопоточного объекта.
Вname()
Функция возвращает имя параллельной нитки.
строка
Имя ((()
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.name():`, t1.name()) // t1.name(): Thread-1
t1.join()
}
Создать параллельную нить и вывести имя параллельной нитки в основной нить.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}
ВeventLoop()
функция используется для прослушивания событий, полученных нитью.
ВeventLoop()
функция возвращает информацию о событиях, полученную текущей нитью.Информационная структура событий.
объект, нулевое значение
СобытиеLoop() EventLoop ((Timeout))
Параметрtimeout
- это настройка времени в миллисекундах. Если параметрtimeout
Если значение будет установлено на 0, оно будет ждать, пока произойдет событие, прежде чем возвращать. Если оно больше 0, оно будет устанавливать время ожидания события. Если оно меньше 0, оно немедленно вернет последнее событие.
Тайм-аут ложное Номер
function main() {
var t1 = threading.Thread(function() {
while (true) {
var eventMsg = threading.currentThread().eventLoop() // Blocking wait
// 2024-11-14 10:14:18 thread1 eventMsg: {"Seq":1,"Event":"thread","ThreadId":0,"Index":1,"Queue":0,"Nano":1731550458699947000}
Log(_D(), "thread1 eventMsg:", eventMsg)
}
})
var t2 = threading.Thread(function() {
while (true) {
var eventMsg = threading.currentThread().eventLoop(-1) // Return immediately
Log(_D(), "thread2 eventMsg:", eventMsg)
Sleep(5000)
}
})
var t3 = threading.Thread(function() {
while (true) {
var eventMsg = threading.currentThread().eventLoop(3000) // Set a 3 second timeout
Log(_D(), "thread3 eventMsg:", eventMsg)
}
})
t1.postMessage("Hello ", t1.name())
t2.postMessage("Hello ", t2.name())
t3.postMessage("Hello ", t3.name())
t1.join()
t2.join()
t3.join()
}
Используйте три потока одновременно и выводите полученную информацию о событии.
Механизм обработкиeventLoop()
функция такая же, как и глобальная функцияEventLoop()
.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Threads/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/name name}
Объект блокировки потока, используемый для многопоточной синхронизации.
Вacquire()
Функция используется для запроса блокировки нити (блокировки).
приобретать
Пожалуйста, обратитесь кthreading.Lock()
Раздел для примеров.
Вacquire()
Функция используется для запроса блокировки потока.acquire()
Функция объекта блокировки потока, он пытается получить блокировку. Если блокировка в настоящее время не проводится другой потоком, вызовущая потока успешно приобретает блокировку и продолжает выполнение. Если блокировка уже проводится другой потоком, вызовущая потокаacquire()
будет блокироваться до тех пор, пока замок не будет освобожден.
{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/release release}
Вrelease()
Функция используется для освобождения блокировки нити (отключения).
освобождение))
function consumer(productionQuantity, dict, pLock, cLock) {
for (var i = 0; i < productionQuantity; i++) {
pLock.acquire()
cLock.acquire()
var arr = dict.get("array")
var count = arr.shift()
dict.set("array", arr)
Log("consumer:", count, ", array:", arr)
cLock.release()
Sleep(1000)
pLock.release()
}
}
function producer(productionQuantity, dict, pLock, cLock) {
for (var i = 0; i < productionQuantity; i++) {
cLock.acquire() // cLock.acquire() placed after pLock.acquire() will not cause deadlock
pLock.acquire()
var arr = dict.get("array")
arr.push(i)
dict.set("array", arr)
Log("producer:", i, ", array:", arr)
pLock.release()
Sleep(1000)
cLock.release()
}
}
function main() {
var dict = threading.Dict()
dict.set("array", [])
var pLock = threading.Lock()
var cLock = threading.Lock()
var productionQuantity = 10
var producerThread = threading.Thread(producer, productionQuantity, dict, pLock, cLock)
var consumerThread = threading.Thread(consumer, productionQuantity, dict, pLock, cLock)
consumerThread.join()
producerThread.join()
}
Испытание сценариев тупика
Следует отметить, что неправильное использование резьбовых замков может привести к тупику.
{@fun/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/acquire acquire}, {@fun/Threads/Threads/threading/Lock Lock}, {@fun/Threads/ThreadLock/acquire acquire}, {@fun/Threads/Threads/threading/Lock Lock}, {@fun/Threads/Threads/ThreadLock/acquire acquire}, {@fun/Threads/Threads/acquire acquire}, {@fun/Threads/Threads/acquire acquire}, {@fun/Threads/Threads/Threads/Lock Lock}, {@fun/Threads/Threads/Threads/acquire}, {@threading/LockLock}, {@fun/Threads/Threads/Threads/threads}
Объект события, используемый для многопоточных уведомлений и сигналов о событиях.
Вset()
Функция используется для уведомления о событиях (настроенные сигналы).
набор ((()
Пожалуйста, обратитесь кthreading.Event()
Раздел для примеров.
Если сигнал настроен с использованиемset()
Мы должны очистить сигнал и установить его снова.
{@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/wait wait}, {@fun/Threads/ThreadEvent/isSet isSet}
Вclear()
Функция используется для очистки сигнала.
Прозрачно.
Пожалуйста, обратитесь кthreading.Event()
Раздел для примеров.
{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/wait wait}, {@fun/Threads/ThreadEvent/isSet isSet}
Вwait()
функция используется для установки ожидания события (сигнала) и блокируется до установки события (сигнала); она поддерживает установку параметра timeout.
Вwait()
Функция возвращает значение true.
Буль
Подождите. Подождите.
Вtimeout
Параметр используется для установки времени ожидания в миллисекундах.
Тайм-аут ложное Номер
function main() {
var event = threading.Event()
var t1 = threading.Thread(function(event) {
var ret = event.wait(100)
Log(`event.wait(100):`, ret)
ret = event.wait()
Log(`event.wait():`, ret)
}, event)
Sleep(1000)
event.set()
t1.join()
}
Испытать возвращаемое значениеwait()
function.
{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/isSet isSet}
ВisSet()
Функция используется для определения того, было ли установлено событие (сигнал).
ВisSet()
Функция возвращает значение true, если событие (сигнал) установлено.
Буль
isSet ((()
Пожалуйста, обратитесь кthreading.Event()
Раздел для примеров.
{@fun/Threads/ThreadEvent/set set}, {@fun/Threads/ThreadEvent/clear clear}, {@fun/Threads/ThreadEvent/wait wait}
Объект условий, используемый для многопоточной синхронизации.
Вnotify()
Функция используется для пробуждения ожидающего потока (если таковой имеется).wait()
Метод будет пробужден.
Уведомлять
function consumer(dict, condition) {
while (true) {
condition.acquire()
while (dict.get("array").length == 0) {
Log(threading.currentThread().name(), "wait()...", ", array:", dict.get("array"))
condition.wait()
}
var arr = dict.get("array")
var num = arr.shift()
Log(threading.currentThread().name(), ", num:", num, ", array:", arr, "#FF0000")
dict.set("array", arr)
Sleep(1000)
condition.release()
}
}
function main() {
var condition = threading.Condition()
var dict = threading.Dict()
dict.set("array", [])
var t1 = threading.Thread(consumer, dict, condition)
var t2 = threading.Thread(consumer, dict, condition)
var t3 = threading.Thread(consumer, dict, condition)
Sleep(1000)
var i = 0
while (true) {
condition.acquire()
var msg = ""
var arr = dict.get("array")
var randomNum = Math.floor(Math.random() * 5) + 1
if (arr.length >= 3) {
condition.notifyAll()
msg = "notifyAll"
} else {
arr.push(i)
dict.set("array", arr)
if (randomNum > 3 && arr.length > 0) {
condition.notify()
msg = "notify"
} else {
msg = "pass"
}
i++
}
Log(_D(), "randomNum:", randomNum, ", array:", arr, ", msg:", msg)
condition.release()
Sleep(1000)
}
}
Используйтеnotify()
Функция пробуждает ждущую нить.
Вnotify()
функция просыпается нить в очереди ожидания.
Когдаnotify()
Функция пробуждает нить, нить восстановит блокировку нитки.
{@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
ВnotifyAll()
Функция пробуждает все ожидающие нитки.
Уведомить все ((()
Пожалуйста, обратитесь кThreadCondition.notify()
Раздел для примеров.
ВnotifyAll()
Функция пробуждает все ожидающие нитки по одному, и пробужденные нитки восстанавливают блокировку нитки.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
Вwait()
Функция используется, чтобы заставить нить ждать в определенных условиях.
Подождите.
Пожалуйста, обратитесь кThreadCondition.notify()
Раздел для примеров.
Вwait()
Функция освобождает замок нити и восстанавливает замок нити при пробуждении.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/acquire acquire}, {@fun/Threads/ThreadCondition/release release}
Вacquire()
Функция используется для запроса блокировки нити (блокировки).
приобретать
Пожалуйста, обратитесь кThreadCondition.notify()
Раздел для примеров.
Перед применениемwait()
, вам нужно запросить блокировку потока (блокировку) текущего объекта состояния.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/release release}
Вrelease()
Функция используется для освобождения блокировки нити (отключения).
освобождение))
Пожалуйста, обратитесь кThreadCondition.notify()
Раздел для примеров.
После примененияwait()
, мы должны освободить замок нитки (разблокировать) объекта текущего состояния.
{@fun/Threads/ThreadCondition/notify notify}, {@fun/Threads/ThreadCondition/notifyAll notifyAll}, {@fun/Threads/ThreadCondition/wait wait}, {@fun/Threads/ThreadCondition/acquire acquire}
Объект словаря, используемый для обмена данными.
Вget()
Функция используется для получения ключевого значения, записанного в объекте словаря.
Вget()
Функция возвращает значение ключа, указанногоkey
parameter.
string, number, bool, object, array, null value и другие типы, поддерживаемые системой
Get (ключ)
Вkey
параметр используется для указания названия ключа, соответствующего ключу, который должен быть получен.
ключ неправда строка
function main() {
var event = threading.Event()
var dict = threading.Dict()
dict.set("data", 100)
var t1 = threading.Thread(function(dict, event) {
Log(`thread1, dict.get("data"):`, dict.get("data"))
event.set()
event.clear()
event.wait()
Log(`after main change data, thread1 dict.get("data"):`, dict.get("data"))
dict.set("data", 0)
}, dict, event)
event.wait()
dict.set("data", 99)
event.set()
event.clear()
t1.join()
Log(`main thread, dict.get("data"):`, dict.get("data"))
}
Использовать объекты событий для уведомления потоков для чтения и изменения данных.
{@fun/Threads/ThreadDict/set set} - Я не знаю.
Вset()
функция используется для установки пары ключей-значений.
набор (ключ, значение)
Параметрkey
используется для настройки имени ключа, который должен быть изменен.
ключ
неправда
строка
Параметрvalue
используется для настройки ключевого значения, которое должно быть изменено.
стоимость Истинно string, number, bool, object, array, null value и другие типы, поддерживаемые системой
Пожалуйста, обратитесь кThreadDict.get()
Раздел для примеров.
{@fun/Threads/ThreadDict/get get} - Что ты делаешь?
В FMZ Quant Trading Platform, он в основном реализует различные функции, вызовы, связанные с блокчейном черезexchange.IO()
В следующем документе описываетсяexchange.IO()
Применение метода вызоваexchange.IO("abi", ...)
функция используется для регистрации ABI.
exchange.IO(k, адрес, abiContent)
Вk
Параметр используется для установки функцииexchange.IO()
функция, установленная на"abi"
означает, что функция используется для регистрацииABI
- Да.
k
неправда
строка
Вaddress
параметр используется для указания адреса смарт-контракта.
Адрес
неправда
строка
ВabiContent
Параметр используется для указанияABI
умного контракта.
abiСодержание
неправда
строка
function main() {
// register Uniswap SwapRouter02 abi
var routerAddress = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
var abi = `[{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}]`
// Get the ```ABI``` content of the contract can be obtained with the following URL, taking the ```result``` field only, e.g:
exchange.IO("abi", routerAddress, abi)
}
Способы вызова смарт-контракта не должны регистрироваться, если это стандартные методы ERC20.
ВозьмиABI
Содержание контракта можно получить по следующему адресуresult
только поле, например:
https://api.etherscan.io/api?module=contract&action=getabi&address=0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45
Способ вызоваexchange.IO("api", "eth", ...)
функция используется для вызова метода Ethereum RPC.
Вexchange.IO("api", "eth", ...)
функция возвращает возвращаемое значение метода RPC.
string, number, bool, object, array, null и все другие типы, поддерживаемые системой
exchange.IO(k, blockChain, rpcMethod)exchange.IO(k, blockChain, rpcMethod,...args)
Вk
Параметр используется для установки функцииexchange.IO()
функция, установленная на"api"
указывает, что функция используется для расширения запроса вызова.
k
неправда
строка
ВblockChain
Параметр используется для установки функцииexchange.IO()
функция, установленная на"eth"
указывает, что функция используется для вызовов методов RPC в сети Ethereum.
блок-цепочка
Истинно
строка
ВrpcMethod
Параметр используется для установки метода RPC, который должен быть вызванexchange.IO()
Функция.
Метод rpc
неправда
строка
Вarg
параметр используется для указания параметров метода RPC, который должен быть вызван.arg
тип и количествоarg
параметры зависят от метода RPC, указанногоrpcMethod
Параметр.
арг
ложное
string, number, bool, object, array, function, null и все другие типы, поддерживаемые системой
function main() {
// "owner" needs to be replaced with the specific wallet address
// Parameter labels for the "latest" string position: 'latest', 'earliest' or 'pending', please refrer to https://eth.wiki/json-rpc/API#the-default-block-parameter
// The return value ethBalance is a hexadecimal string: 0x9b19ce56113070
var ethBalance = exchange.IO("api", "eth", "eth_getBalance", "owner", "latest")
// ETH has a precision unit of 1e18
var ethDecimal = 18
// Because of the JavaScript language precision, it is necessary to use the system underlying package function BigInt, BigDecimal to process
// Convert ethBalance to readable amount, 0x9b19ce56113070 to 0.043656995388076145
Log(Number((BigDecimal(BigInt(ethBalance))/BigDecimal(Math.pow(10, ethDecimal))).toString()))
}
Проверьте баланс ETH в вашем кошельке:
function mian() {
// ETH has a precision unit of 1e18
var ethDecimal = 18
// Number of transfers, readable amount e.g. 0.01 ETH
var sendAmount = 0.01
// Due to the JavaScript language precision, it is necessary to use the system underlying encapsulated functions BigInt, BigDecimal to process, and to convert the readable amount to the data processed on the chain
var toAmount = (BigDecimal(sendAmount)*BigDecimal(Math.pow(10, ethDecimal))).toFixed(0)
// "toAddress" is the address of the recipient's ETH wallet at the time of the transfer, which needs to be filled in specifically, and toAmount is the number of transfers
exchange.IO("api", "eth", "send", "toAddress", toAmount)
}
Для переводов ETH вы можете установить{gasPrice: 11, gasLimit: 111, nonce: 111}
параметр, который устанавливается на последнем параметреexchange.IO()
Вы можете пропуститьnonce
и использовать систему по умолчанию, или оставитьgasLimit/gasPrice/nonce
отключить и использовать систему по умолчанию для всех.
function toAmount(s, decimals) {
return Number((BigDecimal(BigInt(s))/BigDecimal(Math.pow(10, decimals))).toString())
}
function main() {
var gasPrice = exchange.IO("api", "eth", "eth_gasPrice")
Log("gasPrice:", toAmount(gasPrice, 0)) // 5000000000 , in wei (5 gwei)
}
ЗапросgasPrice
:
function toAmount(s, decimals) {
// The toAmount function can convert hex-encoded values to decimal values
return Number((BigDecimal(BigInt(s))/BigDecimal(Math.pow(10, decimals))).toString())
}
function main() {
// Coding approve (authorization) method calls
var data = exchange.IO("encode", "0x111111111117dC0aa78b770fA6A738034120C302", "approve", "0xe592427a0aece92de3edee1f18e0157c05861564", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
Log("data:", data)
var gasPrice = exchange.IO("api", "eth", "eth_gasPrice")
Log("gasPrice:", toAmount(gasPrice, 0))
var obj = {
"from" : "0x0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // walletAddress
"to" : "0x111111111117dC0aa78b770fA6A738034120C302",
"gasPrice" : gasPrice,
"value" : "0x0",
"data" : "0x" + data,
}
var gasLimit = exchange.IO("api", "eth", "eth_estimateGas", obj)
Log("gasLimit:", toAmount(gasLimit, 0))
Log("gas fee", toAmount(gasLimit, 0) * toAmount(gasPrice, 0) / 1e18)
}
Запросeth_estimateGas
:
Второй параметрexchange.IO()
функция с"eth"
может напрямую вызвать методы RPC, доступные серверу узла Ethereum.
# # Забавный Большой Десятиметровый # # Забавный Большой Интеллект #
Вexchange.IO("encode", ...)
функция вызвана для кодирования данных.
Вexchange.IO("encode", ...)
функция возвращает закодированные данные.
строка
exchange.IO(k, dataFormat,...args)exchange.IO(k, адрес, формат данных)exchange.IO(k, адрес, данныеФормат,...args)
Вk
Параметр используется для установки функцииexchange.IO()
функция, установленная на"encode"
означает, что функция используется для кодирования данных.
k
неправда
строка
Вaddress
Параметр используется для установки адреса смарт-контракта.exchange.IO("encode", ...)
Функция, проходящая вaddress
Параметр указывает на кодирование метода вызова на умный контракт.exchange.IO("encode", ...)
функции, еслиaddress
параметр не передается, функция используется для кодирования указанного порядка типа и функционально эквивалентнаabi.encode
вSolidity
- Да.
Адрес
ложное
строка
ВdataFormat
Параметр используется для указания метода, типа и порядка кодируемых данных.
DataFormat (Формат данных)
Истинно
строка
Вarg
Параметр используется для указания значения конкретных данных, соответствующегоdataFormat
параметр. может быть более одногоarg
параметр, а также тип и количествоarg
параметров зависит отdataFormat
параметры.
арг
ложное
строка, число, тупл, массив и все другие типы, поддерживаемые системой
function main() {
// Main network address of ContractV3SwapRouterV2: 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45
// Calling the unwrapWETH9 method requires registering the ABI first, which is omitted here
// "owner" represents the wallet address, which need to fill in the specific, 1 represents the number of unpacking, unpacking a WETH into ETH
var data = exchange.IO("encode", "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", "unwrapWETH9(uint256,address)", 1, "owner")
Log(data)
}
Например, вызов метода кодированияunwrapWETH9
:
function main() {
var x = 10
var address = "0x02a5fBb259d20A3Ad2Fdf9CCADeF86F6C1c1Ccc9"
var str = "Hello World"
var array = [1, 2, 3]
var ret = exchange.IO("encode", "uint256,address,string,uint256[]", x, address, str, array) // uint i.e. uint256 , the type length needs to be specified on FMZ
Log("ret:", ret)
/*
000000000000000000000000000000000000000000000000000000000000000a // x
00000000000000000000000002a5fbb259d20a3ad2fdf9ccadef86f6c1c1ccc9 // address
0000000000000000000000000000000000000000000000000000000000000080 // Offset of str
00000000000000000000000000000000000000000000000000000000000000c0 // Offset of array
000000000000000000000000000000000000000000000000000000000000000b // The length of str
48656c6c6f20576f726c64000000000000000000000000000000000000000000 // str data
0000000000000000000000000000000000000000000000000000000000000003 // The length of the array
0000000000000000000000000000000000000000000000000000000000000001 // array the first data
0000000000000000000000000000000000000000000000000000000000000002 // array the second data
0000000000000000000000000000000000000000000000000000000000000003 // array the third data
*/
}
Это эквивалентно примеру кодированияabi.encode
вSolidity
:
function main() {
var types = "tuple(a uint256,b uint8,c address),bytes"
var ret = exchange.IO("encode", types, {
a: 30,
b: 20,
c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
}, "0011")
Log("encode: ", ret)
}
Он поддерживает кодирование тупла или порядка типа, содержащего тупла.
Этот тип порядка состоит из:tuple
, bytes
, так что когда звонишьexchange.IO()
для кодирования, вам нужно продолжить передачу двух параметров:
{
a: 30,
b: 20,
c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
}
Переданные параметры также должны соответствовать структуре и типуtuple
, как определено вtypes
параметр формы:tuple(a uint256,b uint8,c address)
.
bytes
:"0011"
function main() {
var path = ["0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "0xdac17f958d2ee523a2206206994597c13d831ec7"] // ETH address, USDT address
var ret = exchange.IO("encode", "address[]", path)
Log("encode: ", ret)
}
Он поддерживает последовательное кодирование массивов или типов, содержащих массивы:
Вexchange.IO()
Функция включает в себяencode
метод, который может вернуть код вызова функцииhex
Для конкретного использования вы можете обратиться к публично доступным платформам
Вexchange.IO("encodePacked", ...)
функция называется таким образом, что используется дляencodePacked
encoding.
Вexchange.IO("encodePacked", ...)
функция возвращаетencodePacked
зашифрованные данные.
строка
exchange.IO(k, dataFormat,...args)
Вk
Параметр используется для установки функцииexchange.IO()
функция, установленная на"encodePacked"
означает, что функция используется для данныхencodePacked
кодирование.
k
неправда
строка
ВdataFormat
Параметр используется для указания типа и порядкаencodePacked
зашифрованные данные.
DataFormat (Формат данных)
неправда
строка
Вarg
Параметр используется для указания значения конкретных данных, соответствующегоdataFormat
параметр. может быть более одногоarg
параметр, а также тип и количествоarg
параметров зависит отdataFormat
параметры.
арг
Истинно
строка, число, тупл, массив и все другие типы, поддерживаемые системой
function main() {
var fee = exchange.IO("encodePacked", "uint24", 3000)
var tokenInAddress = "0x111111111117dC0aa78b770fA6A738034120C302"
var tokenOutAddress = "0x6b175474e89094c44da98b954eedeac495271d0f"
var path = tokenInAddress.slice(2).toLowerCase()
path += fee + tokenOutAddress.slice(2).toLowerCase()
Log("path:", path)
}
При примененииUniswap V3
, вы должны передать в параметрах, как обменный путь, вы должны использоватьencodePacked
операция кодирования:
Вexchange.IO("decode", ...)
Функция называется таким образом, который используется для декодирования.
Вexchange.IO("decode", ...)
возвращает декодированные данные. возвращает строку, когда есть только один данный, указанныйdataFormat
возвращает массив, когда есть более одного данного, указанногоdataFormat
Параметр.
массив, строка
exchange.IO(k, dataФормат, данные)
Вk
Параметр используется для установки функцииexchange.IO()
Функция и настройка на"decode"
означает, что функция используется для декодирования данных.
k
неправда
строка
ВdataFormat
Параметр используется для определения типа и порядка декодированных данных.
DataFormat (Формат данных)
Истинно
строка
Вdata
Параметр используется для настройки данных для декодирования.
данные
неправда
строка
function main() {
var types = "tuple(a uint256,b uint8,c address),bytes"
var ret = exchange.IO("encode", types, {
a: 30,
b: 20,
c: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
}, "0011")
Log("encode: ", ret)
var rawData = exchange.IO("decode", types, ret)
Log("decode:", rawData)
}
Обратное действиеexchange.IO("encode", ...)
Функция:
function main() {
// register SwapRouter02 abi
var walletAddress = "0x398a93ca23CBdd2642a07445bCD2b8435e0a373f"
var routerAddress = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
var abi = `[{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct IV3SwapRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}]`
exchange.IO("abi", routerAddress, abi) // abi only uses the contents of the local exactOutput method, the full abi can be searched on the Internet
// encode path
var fee = exchange.IO("encodePacked", "uint24", 3000)
var tokenInAddress = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
var tokenOutAddress = "0xdac17f958d2ee523a2206206994597c13d831ec7"
var path = tokenInAddress.slice(2).toLowerCase()
path += fee + tokenOutAddress.slice(2).toLowerCase()
Log("path:", path)
var dataTuple = {
"path" : path,
"recipient" : walletAddress,
"amountOut" : 1000,
"amountInMaximum" : 1,
}
// encode SwapRouter02 exactOutput
var rawData = exchange.IO("encode", routerAddress, "exactOutput", dataTuple)
Log("method hash:", rawData.slice(0, 8)) // 09b81346
Log("params hash:", rawData.slice(8))
// decode exactOutput params
var decodeRaw = exchange.IO("decode", "tuple(path bytes,recipient address,amountOut uint256,amountInMaximum uint256)", rawData.slice(8))
Log("decodeRaw:", decodeRaw)
}
В следующем примере сначала выполняетсяencodePacked
Операция наpath
обработки параметров, посколькуexactOutput
вызов метода, который должен быть закодирован позже требуетpath
как параметр.encode
- Да.exactOutput
метод договора маршрутизации, который имеет только один параметр типаtuple
. Название методаexactOutput
кодируется как:0x09b81346
, и с использованиемexchange.IO("decode", ...)
метод расшифровки полученногоdecodeRaw
, в соответствии с переменнойdataTuple
.
Для обработки данныхexchange.IO()
функция поддерживает не только кодирование, но и декодирование.
Вexchange.IO("key", ...)
Функция называется таким образом, чтобы переключать частные ключи.
exchange.IO(K, ключ)
Параметрk
используется для настройки функцииexchange.IO()
функция, установленная на"key"
означает, что функция используется для переключения частного ключа.
k
неправда
строка
Вkey
Параметр используется для настройки частного ключа.
ключ
неправда
строка
function main() {
exchange.IO("key", "Private Key") // "Private Key" represents the private key string, which needs to be filled in specifically
}
Вexchange.IO()
Функция поддерживает переключение частных ключей и может манипулировать несколькими адресами кошельков.
Вexchange.IO("api", ...)
функция вызвана таким образом, который используется для вызова методов умного контракта.
Вexchange.IO("api", ...)
функция возвращает возвращаемое значение метода, называемого умным контрактом.
string, number, bool, object, array, null и все другие типы, поддерживаемые системой
exchange.IO(k, адрес, метод)exchange.IO(k, адрес, метод,...arg)exchange.IO(k, адрес, метод, значение,...args)
Вk
Параметр используется для установки функцииexchange.IO()
функция, установленная на"api"
указывает, что функция используется для расширения запроса вызова.
k
неправда
строка
Вaddress
параметр используется для указания адреса смарт-контракта.
Адрес
неправда
строка
Вmethod
параметр используется для указания метода, который должен быть вызван для смарт-контракта.
метод
Истинно
строка
Вvalue
Параметр используется для установки количества ETH, которое будет отправлено.stateMutability
атрибут метода смарт-контракта, который должен быть выполнен:payable
, затемvalue
Параметр должен быть передан."stateMutability": "payable"
Атрибут может быть просмотрен из ABI.exchange.IO()
Функция будет определять требуемый параметр на основеstateMutability
атрибут в ABI, который был зарегистрирован.stateMutability
атрибут - этоnonpayable
, затемvalue
Параметр не нужно передавать.
стоимость
ложное
число, строка
Вarg
параметр используется для указания параметров метода смарт-контракта, который должен быть вызван.arg
параметр, а также тип и количествоarg
параметры зависит от метода умного контракта, который будет вызван.
арг
ложное
строка, число, bool и все другие типы, поддерживаемые системой
function main(){
var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302" // The contract address of the token, the token is 1INCH in the example
Log(exchange.IO("api", tokenAddress, "decimals")) // Query, print 1INCH tokens with precision index of 18
}
Вdecimals
Метод являетсяconstant
Это позволяет использовать ERC20 без потребления газа и запросить точные данные токенов.decimals
Возвращаемое значение: данные точности токена.
function main(){
// The contract address of the token, in the example the token is 1INCH
var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"
// For example, the query yields 1000000000000000000, divided by the precision unit of the token 1e18, the wallet to which the current exchange object is bound has authorized 1 1INCH to the spender address
Log(exchange.IO("api", tokenAddress, "allowance", "owner", "spender"))
}
Вallowance
Метод являетсяconstant
В этом случае, если вы используете ERC20, вы не будете потреблять газ и сможете запросить разрешенный объем токена для определенного контрактного адреса.allowance
Метод принимает 2 параметра, первый - адрес кошелька, а второй - авторизованный адрес.
owner
: адрес кошелька, пример заменен строкой spender
: адрес уполномоченного контракта, пример заменяется строкой Uniswap V3 router v1
address.
function main(){
// The contract address of the token, the token is 1INCH in the example
var tokenAddress = "0x111111111117dC0aa78b770fA6A738034120C302"
// The hexadecimal string of the authorization amount: 0xde0b6b3a7640000 , the corresponding decimal string: 1e18 , 1e18 divided by the precision unit of the token, i.e. 1 token amount, so this refers to the authorization of one token
Log(exchange.IO("api", tokenAddress, "approve", "spender", "0xde0b6b3a7640000"))
}```
The ```approve``` method is a non-```constant``` method of ERC20, which generates gas consumption and is used to authorize the operation amount of a token to a contract address. The ```approve``` method takes 2 parameters, the first one is the address to be authorized and the second one is the amount to be authorized. Return value: txid.
```spender```: the address of the authorized contract, the example is replaced by the string "spender", the actual use needs to fill in the specific address, for example, it can be ```Uniswap V3 router v1``` address. ```0xde0b6b3a7640000```: the number of authorizations, here is the hexadecimal string, the corresponding decimal value is 1e18, divided by the token precision unit in the example (i.e. 1e18). The result is that 1 token is authorized. The third parameter of the ```exchange.IO()``` function is passed to the method name ```approve```, which can also be written in the form of methodId, such as "0x571ac8b0". It is also possible to write the full standard method name, for example: "approve(address,uint256)".
```javascript
function main() {
var ContractV3SwapRouterV2 = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"
var tokenInName = "ETH"
var amountIn = 0.01
var options = {gasPrice: 5000000000, gasLimit: 21000, nonce: 100} // This is an example, depending on the actual scene settings
var data = "" // The encoded data, here is the empty string, depending on the actual scene settings
var tx = exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", (tokenInName == 'ETH' ? amountIn : 0), (new Date().getTime() / 1000) + 3600, data, options || {})
}
Вmulticall
Метод не является...constant
МетодUniswap V3
который генерирует потребление газа и используется для выкупа токенов несколькими способами.
Вmulticall
Метод может иметь различные способы передачи параметров, вы можете проверить ABI, который содержит метод конкретно, вам нужно зарегистрировать ABI перед вызовом метода.
Для конкретных примеровmulticall
Вы можете обратиться к публично доступным платформам.
Некоторые детали описаны здесь с использованием псевдокода:
exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data)
ContractV3SwapRouterV2
: адрес маршрутизатора v2 Uniswap V3.value
: сумма ETH для перевода, установленная на 0, если токен-токен обменной операции не является ETH.deadline
: deadline
является параметромmulticall
Метод, который может быть установлен на (new Date().getTime() / 1000) + 3600, что указывает на его действие в течение одного часа.data
: data
является параметромmulticall
метод, данные о проведении операции упаковки.
Похожиеexchange.IO("api", "eth", "send", "toAddress", toAmount)
,gasLimit/gasPrice/nonce
Установка вызова метода может быть указана при вызовеmulticall
методом.
Опять же, мы используем псевдокод для описания:
exchange.IO("api", ContractV3SwapRouterV2, "multicall(uint256,bytes[])", value, deadline, data, {gasPrice: 123456, gasLimit: 21000})
Параметр{gasPrice: 11, gasLimit: 111, nonce: 111}
может устанавливаться в соответствии с конкретными потребностями, который устанавливается на последний параметрexchange.IO()
Функция.
Вы можете пропуститьnonce
и использовать систему по умолчанию, или оставитьgasLimit/gasPrice/nonce
отключить и использовать систему по умолчанию для всех.
Вexchange.IO("address")
функция вызвана таким образом, чтобы получить адрес кошелька, настроенного объектом обмена {@var/EXCHANGE exchange}.
Вexchange.IO("address")
функция возвращает конфигурированный адрес кошелька.
строка
exchange.IO(k)
Вk
Параметр используется для установки функцииexchange.IO()
функция, установленная на"address"
означает, что функция используется для получения настроенного адреса кошелька.
k
Истинно
строка
function main() {
Log(exchange.IO("address")) // Print the wallet address of the private key configured on the exchange object
}
Вexchange.IO("base", ...)
функция вызвана таким образом, чтобы установить адрес узла RPC.
exchange.IO(k, адрес)
Вk
Параметр используется для установки функцииexchange.IO()
функция, установленная на"base"
означает, что функция используется для переключения узлов RPC.
k
неправда
строка
Вaddress
параметр используется для установки адреса узла RPC.
Адрес
неправда
строка
function main() {
var chainRpc = "https://bsc-dataseed.binance.org"
e.IO("base", chainRpc) // Switching to BSC chain
}
ВTA.MACD()
Функция используется для расчетаИндикатор MACD экспоненциальной сглаженной дисмимории и сходства.
Доходное значениеTA.MACD()
функция представляет собой двумерный массив со структурой:[DIF, DEA, MACD]
- Да.
массив
TA.MACD ((inReal) TA.MACD ((inReal, optInFastPeriod, optInSlowPeriod, optInSignalPeriod) - в реальном времени, в быстром периоде, в медленном периоде, в сигнальном периоде
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInFastPeriod
Параметр используется для установки быстрого периода.
optInFastPeriod
ложное
Номер
ВoptInSlowPeriod
Параметр используется для установки медленного периода.
optInSlowPeriod
ложное
Номер
ВoptInSignalPeriod
Параметр используется для установки периода сигнала.
optВ период сигнализации
ложное
Номер
function main(){
// You can fill in different k-line periods, such as PERIOD_M1,PERIOD_M30,PERIOD_H1...
var records = exchange.GetRecords(PERIOD_M15)
var macd = TA.MACD(records, 12, 26, 9)
// Watching the logs, you can see that three arrays are returned, corresponding to DIF, DEA and MACD.
Log("DIF:", macd[0], "DEA:", macd[1], "MACD:", macd[2])
}
def main():
r = exchange.GetRecords(PERIOD_M15)
macd = TA.MACD(r, 12, 26, 9)
Log("DIF:", macd[0], "DEA:", macd[1], "MACD:", macd[2])
void main() {
auto r = exchange.GetRecords(PERIOD_M15);
auto macd = TA.MACD(r, 12, 26, 9);
Log("DIF:", macd[0], "DEA:", macd[1], "MACD:", macd[2]);
}
ВTA
библиотека индикаторов FMZ Quant, оптимизированная для общих алгоритмов индикаторов.JavaScript
, Python
, C++
призывы к стратегии в области языка,открытый код библиотеки TA- Да.
Значения по умолчаниюoptInFastPeriod
, optInSlowPeriod
, иoptInSignalPeriod
параметрыTA.MACD()
Функция:12
, 26
, и9
.
{@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}
ВTA.KDJ()
Функция используется для расчетастохастические показатели.
Доходное значениеTA.KDJ()
функция представляет собой двумерный массив со структурой:[K, D, J]
- Да.
массив
TA.KDJ ((inReal)) TA.KDJ ((inReal, период, kPeriod, dPeriod)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
Вperiod
Параметр используется для установки периода 1.
Период
ложное
Номер
ВkPeriod
Параметр используется для установки периода 2.
kПериод
ложное
Номер
ВdPeriod
Параметр используется для установки периода 3.
dПериод
ложное
Номер
function main(){
var records = exchange.GetRecords(PERIOD_M15)
var kdj = TA.KDJ(records, 9, 3, 3)
Log("k:", kdj[0], "d:", kdj[1], "j:", kdj[2])
}
def main():
r = exchange.GetRecords(PERIOD_M15)
kdj = TA.KDJ(r, 9, 3, 3)
Log("k:", kdj[0], "d:", kdj[1], "j:", kdj[2])
void main() {
auto r = exchange.GetRecords();
auto kdj = TA.KDJ(r, 9, 3, 3);
Log("k:", kdj[0], "d:", kdj[1], "j:", kdj[2]);
}
Значения по умолчанию дляperiod
, kPeriod
, иdPeriod
параметрыTA.KDJ()
Функция:9
, 3
, и3
.
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}
ВTA.RSI()
Функция используется для расчетаИндикатор прочности.
Доходное значениеTA.RSI()
функция: одномерный массив.
массив
TA.RSI ((inReal) TA.RSI ((inReal, optInTimePeriod)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
Параметр используется для установки периода.
optInTimeПериод
ложное
Номер
function main(){
var records = exchange.GetRecords(PERIOD_M30)
var rsi = TA.RSI(records, 14)
Log(rsi)
}
def main():
r = exchange.GetRecords(PERIOD_M30)
rsi = TA.RSI(r, 14)
Log(rsi)
void main() {
auto r = exchange.GetRecords(PERIOD_M30);
auto rsi = TA.RSI(r, 14);
Log(rsi);
}
Значение по умолчаниюoptInTimePeriod
параметрTA.RSI()
Функция:14
.
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}
ВTA.ATR()
Функция используется для расчетаСредний показатель истинной волатильности.
Доходное значениеTA.ATR()
функция: одномерный массив.
массив
TA.ATR ((inPriceHLC) TA.ATR ((в ценеHLC, optInTimePeriod)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
Параметр используется для установки периода.
optInTimeПериод
ложное
Номер
function main(){
var records = exchange.GetRecords(PERIOD_M30)
var atr = TA.ATR(records, 14)
Log(atr)
}
def main():
r = exchange.GetRecords(PERIOD_M30)
atr = TA.ATR(r, 14)
Log(atr)
void main() {
auto r = exchange.GetRecords(PERIOD_M30);
auto atr = TA.ATR(r, 14);
Log(atr);
}
Значение по умолчаниюoptInTimePeriod
параметрTA.ATR()
Функция:14
.
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}
ВTA.OBV()
Функция используется для расчетаиндикатор энергетического прилива.
Доходное значениеTA.OBV()
функция: одномерный массив.
массив
TA.OBV ((inReal) TA.OBV ((inReal, inPriceV)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВinPriceV
параметр используется для указания данных о сумме сделки.
inPriceV
ложное
{@struct/Record Record} массив структуры
function main(){
var records = exchange.GetRecords(PERIOD_M30)
var obv = TA.OBV(records)
Log(obv)
}
def main():
r = exchange.GetRecords(PERIOD_M30)
obv = TA.OBV(r)
Log(obv)
void main() {
auto r = exchange.GetRecords(PERIOD_M30);
auto obv = TA.OBV(r);
Log(obv);
}
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}
ВTA.MA()
Функция используется для расчетаИндикатор MACD.
Доходное значениеTA.MA()
функция: одномерный массив.
массив
TA.MA(недействительный)TA.MA(inReal, optInTimePeriod)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
Параметр используется для установки периода.
optInTimeПериод
ложное
Номер
function main(){
var records = exchange.GetRecords(PERIOD_M30)
var ma = TA.MA(records, 14)
Log(ma)
}
def main():
r = exchange.GetRecords(PERIOD_M30)
ma = TA.MA(r, 14)
Log(ma)
void main() {
auto r = exchange.GetRecords(PERIOD_M30);
auto ma = TA.MA(r, 14);
Log(ma);
}
Значение по умолчаниюoptInTimePeriod
параметрTA.MA()
Функция:9
.
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest.Highest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA/TA.CMF TA.CMF
ВTA.EMA()
Функция используется для расчетапоказатель экспоненциальной средней.
Доходное значениеTA.EMA()
функция: одномерный массив.
массив
TA.EMA ((inReal) TA.EMA ((inReal, optInTimePeriod) - в реальном времени, в промежутке времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
Параметр используется для установки периода.
optInTimeПериод
ложное
Номер
function main(){
var records = exchange.GetRecords()
// Determine if the number of K-line bars meets the calculation period of the indicator
if (records && records.length > 9) {
var ema = TA.EMA(records, 9)
Log(ema)
}
}
def main():
r = exchange.GetRecords()
if r and len(r) > 9:
ema = TA.EMA(r, 9)
Log(ema)
void main() {
auto r = exchange.GetRecords();
if(r.Valid && r.size() > 9) {
auto ema = TA.EMA(r, 9);
Log(ema);
}
}
Значение по умолчаниюoptInTimePeriod
параметрTA.EMA()
Функция:9
.
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}
ВTA.BOLL()
Функция используется для расчетаИндикатор полосы Боллинджера.
Доходное значениеTA.BOLL()
функция представляет собой двумерный массив со структурой:[upLine, midLine, downLine]
- Да.
массив
TA.BOLL ((inReal)) TA.BOLL ((inReal, период, множитель)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
Вperiod
Параметр используется для установки периода.
Период
ложное
Номер
Вmultiplier
Параметр используется для установки множителя.
множитель
ложное
Номер
function main() {
var records = exchange.GetRecords()
if(records && records.length > 20) {
var boll = TA.BOLL(records, 20, 2)
var upLine = boll[0]
var midLine = boll[1]
var downLine = boll[2]
Log(upLine)
Log(midLine)
Log(downLine)
}
}
def main():
r = exchange.GetRecords()
if r and len(r) > 20:
boll = TA.BOLL(r, 20, 2)
upLine = boll[0]
midLine = boll[1]
downLine = boll[2]
Log(upLine)
Log(midLine)
Log(downLine)
void main() {
auto r = exchange.GetRecords();
if(r.Valid && r.size() > 20) {
auto boll = TA.BOLL(r, 20, 2);
auto upLine = boll[0];
auto midLine = boll[1];
auto downLine = boll[2];
Log(upLine);
Log(midLine);
Log(downLine);
}
}
Значения по умолчанию дляperiod
иmultiplier
параметрыTA.BOLL()
Функция:20
и2
.
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}
ВTA.Alligator()
Функция используется для расчетаПоказатель аллигатора.
Доходное значениеTA.Alligator()
функция представляет собой двумерный массив со структурой:[jawLine, teethLine, lipsLine]
- Да.
массив
TA.Аллигатор ((inReal) TA.Аллигатор ((в реальности, челюсть, длина, зубы, длина, губы, длина)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВjawLength
Параметр используется для установки периода челюсти.
челюстьДлина
ложное
Номер
ВteethLength
Параметр используется для установки периода зубов.
зубыДлина
ложное
Номер
ВlipsLength
параметр используется для установки периода верхней губы.
Длина губ
ложное
Номер
function main(){
var records = exchange.GetRecords()
var alligator = TA.Alligator(records)
Log("jawLine:", alligator[0])
Log("teethLine:", alligator[1])
Log("lipsLine:", alligator[2])
}
def main():
records = exchange.GetRecords()
alligator = TA.Alligator(records)
Log("jawLine:", alligator[0])
Log("teethLine:", alligator[1])
Log("lipsLine:", alligator[2])
void main() {
auto records = exchange.GetRecords();
auto alligator = TA.Alligator(records);
Log("jawLine:", alligator[0]);
Log("teethLine:", alligator[1]);
Log("lipsLine:", alligator[2]);
}
Значения по умолчаниюjawLength
, teethLength
, иlipsLength
параметрыTA.Alligator()
Функция:13
, 8
, и5
.
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}
ВTA.CMF()
Функция используется для расчетаИндикатор денежных потоков Чайкина.
Доходное значениеTA.CMF()
функция: одномерный массив.
массив
TA.CMF ((inReal) TA.CMF ((inReal, inPriceV)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВinPriceV
параметр используется для указания данных объема.
inPriceV
ложное
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var cmf = TA.CMF(records)
Log(cmf)
}
def main():
records = exchange.GetRecords()
cmf = TA.CMF(records)
Log(cmf)
void main() {
auto records = exchange.GetRecords();
auto cmf = TA.CMF(records);
Log(cmf);
}
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}
ВTA.Highest()
Функция используется для расчетасамая высокая цена за период.
ВTA.Highest()
Функция возвращает максимальное значение атрибута за последний определенный период, за исключением текущего Bar.
Номер
TA.Самый высокий ((inReal) TA.Самый высокий ((в реальном, периоде, attr)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
Вperiod
Параметр используется для установки периода.
Период
ложное
Номер
Вattr
параметр используется для установки атрибутов, необязательно:Open
, Close
, Low
, High
, Volume
, OpenInterest
- Да.
АТР
ложное
строка
function main() {
var records = exchange.GetRecords()
var highestForOpen = TA.Highest(records, 10, "Open")
Log(highestForOpen)
}
def main():
records = exchange.GetRecords()
highestForOpen = TA.Highest(records, 10, "Open")
Log(highestForOpen)
void main() {
auto records = exchange.GetRecords();
auto highestForOpen = TA.Highest(records.Open(), 10);
Log(highestForOpen);
}
Например, еслиTA.Highest(records, 30, "High")
функция называется, если параметр периодаperiod
Установлено на0
, это означает, чтобы рассчитать всеBars
К-линейные данные, переданныеinReal
параметр; если параметр атрибутаattr
не указано, данные K-линии, передаваемыеinReal
параметр считается обычным массивом.
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.CMF}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA.Lowest TA.Lowest}, {@fun/TA/TA/TA.
ВTA.Lowest()
Функция используется для расчетанаименьшая цена за период.
ВTA.Lowest()
Функция возвращает минимальное значение атрибута за последний определенный период, за исключением текущего Bar.
Номер
TA.Lowest ((inReal)) TA.Lowest ((inReal, период, attr)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
Вperiod
Параметр используется для установки периода.
Период
ложное
Номер
Вattr
параметр используется для установки атрибутов, необязательно:Open
, Close
, Low
, High
, Volume
, OpenInterest
- Да.
АТР
ложное
строка
function main() {
var records = exchange.GetRecords()
var lowestForOpen = TA.Lowest(records, 10, "Open")
Log(lowestForOpen)
}
def main():
records = exchange.GetRecords()
lowestForOpen = TA.Lowest(records, 10, "Open")
Log(lowestForOpen)
void main() {
auto records = exchange.GetRecords();
auto lowestForOpen = TA.Lowest(records.Open(), 10);
Log(lowestForOpen);
}
Например, еслиTA.Lowest(records, 30, "Low")
функция называется, если параметр периодаperiod
Установлено на0
, это означает, чтобы рассчитать всеBars
К-линейные данные, переданныеinReal
параметр; если параметр атрибутаattr
не указано, данные K-линии, передаваемыеinReal
параметр считается обычным массивом.
ИспользованиеTA.Highest()
иTA.Lowest()
ФункцииC++
Стратегии необходимо отметить, чтоHighest()
иLowest()
Каждая функция имеет только 2 параметра.
И первым параметром, который мы передаем, не являются данные по линии К.r
получается, когда функцияauto r = exchange.GetRecords()
был вызван.
Тебе нужно позвонитьr
Прохождение в данных конкретного атрибута.r.Close()
данные о цене закрытия.Close
, High
, Low
, Open
, Volume
как вr.Close()
метод вызова.
Пример испытанияC++
языковая стратегия:
void main() {
Records r;
r.Valid = true;
for (auto i = 0; i < 10; i++) {
Record ele;
ele.Time = i * 100000;
ele.High = i * 10000;
ele.Low = i * 1000;
ele.Close = i * 100;
ele.Open = i * 10;
ele.Volume = i * 1;
r.push_back(ele);
}
for(int j = 0; j < r.size(); j++){
Log(r[j]);
}
// Note: the first parameter passed is not r, you need to call r.Close()
auto highest = TA.Highest(r.Close(), 8);
Log(highest);
}
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA{@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA/TA
ВTA.SMA()
Функция используется для расчетапростый индикатор скользящей средней.
Доходное значениеTA.SMA()
функция: одномерный массив.
массив
TA.SMA ((inReal) TA.SMA ((inReal, optInTimePeriod) - в реальном времени, в промежутке времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
Параметр используется для установки периода.
optInTimeПериод
ложное
Номер
function main(){
var records = exchange.GetRecords(PERIOD_M30)
var sma = TA.SMA(records, 14)
Log(sma)
}
def main():
r = exchange.GetRecords(PERIOD_M30)
sma = TA.SMA(r, 14)
Log(sma)
void main() {
auto r = exchange.GetRecords(PERIOD_M30);
auto sma = TA.SMA(r, 14);
Log(sma);
}
Значение по умолчаниюoptInTimePeriod
параметрTA.SMA()
Функция:9
.
{@fun/TA/TA.MACD TA.MACD}, {@fun/TA/TA.KDJ TA.KDJ}, {@fun/TA/TA.RSI TA.RSI}, {@fun/TA/TA.ATR TA.ATR}, {@fun/TA/TA.OBV TA.OBV}, {@fun/TA/TA.MA},TA.MA}, {@fun/TA/TA.EMA TA.EMA}, {@fun/TA/TA.BOLL TA.BOLL}, {@fun/TA/TA.Alligator TA.Alligator}, {@fun/TA/TA.CMF TA.CMF}, {@fun/TA/TA.Highest TA.Highest}, {@fun/TA/TA.Lowest TA.Lowest}
Вtalib.CDL2CROWS()
Функция используется для расчетаДве Вороны (К-линейная диаграмма - Две Вороны).
Доходное значениеtalib.CDL2CROWS()
функция - это одномерный массив.
массив
Талиб.CDL2CROWS ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDL2CROWS(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDL2CROWS(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDL2CROWS(records);
Log(ret);
}
ВCDL2CROWS()
Функция описана в документации библиотеки талиб как:CDL2CROWS(Records[Open,High,Low,Close]) = Array(outInteger)
Для звонков вPython
язык, параметры передачи отличаются и должны основываться на вышеуказанном описании:Records[Open,High,Low,Close]
.
Пример деления переменнойrecords
(то есть параметрinPriceOHLC
, введите {@struct/Record Record} массив структур) в:Open
список: написанный на Python какrecords.Open
.
High
Список: написано какrecords.High
в Python.Low
список: написанный на Python какrecords.Low
.
Close
список: написанный на Python какrecords.Close
.
Вызывается в коде стратегии Python:
talib.CDL2CROWS(records.Open, records.High, records.Low, records.Close)
Другой.talib
показатели описываются одинаково и не будут повторяться.
Вtalib.CDL3BLACKCROWS()
Функция используется для расчетаТри чёрных вороны (К-линейная диаграмма - Три чёрных вороны).
Доходное значениеtalib.CDL3BLACKCROWS()
функция: одномерный массив.
массив
Talib.CDL3BLACKCROWS ((inPriceOHLC) (включается в ценовую систему)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDL3BLACKCROWS(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDL3BLACKCROWS(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDL3BLACKCROWS(records);
Log(ret);
}
ВCDL3BLACKCROWS()
Функция описана в документации библиотеки талиб как:CDL3BLACKCROWS(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDL3INSIDE()
Функция используется для расчетаТри внутри вверх/вниз (К-линейная диаграмма: Три внутри вверх/вниз).
Доходное значениеtalib.CDL3INSIDE()
функция: одномерный массив.
массив
Талиб.CDL3INSIDE ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDL3INSIDE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDL3INSIDE(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDL3INSIDE(records);
Log(ret);
}
ВCDL3INSIDE()
Функция описана в документации библиотеки талиб как:CDL3INSIDE(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDL3LINESTRIKE()
Функция используется для расчетаТрехлинейная забастовка (K-линейная диаграмма: Трехлинейная забастовка).
Доходное значениеtalib.CDL3LINESTRIKE()
функция: одномерный массив.
массив
Талиб.CDL3LINESTRIKE ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDL3LINESTRIKE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDL3LINESTRIKE(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDL3LINESTRIKE(records);
Log(ret);
}
ВCDL3LINESTRIKE()
Функция описана в документации библиотеки талиб как:CDL3LINESTRIKE(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDL3OUTSIDE()
Функция используется для расчетаТри снаружи вверх/вниз (К-линейная диаграмма: Три снаружи вверх/вниз).
Доходное значениеtalib.CDL3OUTSIDE()
функция: одномерный массив.
массив
Талиб.CDL3OUTSIDE ((inPriceOHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDL3OUTSIDE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDL3OUTSIDE(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDL3OUTSIDE(records);
Log(ret);
}
ВCDL3OUTSIDE()
Функция описана в документации библиотеки талиб как:CDL3OUTSIDE(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDL3STARSINSOUTH()
Функция используется для расчетаТри звезды на юге (К-линейный график: Три звезды на юге).
Доходное значениеtalib.CDL3STARSINSOUTH()
функция: одномерный массив.
массив
Талиб.CDL3STARSINSOUTH ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDL3STARSINSOUTH(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDL3STARSINSOUTH(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDL3STARSINSOUTH(records);
Log(ret);
}
ВCDL3STARSINSOUTH()
Функция описана в документации библиотеки талиб как:CDL3STARSINSOUTH(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDL3WHITESOLDIERS()
Функция используется для расчетаТри белых солдата впереди (К-линейный график: Три белых солдата впереди).
Доходное значениеtalib.CDL3WHITESOLDIERS()
функция: одномерный массив.
массив
Талиб.CDL3БЕЛЫЕ Солдаты ((inPriceOHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDL3WHITESOLDIERS(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDL3WHITESOLDIERS(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDL3WHITESOLDIERS(records);
Log(ret);
}
ВCDL3WHITESOLDIERS()
Функция описана в документации библиотеки талиб как:CDL3WHITESOLDIERS(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLABANDONEDBABY()
Функция используется для расчетаЗаброшенный ребенок (К-линейная диаграмма: Заброшенный ребенок).
Доходное значениеtalib.CDLABANDONEDBABY()
функция: одномерный массив.
массив
Талиб.CDLAБАНДОНЕДБАБИ ((inPriceOHLC) Talib.CDLABANDONEDBABY ((inPriceOHLC, optInPenetration) (включается в цену, включает в проникновение)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
ВoptInPenetration
параметр используется для настройки проникновения, значение по умолчанию 0,3.
optInPenetration
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLABANDONEDBABY(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLABANDONEDBABY(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLABANDONEDBABY(records);
Log(ret);
}
ВCDLABANDONEDBABY()
Функция описана в документации библиотеки талиб как:CDLABANDONEDBABY(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)
Вtalib.CDLADVANCEBLOCK()
Функция используется для расчетаПродвижение блока (К-линейная диаграмма: Продвижение).
Доходное значениеtalib.CDLADVANCEBLOCK()
функция - это одномерный массив.
массив
Талиб.CDLADVANCEBLOCK ((inPriceOHLC) (включается в цену)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLADVANCEBLOCK(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLADVANCEBLOCK(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLADVANCEBLOCK(records);
Log(ret);
}
ВCDLADVANCEBLOCK()
Функция описана в документации библиотеки талиб как:CDLADVANCEBLOCK(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLBELTHOLD()
Функция используется для расчетаУдерживание пояса (карта по линии К: Удерживание пояса).
Доходное значениеtalib.CDLBELTHOLD()
функция: одномерный массив.
массив
Талиб.CDLBELTHOLD ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLBELTHOLD(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLBELTHOLD(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLBELTHOLD(records);
Log(ret);
}
ВCDLBELTHOLD()
Функция описана в документации библиотеки талиб как:CDLBELTHOLD(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLBREAKAWAY()
Функция используется для расчетаОтрыв (К-линейная диаграмма: Отрыв).
Доходное значениеtalib.CDLBREAKAWAY()
функция: одномерный массив.
массив
Талиб.CDLBРEAKAWAY ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLBREAKAWAY(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLBREAKAWAY(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLBREAKAWAY(records);
Log(ret);
}
CDLBREAKAWAY()
Функция описана в документации библиотеки талиб как:CDLBREAKAWAY(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLCLOSINGMARUBOZU()
Функция используется для расчетаЗакрытие Марубозу (К-линейная диаграмма: закрытие босиком и босиком).
Доходное значениеtalib.CDLCLOSINGMARUBOZU()
функция: одномерный массив.
массив
Талиб.CDLCЛОСИНГ Марубозу ((inPriceOHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLCLOSINGMARUBOZU(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLCLOSINGMARUBOZU(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLCLOSINGMARUBOZU(records);
Log(ret);
}
ВCDLCLOSINGMARUBOZU()
Функция описана в документации библиотеки талиб как:CDLCLOSINGMARUBOZU(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLCONCEALBABYSWALL()
Функция используется для расчетаСкрытие детской ласточки (К-линейный график: скрытие детской ласточки).
Доходное значениеtalib.CDLCONCEALBABYSWALL()
функция: одномерный массив.
массив
Talib.CDLCONCEALBABYSWALL ((inPriceOHLC) (в цену) (на английском)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLCONCEALBABYSWALL(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLCONCEALBABYSWALL(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLCONCEALBABYSWALL(records);
Log(ret);
}
ВCDLCONCEALBABYSWALL()
Функция описана в документации библиотеки талиб как:CDLCONCEALBABYSWALL(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLCOUNTERATTACK()
Функция используется для расчетаКонтрнаступление (К-линейный график:Контрнаступление).
Доходное значениеtalib.CDLCOUNTERATTACK()
функция - это одномерный массив.
массив
Талиб.CDLКОНТАРАТАКК ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLCOUNTERATTACK(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLCOUNTERATTACK(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLCOUNTERATTACK(records);
Log(ret);
}
ВCDLCOUNTERATTACK()
Функция описана в документации библиотеки талиб как:CDLCOUNTERATTACK(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLDARKCLOUDCOVER()
Функция используется для расчетаТёмная облачность (К-линейная диаграмма: темная облачность).
Доходное значениеtalib.CDLDARKCLOUDCOVER()
функция - это одномерный массив.
массив
Талиб.CDDARKCLOUDCOVER ((inPriceOHLC)) Талиб.CDDARKCLOUDCOVER ((inPriceOHLC, optInPenetration) (в переводе с английского)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
ВoptInPenetration
параметр используется для настройки проникновения, значение по умолчанию составляет 0,5.
optInPenetration
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLDARKCLOUDCOVER(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLDARKCLOUDCOVER(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLDARKCLOUDCOVER(records);
Log(ret);
}
ВCDLDARKCLOUDCOVER()
Функция описана в документации библиотеки талиб как:CDLDARKCLOUDCOVER(Records[Open,High,Low,Close],Penetration = 0.5) = Array(outInteger)
Вtalib.CDLDOJI()
Функция используется для расчетаДодзи (К-линейная диаграмма: Додзи).
Доходное значениеtalib.CDLDOJI()
функция: одномерный массив.
массив
Талиб.CDLDOJI ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLDOJI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLDOJI(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLDOJI(records);
Log(ret);
}
ВCDLDOJI()
Функция описана в документации библиотеки талиб как:CDLDOJI(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLDOJISTAR()
Функция используется для расчетаДоджи-звезда (К-линейная диаграмма: Доджи-звезда).
Доходное значениеtalib.CDLDOJISTAR()
функция: одномерный массив.
массив
Талиб.CDLDOJISTAR ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLDOJISTAR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLDOJISTAR(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLDOJISTAR(records);
Log(ret);
}
ВCDLDOJISTAR()
Функция описана в документации библиотеки талиб как:CDLDOJISTAR(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLDRAGONFLYDOJI()
Функция используется для расчетаДодзи Стрельца (К-линейная диаграмма: Додзи Стрельца).
Доходное значениеtalib.CDLDRAGONFLYDOJI()
функция: одномерный массив.
массив
Талиб.CDLDRAGONFLYDOJI (в цену OHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLDRAGONFLYDOJI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLDRAGONFLYDOJI(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLDRAGONFLYDOJI(records);
Log(ret);
}
ВCDLDRAGONFLYDOJI()
Функция описана в документации библиотеки талиб как:CDLDRAGONFLYDOJI(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLENGULFING()
Функция используется для расчетаОбразец поглощения (К-линейная диаграмма: поглощение).
Доходное значениеtalib.CDLENGULFING()
функция - это одномерный массив.
массив
Талиб.CDЛЕНГУЛФИНГ ((inPriceOHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLENGULFING(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLENGULFING(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLENGULFING(records);
Log(ret);
}
ВCDLENGULFING()
Функция описана в документации библиотеки талиб как:CDLENGULFING(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLEVENINGDOJISTAR()
Функция используется для расчетаВечерняя звезда Доджи (К-линейная диаграмма: Вечерняя звезда Доджи).
Доходное значениеtalib.CDLEVENINGDOJISTAR()
функция: одномерный массив.
массив
Талиб.CDLEVENINGDOJISTAR ((inPriceOHLC) (в цену) Talib.CDLEVENINGDOJISTAR ((inPriceOHLC, optInPenetration) - Это не так.
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
ВoptInPenetration
параметр используется для настройки проникновения, значение по умолчанию 0,3.
optInPenetration
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLEVENINGDOJISTAR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLEVENINGDOJISTAR(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLEVENINGDOJISTAR(records);
Log(ret);
}
ВCDLEVENINGDOJISTAR()
Функция описана в документации библиотеки талиб как:CDLEVENINGDOJISTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)
Вtalib.CDLEVENINGSTAR()
Функция используется для расчетаВечерняя звезда (К-линейная диаграмма: Вечерняя звезда).
Доходное значениеtalib.CDLEVENINGSTAR()
функция: одномерный массив.
массив
Talib.CDLEVENINGSTAR ((inPriceOHLC) - в центре США) Talib.CDLEVENINGSTAR ((inPriceOHLC, optInPenetration) (включает в себя все, что нужно)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
ВoptInPenetration
параметр используется для настройки проникновения, значение по умолчанию 0,3.
optInPenetration
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLEVENINGSTAR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLEVENINGSTAR(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLEVENINGSTAR(records);
Log(ret);
}
ВCDLEVENINGSTAR()
Функция описана в документации библиотеки талиб как:CDLEVENINGSTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)
Вtalib.CDLGAPSIDESIDEWHITE()
Функция используется для расчетаБелые линии с разрывом вверх/вниз (К-линейная диаграмма: Белые линии с разрывом вверх/вниз).
Доходное значениеtalib.CDLGAPSIDESIDEWHITE()
функция: одномерный массив.
массив
Талиб.CDLGAPSIDESIDEWHITE ((inPriceOHLC) (в цены)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLGAPSIDESIDEWHITE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLGAPSIDESIDEWHITE(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLGAPSIDESIDEWHITE(records);
Log(ret);
}
ВCDLGAPSIDESIDEWHITE()
Функция описана в документации библиотеки талиб как:CDLGAPSIDESIDEWHITE(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLGRAVESTONEDOJI()
Функция используется для расчетаGravestone Doji (К-линейный график: Gravestone Doji).
Доходное значениеtalib.CDLGRAVESTONEDOJI()
функция: одномерный массив.
массив
Талиб.CDLГРАВЕСТОНЕДОДОЖИ ((inPriceOHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLGRAVESTONEDOJI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLGRAVESTONEDOJI(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLGRAVESTONEDOJI(records);
Log(ret);
}
ВCDLGRAVESTONEDOJI()
Функция описана в документации библиотеки талиб как:CDLGRAVESTONEDOJI(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLHAMMER()
Функция используется для расчетаМолот (К-линейная диаграмма: Молот).
Доходное значениеtalib.CDLHAMMER()
функция: одномерный массив.
массив
Talib.CDLHAMMER ((inPriceOHLC) (в переводе с английского)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLHAMMER(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLHAMMER(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLHAMMER(records);
Log(ret);
}
ВCDLHAMMER()
Функция описана в документации библиотеки талиб как:CDLHAMMER(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLHANGINGMAN()
Функция используется для расчетаПовеситель (К-линейная диаграмма: Повеситель).
Доходное значениеtalib.CDLHANGINGMAN()
функция - это одномерный массив.
массив
Талиб.CDЛХАНГИНГМАН ((inPriceOHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLHANGINGMAN(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLHANGINGMAN(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLHANGINGMAN(records);
Log(ret);
}
ВCDLHANGINGMAN()
Функция описана в документации библиотеки талиб как:CDLHANGINGMAN(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLHARAMI()
Функция используется для расчетаХарами-паттерн (К-линейный график: отрицательные и положительные линии).
Доходное значениеtalib.CDLHARAMI()
функция - это одномерный массив.
массив
Талиб.CDLHARAMI ((inPriceOHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLHARAMI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLHARAMI(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLHARAMI(records);
Log(ret);
}
ВCDLHARAMI()
Функция описана в документации библиотеки талиб как:CDLHARAMI(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLHARAMICROSS()
Функция используется для расчетаХарами кросс-паттерн (K-линейный график: пересекающие отрицательные и положительные линии).
Доходное значениеtalib.CDLHARAMICROSS()
функция: одномерный массив.
массив
Talib.CDLHARAMICROSS ((inPriceOHLC) (включается в список)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLHARAMICROSS(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLHARAMICROSS(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLHARAMICROSS(records);
Log(ret);
}
ВCDLHARAMICROSS()
Функция описана в документации библиотеки талиб как:CDLHARAMICROSS(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLHIGHWAVE()
Функция используется для расчетаВысоковолновая свеча (К-линейная диаграмма: Длинный кросс ног).
Доходное значениеtalib.CDLHIGHWAVE()
функция - это одномерный массив.
массив
Talib.CDLHIGHWAVE ((inPriceOHLC) (включается в список)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLHIGHWAVE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLHIGHWAVE(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLHIGHWAVE(records);
Log(ret);
}
ВCDLHIGHWAVE()
Функция описана в документации библиотеки талиб как:CDLHIGHWAVE(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLHIKKAKE()
Функция используется для расчетаОбразец Хиккаке (К-линейная диаграмма: ловушка).
Доходное значениеtalib.CDLHIKKAKE()
функция - это одномерный массив.
массив
Талиб.CDLHIKKAKE ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLHIKKAKE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLHIKKAKE(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLHIKKAKE(records);
Log(ret);
}
ВCDLHIKKAKE()
Функция описана в документации библиотеки талиб как:CDLHIKKAKE(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLHIKKAKEMOD()
Функция используется для расчетаМодифицированный рисунок Хиккаке (К-линейная диаграмма: Модифицированная ловушка).
Доходное значениеtalib.CDLHIKKAKEMOD()
функция: одномерный массив.
массив
Талиб.CDLHIKKAKEMOD ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLHIKKAKEMOD(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLHIKKAKEMOD(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLHIKKAKEMOD(records);
Log(ret);
}
ВCDLHIKKAKEMOD()
Функция описана в документации библиотеки талиб как:CDLHIKKAKEMOD(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLHOMINGPIGEON()
Функция используется для расчетаГолубь-посещающий (К-линейная диаграмма: Голубь).
Доходное значениеtalib.CDLHOMINGPIGEON()
функция: одномерный массив.
массив
Talib.CDLHOMINGPIGEON ((inPriceOHLC) (включая цену)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLHOMINGPIGEON(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLHOMINGPIGEON(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLHOMINGPIGEON(records);
Log(ret);
}
ВCDLHOMINGPIGEON()
Функция описана в документации библиотеки талиб как:CDLHOMINGPIGEON(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLIDENTICAL3CROWS()
Функция используется для расчетаОдинаковые три вороны (К-линейный график: те же три вороны).
Доходное значениеtalib.CDLIDENTICAL3CROWS()
функция: одномерный массив.
массив
Talib.CDLIDENTICAL3CROWS ((inPriceOHLC) (включается в ценовую категорию)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLIDENTICAL3CROWS(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLIDENTICAL3CROWS(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLIDENTICAL3CROWS(records);
Log(ret);
}
ВCDLIDENTICAL3CROWS()
Функция описана в документации библиотеки талиб как:CDLIDENTICAL3CROWS(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLINNECK()
Функция используется для расчетаУзоры в шее (К-линейная диаграмма: вырез шеи).
Доходное значениеtalib.CDLINNECK()
функция: одномерный массив.
массив
Talib.CDLINNECK ((inPriceOHLC) (в переводе с английского)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLINNECK(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLINNECK(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLINNECK(records);
Log(ret);
}
ВCDLINNECK()
Функция описана в документации библиотеки талиб как:CDLINNECK(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLINVERTEDHAMMER()
Функция используется для расчетаПерекрученный молот (К-линейная диаграмма: Перекрученный молот).
Доходное значениеtalib.CDLINVERTEDHAMMER()
функция: одномерный массив.
массив
Talib.CDLINVERTEDHAMMER ((inPriceOHLC) - в цену, которую вы покупаете)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLINVERTEDHAMMER(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLINVERTEDHAMMER(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLINVERTEDHAMMER(records);
Log(ret);
}
ВCDLINVERTEDHAMMER()
Функция описана в документации библиотеки талиб как:CDLINVERTEDHAMMER(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLKICKING()
Функция используется для расчетаПинание (К-линейная диаграмма: пинание).
Доходное значениеtalib.CDLKICKING()
функция - это одномерный массив.
массив
Талиб.CDLКИККИНГ ((inPriceOHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLKICKING(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLKICKING(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLKICKING(records);
Log(ret);
}
ВCDLKICKING()
Функция описана в документации библиотеки талиб как:CDLKICKING(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLKICKINGBYLENGTH()
Функция используется для расчетаКик - бык/медведь, определяемый более длинным Марубозу (К-линейная диаграмма: Кик-бык/кик-медведь).
Доходное значениеtalib.CDLKICKINGBYLENGTH()
функция: одномерный массив.
массив
Talib.CDLKICKINGBYLENGTH ((inPriceOHLC) (в цены)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLKICKINGBYLENGTH(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLKICKINGBYLENGTH(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLKICKINGBYLENGTH(records);
Log(ret);
}
ВCDLKICKINGBYLENGTH()
Функция описана в документации библиотеки талиб как:CDLKICKINGBYLENGTH(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLLADDERBOTTOM()
Функция используется для расчетаНижняя часть лестницы (К-линейная диаграмма: Нижняя часть лестницы).
Доходное значениеtalib.CDLLADDERBOTTOM()
функция: одномерный массив.
массив
Талиб.CDLLADDERBOTTOM ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLLADDERBOTTOM(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLLADDERBOTTOM(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLLADDERBOTTOM(records);
Log(ret);
}
ВCDLLADDERBOTTOM()
Функция описана в документации библиотеки талиб как:CDLLADDERBOTTOM(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLLONGLEGGEDDOJI()
Функция используется для расчетаДлинноногий доджи (К-линейная диаграмма: Длинноногий доджи).
Доходное значениеtalib.CDLLONGLEGGEDDOJI()
функция: одномерный массив.
массив
Талиб.CDLLONGLEGGEDDOJI ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLLONGLEGGEDDOJI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLLONGLEGGEDDOJI(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLLONGLEGGEDDOJI(records);
Log(ret);
}
ВCDLLONGLEGGEDDOJI()
Функция описана в документации библиотеки талиб как:CDLLONGLEGGEDDOJI(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLLONGLINE()
Функция используется для расчетаСвеча длинной линии (К-линейная диаграмма: длинная линия).
Доходное значениеtalib.CDLLONGLINE()
функция: одномерный массив.
массив
Талиб.CDLLONGLINE ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLLONGLINE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLLONGLINE(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLLONGLINE(records);
Log(ret);
}
ВCDLLONGLINE()
Функция описана в документации библиотеки талиб как:CDLLONGLINE(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLMARUBOZU()
Функция используется для расчетаМарубозу (К-линейная диаграмма: голова и ноги голые).
Доходное значениеtalib.CDLMARUBOZU()
функция - это одномерный массив.
массив
Талиб.CDLMARUBOZU ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLMARUBOZU(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLMARUBOZU(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLMARUBOZU(records);
Log(ret);
}
ВCDLMARUBOZU()
Функция описана в документации библиотеки талиб как:CDLMARUBOZU(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLMATCHINGLOW()
Функция используется для расчетаСовпадение низкого уровня (К-линейный график: Совпадение низкого уровня).
Доходное значениеtalib.CDLMATCHINGLOW()
функция: одномерный массив.
массив
Талиб.CDLMATCHINGLOW ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLMATCHINGLOW(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLMATCHINGLOW(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLMATCHINGLOW(records);
Log(ret);
}
ВCDLMATCHINGLOW()
Функция описана в документации библиотеки талиб как:CDLMATCHINGLOW(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLMATHOLD()
Функция используется для расчетаУдержание мата (карта с линиями K: Удержание мата).
Доходное значениеtalib.CDLMATHOLD()
функция: одномерный массив.
массив
Talib.CDLMATHOLD ((inPriceOHLC)) talib.CDLMATHOLD ((inPriceOHLC, optInPenetration) - это не так.
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
ВoptInPenetration
параметр является необязательным и используется для указания процента ширины линии восходящего/снижающегося тренда, значение по умолчанию равняется 0,5.
optInPenetration
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLMATHOLD(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLMATHOLD(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLMATHOLD(records);
Log(ret);
}
ВCDLMATHOLD()
Функция описана в документации библиотеки талиб как:CDLMATHOLD(Records[Open,High,Low,Close],Penetration = 0.5) = Array(outInteger)
Вtalib.CDLMORNINGDOJISTAR()
Функция используется для расчетаУтренняя звезда Додзи (К-линейный график: Утренняя звезда Додзи).
Доходное значениеtalib.CDLMORNINGDOJISTAR()
функция: одномерный массив.
массив
Талиб. CDLMORNINGDOJISTAR ((inPriceOHLC) (в цену) Talib.CDLMORNINGDOJISTAR ((inPriceOHLC, optInPenetration) - Это не так.
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
ВoptInPenetration
параметр используется для указания степени перекрытия между начальной ценой проверки и твердой частью, значение по умолчанию 0,3.
optInPenetration
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLMORNINGDOJISTAR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLMORNINGDOJISTAR(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLMORNINGDOJISTAR(records);
Log(ret);
}
ВCDLMORNINGDOJISTAR()
Функция описана в документации библиотеки талиб как:CDLMORNINGDOJISTAR(Records[Open,High,Low,Close],Penetration = 0.3) = Array(outInteger)
Вtalib.CDLMORNINGSTAR()
Функция используется для расчетаУтренняя звезда (К-линейная диаграмма: Утренняя звезда).
Доходное значениеtalib.CDLMORNINGSTAR()
функция: одномерный массив.
массив
Талиб.CDLMORNINGSTAR ((inPriceOHLC)) Талиб.CDLMORNINGSTAR ((inPriceOHLC, optInPenetration) (включает в себя все, что нужно для проникновения)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
ВoptInPenetration
параметр представляет собой пороговый процент колебания цен, требуемый для подтверждения тренда, и принимает значение в диапазоне [0,1], при этом значение по умолчанию составляет 0,3.
optInPenetration
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLMORNINGSTAR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLMORNINGSTAR(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLMORNINGSTAR(records);
Log(ret);
}
ВCDLMORNINGSTAR()
Функция описана в документации библиотеки талиб как:CDLMORNINGSTAR(Records[Open,High,Low,Close],Penetration=0.3) = Array(outInteger)
Вtalib.CDLONNECK()
Функция используется для расчетаУзоры на шее (К-линейный график: Узоры на шее).
Доходное значениеtalib.CDLONNECK()
функция - это одномерный массив.
массив
Talib.CDLONNECK ((inPriceOHLC) (включается в список)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLONNECK(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLONNECK(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLONNECK(records);
Log(ret);
}
ВCDLONNECK()
Функция описана в документации библиотеки талиб как:CDLONNECK(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLPIERCING()
Функция используется для расчетаУзоры пирсинга (К-линейный график: Узоры пирсинга).
Доходное значениеtalib.CDLPIERCING()
функция - это одномерный массив.
массив
Талиб.CDLPIERCING ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLPIERCING(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLPIERCING(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLPIERCING(records);
Log(ret);
}
ВCDLPIERCING()
Функция описана в документации библиотеки талиб как:CDLPIERCING(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLRICKSHAWMAN()
Функция используется для расчетаРикшоу-мен (К-линейная диаграмма: Рикшоу-мен).
Доходное значениеtalib.CDLRICKSHAWMAN()
функция: одномерный массив.
массив
Талиб.CDLRICKSHAWMAN ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLRICKSHAWMAN(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLRICKSHAWMAN(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLRICKSHAWMAN(records);
Log(ret);
}
ВCDLRICKSHAWMAN()
Функция описана в документации библиотеки талиб как:CDLRICKSHAWMAN(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLRISEFALL3METHODS()
Функция используется для расчетаТри метода повышения/снижения (К-линейный график: три метода повышения/снижения).
Доходное значениеtalib.CDLRISEFALL3METHODS()
функция: одномерный массив.
массив
talib.CDLRISEFALL3METHODS ((inPriceOHLC) (в цены)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLRISEFALL3METHODS(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLRISEFALL3METHODS(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLRISEFALL3METHODS(records);
Log(ret);
}
ВCDLRISEFALL3METHODS()
Функция описана в документации библиотеки талиб как:CDLRISEFALL3METHODS(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLSEPARATINGLINES()
Функция используется для расчетаРазделяющие линии (К-линейная диаграмма: Разделяющие линии).
Доходное значениеtalib.CDLSEPARATINGLINES()
функция - это одномерный массив.
массив
Талиб.CDLSEPARATINGLINES ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLSEPARATINGLINES(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLSEPARATINGLINES(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLSEPARATINGLINES(records);
Log(ret);
}
ВCDLSEPARATINGLINES()
Функция описана в документации библиотеки талиб как:CDLSEPARATINGLINES(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLSHOOTINGSTAR()
Функция используется для расчетаСтреляющая звезда (К-линейная диаграмма: Стреляющая звезда).
Доходное значениеtalib.CDLSHOOTINGSTAR()
функция - это одномерный массив.
массив
Талиб.СДЛСУОТИНГСТАР ((inPriceOHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLSHOOTINGSTAR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLSHOOTINGSTAR(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLSHOOTINGSTAR(records);
Log(ret);
}
ВCDLSHOOTINGSTAR()
Функция описана в документации библиотеки талиб как:CDLSHOOTINGSTAR(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLSHORTLINE()
Функция используется для расчетаСвеча короткой линии (К-линейная диаграмма: Краткая линия).
Доходное значениеtalib.CDLSHORTLINE()
функция: одномерный массив.
массив
Talib.CDLSSORTLINE ((inPriceOHLC) (включая цену)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLSHORTLINE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLSHORTLINE(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLSHORTLINE(records);
Log(ret);
}
ВCDLSHORTLINE()
Функция описана в документации библиотеки талиб как:CDLSHORTLINE(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLSPINNINGTOP()
Функция используется для расчетаСпиннинг Топ (К-линейная диаграмма: Спиннинг Топ).
Доходное значениеtalib.CDLSPINNINGTOP()
функция: одномерный массив.
массив
Талиб.CDLSPINNINGTOP ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLSPINNINGTOP(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLSPINNINGTOP(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLSPINNINGTOP(records);
Log(ret);
}
ВCDLSPINNINGTOP()
Функция описана в документации библиотеки талиб как:CDLSPINNINGTOP(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLSTALLEDPATTERN()
Функция используется для расчетаЗастойный рисунок (К-линейная диаграмма: Застойный рисунок).
Доходное значениеtalib.CDLSTALLEDPATTERN()
функция: одномерный массив.
массив
Талиб.CDLSTALLEDPATTERN ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLSTALLEDPATTERN(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLSTALLEDPATTERN(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLSTALLEDPATTERN(records);
Log(ret);
}
ВCDLSTALLEDPATTERN()
Функция описана в документации библиотеки талиб как:CDLSTALLEDPATTERN(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLSTICKSANDWICH()
Функция используется для расчетаСтик-Сэндвич (К-линейная диаграмма: Стик-Сэндвич).
Доходное значениеtalib.CDLSTICKSANDWICH()
функция - это одномерный массив.
массив
Талиб.CDLСТИКССАНДВИЧ ((inPriceOHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLSTICKSANDWICH(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLSTICKSANDWICH(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLSTICKSANDWICH(records);
Log(ret);
}
ВCDLSTICKSANDWICH()
Функция описана в документации библиотеки талиб как:CDLSTICKSANDWICH(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLTAKURI()
Функция используется для расчетаТакури (додзи с очень длинной нижней линией тени) (К-линейная диаграмма: Такури).
Доходное значениеtalib.CDLTAKURI()
функция - это одномерный массив.
массив
Talib.CDLTAKURI ((inPriceOHLC) (в переводе с английского)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLTAKURI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLTAKURI(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLTAKURI(records);
Log(ret);
}
ВCDLTAKURI()
Функция описана в документации библиотеки талиб как:CDLTAKURI(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLTASUKIGAP()
Функция используется для расчетаРазрыв Тасуки (К-линейная диаграмма: Разрыв Тасуки).
Доходное значениеtalib.CDLTASUKIGAP()
функция - это одномерный массив.
массив
Talib.CDLTASUKIGAP ((inPriceOHLC) (в переводе с английского)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLTASUKIGAP(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLTASUKIGAP(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLTASUKIGAP(records);
Log(ret);
}
ВCDLTASUKIGAP()
Функция описана в документации библиотеки талиб как:CDLTASUKIGAP(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLTHRUSTING()
Функция используется для расчетаУстройство толкания (К-линейная диаграмма: Устройство толкания).
Доходное значениеtalib.CDLTHRUSTING()
функция: одномерный массив.
массив
Талиб.CDLTHRUSTING ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLTHRUSTING(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLTHRUSTING(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLTHRUSTING(records);
Log(ret);
}
ВCDLTHRUSTING()
Функция описана в документации библиотеки талиб как:CDLTHRUSTING(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLTRISTAR()
Функция используется для расчетаТристарный рисунок (K-линейный график: Тристарный рисунок).
Доходное значениеtalib.CDLTRISTAR()
функция: одномерный массив.
массив
Талиб.CDLTRISTAR ((inPriceOHLC)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLTRISTAR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLTRISTAR(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLTRISTAR(records);
Log(ret);
}
ВCDLTRISTAR()
Функция описана в документации библиотеки талиб как:CDLTRISTAR(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLUNIQUE3RIVER()
Функция используется для расчетаУникальная 3 река (К-линейная диаграмма: Уникальная 3 река).
Доходное значениеtalib.CDLUNIQUE3RIVER()
функция: одномерный массив.
массив
Талиб.CDLUNIQUE3RIVER ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLUNIQUE3RIVER(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLUNIQUE3RIVER(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLUNIQUE3RIVER(records);
Log(ret);
}
ВCDLUNIQUE3RIVER()
Функция описана в документации библиотеки талиб как:CDLUNIQUE3RIVER(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLUPSIDEGAP2CROWS()
Функция используется для расчетаВверх два ворона (К-линейный график: Вверх два ворона).
Доходное значениеtalib.CDLUPSIDEGAP2CROWS()
функция: одномерный массив.
массив
Talib.CDLUPSIDEGAP2CROWS ((inPriceOHLC) (включается в список)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLUPSIDEGAP2CROWS(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLUPSIDEGAP2CROWS(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLUPSIDEGAP2CROWS(records);
Log(ret);
}
ВCDLUPSIDEGAP2CROWS()
Функция описана в документации библиотеки талиб как:CDLUPSIDEGAP2CROWS(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.CDLXSIDEGAP3METHODS()
Функция используется для расчетаТрех методов расхождения вверх/вниз (К-линейная диаграмма: три метода расхождения вверх/вниз).
Доходное значениеtalib.CDLXSIDEGAP3METHODS()
функция: одномерный массив.
массив
talib.CDLXSIDEGAP3METHODS ((inPriceOHLC) (в цены)
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.CDLXSIDEGAP3METHODS(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CDLXSIDEGAP3METHODS(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CDLXSIDEGAP3METHODS(records);
Log(ret);
}
ВCDLXSIDEGAP3METHODS()
Функция описана в документации библиотеки талиб как:CDLXSIDEGAP3METHODS(Records[Open,High,Low,Close]) = Array(outInteger)
Вtalib.AD()
Функция используется для расчетаЛиния Chaikin A/D (линейный стохастический индикатор).
Доходное значениеtalib.AD()
функция: одномерный массив.
массив
talib.AD(inPriceHLCV)
ВinPriceHLCV
параметр используется для указания данных K-линии.
inPriceHLCV
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.AD(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.AD(records.High, records.Low, records.Close, records.Volume)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.AD(records);
Log(ret);
}
ВAD()
Функция описана в документации библиотеки талиб как:AD(Records[High,Low,Close,Volume]) = Array(outReal)
Вtalib.ADOSC()
Функция используется для расчетаЧаикинский осциллятор A/D (Чаикинский осциллятор).
Доходное значениеtalib.ADOSC()
функция - это одномерный массив.
массив
Talib.ADOSC ((inPriceHLCV)) talib.ADOSC ((inPriceHLCV, optInFastPeriod, optInSlowPeriod) (включает в себя:
ВinPriceHLCV
параметр используется для указания данных K-линии.
inPriceHLCV
неправда
{@struct/Record Record} массив структуры
ВoptInFastPeriod
Параметр используется для установки быстрого периода.
optInFastPeriod
ложное
Номер
ВoptInSlowPeriod
Параметр используется для установки медленного периода.
optInSlowPeriod
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.ADOSC(records, 3, 10)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.ADOSC(records.High, records.Low, records.Close, records.Volume, 3, 10)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.ADOSC(records, 3, 10);
Log(ret);
}
ВADOSC()
Функция описана в документации библиотеки талиб как:ADOSC(Records[High,Low,Close,Volume],Fast Period = 3,Slow Period = 10) = Array(outReal)
Вtalib.OBV()
Функция используется для расчетаНа балансовом объеме (энергетический прилив).
Доходное значениеtalib.OBV()
функция - это одномерный массив.
массив
Talib.OBV ((inReal)) Talib.OBV ((inReal, inPriceV))
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВinPriceV
параметр используется для указания данных K-линии.
inPriceV
ложное
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.OBV(records, records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.OBV(records.Close, records.Volume)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.OBV(records);
Log(ret);
}
ВOBV()
Функция описана в документации библиотеки талиб как:OBV(Records[Close],Records[Volume]) = Array(outReal)
Вtalib.ACOS()
Функция используется для расчетаВекторный тригонометрический ACos (инверсивная функция косинуса).
Доходное значениеtalib.ACOS()
функция - это одномерный массив.
массив
Талиб.АКОС ((inReal)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [-1, 0, 1]
var ret = talib.ACOS(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [-1.0, 0, 1.0]
ret = talib.ACOS(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {-1, 0, 1};
auto ret = talib.ACOS(data);
Log(ret);
}
ВACOS()
Функция описана в документации библиотеки талиб как:ACOS(Records[Close]) = Array(outReal)
Вtalib.ASIN()
Функция используется для расчетаВекторный тригонометрический ASin (инверсивная синусная функция).
Доходное значениеtalib.ASIN()
функция - это одномерный массив.
массив
Талиб.АСИН ((inReal)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [-1, 0, 1]
var ret = talib.ASIN(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [-1.0, 0, 1.0]
ret = talib.ASIN(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {-1, 0, 1};
auto ret = talib.ASIN(data);
Log(ret);
}
ВASIN()
Функция описана в документации библиотеки талиб как:ASIN(Records[Close]) = Array(outReal)
Вtalib.ATAN()
Функция используется для расчетаВекторная тригонометрическая функция ATan (в обратном порядке).
Доходное значениеtalib.ATAN()
функция: одномерный массив.
массив
Talib.ATAN ((inReal))
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [-3.14/2, 0, 3.14/2]
var ret = talib.ATAN(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [-3.14/2, 0, 3.14/2]
ret = talib.ATAN(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {-3.14/2, 0, 3.14/2};
auto ret = talib.ATAN(data);
Log(ret);
}
ВATAN()
Функция описана в документации библиотеки талиб как:ATAN(Records[Close]) = Array(outReal)
Вtalib.CEIL()
Функция используется для расчетаВекторный потолок (функция округления).
Доходное значениеtalib.CEIL()
функция - это одномерный массив.
массив
Talib.CEIL ((inReal))
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var records = exchange.GetRecords()
var ret = talib.CEIL(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CEIL(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CEIL(records);
Log(ret);
}
ВCEIL()
Функция описана в документации библиотеки талиб как:CEIL(Records[Close]) = Array(outReal)
Вtalib.COS()
Функция используется для расчетаВекторные тригонометрические Кос (функция косинуса).
Доходное значениеtalib.COS()
функция: одномерный массив.
массив
Талиб.COS ((inReal)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [-3.14, 0, 3.14]
var ret = talib.COS(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [-3.14, 0, 3.14]
ret = talib.COS(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {-3.14, 0, 3.14};
auto ret = talib.COS(data);
Log(ret);
}
ВCOS()
Функция описана в документации библиотеки талиб как:COS(Records[Close]) = Array(outReal)
Вtalib.COSH()
Функция используется для расчетаВектор тригонометрический Кош (гиперболическое значение косинуса).
Доходное значениеtalib.COSH()
функция - это одномерный массив.
массив
Talib.COSH ((inReal))
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [-1, 0, 1]
var ret = talib.COSH(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [-1.0, 0, 1.0]
ret = talib.COSH(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {-1, 0, 1};
auto ret = talib.COSH(data);
Log(ret);
}
ВCOSH()
Функция описана в документации библиотеки талиб как:COSH(Records[Close]) = Array(outReal)
Вtalib.EXP()
Функция используется для расчетаВекторная арифметика Exp (экспоненциальная функция).
Доходное значениеtalib.EXP()
функция: одномерный массив.
массив
Talib.EXP ((inReal))
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [0, 1, 2]
var ret = talib.EXP(data) // e^0, e^1, e^2
Log(ret)
}
import talib
import numpy as np
def main():
data = [0, 1.0, 2.0]
ret = talib.EXP(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {0, 1.0, 2.0};
auto ret = talib.EXP(data);
Log(ret);
}
ВEXP()
Функция описана в документации библиотеки талиб как:EXP(Records[Close]) = Array(outReal)
Вtalib.FLOOR()
Функция используется для расчетаВекторный пол (закругленный вниз).
Доходное значениеtalib.FLOOR()
функция - это одномерный массив.
массив
Талиб.ФОЛОР ((inReal))
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var records = exchange.GetRecords()
var ret = talib.FLOOR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.FLOOR(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.FLOOR(records);
Log(ret);
}
ВFLOOR()
Функция описана в документации библиотеки талиб как:FLOOR(Records[Close]) = Array(outReal)
Вtalib.LN()
Функция используется для расчетаВектор Log Natural (естественный логарифм).
Доходное значениеtalib.LN()
функция - это одномерный массив.
массив
Талиб.ЛН ((inReal)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [1, 2, 3]
var ret = talib.LN(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [1.0, 2.0, 3.0]
ret = talib.LN(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {1, 2, 3};
auto ret = talib.LN(data);
Log(ret);
}
ВLN()
Функция описана в документации библиотеки талиб как:LN(Records[Close]) = Array(outReal)
Вtalib.LOG10()
Функция используется для расчетаВектор Log10 (логарифмическая функция).
Доходное значениеtalib.LOG10()
функция - это одномерный массив.
массив
Talib.LOG10 ((inReal)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [10, 100, 1000]
var ret = talib.LOG10(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [10.0, 100.0, 1000.0]
ret = talib.LOG10(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {10, 100, 1000};
auto ret = talib.LOG10(data);
Log(ret);
}
ВLOG10()
Функция описана в документации библиотеки талиб как:LOG10(Records[Close]) = Array(outReal)
Вtalib.SIN()
Функция используется для расчетаВектор тригонометрический Sin (синус).
Доходное значениеtalib.SIN()
функция - это одномерный массив.
массив
Талиб.СИН ((inReal)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [-3.14/2, 0, 3.14/2]
var ret = talib.SIN(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [-3.14/2, 0, 3.14/2]
ret = talib.SIN(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {-3.14/2, 0, 3.14/2};
auto ret = talib.SIN(data);
Log(ret);
}
ВSIN()
Функция описана в документации библиотеки талиб как:SIN(Records[Close]) = Array(outReal)
Вtalib.SINH()
Функция используется для расчетаВектор тригонометрический Синх (гиперболическая синусная функция).
Доходное значениеtalib.SINH()
функция: одномерный массив.
массив
Талиб.СИНХ ((inReal)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [-1, 0, 1]
var ret = talib.SINH(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [-1.0, 0, 1.0]
ret = talib.SINH(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {-1, 0, 1};
auto ret = talib.SINH(data);
Log(ret);
}
ВSINH()
Функция описана в документации библиотеки талиб как:SINH(Records[Close]) = Array(outReal)
Вtalib.SQRT()
Функция используется для расчетаВектор квадратный корень (квадратный корень).
Доходное значениеtalib.SQRT()
функция: одномерный массив.
массив
Talib.SQRT ((inReal))
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [4, 64, 100]
var ret = talib.SQRT(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [4.0, 64.0, 100.0]
ret = talib.SQRT(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {4, 64, 100};
auto ret = talib.SQRT(data);
Log(ret);
}
ВSQRT()
Функция описана в документации библиотеки талиб как:SQRT(Records[Close]) = Array(outReal)
Вtalib.TAN()
Функция используется для расчетаВектор тригонометрический Тан (тангенс).
Доходное значениеtalib.TAN()
функция - это одномерный массив.
массив
Талиб.ТАН ((inReal)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [-1, 0, 1]
var ret = talib.TAN(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [-1.0, 0, 1.0]
ret = talib.TAN(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {-1, 0, 1};
auto ret = talib.TAN(data);
Log(ret);
}
ВTAN()
Функция описана в документации библиотеки талиб как:TAN(Records[Close]) = Array(outReal)
Вtalib.TANH()
Функция используется для расчетаВекторный тригонометрический Танх (функция гиперболической тангенсы).
Доходное значениеtalib.TANH()
функция: одномерный массив.
массив
Талиб.ТАНХ ((inReal)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var data = [-1, 0, 1]
var ret = talib.TANH(data)
Log(ret)
}
import talib
import numpy as np
def main():
data = [-1.0, 0, 1.0]
ret = talib.TANH(np.array(data))
Log(ret)
void main() {
std::vector<double> data = {-1, 0, 1};
auto ret = talib.TANH(data);
Log(ret);
}
ВTANH()
Функция описана в документации библиотеки талиб как:TANH(Records[Close]) = Array(outReal)
Вtalib.MAX()
Функция используется для расчета максимального значения дляконкретный период.
Доходное значениеtalib.MAX()
функция: одномерный массив.
массив
Талиб.MAX ((inReal) Талиб.MAX ((inReal, optInTimePeriod)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MAX(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MAX(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MAX(records);
Log(ret);
}
ВMAX()
Функция описана в документации библиотеки талиб как:MAX(Records[Close],Time Period = 30) = Array(outReal)
Вtalib.MAXINDEX()
Функция используется для расчетаиндекс наивысшего значения за указанный период (максимальный индекс).
Доходное значениеtalib.MAXINDEX()
функция: одномерный массив.
массив
Талиб.MAXINDEX ((inReal) talib.MAXINDEX ((inReal, optInTimePeriod) - в реальном времени
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MAXINDEX(records, 5)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MAXINDEX(records.Close, 5)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MAXINDEX(records, 5);
Log(ret);
}
ВMAXINDEX()
Функция описана в документации библиотеки талиб как:MAXINDEX(Records[Close],Time Period = 30) = Array(outInteger)
Вtalib.MIN()
Функция используется для расчета наименьшего значения (минимального значения)** за указанный период.
Доходное значениеtalib.MIN()
функция: одномерный массив.
массив
Талиб.MIN ((inReal) talib.MIN ((inReal, optInTimePeriod) (в реальном времени, в промежутке времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MIN(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MIN(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MIN(records);
Log(ret);
}
ВMIN()
Функция описана в документации библиотеки талиб как:MIN(Records[Close],Time Period = 30) = Array(outReal)
Вtalib.MININDEX()
Функция используется для расчетаИндекс наименьшего значения (индекс минимального значения)на указанный период.
Доходное значениеtalib.MININDEX()
функция: одномерный массив.
массив
Talib.MININDEX ((inReal) talib.MININDEX ((inReal, optInTimePeriod) (в реальном времени, в промежутке времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MININDEX(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MININDEX(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MININDEX(records);
Log(ret);
}
ВMININDEX()
Функция описана в документации библиотеки талиб как:MININDEX(Records[Close],Time Period = 30) = Array(outInteger)
Вtalib.MINMAX()
Функция используется для расчетаминимальные и максимальные значения за указанный период.
Доходное значениеtalib.MINMAX()
Первый элемент этого двумерного массива - массив минимальных значений, а второй элемент - массив максимальных значений.
массив
Талиб.MINMAX ((inReal) talib.MINMAX ((inReal, optInTimePeriod) (в реальном времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MINMAX(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MINMAX(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MINMAX(records);
Log(ret);
}
ВMINMAX()
Функция описана в документации библиотеки талиб как:MINMAX(Records[Close],Time Period = 30) = [Array(outMin),Array(outMax)]
Вtalib.MINMAXINDEX()
Функция используется для расчетаиндекс наименьших и наивысших значений (минимальный и максимальный индекс) за указанный период.
Доходное значениеtalib.MINMAXINDEX()
Первый элемент этого двумерного массива - минимальный индексированный массив, а второй элемент - максимальный индексированный массив.
массив
Talib.MINMAXINDEX ((inReal)) talib.MINMAXINDEX ((inReal, optInTimePeriod) (в реальном времени, в промежутке времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MINMAXINDEX(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MINMAXINDEX(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MINMAXINDEX(records);
Log(ret);
}
ВMINMAXINDEX()
Функция описана в документации библиотеки талиб как:MINMAXINDEX(Records[Close],Time Period = 30) = [Array(outMinIdx),Array(outMaxIdx)]
Вtalib.SUM()
Функция используется для расчетаПодведение итогов.
Доходное значениеtalib.SUM()
функция: одномерный массив.
массив
Talib.SUM ((inReal)) talib.SUM ((inReal, optInTimePeriod) - в реальном времени
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.SUM(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.SUM(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.SUM(records);
Log(ret);
}
ВSUM()
Функция описана в документации библиотеки талиб как:SUM(Records[Close],Time Period = 30) = Array(outReal)
Вtalib.HT_DCPERIOD()
Функция используется для расчетаТрансформация Хилберта - доминирующий период цикла (трансформация Хилберта, доминирующий период).
Доходное значениеtalib.HT_DCPERIOD()
функция: одномерный массив.
массив
Talib.HT_DCPERIOD ((inReal))
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var records = exchange.GetRecords()
var ret = talib.HT_DCPERIOD(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.HT_DCPERIOD(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.HT_DCPERIOD(records);
Log(ret);
}
ВHT_DCPERIOD()
Функция описана в документации библиотеки талиб как:HT_DCPERIOD(Records[Close]) = Array(outReal)
Вtalib.HT_DCPHASE()
Функция используется для расчетаТрансформация Гилберта - доминирующая фаза цикла (трансформация Гилберта, доминирующая фаза цикла).
Доходное значениеtalib.HT_DCPHASE()
функция: одномерный массив.
массив
Талиб.HT_DCPHASE ((inReal)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var records = exchange.GetRecords()
var ret = talib.HT_DCPHASE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.HT_DCPHASE(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.HT_DCPHASE(records);
Log(ret);
}
ВHT_DCPHASE()
Функция описана в документации библиотеки талиб как:HT_DCPHASE(Records[Close]) = Array(outReal)
Вtalib.HT_PHASOR()
Функция используется для расчетаТрансформация Хильберта - Фазовые компоненты (трансформация Хильберта, фазовые компоненты).
Доходное значениеtalib.HT_PHASOR()
Функция представляет собой двумерный массив.
массив
Талиб.HT_PHASOR ((inReal)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var records = exchange.GetRecords()
var ret = talib.HT_PHASOR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.HT_PHASOR(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.HT_PHASOR(records);
Log(ret);
}
ВHT_PHASOR()
Функция описана в документации библиотеки талиб как:HT_PHASOR(Records[Close]) = [Array(outInPhase),Array(outQuadrature)]
Вtalib.HT_SINE()
Функция используется для расчетаТрансформация Хильберта - Синусная волна.
Доходное значениеtalib.HT_SINE()
функция: двумерный массив.
массив
Talib.HT_SINE ((inReal))
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var records = exchange.GetRecords()
var ret = talib.HT_SINE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.HT_SINE(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.HT_SINE(records);
Log(ret);
}
ВHT_SINE()
Функция описана в документации библиотеки талиб как:HT_SINE(Records[Close]) = [Array(outSine),Array(outLeadSine)]
Вtalib.HT_TRENDMODE()
Функция используется для расчетаТрансформа Гилберта - тренд и режим цикла.
Доходное значениеtalib.HT_TRENDMODE()
функция: одномерный массив.
массив
Talib.HT_TRENDMODE ((inReal))
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var records = exchange.GetRecords()
var ret = talib.HT_TRENDMODE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.HT_TRENDMODE(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.HT_TRENDMODE(records);
Log(ret);
}
ВHT_TRENDMODE()
Функция описана в документации библиотеки талиб как:HT_TRENDMODE(Records[Close]) = Array(outInteger)
Вtalib.ATR()
Функция используется для расчетаСредний истинный диапазон.
Доходное значениеtalib.ATR()
функция - это одномерный массив.
массив
Talib.ATR ((inPriceHLC)) talib.ATR ((inPriceHLC, optInTimePeriod) (в цене, в сроке)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.ATR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.ATR(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.ATR(records);
Log(ret);
}
ВATR()
Функция описана в документации библиотеки талиб как:ATR(Records[High,Low,Close],Time Period = 14) = Array(outReal)
Вtalib.NATR()
Функция используется для расчетаНормированный средний истинный диапазон.
Доходное значениеtalib.NATR()
функция - это одномерный массив.
массив
Talib.NATR ((inPriceHLC)) talib.NATR ((inPriceHLC, optInTimePeriod) - в цене, в времени, в периоде)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.NATR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.NATR(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.NATR(records);
Log(ret);
}
ВNATR()
Функция описана в документации библиотеки талиб как:NATR(Records[High,Low,Close],Time Period = 14) = Array(outReal)
Вtalib.TRANGE()
Функция используется для расчетаИстинный диапазон.
Доходное значениеtalib.TRANGE()
функция: одномерный массив.
массив
Talib.TRANGE (в цене)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.TRANGE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.TRANGE(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.TRANGE(records);
Log(ret);
}
ВTRANGE()
Функция описана в документации библиотеки талиб как:TRANGE(Records[High,Low,Close]) = Array(outReal)
Вtalib.BBANDS()
Функция используется для расчетаБоллингерские полосы.
Доходное значениеtalib.BBANDS()
Массив содержит три элемента: массив верхней линии, массив средней линии и массив нижней линии.
массив
Талиб.ББАНДС ((inReal) Talib.BBANDS ((inReal, optInTimePeriod) (в реальном времени, в промежутке времени) talib.BBANDS ((inReal, optInTimePeriod, optInNbDevUp) (в режиме реального времени) talib.BBANDS ((inReal, optInTimePeriod, optInNbDevUp, optInNbDevDn) (в режиме реального времени) talib.BBANDS ((inReal, optInTimePeriod, optInNbDevUp, optInNbDevDn, optInMAType)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 5.
optInTimeПериод
ложное
Номер
ВoptInNbDevUp
параметр используется для установки множителя вверх по линии, значение по умолчанию 2.
Оптимизировать
ложное
Номер
ВoptInNbDevDn
Параметр используется для установки множителя нижней строки, значение по умолчанию - 2.
Оптимизация
ложное
Номер
ВoptInMAType
параметр используется для установки среднего типа, значение по умолчанию 0.
Оптимизация
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.BBANDS(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.BBANDS(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.BBANDS(records);
Log(ret);
}
ВBBANDS()
Функция описана в документации библиотеки талиб как:BBANDS(Records[Close],Time Period = 5,Deviations up = 2,Deviations down = 2,MA Type = 0) = [Array(outRealUpperBand),Array(outRealMiddleBand),Array(outRealLowerBand)]
Вtalib.DEMA()
Функция используется для расчетаДвойная экспоненциальная скользящая средняя.
Доходное значениеtalib.DEMA()
функция - это одномерный массив.
массив
Талиб.DEMA ((inReal) Талиб.ДЕМА (в реальном времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.DEMA(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.DEMA(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.DEMA(records);
Log(ret);
}
ВDEMA()
Функция описана в документации библиотеки талиб как:DEMA(Records[Close],Time Period = 30) = Array(outReal)
Вtalib.EMA()
Функция используется для расчетаЭкспоненциальная скользящая средняя.
Доходное значениеtalib.EMA()
функция - это одномерный массив.
массив
Талиб.EMA ((inReal) Талиб.EMA ((inReal, optInTimePeriod)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.EMA(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.EMA(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.EMA(records);
Log(ret);
}
ВEMA()
Функция описана в документации библиотеки талиб как:EMA(Records[Close],Time Period = 30) = Array(outReal)
Вtalib.HT_TRENDLINE()
Функция используется для расчетаТрансформация Хильберта - мгновенная линия тренда.
Доходное значениеtalib.HT_TRENDLINE()
функция: одномерный массив.
массив
Talib.HT_TRENDLINE ((inReal))
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
function main() {
var records = exchange.GetRecords()
var ret = talib.HT_TRENDLINE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.HT_TRENDLINE(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.HT_TRENDLINE(records);
Log(ret);
}
ВHT_TRENDLINE()
Функция описана в документации библиотеки талиб как:HT_TRENDLINE(Records[Close]) = Array(outReal)
Вtalib.KAMA()
Функция используется для расчетаКауфманская адаптивная скользящая средняя.
Доходное значениеtalib.KAMA()
функция: одномерный массив.
массив
Талиб.Кама ((inReal) Талиб.Кама (в реальном времени, optInTimePeriod)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.KAMA(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.KAMA(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.KAMA(records);
Log(ret);
}
ВKAMA()
Функция описана в документации библиотеки талиб как:KAMA(Records[Close],Time Period = 30) = Array(outReal)
Вtalib.MA()
Функция используется для расчетаДвижущаяся средняя.
Доходное значениеtalib.MA()
функция: одномерный массив.
массив
talib.MA(недействительный)talib.MA(inReal, optInTimePeriod)talib.MA(inReal, optInTimePeriod, optInMAType)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
ВoptInMAType
параметр используется для установки среднего типа, значение по умолчанию 0.
Оптимизация
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MA(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MA(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MA(records);
Log(ret);
}
ВMA()
Функция описана в документации библиотеки талиб как:MA(Records[Close],Time Period = 30,MA Type = 0) = Array(outReal)
Вtalib.MAMA()
Функция используется для расчетаMESA адаптивная скользящая средняя.
Доходное значениеtalib.MAMA()
функция: двумерный массив.
массив
Талиб.Мама ((inReal) Талиб.Мама ((InReal, optInFastLimit) Талиб.Мама ((inReal, optInFastLimit, optInSlowLimit)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInFastLimit
параметр используется для установки быстрого лимита, значение по умолчанию составляет 0,5.
optInFastLimit
ложное
Номер
ВoptInSlowLimit
параметр используется для установки ограничения медленности, значение по умолчанию составляет 0,05.
optInSlowLimit
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MAMA(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MAMA(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MAMA(records);
Log(ret);
}
ВMAMA()
Функция описана в документации библиотеки талиб как:MAMA(Records[Close],Fast Limit = 0.5,Slow Limit = 0.05) = [Array(outMAMA),Array(outFAMA)]
Вtalib.MIDPOINT()
Функция используется для расчетаСредняя точка за период (средняя точка).
Доходное значениеtalib.MIDPOINT()
функция - это одномерный массив.
массив
Талиб.МИДПОИНТ ((inReal) Talib.MIDPOINT ((inReal, optInTimePeriod) (в реальном времени, в промежутке времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MIDPOINT(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MIDPOINT(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MIDPOINT(records);
Log(ret);
}
ВMIDPOINT()
Функция описана в документации библиотеки талиб как:MIDPOINT(Records[Close],Time Period = 14) = Array(outReal)
Вtalib.MIDPRICE()
Функция используется для расчетаЦены средней точки за период (цены средней точки).
Доходное значениеtalib.MIDPRICE()
функция - это одномерный массив.
массив
talib.MIDPRICE ((inPriceHL)) talib.MIDPRICE ((inPriceHL, optInTimePeriod) - средняя цена (в цене)
ВinPriceHL
параметр используется для указания данных K-линии.
inPriceHL
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MIDPRICE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MIDPRICE(records.High, records.Low)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MIDPRICE(records);
Log(ret);
}
ВMIDPRICE()
Функция описана в документации библиотеки талиб как:MIDPRICE(Records[High,Low],Time Period = 14) = Array(outReal)
Вtalib.SAR()
Функция используется для расчетаПараболический SAR.
Доходное значениеtalib.SAR()
функция: одномерный массив.
массив
talib.SAR ((inPriceHL)) Talib.SAR ((inPriceHL, optInAcceleration) - это не так. Talib.SAR ((inPriceHL, optInAcceleration, optInMaximum) (включает в себя:
ВinPriceHL
параметр используется для указания данных K-линии.
inPriceHL
неправда
{@struct/Record Record} массив структуры
ВoptInAcceleration
параметр используется для установки фактора ускорения, значение по умолчанию 0,02.
Оптимизировать ускорение
ложное
Номер
ВoptInMaximum
параметр используется для настройки максимального AF, значение по умолчанию равняется 0,2.
optInMaximum
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.SAR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.SAR(records.High, records.Low)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.SAR(records);
Log(ret);
}
ВSAR()
Функция описана в документации библиотеки талиб как:SAR(Records[High,Low],Acceleration Factor = 0.02,AF Maximum = 0.2) = Array(outReal)
Вtalib.SAREXT()
Функция используется для расчетаПараболический SAR - расширенный (улучшенное параболическое рулевое управление).
Доходное значениеtalib.SAREXT()
функция - это одномерный массив.
массив
talib.SAREXT ((inPriceHL)) talib.SAREXT ((inPriceHL, optInStartValue) (включите значение) talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse) (включает в себя: talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong) (включает в себя: talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong) talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong, optInAccelerationMaxLong) (включает в себя: talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong, optInAccelerationMaxLong, optInAccelerationInitShort) (включает в себя: talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong, optInAccelerationMaxLong, optInAccelerationInitShort, optInAccelerationShort) (включает в себя: talib.SAREXT ((inPriceHL, optInStartValue, optInOffsetOnReverse, optInAccelerationInitLong, optInAccelerationLong, optInAccelerationMaxLong, optInAccelerationInitShort, optInAccelerationShort, optInAccelerationMaxShort)
ВinPriceHL
параметр используется для указания данных K-линии.
inPriceHL
неправда
{@struct/Record Record} массив структуры
ВoptInStartValue
параметр используется для установки Start Value, значение по умолчанию 0.
optInStartValue
ложное
Номер
ВoptInOffsetOnReverse
параметр используется для установки Оффсета на обратном направлении, значение по умолчанию равняется 0.
ОптимизироватьInOffsetOnReverse
ложное
Номер
ВoptInAccelerationInitLong
параметр используется для настройки AF Init Long, значение по умолчанию 0,02.
Оптимизировать ускорение
ложное
Номер
ВoptInAccelerationLong
параметр используется для настройки AF Long, значение по умолчанию 0,02.
Оптимизировать ускорение
ложное
Номер
ВoptInAccelerationMaxLong
параметр используется для настройки AF Max Long, значение по умолчанию 0,2.
Оптимизировать ускорение MaxLong
ложное
Номер
ВoptInAccelerationInitShort
параметр используется для настройки AF Init Short, значение по умолчанию 0,02.
Оптимизируйте ускорение.
ложное
Номер
ВoptInAccelerationShort
параметр используется для настройки AF Short, значение по умолчанию 0.02.
Оптимизировать ускорение
ложное
Номер
ВoptInAccelerationMaxShort
параметр используется для настройки AF Max Short, значение по умолчанию 0.2.
Оптимизировать ускорение MaxShort
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.SAREXT(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.SAREXT(records.High, records.Low)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.SAREXT(records);
Log(ret);
}
ВSAREXT()
Функция описана в документации библиотеки талиб как:SAREXT(Records[High,Low],Start Value = 0,Offset on Reverse = 0,AF Init Long = 0.02,AF Long = 0.02,AF Max Long = 0.2,AF Init Short = 0.02,AF Short = 0.02,AF Max Short = 0.2) = Array(outReal)
Вtalib.SMA()
Функция используется для расчетаПростая скользящая средняя.
Доходное значениеtalib.SMA()
функция: одномерный массив.
массив
Талиб.СМА ((inReal) Талиб.СМА ((inReal, optInTimePeriod)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.SMA(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.SMA(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.SMA(records);
Log(ret);
}
ВSMA()
Функция описана в документации библиотеки талиб как:SMA(Records[Close],Time Period = 30) = Array(outReal)
Вtalib.T3()
Функция используется для расчетаТрехэкспоненциальная скользящая средняя (T3) (трехэкспоненциальная скользящая средняя).
Доходное значениеtalib.T3()
функция - это одномерный массив.
массив
Талиб.Т3 ((inReal) talib.T3 ((inReal, optInTimePeriod) (в реальном времени, выбор в периоде времени) talib.T3 ((inReal, optInTimePeriod, optInVFactor) (в режиме реального времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 5.
optInTimeПериод
ложное
Номер
ВoptInVFactor
параметр используется для установки фактора объема, значение по умолчанию 0,7.
optInVFactor
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.T3(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.T3(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.T3(records);
Log(ret);
}
ВT3()
Функция описана в документации библиотеки талиб как:T3(Records[Close],Time Period = 5,Volume Factor = 0.7) = Array(outReal)
Вtalib.TEMA()
Функция используется для расчетаТройная экспоненциальная скользящая средняя.
Доходное значениеtalib.TEMA()
функция - это одномерный массив.
массив
Талиб.ТЕМА ((inReal) Talib.TEMA ((inReal, optInTimePeriod) (в реальном времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.TEMA(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.TEMA(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.TEMA(records);
Log(ret);
}
ВTEMA()
Функция описана в документации библиотеки талиб как:TEMA(Records[Close],Time Period = 30) = Array(outReal)
Вtalib.TRIMA()
Функция используется для расчетаТреугольная скользящая средняя (триэкспоненциальная скользящая средняя).
Доходное значениеtalib.TRIMA()
функция - это одномерный массив.
массив
Талиб.ТРИМА ((inReal) Талиб.ТРИМА ((inReal, optInTimePeriod)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.TRIMA(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.TRIMA(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.TRIMA(records);
Log(ret);
}
ВTRIMA()
Функция описана в документации библиотеки талиб как:TRIMA(Records[Close],Time Period = 30) = Array(outReal)
Вtalib.WMA()
Функция используется для расчетаВзвешенная скользящая средняя (WMA).
Доходное значениеtalib.WMA()
функция - это одномерный массив.
массив
Talib.WMA ((inReal) Talib.WMA ((inReal, optInTimePeriod) (в реальном времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.WMA(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.WMA(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.WMA(records);
Log(ret);
}
ВWMA()
Функция описана в документации библиотеки талиб как:WMA(Records[Close],Time Period = 30) = Array(outReal)
Вtalib.LINEARREG()
Функция используется для расчетаЛинейная регрессия.
Доходное значениеtalib.LINEARREG()
функция - это одномерный массив.
массив
Talib.LINEARREG ((inReal)) talib.LINEARREG ((inReal, optInTimePeriod) - в реальном времени, в промежутке времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.LINEARREG(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.LINEARREG(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.LINEARREG(records);
Log(ret);
}
ВLINEARREG()
Функция описана в документации библиотеки талиб как:LINEARREG(Records[Close],Time Period = 14) = Array(outReal)
Вtalib.LINEARREG_ANGLE()
Функция используется для расчетаУгол линейной регрессии.
Доходное значениеtalib.LINEARREG_ANGLE()
функция: одномерный массив.
массив
Talib.LINEARREG_ANGLE ((inReal)) talib.LINEARREG_ANGLE ((inReal, optInTimePeriod) - в реальном времени, в промежутке времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.LINEARREG_ANGLE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.LINEARREG_ANGLE(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.LINEARREG_ANGLE(records);
Log(ret);
}
ВLINEARREG_ANGLE()
Функция описана в документации библиотеки талиб как:LINEARREG_ANGLE(Records[Close],Time Period = 14) = Array(outReal)
Вtalib.LINEARREG_INTERCEPT()
Функция используется для расчетаПерехват линейной регрессии.
Доходное значениеtalib.LINEARREG_INTERCEPT()
функция: одномерный массив.
массив
Talib.LINEARREG_INTERCEPT ((inReal) - это действительно так. talib.LINEARREG_INTERCEPT ((inReal, optInTimePeriod) (в реальном времени, выбираем в промежутке времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.LINEARREG_INTERCEPT(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.LINEARREG_INTERCEPT(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.LINEARREG_INTERCEPT(records);
Log(ret);
}
ВLINEARREG_INTERCEPT()
Функция описана в документации библиотеки талиб как:LINEARREG_INTERCEPT(Records[Close],Time Period = 14) = Array(outReal)
Вtalib.LINEARREG_SLOPE()
Функция используется для расчетаСклон линейной регрессии.
Доходное значениеtalib.LINEARREG_SLOPE()
функция: одномерный массив.
массив
Talib.LINEARREG_SLOPE ((inReal) - в реальности) talib.LINEARREG_SLOPE ((inReal, optInTimePeriod) (в реальном времени, выберите в периоде времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.LINEARREG_SLOPE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.LINEARREG_SLOPE(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.LINEARREG_SLOPE(records);
Log(ret);
}
ВLINEARREG_SLOPE()
Функция описана в документации библиотеки талиб как:LINEARREG_SLOPE(Records[Close],Time Period = 14) = Array(outReal)
Вtalib.STDDEV()
Функция используется для расчетаСтандартное отклонение.
Доходное значениеtalib.STDDEV()
функция: одномерный массив.
массив
Талиб.СТДДЕВ ((inReal) Talib.STDDEV ((inReal, optInTimePeriod) (в реальном времени) Talib.STDDEV ((inReal, optInTimePeriod, optInNbDev) (в режиме реального времени, в режиме реального времени, в режиме реального времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 5.
optInTimeПериод
ложное
Номер
ВoptInNbDev
параметр используется для установки отклонений, значение по умолчанию составляет 1.
Оптимизировать
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.STDDEV(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.STDDEV(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.STDDEV(records);
Log(ret);
}
ВSTDDEV()
Функция описана в документации библиотеки талиб как:STDDEV(Records[Close],Time Period = 5,Deviations = 1) = Array(outReal)
Вtalib.TSF()
Функция используется для расчетаПрогноз по временным сериям.
Доходное значениеtalib.TSF()
функция - это одномерный массив.
массив
Talib.TSF ((inReal)) Talib.TSF ((inReal, optInTimePeriod) (в реальном времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.TSF(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.TSF(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.TSF(records);
Log(ret);
}
ВTSF()
Функция описана в документации библиотеки талиб как:TSF(Records[Close],Time Period = 14) = Array(outReal)
Вtalib.VAR()
Функция используется для расчетаРазница.
Доходное значениеtalib.VAR()
функция: одномерный массив.
массив
Талиб.ВАР ((inReal) talib.VAR ((inReal, optInTimePeriod) (в реальном времени, выбираем в промежутке времени) talib.VAR ((inReal, optInTimePeriod, optInNbDev) (в режиме реального времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 5.
optInTimeПериод
ложное
Номер
ВoptInNbDev
параметр используется для установки отклонений, значение по умолчанию составляет 1.
Оптимизировать
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.VAR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.VAR(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.VAR(records);
Log(ret);
}
ВVAR()
Функция описана в документации библиотеки талиб как:VAR(Records[Close],Time Period = 5,Deviations = 1) = Array(outReal)
Вtalib.ADX()
Функция используется для расчетаСредний индекс направленного движения.
Доходное значениеtalib.ADX()
функция - это одномерный массив.
массив
Talib.ADX ((inPriceHLC) talib.ADX ((inPriceHLC, optInTimePeriod) (в цену, в время)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.ADX(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.ADX(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.ADX(records);
Log(ret);
}
ВADX()
Функция описана в документации библиотеки талиб как:ADX(Records[High,Low,Close],Time Period = 14) = Array(outReal)
Вtalib.ADXR()
Функция используется для расчетаСредний индекс направленного движения (индекс оценки).
Доходное значениеtalib.ADXR()
функция - это одномерный массив.
массив
Talib.ADXR ((inPriceHLC) talib.ADXR ((inPriceHLC, optInTimePeriod) (в цену, в время)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.ADXR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.ADXR(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.ADXR(records);
Log(ret);
}
ВADXR()
Функция описана в документации библиотеки талиб как:ADXR(Records[High,Low,Close],Time Period = 14) = Array(outReal)
Вtalib.APO()
Функция используется для расчетаАбсолютный ценовой осциллятор.
Доходное значениеtalib.APO()
функция: одномерный массив.
массив
Талиб.APO ((inReal) Talib.APO ((inReal, optInFastPeriod) (в реальном времени, в быстром времени) talib.APO ((inReal, optInFastPeriod, optInSlowPeriod) (в реальном времени, в быстром периоде, в медленном периоде) talib.APO ((inReal, optInFastPeriod, optInSlowPeriod, optInMAType)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInFastPeriod
параметр используется для установки быстрого периода, значение по умолчанию составляет 12.
optInFastPeriod
ложное
Номер
ВoptInSlowPeriod
параметр используется для установки медленного периода, значение по умолчанию составляет 26.
optInSlowPeriod
ложное
Номер
ВoptInMAType
параметр используется для установки среднего типа, значение по умолчанию 0.
Оптимизация
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.APO(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.APO(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.APO(records);
Log(ret);
}
ВAPO()
Функция описана в документации библиотеки талиб как:APO(Records[Close],Fast Period = 12,Slow Period = 26,MA Type = 0) = Array(outReal)
Вtalib.AROON()
Функция используется для расчетаAroon (показатель Aroon).
Доходное значениеtalib.AROON()
Функция представляет собой двумерный массив.
массив
Талиб.АРУОН ((inPriceHL)) Талиб.Арон ((в цене, optInTimePeriod)
ВinPriceHL
параметр используется для указания данных K-линии.
inPriceHL
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.AROON(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.AROON(records.High, records.Low)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.AROON(records);
Log(ret);
}
ВAROON()
Функция описана в документации библиотеки талиб как:AROON(Records[High,Low],Time Period = 14) = [Array(outAroonDown),Array(outAroonUp)]
Вtalib.AROONOSC()
Функция используется для расчетаОсиллятор Аруна.
Доходное значениеtalib.AROONOSC()
функция: одномерный массив.
массив
Talib.AROONOSC ((inPriceHL)) Talib.AROONOSC ((inPriceHL, optInTimePeriod) - в цене, в времени, в периоде)
ВinPriceHL
параметр используется для указания данных K-линии.
inPriceHL
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.AROONOSC(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.AROONOSC(records.High, records.Low)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.AROONOSC(records);
Log(ret);
}
ВAROONOSC()
Функция описана в документации библиотеки талиб как:AROONOSC(Records[High,Low],Time Period = 14) = Array(outReal)
Вtalib.BOP()
Функция используется для расчетаРавновесие сил.
Доходное значениеtalib.BOP()
функция - это одномерный массив.
массив
Talib.BOP ((inPriceOHLC))
ВinPriceOHLC
параметр используется для указания данных K-линии.
inPriceOHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.BOP(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.BOP(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.BOP(records);
Log(ret);
}
ВBOP()
Функция описана в документации библиотеки талиб как:BOP(Records[Open,High,Low,Close]) = Array(outReal)
Вtalib.CCI()
Функция используется для расчетаИндекс товарных каналов (гомеопатический показатель).
Доходное значениеtalib.CCI()
функция - это одномерный массив.
массив
Талиб.CCI ((inPriceHLC) talib.CCI ((inPriceHLC, optInTimePeriod) (в цену, в срок)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.CCI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CCI(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CCI(records);
Log(ret);
}
ВCCI()
Функция описана в документации библиотеки талиб как:CCI(Records[High,Low,Close],Time Period = 14) = Array(outReal)
Вtalib.CMO()
Функция используется для расчетаОсиллятор импульса Chande (CMO).
Доходное значениеtalib.CMO()
функция: одномерный массив.
массив
Талиб. Главный операционный директор (inReal) Talib.CMO ((inReal, optInTimePeriod) (в реальном времени, в промежутке времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.CMO(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.CMO(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.CMO(records);
Log(ret);
}
ВCMO()
Функция описана в документации библиотеки талиб как:CMO(Records[Close],Time Period = 14) = Array(outReal)
Вtalib.DX()
Функция используется для расчетаИндекс направленного движения.
Доходное значениеtalib.DX()
функция: одномерный массив.
массив
Talib.DX ((inPriceHLC) talib.DX ((inPriceHLC, optInTimePeriod) (включительно для пользователей)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.DX(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.DX(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.DX(records);
Log(ret);
}
ВDX()
Функция описана в документации библиотеки талиб как:DX(Records[High,Low,Close],Time Period = 14) = Array(outReal)
Вtalib.MACD()
Функция используется для расчетаКрутящаяся средняя конвергенция/дивергенция (экспоненциально сглаженная скользящая средняя).
Доходное значениеtalib.MACD()
функция: двумерный массив.
массив
Талиб.МАКД ((inReal) Talib.MACD ((inReal, optInFastPeriod) (в реальном времени) talib.MACD ((inReal, optInFastPeriod, optInSlowPeriod) (в реальном времени, в быстром периоде, в медленном периоде) talib.MACD ((inReal, optInFastPeriod, optInSlowPeriod, optInSignalPeriod) - в реальном времени, в быстром периоде, в медленном периоде, в сигнальном периоде
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInFastPeriod
параметр используется для установки быстрого периода, значение по умолчанию составляет 12.
optInFastPeriod
ложное
Номер
ВoptInSlowPeriod
параметр используется для установки медленного периода, значение по умолчанию составляет 26.
optInSlowPeriod
ложное
Номер
ВoptInSignalPeriod
параметр используется для установки периода сигнала, значение по умолчанию 9.
optВ период сигнализации
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MACD(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MACD(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MACD(records);
Log(ret);
}
ВMACD()
Функция описана в документации библиотеки талиб как:MACD(Records[Close],Fast Period = 12,Slow Period = 26,Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]
Вtalib.MACDEXT()
Функция используется для расчетаMACD с управляемым типом MA.
Доходное значениеtalib.MACDEXT()
Функция представляет собой двумерный массив.
массив
Талиб.Макдекс. Talib.MACDEXT ((inReal, optInFastPeriod) (в режиме реального времени) talib.MACDEXT ((inReal, optInFastPeriod, optInFastMAType) talib.MACDEXT ((inReal, optInFastPeriod, optInFastMAType, optInSlowPeriod) (включает в себя: talib.MACDEXT ((inReal, optInFastPeriod, optInFastMAType, optInSlowPeriod, optInSlowMAType) talib.MACDEXT ((inReal, optInFastPeriod, optInFastMAType, optInSlowPeriod, optInSlowMAType, optInSignalPeriod) (недоступная ссылка) talib.MACDEXT ((inReal, optInFastPeriod, optInFastMAType, optInSlowPeriod, optInSlowMAType, optInSignalPeriod, optInSignalMAType)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInFastPeriod
параметр используется для установки быстрого периода, значение по умолчанию составляет 12.
optInFastPeriod
ложное
Номер
ВoptInFastMAType
параметр используется для установки типа быстрого среднего, значение по умолчанию равняется 0.
Оптимизация
ложное
Номер
ВoptInSlowPeriod
параметр используется для установки медленного периода, значение по умолчанию составляет 26.
optInSlowPeriod
ложное
Номер
ВoptInSlowMAType
параметр используется для установки типа медленного среднего значения, значение по умолчанию равняется 0.
optInSlowMAType
ложное
Номер
ВoptInSignalPeriod
параметр используется для установки периода сигнала, значение по умолчанию 9.
optВ период сигнализации
ложное
Номер
ВoptInSignalMAType
параметр используется для настройки типа среднего значения сигнала, значение по умолчанию равняется 0.
Оптимизация
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MACDEXT(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MACDEXT(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MACDEXT(records);
Log(ret);
}
ВMACDEXT()
Функция описана в документации библиотеки талиб как:MACDEXT(Records[Close],Fast Period = 12,Fast MA = 0,Slow Period = 26,Slow MA = 0,Signal Period = 9,Signal MA = 0) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]
Вtalib.MACDFIX()
Функция используется для расчетаУстановка скользящей средней конвергенции/дивергенции 12/26.
Доходное значениеtalib.MACDFIX()
Функция представляет собой двумерный массив.
массив
Talib.MACDFIX ((inReal) talib.MACDFIX ((inReal, optInSignalPeriod) - в реальном времени
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInSignalPeriod
параметр используется для установки периода сигнала, значение по умолчанию 9.
optВ период сигнализации
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MACDFIX(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MACDFIX(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MACDFIX(records);
Log(ret);
}
ВMACDFIX()
Функция описана в документации библиотеки талиб как:MACDFIX(Records[Close],Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]
Вtalib.MFI()
Функция используется для расчетаИндекс денежных потоков.
Доходное значениеtalib.MFI()
функция - это одномерный массив.
массив
talib.MFI ((inPriceHLCV) talib.MFI ((inPriceHLCV, optInTimePeriod) - в цене, в течение периода времени)
ВinPriceHLCV
параметр используется для указания данных K-линии.
inPriceHLCV
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MFI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MFI(records.High, records.Low, records.Close, records.Volume)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MFI(records);
Log(ret);
}
ВMFI()
Функция описана в документации библиотеки талиб как:MFI(Records[High,Low,Close,Volume],Time Period = 14) = Array(outReal)
Вtalib.MINUS_DI()
Функция используется для расчетаМинус направленный показатель (отрицательный показатель).
Доходное значениеtalib.MINUS_DI()
функция - это одномерный массив.
массив
talib.MINUS_DI ((inPriceHLC) talib.MINUS_DI ((inPriceHLC, optInTimePeriod) - в расчете на время)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MINUS_DI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MINUS_DI(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MINUS_DI(records);
Log(ret);
}
ВMINUS_DI()
Функция описана в документации библиотеки талиб как:MINUS_DI(Records[High,Low,Close],Time Period = 14) = Array(outReal)
Вtalib.MINUS_DM()
Функция используется для расчетаМинус направленное движение (отрицательное движение).
Доходное значениеtalib.MINUS_DM()
функция - это одномерный массив.
массив
talib.MINUS_DM ((inPriceHL)) talib.MINUS_DM ((inPriceHL, optInTimePeriod) - в расчете на время)
ВinPriceHL
параметр используется для указания данных K-линии.
inPriceHL
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MINUS_DM(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MINUS_DM(records.High, records.Low)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MINUS_DM(records);
Log(ret);
}
ВMINUS_DM()
Функция описана в документации библиотеки талиб как:MINUS_DM(Records[High,Low],Time Period = 14) = Array(outReal)
Вtalib.MOM()
Функция используется для расчетаИмпульс.
Доходное значениеtalib.MOM()
функция - это одномерный массив.
массив
Талиб.Мама ((inReal) Талиб.Мама ((inReal, optInTimePeriod)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 10.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.MOM(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MOM(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MOM(records);
Log(ret);
}
ВMOM()
Функция описана в документации библиотеки талиб как:MOM(Records[Close],Time Period = 10) = Array(outReal)
Вtalib.PLUS_DI()
Функция используется для расчетаПлюс указатель направления.
Доходное значениеtalib.PLUS_DI()
функция: одномерный массив.
массив
talib.PLUS_DI ((inPriceHLC) talib.PLUS_DI ((inPriceHLC, optInTimePeriod) - в расчете на время)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.PLUS_DI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.PLUS_DI(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.PLUS_DI(records);
Log(ret);
}
ВPLUS_DI()
Функция описана в документации библиотеки талиб как:PLUS_DI(Records[High,Low,Close],Time Period = 14) = Array(outReal)
Вtalib.PLUS_DM()
Функция используется для расчетаПлюс направленное движение.
Доходное значениеtalib.PLUS_DM()
функция - это одномерный массив.
массив
talib.PLUS_DM ((inPriceHL) talib.PLUS_DM ((inPriceHL, optInTimePeriod) - в цене, в периоде времени)
ВinPriceHL
параметр используется для указания данных K-линии.
inPriceHL
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.PLUS_DM(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.PLUS_DM(records.High, records.Low)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.PLUS_DM(records);
Log(ret);
}
ВPLUS_DM()
Функция описана в документации библиотеки талиб как:PLUS_DM(Records[High,Low],Time Period = 14) = Array(outReal)
Вtalib.PPO()
Функция используется для расчетаПроцентный осциллятор цен.
Доходное значениеtalib.PPO()
функция - это одномерный массив.
массив
Талиб.PPO ((inReal) Talib.PPO ((inReal, optInFastPeriod) (в реальном времени, в быстром времени) talib.PPO ((inReal, optInFastPeriod, optInSlowPeriod) (в реальном времени, в быстром периоде, в медленном периоде) talib.PPO ((inReal, optInFastPeriod, optInSlowPeriod, optInMAType)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInFastPeriod
параметр используется для установки быстрого периода, значение по умолчанию составляет 12.
optInFastPeriod
ложное
Номер
ВoptInSlowPeriod
параметр используется для установки медленного периода, значение по умолчанию составляет 26.
optInSlowPeriod
ложное
Номер
ВoptInMAType
параметр используется для установки среднего типа, значение по умолчанию 0.
Оптимизация
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.PPO(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.PPO(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.PPO(records);
Log(ret);
}
ВPPO()
Функция описана в документации библиотеки талиб как:PPO(Records[Close],Fast Period = 12,Slow Period = 26,MA Type = 0) = Array(outReal)
Вtalib.ROC()
Функция используется для расчетаКоэффициент изменения: ((цена/предыдущаяЦена) -1) *100 (показатель коэффициента изменения).
Доходное значениеtalib.ROC()
функция - это одномерный массив.
массив
Talib.ROC ((inReal)) talib.ROC ((inReal, optInTimePeriod) (в реальном времени, выбор в периоде времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 10.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.ROC(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.ROC(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.ROC(records);
Log(ret);
}
ВROC()
Функция описана в документации библиотеки талиб как:ROC(Records[Close],Time Period = 10) = Array(outReal)
Вtalib.ROCP()
Функция используется для расчетаКоэффициент изменения Процент: (цена-предупреждение) /предупреждение (коэффициент изменения цен).
Доходное значениеtalib.ROCP()
функция: одномерный массив.
массив
Talib.ROCP ((inReal)) talib.ROCP ((inReal, optInTimePeriod) (в реальном времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 10.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.ROCP(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.ROCP(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.ROCP(records);
Log(ret);
}
ВROCP()
Функция описана в документации библиотеки талиб как:ROCP(Records[Close],Time Period = 10) = Array(outReal)
Вtalib.ROCR()
Функция используется для расчетаКоэффициент изменения цены: (цена/предыдущая цена) (коэффициент изменения цен).
Доходное значениеtalib.ROCR()
функция - это одномерный массив.
массив
Талиб.ROCR ((inReal) Talib.ROCR ((inReal, optInTimePeriod) (в реальном времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 10.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.ROCR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.ROCR(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.ROCR(records);
Log(ret);
}
ВROCR()
Функция описана в документации библиотеки талиб как:ROCR(Records[Close],Time Period = 10) = Array(outReal)
Вtalib.ROCR100()
Функция используется для расчетаКоэффициент изменения 100 шкала: (цена/предыдущая цена) *100 (коэффициент изменения цен).
Доходное значениеtalib.ROCR100()
функция: одномерный массив.
массив
Talib.ROCR100 ((inReal) Talib.ROCR100 ((inReal, optInTimePeriod) (в реальном времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 10.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.ROCR100(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.ROCR100(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.ROCR100(records);
Log(ret);
}
ВROCR100()
Функция описана в документации библиотеки талиб как:ROCR100(Records[Close],Time Period = 10) = Array(outReal)
Вtalib.RSI()
Функция используется для расчетаИндекс относительной силы.
Доходное значениеtalib.RSI()
функция - это одномерный массив.
массив
Talib.RSI ((inReal) talib.RSI ((inReal, optInTimePeriod) (в реальном времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.RSI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.RSI(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.RSI(records);
Log(ret);
}
ВRSI()
Функция описана в документации библиотеки талиб как:RSI(Records[Close],Time Period = 14) = Array(outReal)
Вtalib.STOCH()
Функция используется для расчетаСтохастический показатель (индикатор STOCH).
Доходное значениеtalib.STOCH()
Функция представляет собой двумерный массив.
массив
Talib.STOCH ((inPriceHLC)) talib.STOCH ((inPriceHLC, optInFastK_Period) (встроенная цена) talib.STOCH ((inPriceHLC, optInFastK_Period, optInSlowK_Period) talib.STOCH ((inPriceHLC, optInFastK_Period, optInSlowK_Period, optInSlowK_MAType) talib.STOCH ((inPriceHLC, optInFastK_Period, optInSlowK_Period, optInSlowK_MAType, optInSlowD_Period) talib.STOCH ((inPriceHLC, optInFastK_Period, optInSlowK_Period, optInSlowK_MAType, optInSlowD_Period, optInSlowD_MAType)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInFastK_Period
параметр используется для установки периода Fast-K, значение по умолчанию 5.
optInFastK_Period
ложное
Номер
ВoptInSlowK_Period
параметр используется для установки периода Slow-K, значение по умолчанию - 3.
optInSlowK_Period
ложное
Номер
ВoptInSlowK_MAType
параметр используется для установки среднего типа Slow-K, значение по умолчанию 0.
Оптимизация
ложное
Номер
ВoptInSlowD_Period
параметр используется для установки периода Slow-D, значение по умолчанию - 3.
optInSlowD_Period
ложное
Номер
ВoptInSlowD_MAType
параметр используется для установки среднего типа Slow-D, значение по умолчанию равняется 0.
Оптимизация
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.STOCH(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.STOCH(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.STOCH(records);
Log(ret);
}
ВSTOCH()
Функция описана в документации библиотеки талиб как:STOCH(Records[High,Low,Close],Fast-K Period = 5,Slow-K Period = 3,Slow-K MA = 0,Slow-D Period = 3,Slow-D MA = 0) = [Array(outSlowK),Array(outSlowD)]
Вtalib.STOCHF()
Функция используется для расчетаСтохастический быстрый (быстрый индикатор STOCH).
Доходное значениеtalib.STOCHF()
Функция представляет собой двумерный массив.
массив
Talib.STOCHF ((inPriceHLC)) talib.STOCHF ((inPriceHLC, optInFastK_Period) - в течение всего периода) talib.STOCHF ((inPriceHLC, optInFastK_Period, optInFastD_Period) talib.STOCHF ((inPriceHLC, optInFastK_Period, optInFastD_Period, optInFastD_MAType)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInFastK_Period
параметр используется для установки периода Fast-K, значение по умолчанию 5.
optInFastK_Period
ложное
Номер
ВoptInFastD_Period
параметр используется для установки периода Fast-D, значение по умолчанию - 3.
optInFastD_Period
ложное
Номер
ВoptInFastD_MAType
параметр используется для установки среднего типа Fast-D, значение по умолчанию равняется 0.
optInFastD_MAType
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.STOCHF(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.STOCHF(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.STOCHF(records);
Log(ret);
}
ВSTOCHF()
Функция описана в документации библиотеки талиб как:STOCHF(Records[High,Low,Close],Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]
Вtalib.STOCHRSI()
Функция используется для расчетаИндекс относительной силы.
Доходное значениеtalib.STOCHRSI()
функция: двумерный массив.
массив
Талиб.СТОЧРСИ ((inReal) Talib.STOCHRSI ((inReal, optInTimePeriod) (в реальном времени, выбор в периоде времени) talib.STOCHRSI ((inReal, optInTimePeriod, optInFastK_Period) (в режиме реального времени, в режиме быстрого времени, в режиме быстрого времени) talib.STOCHRSI ((inReal, optInTimePeriod, optInFastK_Period, optInFastD_Period) talib.STOCHRSI ((inReal, optInTimePeriod, optInFastK_Period, optInFastD_Period, optInFastD_MAType)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
ВoptInFastK_Period
параметр используется для установки периода Fast-K, значение по умолчанию 5.
optInFastK_Period
ложное
Номер
ВoptInFastD_Period
параметр используется для установки периода Fast-D, значение по умолчанию - 3.
optInFastD_Period
ложное
Номер
ВoptInFastD_MAType
параметр используется для установки среднего типа Fast-D, значение по умолчанию равняется 0.
optInFastD_MAType
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.STOCHRSI(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.STOCHRSI(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.STOCHRSI(records);
Log(ret);
}
ВSTOCHRSI()
Функция описана в документации библиотеки талиб как:STOCHRSI(Records[Close],Time Period = 14,Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]
Вtalib.TRIX()
Функция используется для расчета1-дневный коэффициент изменения (ROC) тройной плавной EMA.
Доходное значениеtalib.TRIX()
функция: одномерный массив.
массив
Талиб.ТРИКС ((inReal) Talib.TRIX ((inReal, optInTimePeriod) (в реальном времени)
ВinReal
параметр используется для указания данных K-линии.
вРеальном
Истинно
{@struct/Record Record} структурные массивы, числовые массивы
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 30.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.TRIX(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.TRIX(records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.TRIX(records);
Log(ret);
}
ВTRIX()
Функция описана в документации библиотеки талиб как:TRIX(Records[Close],Time Period = 30) = Array(outReal)
Вtalib.ULTOSC()
Функция используется для расчетаОкончательный осциллятор.
Доходное значениеtalib.ULTOSC()
функция - это одномерный массив.
массив
Talib.ULTOSC ((inPriceHLC)) talib.ULTOSC ((inPriceHLC, optInTimePeriod1)) talib.ULTOSC ((inPriceHLC, optInTimePeriod1, optInTimePeriod2)) (обязательно, но не обязательно) talib.ULTOSC ((inPriceHLC, optInTimePeriod1, optInTimePeriod2, optInTimePeriod3)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod1
параметр используется для установки первого периода, значение по умолчанию 7.
optInTimePeriod1
ложное
Номер
ВoptInTimePeriod2
параметр используется для установки второго периода, значение по умолчанию 14.
optInTimePeriod2
ложное
Номер
ВoptInTimePeriod3
параметр используется для установки третьего периода, значение по умолчанию составляет 28.
optInTimePeriod3
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.ULTOSC(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.ULTOSC(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.ULTOSC(records);
Log(ret);
}
ВULTOSC()
Функция описана в документации библиотеки талиб как:ULTOSC(Records[High,Low,Close],First Period = 7,Second Period = 14,Third Period = 28) = Array(outReal)
Вtalib.WILLR()
Функция используется для расчетаУильямс
Доходное значениеtalib.WILLR()
функция: одномерный массив.
массив
Talib.WILLR ((inPriceHLC)) Talib.WILLR ((inPriceHLC, optInTimePeriod) (в цены, в сроке)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
ВoptInTimePeriod
параметр используется для установки периода, значение по умолчанию 14.
optInTimeПериод
ложное
Номер
function main() {
var records = exchange.GetRecords()
var ret = talib.WILLR(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.WILLR(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.WILLR(records);
Log(ret);
}```
The ```WILLR()``` function is described in the talib library documentation as: ```WILLR(Records[High,Low,Close],Time Period = 14) = Array(outReal)```
### talib.AVGPRICE
The ```talib.AVGPRICE()``` function is used to calculate **Average Price**.
The return value of the ```talib.AVGPRICE()``` function is a one-dimensional array.
array
talib.AVGPRICE(inPriceOHLC)
The ```inPriceOHLC``` parameter is used to specify the K-line data.
inPriceOHLC
true
{@struct/Record Record} structure array
```javascript
function main() {
var records = exchange.GetRecords()
var ret = talib.AVGPRICE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.AVGPRICE(records.Open, records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.AVGPRICE(records);
Log(ret);
}
ВAVGPRICE()
Функция описана в документации библиотеки талиб как:AVGPRICE(Records[Open,High,Low,Close]) = Array(outReal)
Вtalib.MEDPRICE()
Функция используется для расчетаСредняя цена.
Доходное значениеtalib.MEDPRICE()
функция - это одномерный массив.
массив
talib.MEDPRICE ((inPriceHL))
ВinPriceHL
параметр используется для указания данных K-линии.
inPriceHL
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.MEDPRICE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.MEDPRICE(records.High, records.Low)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.MEDPRICE(records);
Log(ret);
}
ВMEDPRICE()
Функция описана в документации библиотеки талиб как:MEDPRICE(Records[High,Low]) = Array(outReal)
Вtalib.TYPPRICE()
Функция используется для расчетаТипичная цена.
Доходное значениеtalib.TYPPRICE()
функция - это одномерный массив.
массив
Talib.TYPPRICE ((inPriceHLC) - в цене в цене в цене в цене в цене)
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.TYPPRICE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.TYPPRICE(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.TYPPRICE(records);
Log(ret);
}
ВTYPPRICE()
Функция описана в документации библиотеки талиб как:TYPPRICE(Records[High,Low,Close]) = Array(outReal)
Вtalib.WCLPRICE()
Функция используется для расчетаВзвешенная цена закрытия.
Доходное значениеtalib.WCLPRICE()
функция - это одномерный массив.
массив
Talib.WCLPRICE ((inPriceHLC))
ВinPriceHLC
параметр используется для указания данных K-линии.
inPriceHLC
неправда
{@struct/Record Record} массив структуры
function main() {
var records = exchange.GetRecords()
var ret = talib.WCLPRICE(records)
Log(ret)
}
import talib
def main():
records = exchange.GetRecords()
ret = talib.WCLPRICE(records.High, records.Low, records.Close)
Log(ret)
void main() {
auto records = exchange.GetRecords();
auto ret = talib.WCLPRICE(records);
Log(ret);
}
ВWCLPRICE()
Функция описана в документации библиотеки талиб как:WCLPRICE(Records[High,Low,Close]) = Array(outReal)