В этом видео мы показываем, как создать квантовый робот с помощью JS:https://www.fmz.com/bbs-topic/705(Представьте себе Марка).
Что такое K-линейные данные:
К-линия - это график, который был создан в эпоху японского шахта Токаву, и использовался торговцами на японском рынке риса, чтобы фиксировать рынок риса, а затем был введен на фондовый рынок и фьючерсный рынок благодаря его уникальному методу маркировки. В настоящее время этот метод анализа особенно популярен в нашей стране и во всей Юго-Восточной Азии. (Запрос с Baidu)
Не объясняя конкретных графиков, давайте посмотрим на структуру данных K-линий, определенных с помощью языка JS:
{
Time : 1487034000000, // 一个时间戳, 精确到毫秒,与Javascript的 new Date().getTime() 得到的结果格式一样
Open : 3425, // 开盘价
High : 3446, // 最高价
Low : 3423, // 最低价
Close : 3438, // 收盘价
Volume : 177657.99, // 交易量
}
Давайте посмотрим на данные, полученные при вызове функции GetRecords:
[
{"Time":1487034000000,"Open":3425,"High":3446,"Low":3423,"Close":3438,"Volume":177657.9999999999},
{"Time":1487035800000,"Open":3438,"High":3448,"Low":3382,"Close":3385,"Volume":494882},
{"Time":1487037600000,"Open":3385,"High":3398,"Low":3383,"Close":3394,"Volume":83656.00000000015}
]
Видимые данные K-линии представляют собой массив объектов, каждый из которых представляет собой K-линейный бар, который содержит максимальную цену, минимальную цену, цену открытия (то есть цену, когда начинается этот K-линейный цикл), цену закрытия (то есть цену, когда заканчивается этот K-линейный цикл), количество сделок (то есть количество сделок в цикле), а этот цикл называется K-линейным циклом. Например, как данные в приведенной выше матрице определяют, какой цикл имеет линия K? Можно вычислить только неправильно с помощью двух барных временных циклов: 1487035800000 - 1487034000000 Получено: 1800000, эта цифровая единица измерения миллисекунд, так что в обмен: 1800000 / 1000 / 60 = 30 (минуты), этот цикл линии K составляет 30 минут.
Первый вопрос, который может возникнуть:
При использовании данных K-линий, длина матриц игнорируется. Это приводит к переполнению доступа к матрицам (такие БУГы были очень распространены при написании программ на C раньше). Поэтому мы должны судить об этом перед использованием K-линий.
Например, получить K-линию:
exchange.SetContractType ((
if(records.length < n){ // n 就是我们限定的 n线数量。
return; // 当前函数返回。
}
Второй вопрос, который возникает: Данные последнего Bar в K-линии, кроме свойств Time, Open и Close, могут быть изменены в реальном времени. Начинающие пользователи могут испытывать много путаницы при обработке K-линий, поскольку они не понимают этого пункта. Например, в предыдущей главе мы говорили о скрещивании стержней.
Третий вопрос: Временный замысел цикла K-линии - это момент начала этого цикла. Временный замысел является миллисекундным и имеет значение 0. Временный замысел представляет собой момент 1 января 1970 года (при написании конкретной программы необходимо также учитывать часовой пояс). В этом случае можно использоватьШколаПопробуйте в BotVS Sandbox:
var arr = new Date(0);
Показано:
Thu Jan 01 1970 08:00:00 GMT+0800 (CST) // показан в восточном часовом поясе Это значение было добавлено с 1970 года до сегодняшнего дня (прибавление 1000 каждые 1 секунду, потому что 1 секунда - 1000 миллисекунд), так что это число уже довольно большое. Вот небольшой трюк: так как времяпрепровождение является уникальным для каждого Бара в K-линии, в которой определяется цикл K-линии, когда времяпрепровождение изменяется, вы можете определить, что получили последние данные K-линии. Это также полезно при фактической обработке данных K-линии.
При программировании или количественном написании стратегии также используется множество функций показателей, более полезной является библиотека показателей talib, которая имеет различные версии.
В первую очередь, когда он использовал функцию в базе показателей, он сделал много ошибок:
Первый, параметровый цикл (параметрный параметр, отличающийся от K-линейного цикла, сколько циклов K-линий, сколько вычисленных показателей K-линейного цикла, например, 30-минутный K-линия, вычисленная MACD-индикатором 30-минутного цикла, параметры для параметрового цикла) установлен слишком большой, K-линейная информация недостаточной длины: Например, показатель MACD описывает:
MACD(Records[Close],Fast Period = 12,Slow Period = 26,Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]
При использовании, если параметры цикла установлены на 12, 26, 9, мы вводим K-линиевые данные записи для расчета показателей, код пишет так:
var macd = talib.MACD(records, 12, 26, 9);
Если в данный момент передаваемая запись слишком мала для длины, то вычисляется следующее:
[
[null,null,null,null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null,null,null,null]
]
Это происходит из-за недостаточных данных K-линий, которые вызывают ошибки при использовании вычисленных показателей, поэтому мы добавили ограничительные условия перед программой:
while(!records || records.length < 50){
records = exchange.GetRecords();
Sleep(1000);
}
Выйти из цикла, пока не будет достаточно 50 K-линий.
Внимательный читатель может понять, почему данные, рассчитанные данным MACD, являются двумерным массивом, так как MACD рассчитывает не одну строку, а три строки: dif, dea, macd.
[
[null,null,null,null,null,null,null,null,数据...],
[null,null,null,null,null,null,null,null,数据...],
[null,null,null,null,null,null,null,null,数据...]
]
Некоторые из этих случаев возникают из-за невнимания к структуре возврата индикаторов.
Во-вторых, разные средние линии, используемые для вычисления показательных функций, или разные алгоритмы показателей приводят к разным результатам.
Более очевидным является показатель STOCH RSI, который описывается следующим образом:
STOCHRSI(Records[Close],Time Period = 14,Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]
Вычисленное значение значительно отличается от других алгоритмов, которые я описал в первой главе этой серии. Причиной может быть несовместимость используемой уравнительной системы, алгоритмы некоторых библиотек привыкли использовать MA, а некоторые привыкли использовать EMA. Частичные показатели вычисляются ежедневно, и если количество данных K-линий различается, то могут быть различные значения.
Cannot read property
Причина в том, что API иногда вызывают ошибки в получении данных или не получают данных по разным причинам. При этом некоторые API, получающие данные, получают нулевое значение. Данные обычно имеют арифметическую структуру и часто требуют доступа к длине матриц.
Для всех вызовов API требуется допустить ошибки, и даже иногда необходимо проверить, нормальны ли данные ("иногда возникают исключения в данных"). Наша программа может гарантировать точность только в своем собственном коде, но для информации о данных, которая проходит по сети, не может гарантировать ее 100% точность ("неизбежное потеря пакета), поэтому необходимо допустить ошибки в полученных данных и отфильтровать все исключения в данных.
В результате, без одноэтапного дешифровки, без разрыва дешифровки, без мониторинга значения переменных и т.д. Я обычно дебютирую с помощью самого простого метода Log. Для разумного использования в процессе программы текстовой информации, логики вывода анализатора. Можно, наверное, узнать, как работает программа, или использовать для обработки BUG схватывание исключений try, catch, throw JS, но я рекомендую не использовать их, пока не придется использовать исключения, но не используйте их. Для DEBUG использование самого первозданного метода Log-материала действительно является опытом, который очень эффективен с точки зрения развития способностей DEBUG.
https://www.fmz.com/bbs-topic/728