.NET: Не удается получить правильные значения RSI и MACD из TA-Lib

Я пытаюсь использовать TA-Lib для технического анализа. Я скачал пакет TA-Lib-Core Nuget для.NET. К сожалению, я не могу найти документацию по API, поэтому некоторые параметры метода немного загадочны.

Я скачал исторические данные для AMD между 4/12/2016 и 4/12/2017 здесь.

Вот что у меня есть для расчетов RSI и MACD:

int outBegIdx1, outNBElement1;
double[] outReal = new double[data.Count];

int outBegIdx2, outNBElement2;
double[] outMACD = new double[data.Count];
double[] outMACDSignal = new double[data.Count];
double[] outMACDHist = new double[data.Count];

TicTacTec.TA.Library.Core.Rsi(0, data.Count - 1, data.Select(x => x.Close).ToArray(), 14, out outBegIdx1, out outNBElement1, outReal);
TicTacTec.TA.Library.Core.Macd(0, data.Count - 1, data.Select(x => (float)x.Close).ToArray(), 12, 26, 9, out outBegIdx2, out outNBElement2, outMACD, outMACDSignal, outMACDHist);

Я сравниваю результаты со страницей AMD TradingView здесь. Чтобы увидеть значения RSI и MACD, нажмите "Индикаторы" вверху и выберите их. Также вы должны смотреть на дневной график за 1 год.

Проблема в том, что TA-Lib выводит совершенно разные результаты, и я не уверен, правильно ли я использую эти API. То, что я вижу, это 65,34 для RSI и 0,0431 для гистограммы MACD, в отличие от 39,42 и -0,2165 в TradingView соответственно.

Обратите внимание, что data[0] имеет цену закрытия на 12/12/2016, тогда как последний элемент на 4/12/2017. Также я понятия не имею, что outBegIdxа также outNBElement параметры обозначают

Как мне вернуть правильные значения?

1 ответ

Решение

Вот документация, которая объясняет * значения переменных. Короче говоря, ваши наши массивы соответствуют таким исходным данным:

for (int i = 0; i < outNbElement; i++){
              qDebug() << "Result for day #" << outBegIdx+i << ": outMACD: " << outMACD[i]
                          << " outMACDSignal: " << outMACDSignal[i]
                             << "outMACDHist: " << outMACDHist[i];
          }

Например, MACD (12,26,9) вернется data.Count - 33 (если я правильно помню, это будет -33) выходные значения в массиве, поскольку первые 33 значения входных данных будут использоваться для инициализации EMA, которые использует MACD. Например, если вы ищете 10-дневную скользящую среднюю (MA) и передаете данные TA-Lib за 10 дней, вы должны ожидать, что в выходных массивах (только за последний день) будет получено только 1-дневное значение результата только потому, что первые 9 дней использовались для Инициализировать и 10-дневный МА не был готов в этот момент. Я не уверен в точном значении 33 для MACD(12,26,9) - вы можете найти точное значение с помощью индикаторов Lookback функции. Есть такие в C++ API, и они тоже должны быть где-то в C# API. Вы даже можете выделить меньше места для ваших массивов результатов, учитывая значение просмотра. В любом случае вы находитесь в безопасности, когда вы выдаете * массивы, которые выделяют тот же размер, что и исходные данные, и полагаются на out* индексы, чтобы повторить это.

Если результаты скользящих средних TA-Libs значительно отличаются от результатов некоторых веб-сайтов, это обычно является эффектом момента, когда вы начинаете расчет. Например, на сайте, на который вы ссылаетесь, я вижу, что индикатор MACD рассчитан на 1-й месяц года. Они не смогли бы получить эти данные MACD, если рассчитали их, используя только данные за прошлый год, как это сделал TA-Lib. Bcs некоторых данных должны быть потрачены впустую, чтобы инициализировать скользящие средние. Это означает, что они начали вычисление MACD ранее. Например, 3 года назад (или для всех имеющихся у них данных) и отображать результаты только за последние 12 месяцев. Например, если вы переключитесь на период ALL вместо 1y, вы увидите, что значения индикатора отсутствуют для небольшого фрагмента графика в самом начале. Вот где они фактически начали вычисление MACD для этой шкалы. Я бы постарался прокормить данные TA-Lib за 3 года и сравнил их прошлый год с веб-сайтом. Это должно быть достаточно хорошо, чтобы их результаты сходились.

Когда вы на 100% уверены, что показатель TA-Lib и показатель веб-сайта рассчитаны на одних и тех же данных, вы должны ожидать, что ваши результаты будут одинаковыми или незначительно отличаться. Эта небольшая разница может быть связана с различной реализацией индикатора. Например, MACD (12,26,9) использует коэффициенты 2/(12+1), 2/(26+1), 2/(9+1) в своей формуле. Значение 2/27 можно рассчитать на лету и использовать со всей доступной прецессией. Или это может быть округлено до 0,074. Или вы могли бы обратиться к какой-то книге в вашей реализации и выяснить, что они рекомендуют 0,075, как в Техническом анализе трендов акций, десятое издание Роберта Д. Эдвардса,WHC. TA-Lib вычисляет эти значения на лету, но может быть вынужден использовать жестко закодированный (0,075, 0,15, 0,2) через некоторые приемы C++ API.

Другие вопросы по тегам