Наконец-то мы пришли ко второй главе, и, пройдя экскурсию по предыдущей, мы должны получить некоторое представление о функциях квантования изобретателей.
Предположим, что через первую главу мы уже добавили хранителей, биржи, и, конечно же, мы можем использовать инвентарь для тестирования кода.
Сначала мы создаем стратегию, которую мы называем тест 1.
Интерфейс редактирования стратегии
Код выглядит так:
function main() {
Log(exchange.GetAccount()); // 看过API 文档后知道, exchange就是交易所对象,实际上策略有个全局变量
// exchanges 数组,这个数组存放的就是你创建机器人或者回测时添加的交易所(可以是多个)
// 添加1个交易所 exchanges 数组就只包含1个交易所对象,即添加的交易所对象。
// 那么 exchange 和 exchanges 是什么关系呢? 其实 exchange 就是 exchanges[0] ,
// exchange 就是 exchanges 数组的第一个元素(这里这个元素是交易所对象)。
// Log()函数应该也不陌生吧,这个API 就是输出一条日志,日志内容就是Log括号里面的参数。
}
Создание робота, также называемого Test1 - это стратегия, известная под названием Test1 - это комбинация методов, которые используются для количественного тестирования с помощью изобретателя.
Политика выполняется мгновенно и показывает информацию об аккаунте.
Посмотрите, как мы сравниваем информацию о аккаунте с информацией об аккаунте на диске.
function main() {
Log(exchange.GetAccount()); // 已经知道怎么获取 主交易所 账户信息了
//下面我们来试试 不停的获取行情数据。
while(true){ // 这里用一个无限循环的结构来不停的获取 交易所行情数据。
Log("行情数据:", exchange.GetTicker()); // 哇! Log() 函数的括号里面可以写2个参数,第一个参数是: "行情数据:"
// 第二个参数是 exchange.GetTicker() 这个函数的返回值。就是主交易所的行情数据。
// 注意 Log() 函数的参数要用 逗号分隔。
Sleep(1000); // 咦~ 这个又是什么? 答:机器人程序 执行循环也需要休息!它可是执行很快的哦!(一秒N次)
// Sleep 函数的作用就是让程序暂停一会儿,括号里面的参数 1000 是 毫秒数, 1秒 = 1000毫秒。Sleep(1000);就是暂停1000毫秒。
// 不要小看这个参数,这个参数控制了程序的轮询频率,间接影响访问 交易所API 的频率,有些交易所API访问过于频繁可是会拒绝访问的。
}
}
Примечание:Возможно, вы обнаружите, что максимальная и минимальная цены данных, полученных функцией GetTicker, значительно отличаются друг от друга. Таким образом, высокая и низкая цены данных рынка, возвращаемые функцией GetTicker, являются максимальной и минимальной ценами в рамках цикла, установленного биржей.
GetRecords(Period) 返回一个K线历史, K线周期在创建机器人时指定, Record数组结构
不加参数, 默认返回添加机器人时时指量的K线周期, 但也可以自定义K线周期
支持: PERIOD_M1 指1分钟, PERIOD_M5 指5分钟, PERIOD_M15 指15分钟, PERIOD_M30 指30分钟, PERIOD_H1 指1小时, PERIOD_D1 指一天
Мы написали тест-код, чтобы получить данные по K-линию с по умолчанию длительностью (<5 минут).
function main() {
Log(exchange.GetAccount()); // 已经知道怎么获取 主交易所 账户信息了
//下面我们来试试 不停的获取行情数据。
var records = exchanges[0].GetRecords(); // 按照默认周期获取K线数据
Log("records:", records); // 在日志中输出 获取到的K线数据。
}
Показать вывод:
Запись:
[{
Видно, что переменные records - это структурные матрицы, которые расположены в порядке от дальнего к ближайшему (indexrecords.length - 1) в соответствии с K-линейным временным порядком. Кстати, давайте разберемся с K-линией: ((Некоторые графики красные для солнечных лучей, зеленые для женских лучей, а некоторые для противоположных цветов)).Посмотрите на примерный график K-линий, которые циклично работают на платформе в течение 5 минут. Обратите внимание:После завершения цикла K-линии его значение определяется. В практическом применении мы называем var records = exchanges[0].GetRecords ((); последний элемент в возвращенном массиве данных records, т.е.: records[records.length-1], непрерывно изменяется до завершения цикла. Возможно даже, что в последнюю секунду он будет изменен из солнечного луча в канонический.
Функция GetRecords возвращает данные по умолчанию циклов без добавления параметров в соответствии с настройками политики. Также можно передать параметры для определения циклов в K-строках. В настоящее время система рецензирования поддерживает передачу параметров GetRecords для определения циклов (отдает данные по умолчанию циклов без добавления параметров), что позволяет использовать разные циклы одновременно при рецензировании политики.
function main() {
var depth = exchanges[0].GetDepth(); //获取市场深度信息, 返回订单薄信息,一个对象包含2个属性,每个属性是一个对象数组。
Log("depth:", depth); // 日志中输出,一下的输出是 整理过的格式,是方便读者理解,实际上是所有内容都在一行显示的。
}
В результате перепроверки вышеперечисленного кода было обнаружено следующее:
depth:
{"Asks":[{"Price":4726.07,"Amount":15}, // 卖单数组,回测时,数据都是模拟出来的,所以Amount 都是 15,索引为0的是卖一,依次类推。
{"Price":4726.08,"Amount":15},
{"Price":4726.09,"Amount":15},
{"Price":4726.1,"Amount":15},
{"Price":4726.11,"Amount":15},
{"Price":4726.12,"Amount":15},
{"Price":4726.13,"Amount":15},
{"Price":4726.14,"Amount":15},
{"Price":4726.15,"Amount":15},
{"Price":4726.16,"Amount":15},
{"Price":4726.17,"Amount":15}],
"Bids":[{"Price":4726.05,"Amount":15}, // 买单数组,索引为0的是买一, 向后依次类推。
{"Price":4726.04,"Amount":15},
{"Price":4726.03,"Amount":15},
{"Price":4726.02,"Amount":15},
{"Price":4726.01,"Amount":15},
{"Price":4726,"Amount":15},
{"Price":4725.99,"Amount":15},
{"Price":4725.98,"Amount":15},
{"Price":4725.97,"Amount":15},
{"Price":4725.96,"Amount":15},
{"Price":4725.95,"Amount":15}]
}
Соответствующие ордерные ленты выглядят так (здесь реальные данные о OKCoin); информация о глубине рынка в реальном процессе (ордерные ленты) меняется быстро, заинтересованные ученики могут зарегистрироваться в OKCoin, а затем войти и посмотреть.
Как использовать глубокую информацию о рынке? Данные о рынке имеют много полезных применений, например, для еды (конечно, есть и подвески).
function main() {
var depth = exchanges[0].GetDepth(); // 获取市场深度
Log("depth:", depth); // 日志输出显示
Log(exchanges[0].GetAccount()); // 输出 吃单前的 账户信息
var buyPrice = depth.Asks[0].Price; // 设置吃卖单的价格,即卖一,
// 有时为确保吃单成功,这样处理:var buyPrice = depth.Asks[0].Price + slidePrice;
var buyAmount = depth.Asks[0].Amount; // 吃卖单的量
exchanges[0].Buy(buyPrice, buyAmount); // 执行买入操作, 吃掉卖一 这个单子
Log(exchanges[0].GetAccount()); // 显示买入后的 账户信息,对比初始账户信息。可以对比出 买入操作的成交的数量。
}
Результаты работы на изобретательском квантовом диске:
Птица-парусникВо-вторых, когда я выбрал публичный хост в США, в списке ботов не было этого предупреждения, но когда я запустил его, в журнале уже не было никакой информации, которая указывала на отсутствие информации о журнале.
Птица-парусникДобавьте к этому обнаружение: в списке роботов состояние - красный треугольник с запятой, как если бы это была необычная подсказка.
Птица-парусникМаленькая мечта, привет, я тестирую с помощью платформы, первый шаг - проверка информации о счете, нет вывода журналов, предложение ошибок, не знаю, где возникла проблема? Код для тестирования робота: function main (() { Log ((exchange.GetAccount (())); Log (("тест"); {y:bi} Результаты: Тест 1 Стратегия: Тест 1 (Последний раз обновлен 2018-09-13 14:25:33) Дата создания: 2018-09-13 14:07:57 Последнее начало: 2018-09-13 14:40:24 Прекращение: 2018-09-13 14:40:25 Состояние: K-линия цикл 1 минута Ошибка Хостинг в Китае: 42.236.82.38 - linux/amd64 (публичный), ID: 118025 Торговая платформа: BotVS/BTC_USD
Птица-парусникМаленькая мечта, привет, я тестирую с помощью платформы, первый шаг - проверка информации о счете, нет вывода журналов, предложение ошибок, не знаю, где возникла проблема? Код для тестирования робота: function main (() { Log ((exchange.GetAccount (())); Log (("тест"); {y:bi} Результаты: Тест 1 Стратегия: Тест 1 (Последний раз обновлен 2018-09-13 14:25:33) Дата создания: 2018-09-13 14:07:57 Последнее начало: 2018-09-13 14:40:24 Прекращение: 2018-09-13 14:40:25 Состояние: K-линия цикл 1 минута Ошибка Хостинг в Китае: 42.236.82.38 - linux/amd64 (публичный), ID: 118025 Торговая платформа: BotVS/BTC_USD
ХокшелатоПри обращении к `exchange.GetTicker() `, часто появляется **GetTicker: timeout**, пожалуйста, спросите, почему?
ДюхуЗдравствуйте, реальные симуляторы используют реальные данные этой биржи?
БиджасуоСюэсичжон
ШандианлиюПожалуйста, exchange.GetDepth (()) возвращает всю информацию о текущих объявлениях обмена? Может быть, из-за слишком большого количества объявлений будет возвращаться только часть данных?
МаобаоGetRecords ((Period) возвращает историю строки K, но сколько строки K в этой строке истории, где это указано?
ПэнглихенгХорошо, я ошибся, я исправил.
ПэнглихенгGetAccount: подписи не совпадают Как ты это сделал, Монко?
Энди простой.Почему сумма глубины диска всегда 15? Диск - это данные прошлого, которые были взяты, или данные, созданные случайно? Если это данные прошлого, сумма может иметь значение.
cjz140record - это функция, length - это что? depth - это объект? как отличить объект от функции? например, depth ((Asks ((price,amount)), где depth - это объект, ask - это матрица? price и amount - это свойства?
ФанбэйЧто такое slidePrice?
Изобретатели количественного измерения - мечтыХорошо, если есть какие-то вопросы, можно добавить официальную группу QQ @administrator
Птица-парусникСпасибо за много ответов, я сделал то, что мне сказали, и попробую еще раз.
Изобретатели количественного измерения - мечтыНе знаю, является ли это проблемой с общественным хостером, вы можете протестировать с помощью частного хостера, частный хостер должен быть доступен, вы развернете его на своем компьютере.
Изобретатели количественного измерения - мечтыПопробуйте с помощью своего частного хостера.
Изобретатели количественного измерения - мечтыЭто может быть конкретный взгляд на то, какая логика выполнения политики, или может быть, что политика работает нормально, но не запускает никаких операций.
Изобретатели количественного измерения - мечтыКрасный знак означает, что робот работает. Ошибки требуют проверки в журнале робота или в журнале администратора.
Изобретатели количественного измерения - мечтыПоследние проблемы с сетью, кроме того, в аналоговом диске, когда действия не обновляются, являются неактуальными, и можно использовать exchange.IO ("mode") для корректировки режима получения действий.
Изобретатели количественного измерения - мечтыФизическая симуляция - это 24-часовая симуляция, которая следует за движением нескольких основных бирж. Все пользователи, использующие симуляцию, являются участниками этой симуляции.
ШандианлиюХорошо, теперь я понимаю, спасибо.
Изобретатели количественного измерения - мечтыПоказатели, которые вы видите в этом видео, показывают, что вы можете использовать данные, полученные на уровне реального рынка.
ШандианлиюБольшое спасибо. Кроме того, пожалуйста, спросите, когда мы имитируем реальное измерение на диске, exchange.GetDepth (()) возвращает данные, соответствующие BotVS, или реальные исторические данные?
Изобретатели количественного измерения - мечтыВозвращаемые файлы Сколько конкретно смотрите на API-интерфейсы, предоставляемые биржами, некоторые биржи возвращают больше, некоторые меньше, и некоторые биржи поддерживают интерфейсы с глубоким объединением, некоторые не поддерживают, конкретно или в зависимости от реализации биржи, BotVS упакован по умолчанию для возвращения данных, если вы хотите прямо вызвать, вы можете использовать функцию exchange.IO, чтобы установить параметры вызова ((Эта функция без подписи, см. API-документацию для более подробной информации)).
Изобретатели количественного измерения - мечтыЭто не может быть указано, сколько строк K-линий возвращается конкретно к бирже, разные биржи могут иметь разное количество подталкиваний, другие биржи не предоставляют интерфейс K-линии, и хранитель самостоятельно собирает записи о сделках биржи, генерируя K-линию, которая накапливается с первого корня.
Изобретатели количественного измерения - мечтыВ начале я тоже ошибался.
Изобретатели количественного измерения - мечтыХорошо, давайте рассмотрим два основных вопроса: - 1, объем глубоких данных слишком велик, меняется каждую секунду, и меняется очень быстро, и то, что мы видим на самом деле, это лишь фрагменты данных. - 2, даже если сделать реальные глубинные данные, но поскольку в данный момент участники ретро-тестирования - это только мы сами, и нет других участников, то точно моделировать ордерные тёмные глубинные среды невозможно. Но мы постараемся оптимизировать их как можно ближе к реальности, спасибо за предложения ^^
Энди простой.Глубокие данные еще не произошли, ценовые кривые произошли в прошлом. Лица считают, что данные прошлого и будущего вместе более надежны, чтобы судить о текущих покупках и продажах.
Изобретатели количественного измерения - мечтыГлубокие данные Слишком большие, если все они будут записаны. Поэтому глубокие данные, кроме первого класса, являются аналогичными значениями.
Изобретатели количественного измерения - мечтыrecords - это переменная, используемая для получения данных из строки K, возвращенных API-функцией GetRecords, length - это свойство длины в JS для переменной типа диаграммы, которое представляет длину массива (т.е. количество элементов в ней), depth - это переменная, используемая для получения данных от глубины, возвращенных функцией GetDepth.
Изобретатели количественного измерения - мечтыСнижение цены, если перевести немного прямо, означает, что для того, чтобы съесть одно и то же, плюс немного цены, легче заключить сделку.