Автор |
Сообщение |
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Привет!
Хотел бы переписать индикатор интересный из МетаТрейдера в Ами
код в метатрейдере тут https://www.mql5.com/ru/code/9087
Я постарался сваять нечто подобное - но не уверен в том, что все правильно сделал - я совсем не в курсе языка этого софта. Проверить 1к1 не получится так как нет Метатрейдера и нужных котировок (и ставить пока нет возможности)
Мой вариант кода
Код: |
UVH = Foreign("UVXY_1", "H");
UVL = Foreign("UVXY_1", "L");
UVC = Foreign("UVXY_1", "Close");
multistep=6;
mirror=True;
OUT = 0;
period=2;
MAs = 0;
for (j=1;j<=multistep;j++)
{
anotherHi=HHV(UVH,period);
anotherLo=LLV(UVL,period);
anotherCl=UVC[j];
anotherWidth=(anotherHi-anotherLo);
Hi=HHV(H,period);
Lo=LLV(L,period);
Width=(Hi-Lo);
if (anotherWidth[j] > 0) {
pos=(anotherCl-anotherLo)/anotherWidth;
} else {
pos=0;
}
if (mirror) {
MAs=MAs+(Hi-pos*Width);
} else {
MAs=MAs+(Lo+pos*Width);
period=period*2;
}
}
OUT = MAs/multistep;
Plot(OUT, "OUT", colorRed);
|
Буду благодарен за помощь в исправлении
Спасибо[/code] |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Вот это:
Код: |
if (anotherWidth[j] > 0) {
pos=(anotherCl-anotherLo)/anotherWidth;
} else {
pos=0;
} |
Замените на это:
Код: |
pos = IIF(anotherWidth > 0, anotherCl-anotherLo)/anotherWidth, 0) |
Остальное правильно. |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Mechanic писал(а): |
Вот это:
Код: |
if (anotherWidth[j] > 0) {
pos=(anotherCl-anotherLo)/anotherWidth;
} else {
pos=0;
} |
Замените на это:
Код: |
pos = IIF(anotherWidth > 0, anotherCl-anotherLo)/anotherWidth, 0) |
Остальное правильно. |
Спасибо большое! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Да, и умножение периода за скобки else вынесите. В общем, вот:
Код: |
UVH = Foreign("UVXY_1", "H");
UVL = Foreign("UVXY_1", "L");
UVC = Foreign("UVXY_1", "Close");
multistep=6;
mirror=True;
OUT = 0;
period=2;
MAs = 0;
for (j=1; j<=multistep; j++)
{
anotherHi=HHV(UVH,period);
anotherLo=LLV(UVL,period);
anotherCl=UVC[j];
anotherWidth=(anotherHi-anotherLo);
Hi=HHV(H,period);
Lo=LLV(L,period);
Width=(Hi-Lo);
pos = IIF(anotherWidth > 0, anotherCl-anotherLo)/anotherWidth, 0);
if (mirror)
MAs=MAs+(Hi-pos*Width);
else
MAs=MAs+(Lo+pos*Width);
period=period*2;
}
OUT = MAs/multistep;
Plot(OUT, "OUT", colorRed); |
|
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Хм. есть "перерисовка" значений графика
- когда двигаешь мышой график - значение индикатора меняется
думал лечить SetBarsRequired( 999999,999999)
но стало только хуже - похоже что-то я все-таки упустил |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Да, вот это я сразу не увидел:
anotherCl=UVC[j];
Не надо тут обращений по индексу j, этот цикл только для пересчёта периода нужен. Обращение везде к тому бару, который в данный момент обсчитывается - в МТ это элемент главного цикла i, а в Ами вообще индекс не нужен. Вот ещё раз "причёсанный" код:
Код: |
Symbol = ParamStr("Foreign Symbol", "UVXY_1");
MultiStep = Param("Multi Step", 6, 1, 20, 1);
Mirror = ParamToggle("Mirror", "NO|YES", 1);
UVH = Foreign(Symbol, "H");
UVL = Foreign(Symbol, "L");
UVC = Foreign(Symbol, "Close");
OUT = 0;
period = 2;
MAs = 0;
for (j = 0; j < multistep; j++)
{
anotherHi = HHV(UVH, period);
anotherLo = LLV(UVL, period);
anotherCl = UVC;
anotherWidth = (anotherHi - anotherLo);
Hi = HHV(H, period);
Lo = LLV(L, period);
Width = (Hi - Lo);
pos = IIF(anotherWidth > 0, (anotherCl - anotherLo) / anotherWidth, 0);
if (mirror)
MAs = MAs + (Hi - pos * Width);
else
MAs = MAs + (Lo + pos * Width);
period = period * 2;
}
OUT = MAs / multistep;
Plot(OUT, "OUT", colorRed, styleHistogram|ParamStyle("Style")); |
|
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Спасибо большое!
Теперь все ок |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|