#36116 - Fri Jan 20 2012 04:59 PM
Re: #1 / Индикаторы: JMA, WMA, RoC
[Re: vito333]
|
enthusiast
Registered: Fri Mar 19 2010
Записи: 255
|
прекрасно работает, и 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]
|
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]
|
enthusiast
Registered: Fri Mar 19 2010
Записи: 255
|
Фаза 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]
|
Pooh-Bah
Registered: Wed Oct 26 2011
Записи: 2108
Loc: botland
|
нет, это я сделал по быстрому jma сглаженную jma же если jma работала бы корректно, то и дважды сглаженная - тоже http://codebase.mql4.com/ru/1356
|
Наверх
|
|
|
|
#36144 - Sat Jan 21 2012 07:53 AM
Re: #1 / Индикаторы: JMA, WMA, RoC
[Re: vito333]
|
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]
|
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]
|
Pooh-Bah
Registered: Wed Oct 26 2011
Записи: 2108
Loc: botland
|
ну нет так нет на самом деле jma с "неправильными" фазами всё равно хорошо работает, у меня в ходе использования обычно фазы 100, -100, 0 требовались
|
Наверх
|
|
|
|
#36597 - Fri Jan 27 2012 05:35 PM
Re: #1 / Индикаторы: JMA, WMA, RoC
[Re: jarilo]
|
enthusiast
Registered: Fri Mar 19 2010
Записи: 255
|
Вот нашел другой код на mq4 индикатора JMA, не тот из которого был создан SysKreatorom. Просьба к разработчикам или умельцам поправить для TSLab и скомпилировать JMA. А так же огромная просьба сделайте JMACD. Тот MACD что есть в TSLab считается на EMA а хотелось бы на JMA. Или поправить тот что в TSLab так чтоб ему на вход можно было подавать любой MA который хочется. С уважением и надеждой Яр. #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]
|
enthusiast
Registered: Fri Mar 19 2010
Записи: 255
|
Не ужели не кто на форуме не может поправить код ? Я сам до API еще не добрался, времени не хватает. Но думаю там работы от силы минут на 10, исправить объявление переменных сред, синтаксис и все. Или все только для себя делают а выложить на форум лень?
|
Наверх
|
|
|
|
#52446 - Tue Feb 19 2013 01:42 PM
Re: #1 / Индикаторы: JMA, WMA, RoC
[Re: jarilo]
|
stranger
Registered: Tue Feb 19 2013
Записи: 1
|
Вот нашел другой код на mq4 индикатора JMA, не тот из которого был создан SysKreatorom. Просьба к разработчикам или умельцам поправить для TSLab и скомпилировать JMA. А так же огромная просьба сделайте JMACD. Тот MACD что есть в TSLab считается на EMA а хотелось бы на JMA. Или поправить тот что в TSLab так чтоб ему на вход можно было подавать любой MA который хочется. С уважением и надеждой Яр. Есть у меня подозрение, что это - то же самое, но отредактированное. Судя по int s58, s60, s40, s38, s68; и другим фрагментам - это всё тот же результат декомпиляции. Но кто-то уже поразбирался - "причесал", назвал переменные - насколько угадал логику их использования и т.д. Не поверите: меньше получаса назад, сам именно этим занимался - код причёсывал именно этого индикатора и логику искал
|
Наверх
|
|
|
|
|
|