Играть в JavaScript с стариком - создать партнера, который будет делать покупки и продажи

Автор:Маленькие мечты, Создано: 2017-03-13 12:53:50, Обновлено: 2017-10-11 10:37:32

Играя с братом и матерью в JavaScript, мы создаем партнера, который будет делать покупки и продажи.

В этом видео мы показываем, как создать квантовый робот с помощью JS:https://www.fmz.com/bbs-topic/705(Представьте себе Марка).
  • 1, Основы данных K-линии, Проблемы с использованием этих данных в количественных сделках.

    • Что такое 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 ((rb1705); // Смены настройки для контракта 1705 штрих-сталь;; var records = exchange.GetRecords ((); // Получение данных о цикле строки K по умолчанию rb1705 шрубовой стали. Конкретное количество K-линий данных, которые могут быть получены, зависит от того, как API биржи будет продвигаться. Так что в начале, если требуется больше K-линий, необходимо дать программе время для сбора.

      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-линии.

  • 2, Указатель вызов подробности, часто встречающиеся вопросы Заполнение циклов, возвращаемые значения, параметры

    При программировании или количественном написании стратегии также используется множество функций показателей, более полезной является библиотека показателей 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-линий.img

      Внимательный читатель может понять, почему данные, рассчитанные данным 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-линий различается, то могут быть различные значения.

  • 3, API допускает ошибки

    • Cannot read property length of null Эта БУГ является самой часто встречающейся, ни одна из них.

      Причина в том, что API иногда вызывают ошибки в получении данных или не получают данных по разным причинам. При этом некоторые API, получающие данные, получают нулевое значение. Данные обычно имеют арифметическую структуру и часто требуют доступа к длине матриц.

      Для всех вызовов API требуется допустить ошибки, и даже иногда необходимо проверить, нормальны ли данные ("иногда возникают исключения в данных"). Наша программа может гарантировать точность только в своем собственном коде, но для информации о данных, которая проходит по сети, не может гарантировать ее 100% точность ("неизбежное потеря пакета), поэтому необходимо допустить ошибки в полученных данных и отфильтровать все исключения в данных.

      В результате, без одноэтапного дешифровки, без разрыва дешифровки, без мониторинга значения переменных и т.д. Я обычно дебютирую с помощью самого простого метода Log. Для разумного использования в процессе программы текстовой информации, логики вывода анализатора. Можно, наверное, узнать, как работает программа, или использовать для обработки BUG схватывание исключений try, catch, throw JS, но я рекомендую не использовать их, пока не придется использовать исключения, но не используйте их. Для DEBUG использование самого первозданного метода Log-материала действительно является опытом, который очень эффективен с точки зрения развития способностей DEBUG.

Если вам интересно, пожалуйста, поделитесь этим с другими друзьями, которые любят программирование и любят сделки.

https://www.fmz.com/bbs-topic/728

Программист littleDream


Больше