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



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

СообщениеДобавлено: Сб Фев 24, 2018 11:18 pm Ответить с цитатой Вернуться к началу

Только начал изучать Ами, хочу провести исследование по дням недели, т.е. например, если понед. клоуз, меньше клоуз пятницы, а клоуз вторника меньше понедельника, то среда будет растущей или падающей. Приер есть в книге Кауфмана, а так же код для омеги. Код прикрепляю.
[LegacyColorValue = true];

{Weekday Study }
{ Copyright 1985-1999, 2011. PJ Kaufman. All rights reserved. }

vars: dow(0), dir(0), ix(0),iy(0), error(0), Mon(0), day2(0), day3(0), day4(0),
day5(0),div(0), pc(0);
arrays:Tues[2](0), Wed[4](0), Thurs[8](0), Fri[16](0), pattern[5](0),
n2[2](0), n3[4](0), n4[8](0), n5[16](0);

{ create full pattern for week before entered values in case incomplete }
dow = dayofweek(date);

if currentbar = 1 then begin
Tues[1] = 10; Tues[2] = 11;
Wed[1] = 101; Wed[2] = 100; Wed[3] = 111; Wed[4] = 110;
Thurs[1] = 1011; Thurs[2] = 1010; Thurs[3] = 1001; Thurs[4] = 1000;
Thurs[5] = 1111; Thurs[6] = 1110; Thurs[7] = 1101; Thurs[8] = 1100;
Fri[1] = 10111; Fri[2] = 10110; Fri[3] = 10101; Fri[4] = 10100;
Fri[5] = 10011; Fri[6] = 10010; Fri[7] = 10001; Fri[8] = 10000;
Fri[9] = 11111; Fri[10] = 11110; Fri[11] = 11101; Fri[12] = 11100;
Fri[13] = 11011; Fri[14] = 11010; Fri[15] = 11001; Fri[16] = 11000;
end;

{ Monday }
if dow = 1 then begin
for ix = 1 to 5 begin
pattern[ix] = 0;
end;
if close > close[1] then pattern[1] = 1 else pattern[1] = -1;
end;
{ Tuesday }
if dow = 2 then begin
if close > close[1] then pattern[2] = 1 else pattern[2] = -1;
end;
{ Wednesday }
if dow = 3 then begin
if close > close[1] then pattern[3] = 1 else pattern[3] = -1;
end;
{ Thursday }
if dow = 4 then begin
if close > close[1] then pattern[4] = 1 else pattern[4] = -1;
end;
{ Friday }
if dow = 5 then begin
if close > close[1] then pattern[5] = 1 else pattern[5] = -1;
error = 0;
{ process pattern for entire week, convert to pattern beginning with 1 }
{ print (pattern[1]:3:3, pattern[2]:3:3, pattern[3]:3:3, pattern[4]:3:3, pattern[5]:3:3); }
for ix = 2 to 5 begin
if pattern[ix] = 0 then error = 1;
if error = 0 then begin
if pattern[ix] * pattern[1] > 0 then pattern[ix] = 1 else pattern[ix] = 0;
end;
end;
pattern[1] = 1;
{ print (pattern[1]:3:0, pattern[2]:3:0, pattern[3]:3:0, pattern[4]:3:0, pattern[5]:3:0); }
if error = 0 then begin
{ create a value for each day }
Mon = Mon + 1;
day2 = 10 + pattern[2];
day3 = 100 + pattern[2]*10 + pattern[3];
day4 = 1000 + pattern[2]*100 + pattern[3]*10 + pattern[4];
day5 = 10000 + pattern[2]*1000 + pattern[3]*100 +
pattern[4]*10 + pattern[5];
{ match each pattern and add to number of cases }
if day2 = Tues[1] then n2[1] = n2[1] + 1 else n2[2] = n2[2] + 1;
for ix = 1 to 4 begin
if day3 = Wed[ix] then n3[ix] = n3[ix] + 1;
end;
for ix = 1 to 8 begin
if day4 = Thurs[ix] then n4[ix] = n4[ix] + 1;
end;
for ix = 1 to 16 begin
if day5 = Fri[ix] then n5[ix] = n5[ix] + 1;
end;
end;
{ print (pattern[1]:3:0, pattern[2]:3:0, pattern[3]:3:0, pattern[4]:3:0, pattern[5]:3:0,
Mon:4:0, day2:3:0, day3:4:0, day4:5:0, day5:6:0); }
end;

if lastbaronchart then begin
print (file("c:\TSM5\Weekday study.csv")," Monday =, 1, 100%, cases =,", mon:5:0);

print (file("c:\TSM5\Weekday study.csv"),"Tuesday");
for ix = 1 to 2 begin
div = intportion((ix+1)/2);
pc = n2[ix]*100/Mon;
print (file("c:\TSM5\Weekday study.csv"),Tues[ix]:5:0, ",", n2[ix]:4:0, ",", pc:4:0);
end;
print (file("c:\TSM5\Weekday study.csv"),"Wednesday");
for ix = 1 to 4 begin
div = intportion((ix+1)/2);
pc = n3[ix]*100/n2[div];
print (file("c:\TSM5\Weekday study.csv"),Wed[ix]:5:0, ",", n3[ix]:4:0, ",", pc:4:0);
end;
print (file("c:\TSM5\Weekday study.csv"),"Thursday");
for ix = 1 to 8 begin
div = intportion((ix+1)/2);
pc = n4[ix]*100/n3[div];
print (file("c:\TSM5\Weekday study.csv"),Thurs[ix]:5:0, ",", n4[ix]:4:0, ",", pc:4:0);
end;
print (file("c:\TSM5\Weekday study.csv"),"Friday");
for ix = 1 to 16 begin
div = intportion((ix+1)/2);
pc = n5[ix]*100/n4[div];
print (file("c:\TSM5\Weekday study.csv"),Fri[ix]:5:0, ",", n5[ix]:4:0, ",", pc:4:0);
end;
end;
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Фев 25, 2018 12:15 pm Ответить с цитатой Вернуться к началу

А можешь сюда из Кауфмана описание скопировать?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Shark77



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

СообщениеДобавлено: Вс Фев 25, 2018 4:22 pm Ответить с цитатой Вернуться к началу

000 писал(а):
А можешь сюда из Кауфмана описание скопировать?

Спасибо большое за столь быстрый ответ.
Описание: Первый шаг состоит в определении модели для рабочей недели. Это делается с точки зрения движения от пятницы к понедельнику (от закрытия до закрытия). Понедельнику всегда присваивается Х независимо от того , куда направленно движение после пятницы, вверх или вниз. Каждый день закрывающийся в направлении пятница - понедельник, так же обозначается символом Х. Если при закрытии направление меняется, для обозначения используется О. Следовательно, ХОХХО означает, что вторник и пятница обозначенные символом О, закрылись против направления пятница - понедельник, а среда и четверг - в том же направлении.
Хотелось бы построить исследование. МОжно конечно пойти простым путем С>REF (C-1 ) и т.д. но получается очень много вариантов, хотелось бы как-то проще сделать.
P.S.Может в личку лучше писать, тема то рабочая?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Фев 25, 2018 6:12 pm Ответить с цитатой Вернуться к началу

Ок. Вот получили мы эти ХОХХО для каждой недели. Их вывести в файл?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Shark77



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

СообщениеДобавлено: Вс Фев 25, 2018 8:14 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Ок. Вот получили мы эти ХОХХО для каждой недели. Их вывести в файл?

Да именно так.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Фев 26, 2018 6:00 pm Ответить с цитатой Вернуться к началу

Как то вот так. Код плохой. Я накидал побыстрому, смотрю если день недели пропущен (торгов не было) т косяк... Я давай лепить заплатки...
Код надо засунуть в АА и сделать Explore. В настройках АА поставить дневки. Код создаст .csv файлы имя_тикера.csv

Код:

DT = DateTime();
DW = DayOfWeek();

CHANGE = IIf(C - Ref(C, -1) > 0, 1, 0);
str = si = "";
ch = count = 0;
for(i = 1; i < BarCount; i++)
{
   if(i == 1)
   fdelete( Name() + ".csv" );
   
   if(DW[i] == 1)
   {
      ch = CHANGE[i];
      fh = fopen( Name() + ".csv", "a");
      if( fh )
      {
         fputs(str + "\n", fh);
         fclose( fh );
      }
      
      str = DateTimeToStr( DT[i], mode = 1 ) + ", " + "X";
      count = 1;
   }
   else
   {
      count++;
      if(count <= 5)
      {
         if(DW[i] == count)
         {
            if( CHANGE[i] == ch)
               si = "X";
            else
               si = "0";
            str = str + si;
         }
         else
         {
            if(count <= DW[i])
            {
               si = "";
               if(DW[i] - count == 1)
                  si = "_";
               if(DW[i] - count == 2)
                  si = "__";
               if( CHANGE[i] == ch)
                  si = si + "X";
               else
                  si = si + "0";
               str = str + si;
               
               count = Max(DW[i], count);
            }
            if(DW[i] < count)
               count = 6;
         }
      }
   }
}

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Shark77



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

СообщениеДобавлено: Пн Фев 26, 2018 8:41 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Как то вот так. Код плохой. Я накидал побыстрому, смотрю если день недели пропущен (торгов не было) т косяк... Я давай лепить заплатки...
Код надо засунуть в АА и сделать Explore. В настройках АА поставить дневки. Код создаст .csv файлы имя_тикера.csv

Код:

DT = DateTime();
DW = DayOfWeek();

CHANGE = IIf(C - Ref(C, -1) > 0, 1, 0);
str = si = "";
ch = count = 0;
for(i = 1; i < BarCount; i++)
{
   if(i == 1)
   fdelete( Name() + ".csv" );
   
   if(DW[i] == 1)
   {
      ch = CHANGE[i];
      fh = fopen( Name() + ".csv", "a");
      if( fh )
      {
         fputs(str + "\n", fh);
         fclose( fh );
      }
      
      str = DateTimeToStr( DT[i], mode = 1 ) + ", " + "X";
      count = 1;
   }
   else
   {
      count++;
      if(count <= 5)
      {
         if(DW[i] == count)
         {
            if( CHANGE[i] == ch)
               si = "X";
            else
               si = "0";
            str = str + si;
         }
         else
         {
            if(count <= DW[i])
            {
               si = "";
               if(DW[i] - count == 1)
                  si = "_";
               if(DW[i] - count == 2)
                  si = "__";
               if( CHANGE[i] == ch)
                  si = si + "X";
               else
                  si = si + "0";
               str = str + si;
               
               count = Max(DW[i], count);
            }
            if(DW[i] < count)
               count = 6;
         }
      }
   }
}


Буду проверять, большое спасибо. Отпишусь
Посмотреть профиль Отправить личное сообщение
Shark77



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

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

000 писал(а):
Как то вот так. Код плохой. Я накидал побыстрому, смотрю если день недели пропущен (торгов не было) т косяк... Я давай лепить заплатки...
Код надо засунуть в АА и сделать Explore. В настройках АА поставить дневки. Код создаст .csv файлы имя_тикера.csv

Олег, сам не разберусь, выделил ошибку в строке, что может быть? Заранее спасибо.

Код:

DT = DateTime();
DW = DayOfWeek();

CHANGE = IIf(C - Ref(C, -1) > 0, 1, 0);
str = si = "";
ch = count = 0;
for(i = 1; i < BarCount; i++)
{
   if(i == 1)
   fdelete( Name() + ".csv" );
   
   if(DW[i] == 1)
   {
      ch = CHANGE[i];
      fh = fopen( Name() + ".csv", "a");
      if( fh )
      {
         fputs(str + "\n", fh);
         fclose( fh );
      }
      
    [str = DateTimeToStr( DT[i], mode = 1 ) + ", " + "X"; // ОШИБКА
      count = 1;
   }
   else
   {
      count++;
      if(count <= 5)
      {
         if(DW[i] == count)
         {
            if( CHANGE[i] == ch)
               si = "X";
            else
               si = "0";
            str = str + si;
         }
         else
         {
            if(count <= DW[i])
            {
               si = "";
               if(DW[i] - count == 1)
                  si = "_";
               if(DW[i] - count == 2)
                  si = "__";
               if( CHANGE[i] == ch)
                  si = si + "X";
               else
                  si = si + "0";
               str = str + si;
               
               count = Max(DW[i], count);
            }
            if(DW[i] < count)
               count = 6;
         }
      }
   }
}
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Какая версия Ами? На что конкретно ругается?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Shark77



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

СообщениеДобавлено: Вт Фев 27, 2018 12:26 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Какая версия Ами? На что конкретно ругается?

Версия 5.7
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Фев 27, 2018 2:29 pm Ответить с цитатой Вернуться к началу

Блин. Попробуй заменить строку на str = DateTimeToStr( DT[i] ) + ", " + "X";

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Shark77



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

СообщениеДобавлено: Вт Фев 27, 2018 8:59 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Блин. Попробуй заменить строку на str = DateTimeToStr( DT[i] ) + ", " + "X";

Спасибо, все работает. Только не пойму где теперь файл искать?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

В папке куда установлен Ами.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Shark77



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

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

000 писал(а):
В папке куда установлен Ами.

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen