У вас не стоит Flash Player
Page 1 of 2 1 2 >
Настройки
#8353 - Wed Jul 14 2010 11:52 AM #1 / Индикаторы: JMA, WMA, RoC
SysKreator Offline
enthusiast

Registered: Tue Apr 27 2010
Записи: 207
#1 / Индикаторы: RoC, WMA, JMA

Индикатор ROC
*******************
Индикатор ROC - Price Rate of change (Скорость изменения цены). Индикатор скорости изменения цены (ROC) показывает разность между текущей ценой и ценой n периодов назад. Она может быть выражена или в пунктах, или в процентах. Индикатор ROC отражает зависимость между теми же величинами, но не в виде разности, а в виде отношения.

Параметр:
• Период

Изменение цены выражено в процентах.


Weighted Moving Average (WMA)
****************************************
Одним из недостатков SMA является присвоение при его расчете всем ценам одинаковых весов при усреднении вне зависимости от того, ближе или дальше они от текущего момента. Этот недостаток устранен в Взвешенном скользящем среднем (Weighted Moving Average, WMA). WMA, таким образом, является обычной модификацией простого скользящего среднего с весами подобранными так, что последние цены имеют в них больший вес.

Параметр:
• Период


Jurik's Moving Average (JMA)
************************************
Индикатор разработан Марком Юриком в 1998 г. и представляет собой разновидность AMA, являясь одним из лучших фильтров цены. Кривой JMA свойственно хорошее сглаживание, минимальное отставание от сильных ценовых движений и минимальное опережение после их окончаний.

Параметры:
• Длина / Len
• Фаза / phase

Примечание: Перевод кода c MQL

Update: Разбил на три отдельные dll-ки + добавил исходные коды. Исходный архив удалил.


Attachments
ROC.rar (575 downloads)
WMA.rar (782 downloads)
JMA.rar (886 downloads)
Индикаторы.rar (913 downloads)



Отредактировано SysKreator (Wed Jul 14 2010 01:01 PM)

Наверх
#8356 - Wed Jul 14 2010 12:27 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: SysKreator]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
Спасибо, Креатор!
Продолжение следует? NRTR,NRMA.. :-))

Наверх
#8359 - Wed Jul 14 2010 01:04 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: usas]
SysKreator Offline
enthusiast

Registered: Tue Apr 27 2010
Записи: 207
Originally Posted By: usas
Спасибо, Креатор!
Продолжение следует? NRTR,NRMA.. :-))


Не за что!

NRTR, NRMA вон Laber быстрее сделает smile

Наверх
#8361 - Wed Jul 14 2010 01:05 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: SysKreator]
SysKreator Offline
enthusiast

Registered: Tue Apr 27 2010
Записи: 207
Я пока новичок в индикаторах smile поэтому начнем с простого

Наверх
#8363 - Wed Jul 14 2010 01:13 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: SysKreator]
usas Offline
Pooh-Bah

Registered: Sun Feb 21 2010
Записи: 2331
Loc: Ухта
Originally Posted By: SysKreator
Originally Posted By: usas
Спасибо, Креатор!
Продолжение следует? NRTR,NRMA.. :-))


Не за что!

NRTR, NRMA вон Laber быстрее сделает smile


Так он уже сделал на СИ (выложены в форуме) нужно только в формат .dll перевести..
А Ваши последние проверил, по-моему все ОК!
Не нашел только обяснения смысла по параметрам JMA, длина и фаза.
Длиной кажется просто период назвали, а вот смысла "фазы" пока не знаю..

Наверх
#8365 - Wed Jul 14 2010 01:22 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: usas]
SysKreator Offline
enthusiast

Registered: Tue Apr 27 2010
Записи: 207
Originally Posted By: usas
Originally Posted By: SysKreator
Originally Posted By: usas
Спасибо, Креатор!
Продолжение следует? NRTR,NRMA.. :-))


Не за что!

NRTR, NRMA вон Laber быстрее сделает smile



Не нашел только обяснения смысла по параметрам JMA, длина и фаза.
Длиной кажется просто период назвали, а вот смысла "фазы" пока не знаю..


Да, длина - это на 99% период, Фаза - не готов сказать.
Этот Jurik (не хочу обижать) жмот видимо редкостный. Описания, как его добро устроено, нормального нет, а сам он продает только на 30 бачей. В данном случае повезло код на MQL - это то же C#, поэтому получилось легко перевести.

Наверх
#8379 - Wed Jul 14 2010 03:29 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: SysKreator]
Stanley Offline
enthusiast

Registered: Mon Jun 21 2010
Записи: 283
А как это добро запустить?Просто чрз внешний скрипт в редакторе?

Наверх
#8380 - Wed Jul 14 2010 03:40 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: Stanley]
SysKreator Offline
enthusiast

Registered: Tue Apr 27 2010
Записи: 207
Originally Posted By: Stanley
А как это добро запустить?Просто чрз внешний скрипт в редакторе?


Скачиваем архивы, распаковываем в папку Handlers. Запускаем TSLab, индикаторы будут на закладке Пользовательские

Handlers - папка, которую нужно создать в папке, где установлен TSLab.

Наверх
#8443 - Thu Jul 15 2010 11:46 AM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: SysKreator]
dmfx Offline
stranger

Registered: Fri Apr 16 2010
Записи: 9
Создаю новый индикатор. Копирую туда исходник WMA из этой ветки. При компиляции ошибка:
Quote:

Не удалось найти имя типа или пространства имен 'BasePeriodIndicatorHandler' (возможно, пропущена используемая директива или ссылка на сборку) (CS0246) - D:\Мои документы\SharpDevelop Projects\Мой первый проект\Мой первый проект\Class1.cs:11,24


Отредактировано dmfx (Thu Jul 15 2010 12:16 PM)

Наверх
#8450 - Thu Jul 15 2010 12:38 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: dmfx]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
BasePeriodIndicatorHandler - это не класс из API, он находится в TSLab.Script.Handlers.dll
Т.е. ее тоже нужно подключить

Наверх
#8457 - Thu Jul 15 2010 12:50 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: Nektodron]
dmfx Offline
stranger

Registered: Fri Apr 16 2010
Записи: 9
Originally Posted By: Nektodron
BasePeriodIndicatorHandler - это не класс из API, он находится в TSLab.Script.Handlers.dll
Т.е. ее тоже нужно подключить


А как это сделать? Разве пример в первом сообщении этой ветки - не полностью "готовый к употреблению"? Я целиком и поностью скопировал текст из файла WMA.cs в пустую заготовку.

Наверх
#8515 - Thu Jul 15 2010 04:25 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: dmfx]
SysKreator Offline
enthusiast

Registered: Tue Apr 27 2010
Записи: 207
Originally Posted By: dmfx
Originally Posted By: Nektodron
BasePeriodIndicatorHandler - это не класс из API, он находится в TSLab.Script.Handlers.dll
Т.е. ее тоже нужно подключить


А как это сделать? Разве пример в первом сообщении этой ветки - не полностью "готовый к употреблению"? Я целиком и поностью скопировал текст из файла WMA.cs в пустую заготовку.


http://www.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=7811#Post7811

Наверх
#8529 - Thu Jul 15 2010 08:01 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: SysKreator]
dmfx Offline
stranger

Registered: Fri Apr 16 2010
Записи: 9

И что? Уж на этом-то этапе у меня все отлажено. Все прочие индикаторы нормально компилируются (в том числе и этот:"Пример написания собственного индикатора при помощи TSLab API" http://www.tslab.ru/docs/online/ ). А вот с вашим - проблема. Сами попробуйте скомпилировать именно этот - скачанный из этой ветки WMA.

Наверх
#8532 - Thu Jul 15 2010 10:21 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: dmfx]
SysKreator Offline
enthusiast

Registered: Tue Apr 27 2010
Записи: 207
Originally Posted By: dmfx

И что? Уж на этом-то этапе у меня все отлажено. Все прочие индикаторы нормально компилируются (в том числе и этот:"Пример написания собственного индикатора при помощи TSLab API" http://www.tslab.ru/docs/online/ ). А вот с вашим - проблема. Сами попробуйте скомпилировать именно этот - скачанный из этой ветки WMA.


smile Забавно. Интересно, как я выложил бы dll, если бы у меня не компилился проект?

NektoDron уже ответил. Необходимо кликнуть правой мышкой на References, выбрать Add reference. Дальше опять на закладку .Net Assembly Browser и Browse. Далее в папку TSLab и оттуда берем TSLab.Script.Handlers.dll

Наверх
#8590 - Fri Jul 16 2010 12:12 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: SysKreator]
dmfx Offline
stranger

Registered: Fri Apr 16 2010
Записи: 9
Originally Posted By: SysKreator

NektoDron уже ответил. Необходимо кликнуть правой мышкой на References, выбрать Add reference. Дальше опять на закладку .Net Assembly Browser и Browse. Далее в папку TSLab и оттуда берем TSLab.Script.Handlers.dll

Спасибо.
Мля... Сработало. Получается, что у меня слетели настройки frown Ведь раньше-то - работало все! Извините, что отнял время.

Наверх
#18329 - Sat Dec 11 2010 02:28 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: dmfx]
Klever Offline
newbie

Registered: Thu May 27 2010
Записи: 33
Я так понимаю у меня одного вопрос по WMA возник - почему в течении начального периода эта WMA равна нулю? она же вроде должна просто отсутствовать до M-того шага?



Attachments
1.png (5339 downloads)



Отредактировано Klever (Sat Dec 11 2010 02:30 PM)

Наверх
#18339 - Sun Dec 12 2010 01:34 AM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: Klever]
ViL Offline
TSLab
Carpal Tunnel

Registered: Sun Oct 17 2010
Записи: 8137
Да нет, все верно, по этому алгоритму, она должна быть равна 0, если считаете по другоиу, то ждем от Вас других решений на С#. smile

Наверх
#18341 - Sun Dec 12 2010 09:49 AM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: ViL]
Klever Offline
newbie

Registered: Thu May 27 2010
Записи: 33
Да вопрос то не в алгоритме, понятно что можно сделать WMA равной на начальном шаге чему угодно, я просто хотел обратить внимание что данное решение это не классическая WMA.

Наверх
#36070 - Thu Jan 19 2012 10:29 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: Klever]
jarilo Offline
enthusiast

Registered: Fri Mar 19 2010
Записи: 255
Вот что по идее в параметрах индикатора JMA

Длина JMA — определяет степень сглаживания индикатора. Малые значения этого параметра заставят скользящее среднее очень быстро реагировать на изменение цен, а увеличение приведёт к большей сглаженности индикатора. Типичные значения варьируются от 3 до 80, допускаются дробные значения.

Фаза JMA — позволяет балансировать между двумя свойствами индикатора: запаздывание и вылет за пределы ценового диапазона. При отслеживании ценового движения меньшее запаздывание приводит к лучшим результатам. Фаза JMA может принимать значения от -100 (запаздывание максимальное) до 100 (запаздывание минимальное).

А на самом деле по Фазе не работает оптимизация. Понимает только -100, 100 и 0 а все другие дают равный результат как при параметре "0".

Уважаемый SysKreator вы не могли бы поправить индикатор.


Отредактировано jarilo (Thu Jan 19 2012 10:30 PM)

Наверх
#36082 - Fri Jan 20 2012 01:13 AM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: jarilo]
vito333 Offline
Pooh-Bah

Registered: Wed Oct 26 2011
Записи: 2108
Loc: botland
прекрасно работает, и 100, и 50, и всё остальное


Attachments
vvTSLtools.zip (268 downloads)



Отредактировано vito333 (Fri Jan 20 2012 02:16 AM)

Наверх
#36116 - Fri Jan 20 2012 04:59 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: vito333]
jarilo Offline
enthusiast

Registered: Fri Mar 19 2010
Записи: 255
Originally Posted By: vito333
прекрасно работает, и 100, и 50, и всё остальное


Поискал поиском (он тут совсем плохо ищет)и так полазил не нашел от куда вы это взяли но это целый сборник куча мала всяких индикаторов, и в этой куче есть аж два варианта JMA и J2JMA
НО самое главное что у них так же как и у SysKreatora параметр фаза - не работает! Он не воспринимает никаких величин кроме -100,100 и 0. Все промежуточные игнорируются от -99 до 99 с шагом 1. Они все имеют тот же результат что и 0.
А в версии J2JMA там аж 4 параметра и 2 из них относятся к фазе и оба не работают. Проверил только что.

Наверх
#36118 - Fri Jan 20 2012 05:39 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: jarilo]
vito333 Offline
Pooh-Bah

Registered: Wed Oct 26 2011
Записи: 2108
Loc: botland
хмм, и действительно

а J2Jma - это JMA сглаженная JMA


Отредактировано vito333 (Fri Jan 20 2012 05:40 PM)

Наверх
#36125 - Fri Jan 20 2012 06:05 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: jarilo]
jarilo Offline
enthusiast

Registered: Fri Mar 19 2010
Записи: 255
Originally Posted By: jarilo

Фаза JMA — позволяет балансировать между двумя свойствами индикатора: запаздывание и вылет за пределы ценового диапазона. Фаза JMA может принимать значения от -100 (запаздывание максимальное) до 100 (запаздывание минимальное).

Уважаемый SysKreator вы не могли бы поправить индикатор.


Я не знаю что там за сглаженная JMA но по моему кто то просто пытался поправить фазу чтоб регулировалась а вышло 4 параметра 2 из которых напрочь не работают, хотя по периоду там что то стало изменяться, и эта J2JMA совпадала 1:1 на графике с обычной JMA.
Вобщем если кто уже хорошо освоил API может поправит индюк JMA.

Наверх
#36143 - Sat Jan 21 2012 06:10 AM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: jarilo]
vito333 Offline
Pooh-Bah

Registered: Wed Oct 26 2011
Записи: 2108
Loc: botland
нет, это я сделал по быстрому jma сглаженную jma же smile

если jma работала бы корректно, то и дважды сглаженная - тоже

http://codebase.mql4.com/ru/1356

Наверх
#36144 - Sat Jan 21 2012 07:53 AM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: vito333]
vito333 Offline
Pooh-Bah

Registered: Wed Oct 26 2011
Записи: 2108
Loc: botland
поправил немного код jma, кое чего вроде не хватало
средняя стала, на мой взгляд, более сглаженная
но на фазу реагирует по прежнему плохо (см. скрин)

обозначил старую jma как JMA_SK, поправленную - JMA2

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



Attachments
pic_jmas.png (567 downloads)
vvTSLtools.zip (207 downloads)
pic2.png (566 downloads)



Отредактировано vito333 (Sat Jan 21 2012 08:00 AM)

Наверх
#36167 - Sat Jan 21 2012 03:04 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: vito333]
jarilo Offline
enthusiast

Registered: Fri Mar 19 2010
Записи: 255
Спасибо вам за отзывчивость, но результат не изменился на фазу не реагирует.

Вот скрин где четко видно что разные по фазе (0,80,-90) средние слились в одну кривую. И что теперь ваша JMA отличается от оригинала SysKreatora похожестью на обычную WMA, она стала менее чувствительна и запаздывает по сравнению с оригиналом, т.е. утратила то за что стоит ценить JMA. И так же фаза у нее не работает у нее тоже все значения (0,80,-90) слились в одну кривую.



И еще так не удобно что вы выкладываете не одну JMA а целую кучу не пойми чего, ваши индикаторы повторяют имена индикаторов что у меня уже установлены и есть в системе и разобраться очень сложно, и могут быть конфликты, уж если вам нравиться все в одном флаконе вы бы тогда разместили бы всю вашу коллекцию на отдельной вкладке а не на общей "Пользовательские" тогда бы это имело смысл.

P.S. Не понимаю зачем делать дважды сглаженную JMA как отдельный индюк, если такая нужна достаточно просто соединить в редакторе последовательно два или даже 4 если надо индюков подряд.


Attachments
jma.jpg (2148 downloads)



Отредактировано jarilo (Sat Jan 21 2012 03:43 PM)

Наверх
#36173 - Sat Jan 21 2012 05:36 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: jarilo]
vito333 Offline
Pooh-Bah

Registered: Wed Oct 26 2011
Записи: 2108
Loc: botland
ну нет так нет smile

на самом деле jma с "неправильными" фазами всё равно хорошо работает, у меня в ходе использования обычно фазы 100, -100, 0 требовались

Наверх
#36178 - Sat Jan 21 2012 06:18 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: vito333]
jarilo Offline
enthusiast

Registered: Fri Mar 19 2010
Записи: 255
Да согласен очень четко отслеживает цены и эти 3 фазы что вы указали как раз работают. Но как говориться хотелось бы на полностью функциональный JMA поглядеть wink

Наверх
#36597 - Fri Jan 27 2012 05:35 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: jarilo]
jarilo Offline
enthusiast

Registered: Fri Mar 19 2010
Записи: 255
Вот нашел другой код на mq4 индикатора JMA, не тот из которого был создан SysKreatorom.
Просьба к разработчикам или умельцам поправить для TSLab и скомпилировать JMA.
А так же огромная просьба сделайте JMACD. Тот MACD что есть в TSLab считается на EMA а хотелось бы на JMA. Или поправить тот что в TSLab так чтоб ему на вход можно было подавать любой MA который хочется.
С уважением и надеждой Яр.
Click to reveal..
Code:
#property link "http://www.forex-instruments.info"
//+------------------------------------------------------------------+
//|                                                          JMA.mq4 |
//|                                             Weld, Jurik Research |
//|                                          http://weld.torguem.net |
//+------------------------------------------------------------------+
#property copyright "Weld"
#property link      "http://weld.torguem.net"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Aqua
//---- input parameters
extern int       Length = 14;
extern int       Phase  = 0;
//---- buffers
double JMAValueBuffer [];
double fC0Buffer [];
double fA8Buffer [];
double fC8Buffer [];
//---- temporary buffers
double list[128], ring1[128], ring2[11], buffer[62];
//---- bool flag
bool   initFlag;
//---- integer vars
int    limitValue, startValue, loopParam, loopCriteria;
int    cycleLimit, highLimit, counterA, counterB;
//---- double vars
double cycleDelta, lowDValue, highDValue, absValue, paramA, paramB;
double phaseParam, logParam, JMAValue, series, sValue, sqrtParam, lengthDivider;
//---- temporary int variables
int   s58, s60, s40, s38, s68;
//+------------------------------------------------------------------+
//| JMA initFlagization function                                     |
//+------------------------------------------------------------------+
int init()
  {
   double   lengthParam;
//---- 3 additional buffers are used for counting.
   IndicatorBuffers(4);
//---- drawing settings
   SetIndexStyle  (0, DRAW_LINE);
   SetIndexDrawBegin(0, 30);
//---- 4 indicator buffers mapping
   SetIndexBuffer (0, JMAValueBuffer);
   SetIndexBuffer (1, fC0Buffer);
   SetIndexBuffer (2, fA8Buffer);
   SetIndexBuffer (3, fC8Buffer); 
//---- initialize one buffer (neccessary)   
   ArrayInitialize (ring2, 0);
   ArrayInitialize (ring1, 0); 
   ArrayInitialize (buffer, 0); 
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName ("JMAValue(" + Length + "," + Phase + ")");
   SetIndexLabel (0, "JMAValue");
//---- initial part
   limitValue = 63; 
   startValue = 64;
//----   
   for (int i = 0; i <= limitValue; i++) list [i] = -1000000; 
   for (i = startValue; i <= 127; i++)   list [i] = 1000000; 
//----
   initFlag  = true;
   if (Length < 1.0000000002) lengthParam = 0.0000000001;
   else lengthParam = (Length - 1) / 2.0;
//----   
   if (Phase < -100) phaseParam = 0.5;
   else if (Phase > 100) phaseParam = 2.5;
   else phaseParam = Phase / 100.0 + 1.5;
//----   
   logParam = MathLog (MathSqrt (lengthParam)) / MathLog (2.0);
//----
   if (logParam + 2.0 < 0) logParam = 0;
   else logParam = logParam + 2.0; 
//----
   sqrtParam     = MathSqrt(lengthParam) * logParam; 
   lengthParam   = lengthParam * 0.9; 
   lengthDivider = lengthParam / (lengthParam + 2.0);
//----  
   return;
}
//+------------------------------------------------------------------+
//| JMA iteration function                                           |
//+------------------------------------------------------------------+
int start()
  {

//---- get already counted bars    
   int counted_bars = IndicatorCounted();
//---- check for possible errors
   if (counted_bars < 0) return (-1);
   int limit = Bars - counted_bars - 1;
//---- main cycle
   for (int shift = limit; shift >= 0; shift--) {
      series = Close [shift];
 
      if (loopParam < 61) { 
         loopParam++; 
         buffer [loopParam] = series; 
      } 
      if (loopParam > 30) {
         if (initFlag) { 
            initFlag = false;
             
            int diffFlag = 0; 
            for (int i = 1; i <= 29; i++) { 
               if (buffer [i + 1] != buffer [i]) diffFlag = 1;
            }  
            highLimit = diffFlag * 30;
             
            if (highLimit == 0) paramB = series;
            else paramB = buffer[1];
             
            paramA = paramB; 
            if (highLimit > 29) highLimit = 29; 
         } else 
            highLimit = 0;
//---- big cycle
         for (i = highLimit; i >= 0; i--) { 
			   if (i == 0) sValue = series; else sValue = buffer [31 - i]; 
	    
			   if (MathAbs (sValue - paramA) > MathAbs (sValue - paramB)) absValue = MathAbs(sValue - paramA); else absValue = MathAbs(sValue - paramB); 
			   double dValue = absValue + 0.0000000001; //1.0e-10; 
	
			   if (counterA <= 1) counterA = 127; else counterA--; 
			   if (counterB <= 1) counterB = 10;  else counterB--; 
			   if (cycleLimit < 128) cycleLimit++; 
			   cycleDelta += (dValue - ring2 [counterB]); 
			   ring2 [counterB] = dValue; 
			   if (cycleLimit > 10) highDValue = cycleDelta / 10.0; else highDValue = cycleDelta / cycleLimit; 
			   
			   if (cycleLimit > 127) { 
				   dValue = ring1 [counterA]; 
				   ring1 [counterA] = highDValue; 
				   s68 = 64; s58 = s68; 
				   while (s68 > 1) { 
					   if (list [s58] < dValue) { 
						   s68 = s68 / 2.0; 
						   s58 += s68; 
					   } else 
					   if (list [s58] <= dValue) { 
						   s68 = 1; 
					   } else { 
						   s68 = s68 / 2.0; 
						   s58 -= s68; 
					   }
               } 
            } else {
			      ring1 [counterA] = highDValue; 
			      if ((limitValue + startValue) > 127) {
				      startValue--; 
				      s58 = startValue; 
			      } else {
				      limitValue++; 
				      s58 = limitValue; 
			      }
			      if (limitValue > 96) s38 = 96; else s38 = limitValue; 
			      if (startValue < 32) s40 = 32; else s40 = startValue; 
		      }
//----		      
		      s68 = 64; 
		      s60 = s68; 
		      while (s68 > 1) {
			      if (list [s60] >= highDValue) {
				      if (list [s60 - 1] <= highDValue) {
					      s68 = 1; 
				      }
				      else {
					      s68 = s68 / 2.0; 
					      s60 -= s68; 
				      }
			      }
			      else {
				      s68 = s68 / 2.0; 
				      s60 += s68; 
			      }
			      if ((s60 == 127) && (highDValue > list[127])) s60 = 128; 
		      }
			   if (cycleLimit > 127) {
				   if (s58 >= s60) {
					   if (((s38 + 1) > s60) && ((s40 - 1) < s60)) 
						    lowDValue += highDValue; 
					   else if ((s40 > s60) && ((s40 - 1) < s58)) 
						    lowDValue += list [s40 - 1]; 
				   }
				   else if (s40 >= s60) {
					   if (((s38 + 1) < s60) && ((s38 + 1) > s58)) 
							    lowDValue += list[s38 + 1]; 
					}
				   else if ((s38 + 2) > s60) 
						   lowDValue += highDValue; 
				   else if (((s38 + 1) < s60) && ((s38 + 1) > s58)) 
						   lowDValue += list[s38 + 1]; 
			
				   if (s58 > s60) {
					   if (((s40 - 1) < s58) && ((s38 + 1) > s58)) 
						   lowDValue -= list [s58]; 
					   else if ((s38 < s58) && ((s38 + 1) > s60)) 
						   lowDValue -= list [s38]; 
				   }
				   else {
					   if (((s38 + 1) > s58) && ((s40 - 1) < s58)) 
						   lowDValue -= list [s58]; 
					   else if ((s40 > s58) && (s40 < s60)) 
						   lowDValue -= list [s40]; 
				   }
			   }
			   if (s58 <= s60) {
				   if (s58 >= s60) list[s60] = highDValue; else {
					   for (int j = s58 + 1; j <= (s60 - 1); j++) {
						   list [j - 1] = list[j]; 
					   }
					   list [s60 - 1] = highDValue; 
				   }
			   } else {
				   for (j = s58 - 1; j >= s60; j--) {
					   list [j + 1] = list [j]; 
				   }
				   list [s60] = highDValue; 
			   }
			
			   if (cycleLimit <= 127) {
				   lowDValue = 0; 
				   for (j = s40; j <= s38; j++) {
					   lowDValue += list[j]; 
				   }
			   }
//----			    
			   if ((loopCriteria + 1) > 31) loopCriteria = 31; else loopCriteria++; 
			   double JMATempValue, sqrtDivider = sqrtParam / (sqrtParam + 1.0);
			   
			   if (loopCriteria <= 30) {
				   if (sValue - paramA > 0) paramA = sValue; else paramA = sValue - (sValue - paramA) * sqrtDivider; 
				   if (sValue - paramB < 0) paramB = sValue; else paramB = sValue - (sValue - paramB) * sqrtDivider; 
				   JMATempValue = series;
				 
				   if (loopCriteria == 30) { 
				     fC0Buffer [shift] = series;
				     int intPart;
				      
				     if (MathCeil(sqrtParam) >= 1) intPart = MathCeil(sqrtParam); else intPart = 1; 
				     int leftInt = IntPortion (intPart); 
				     if (MathFloor(sqrtParam) >= 1) intPart = MathFloor(sqrtParam); else intPart = 1; 
				     int rightPart = IntPortion (intPart);
				     
				     if (leftInt == rightPart) dValue = 1.0; 
				     else 
					     dValue = (sqrtParam - rightPart) / (leftInt - rightPart);
			     
				     if (rightPart <= 29) int upShift = rightPart; else upShift = 29; 
				     if (leftInt <= 29) int dnShift = leftInt; else dnShift = 29; 
				     fA8Buffer [shift] = (series - buffer [loopParam - upShift]) * (1 - dValue) / rightPart + (series - buffer[loopParam - dnShift]) * dValue / leftInt;
               }
			   } else {
			      double powerValue, squareValue;
			      
			      dValue = lowDValue / (s38 - s40 + 1);
			      if (0.5 <= logParam - 2.0) powerValue = logParam - 2.0;
               else powerValue = 0.5;
               
				   if (logParam >= MathPow(absValue/dValue, powerValue)) dValue = MathPow (absValue/dValue, powerValue); else dValue = logParam; 
				   if (dValue < 1) dValue = 1;
				    
				   powerValue = MathPow (sqrtDivider, MathSqrt (dValue)); 
				   if (sValue - paramA > 0) paramA = sValue; else paramA = sValue - (sValue - paramA) * powerValue; 
				   if (sValue - paramB < 0) paramB = sValue; else paramB = sValue - (sValue - paramB) * powerValue; 
   		   }
         }
// ---- end of big cycle                  			   
         if (loopCriteria > 30) {
				JMATempValue = JMAValueBuffer [shift + 1];
            powerValue   = MathPow (lengthDivider, dValue);
            squareValue  = MathPow (powerValue, 2);
                         
				fC0Buffer [shift] = (1 - powerValue) * series + powerValue * fC0Buffer [shift + 1];
            fC8Buffer [shift] = (series - fC0Buffer [shift]) * (1 - lengthDivider) + lengthDivider * fC8Buffer [shift + 1];
            
            fA8Buffer [shift] = (phaseParam * fC8Buffer [shift] + fC0Buffer [shift] - JMATempValue) * 
                                 (powerValue * (-2.0) + squareValue + 1) + squareValue * fA8Buffer [shift + 1];  
            JMATempValue += fA8Buffer [shift]; 
         }
         JMAValue = JMATempValue;
      }
      if (loopParam <= 30) JMAValue = 0;
      JMAValueBuffer [shift] = JMAValue;
//---- End of main cycle
   } 
   return;
}

//+------------------------------------------------------------------+
int IntPortion (double param) {
   if (param > 0) return (MathFloor (param));
   if (param < 0) return (MathCeil (param));
   return (0.0);
}
//+------------------------------------------------------------------+
s60)


Attachments
jma.rar (229 downloads)



Отредактировано jarilo (Fri Jan 27 2012 05:39 PM)

Наверх
#37243 - Sat Feb 11 2012 05:27 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: jarilo]
jarilo Offline
enthusiast

Registered: Fri Mar 19 2010
Записи: 255
Не ужели не кто на форуме не может поправить код ?
Я сам до API еще не добрался, времени не хватает. Но думаю там работы от силы минут на 10, исправить объявление переменных сред, синтаксис и все.
Или все только для себя делают а выложить на форум лень?

Наверх
#52446 - Tue Feb 19 2013 01:42 PM Re: #1 / Индикаторы: JMA, WMA, RoC [Re: jarilo]
traregs Offline
stranger

Registered: Tue Feb 19 2013
Записи: 1
Originally Posted By: jarilo
Вот нашел другой код на mq4 индикатора JMA, не тот из которого был создан SysKreatorom.
Просьба к разработчикам или умельцам поправить для TSLab и скомпилировать JMA.
А так же огромная просьба сделайте JMACD. Тот MACD что есть в TSLab считается на EMA а хотелось бы на JMA. Или поправить тот что в TSLab так чтоб ему на вход можно было подавать любой MA который хочется.
С уважением и надеждой Яр.


Есть у меня подозрение, что это - то же самое, но отредактированное. Судя по
Quote:
int s58, s60, s40, s38, s68;
и другим фрагментам - это всё тот же результат декомпиляции. Но кто-то уже поразбирался - "причесал", назвал переменные - насколько угадал логику их использования и т.д.
Не поверите: меньше получаса назад, сам именно этим занимался - код причёсывал именно этого индикатора и логику искал smile

Наверх
Page 1 of 2 1 2 >


Moderator:  ViL, sar