У вас не стоит Flash Player
Page 2 of 2 < 1 2
Настройки
#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 2 of 2 < 1 2


Moderator:  ViL, sar