Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Клон с Метатрейдера Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
max



Зарегистрирован: 01.08.2008
Сообщения: 253

СообщениеДобавлено: Вс Фев 08, 2015 10:06 pm Ответить с цитатой Вернуться к началу

Привет!
Хотел бы переписать индикатор интересный из МетаТрейдера в Ами
код в метатрейдере тут 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

СообщениеДобавлено: Вт Фев 10, 2015 6:30 am Ответить с цитатой Вернуться к началу

Вот это:

Код:
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

СообщениеДобавлено: Вт Фев 10, 2015 7:12 am Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Вт Фев 10, 2015 7:17 am Ответить с цитатой Вернуться к началу

Да, и умножение периода за скобки 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

СообщениеДобавлено: Вт Фев 10, 2015 7:29 am Ответить с цитатой Вернуться к началу

Хм. есть "перерисовка" значений графика
- когда двигаешь мышой график - значение индикатора меняется
думал лечить SetBarsRequired( 999999,999999)
но стало только хуже - похоже что-то я все-таки упустил
Посмотреть профиль Отправить личное сообщение
Mechanic



Зарегистрирован: 10.06.2008
Сообщения: 359

СообщениеДобавлено: Вт Фев 10, 2015 8:01 am Ответить с цитатой Вернуться к началу

Да, вот это я сразу не увидел:

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

СообщениеДобавлено: Вт Фев 10, 2015 8:38 am Ответить с цитатой Вернуться к началу

Спасибо большое!
Теперь все ок
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen