Нет ли готовой функции или примера на тему расчёта значения (цены) касательной к некоторой кривой по известной исходной точке (цена/бар)? Т.е. есть исходная цена dPriceFrom, её бар iBarFrom, массив цен кривой adLine[] и бар, для которого надо рассчитать значение касательной iBarTo. У меня пока получается вычислять только луч через экстремум кривой, но это не всегда касательная :(
Проблема в том, чтобы найти эту самую точку на кривой. Дана исходная точка, вторая должна лежать на кривой таким образом, чтобы линия касалась кривой только в этой точке на заданном диапазоне баров - как её вычислить? Вариант перебора вариантов и проверки не пересекает ли где кривую - оч неудобное решение
Получилось так
double GetTangentLevel(int iBarTo, int iBarFrom, double dPriceFrom, double& adLine[], bool bTopSide=true) {
int iLineBar = iBarFrom + 1;
double
dAngle = dPriceFrom - adLine[iLineBar],
dTmpAngle
;
if(bTopSide)
while(iLineBar < iBarTo) {
iLineBar++;
dTmpAngle = (dPriceFrom - adLine[iLineBar]) / (iLineBar - iBarFrom);
if(dTmpAngle < dAngle) dAngle = dTmpAngle;
}
else
while(iLineBar < iBarTo) {
iLineBar++;
dTmpAngle = (dPriceFrom - adLine[iLineBar]) / (iLineBar - iBarFrom);
if(dTmpAngle > dAngle) dAngle = dTmpAngle;
}
return (dPriceFrom - dAngle * (iBarTo - iBarFrom));
}
Должно существовать что-то более оптимальное..
совсем без перебора вряд ли получится.
Ну как сказать. Если есть математическое уравнение кривой и координата одной точки для касательной, то общее уравнение всех касательных построить можно. А из этого уравнения определить, существует ли хотя бы одна касательная, удовлетворяющая требуемым условиям. Задачка математически вполне решаемая, но весь вопрос, а кто её и за какой интерес будет решать?
А так вообще-то, любой мало-мальски соображающий студент второго курса такую задачку должен решить минут за пятнадцать!
Кривая задана массивом точек - увы мне, про формулу форекса ничё не слышал и хрен жеж кто поделитсо.. А без уравнения, пожалуй действительно, только перебор поможет. Остаётся вопрос о наиболее оптимальном алгоритме
Формализация в программном коде итерационного процесса, сходящегося к найденной в итоге касательной - это уже достаточно трудоёмкая задачка совсем не одного часа работы с кучей уточнений, едва ли кто её запросто так возьмётся делать!
За 500 р. на телефон, сделаю за час. Сам алгоритм 15-20 мин. Ну и на вылизывание (искоренение ошибок) запас нужно оставить.. :)
Бесплатно напрягаться неохота - работы сейчас многовато.
Нужно аппроксимировать по 3-5 или 7 точкам с помощью сплайна. А для сплайна вычислить производную не составляет труда.
Проще считать "производную" усредненно. Но это не проблема на самом деле.
Проблема раз это то, что кривая не выпуклая, т.е. в любом случае проверять пересечение каждой касательной с кривой.
Проблема два -- множество вариантов касательных на выходе и выбор из них оптимально нужной\требуемой. Это посложнее.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нет ли готовой функции или примера на тему расчёта значения (цены) касательной к некоторой кривой по известной исходной точке (цена/бар)? Т.е. есть исходная цена dPriceFrom, её бар iBarFrom, массив цен кривой adLine[] и бар, для которого надо рассчитать значение касательной iBarTo. У меня пока получается вычислять только луч через экстремум кривой, но это не всегда касательная :(