Математические формулы индикатора - страница 4

 
jartmailru:

У кого-то на слуху больше матлаб, при этом я не отрицаю, что R может быть куда более продвинутым и полезным пакетом. А учитывая опен-сурсность... его, вероятно, можно вообще откуда-то через длл дёргать.

Обертка в кодобазе.
 
faa1947:
Обертка в кодобазе.
Шикарно...
 
jartmailru:
Шикарно...
Ну, тогда для полного счастья. Успехов.
 
faa1947:
Ну, тогда для полного счастья. Успехов.
Есть проблема...

Этот способ связи с R- плохой.
Взаимодействие ведется через тектовые строки,
которые берутся из консоли и шлются в консоль.

Не говоря о тормозах и о потере точности
при переводе из double в строки.

Как-то так...
 
kevton:

Добрый день!

Подскажите или кто возметься, задача следущая- есть ряд индикаторов(мт4), соотвественно на языке MQL . Нужно извлечь исходные формулы, согласно которым индикатор выдает свое графическое изображение на чарте. Ньюансы следущие, в некоторых индикаторах есть настраивамые параметры, их тоже нужно отобразить в общей математической формуле. Формулы нужны для тестирования индикаторов в стороней программе, на другом языке. Спасибо за ответы, можно в личку

Наверно лучше найти программиста знающего оба языка, что бы переписал. Излагать алгоритмы и формулы более трудозатратно, чем переписать.
 
jartmailru:
Есть проблема...

Этот способ связи с R- плохой.
Взаимодействие ведется через тектовые строки,
которые берутся из консоли и шлются в консоль.

Не говоря о тормозах и о потере точности
при переводе из double в строки.

Как-то так...

Не совсем так.

R-интерпретатор с известными плюсами и минусами для интерпретаторов. Конечно лучше длл со скомпилированным кодом, но компиляторов для Р нет. Под компиляцией в Р понимается преобразование в некий синтаксически правильный внутренний формат, а не машинные команды.

Строки - это строки исходного кода, который такой и есть.

Количество обменов можно резко сократить. Достаточно написать в Р функцию и вызвать ее из мт4. Обычно это пересылка аргументов функции и вызов самой функции, быть может головной, которая в Р в свою очередь вызывает неограниченное количество функций.

Данные не преобразовываются: дабл передается в дабл и т.д. без преобразования.

Но штука очень не простая. На поверхности проблема в очень богатых структурах данных Р. Но реальная проблема - это пакеты статистики, а здесь программирование вообще не при чем.

 
faa1947:

Данные не преобразовываются: дабл передается в дабл и т.д. без преобразования.

Как он может передаваться без преобразований?

Там запускается ехе от R системы в консоли-
и длль с этой консолью обменивается команадами в виде текстовых строк.

Обмен между 2-мя процессами через pipes.

Т.е. если надо получить 1000 чисел- то даблы будут с потерей точности как строки
выведены в консоль, блоком текста переправлены в эту длл,
преобразованы в отдельные строки и отконвертированы опять в даблы.

Смотрите исходник mt4R_source-1.3.0.25.zip
http://www.forexfactory.com/showthread.php?t=260422

Ничего более хренового и придумать нельзя.

//ПС зато это самое простое.

ПС2 но сделать нормально- врядли сильно сложнее ))
тот же ртерм, скорее всего можно сделать в виде длл-
как минимум уберется лишняя консоль
 
jartmailru:
Как он может передаваться без преобразований?

Там запускается ехе от R системы в консоли-
и длль с этой консолью обменивается команадами в виде текстовых строк.

Обмен между 2-мя процессами через pipes.

Т.е. если надо получить 1000 чисел- то даблы будут с потерей точности как строки
выведены в консоль, блоком текста переправлены в эту длл,
преобразованы в отдельные строки и отконвертированы опять в даблы.

Смотрите исходник mt4R_source-1.3.0.25.zip
http://www.forexfactory.com/showthread.php?t=260422

Ничего более хренового и придумать нельзя.

//ПС зато это самое простое.

ПС2 но сделать нормально- врядли сильно сложнее ))
тот же ртерм, скорее всего можно сделать в виде длл-
как минимум уберется лишняя консоль

Не могу согласиться.

Вот текст.

double Buf_EUR[];

ArrayResize (Buf_EUR, N);

RAssignVector (R, "Buf", Buf_EUR, ArraySize(Buf_EUR));

Пересылается массив Buf_EUR (в терминах мт4) с дабл в вектор Buf, который доже дабл. Пересылается как некое количество байтов. Если у Вас чето не совпало, то это ваша проблема.

Но проблема не в этом.

Конечно, безумие использовать Р вместо к примеру С.

Р - это доступ к статистике и неплохой графике. А остальное не имеет значения.

Сейчас посмотрю исходник.

 
Посмотрел. По тексту Вы, вроде, правы. Но приведенный выше код - это рабочий код. В мт4 - это точно дабл. А исходниках стоит перекодировка строки, полученной из мт4, а строку никто не передавал.
 
faa1947:
Посмотрел. По тексту Вы, вроде, правы. Но приведенный выше код - это рабочий код. В мт4 - это точно дабл. А исходниках стоит перекодировка строки, полученной из мт4, а строку никто не передавал.

В длл приходит дабл.
А вот- перевод из дабла в строку.

procedure TRConsole.AssignDouble(AVariable: Ansistring; AValue: Double);
begin
ExecuteCode(Format('%s <- %g', [AVariable, AValue]));
end;