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


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

СообщениеДобавлено: Сб Янв 24, 2009 10:03 pm Ответить с цитатой Вернуться к началу

commenced писал(а):

Заменил эту часть чтоб брался не минимум а максимум выдает бред и график плывет, почему?

у тебя в этом случае не выполняется условие пересечения с хаем-лоу

всегда
Low > close-max(H-L)
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Сб Янв 24, 2009 10:21 pm Ответить с цитатой Вернуться к началу

BabyBear писал(а):
commenced писал(а):

Заменил эту часть чтоб брался не минимум а максимум выдает бред и график плывет, почему?

у тебя в этом случае не выполняется условие пересечения с хаем-лоу


Странно, но решаемо.


Почему если после цикла написать:
cond1 = d1>g1 AND g1<H;
cond2 =d>g AND g>L;

Точки выполнения условия не совподают с расчитываемыми циклом, ведь переворот линии произходит на баре выполнения условия if( (d1[i] < g1[i]) && ( g1[i] < High[i]))

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
BabyBear
Советник


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

СообщениеДобавлено: Сб Янв 24, 2009 10:29 pm Ответить с цитатой Вернуться к началу

потому что это - условия включения "условия". а выключается оно противоположным условием
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вс Янв 25, 2009 12:32 am Ответить с цитатой Вернуться к началу

BabyBear писал(а):
потому что это - условия включения "условия". а выключается оно противоположным условием


Не понял поясни пожалуста.

Если выполнено условие такое, то включаем такое, а раз мы его включили то то беря значения из цикла мы должны получить идентичные точки

т.е. почему точка переворота if( (d1[i] < g1[i]) && ( g1[i] < High[i]))

не совподает с

cond1 = d1>g1 AND g1<H;

просто если это не так, то как я задам цену при достижении которой произойдет переворот линии

По идее, Price = max(o,g1); это будет правильная запись?

Для проверки кода произвел замену в берем мин l прибавляем 2*мин(H-L) так вот не совпадает значение линии расчитываемой циклом с линией получаемой без него

1. график
d = Ref(HHV(L,6)-2*LLV(H-L,6),-1);

Plot(d,"d", 4,1);

Конечноже сравнивал значение линии через 6 баров после переворота.

2.график

Код:
C1 = Ref(L,-1);
C2 = Ref(H,-1);

S1 = Ref(H-L, -1);

period = Optimize("P", 1, 1, 18, 1);

g = C1;
g1 = C2;

for( i=0; i<period ; i++)
{
   g[i] = C1[i] - S1[i];
   g1[i] = C2[i] + S1[i];
}

bar1 = period;
bar2 = period;
sig1 = True;
sig2 = False;

asig1 = True;
asig2 = False;

 
my_llv=0;
my_llv1=0;
my_hhh=0;
my_lll=0;



for( i=period; i<BarCount; i++)
{
     
      my_lll[i] = c1[ bar2];
      my_llv[i] = S1[ bar2];
   
      for( j = bar2 + 1; j<i; j++)
      {
               
         if( my_llv[i] > S1[ j])
            my_llv[i] = S1[ j];
         if( my_lll[i] < c1[ j])
            my_lll[i] = c1[ j];
      }
      g[i] = my_lll[i]  - 2*my_llv[i];

     
my_llv1[i] = S1[ bar1];
my_hhh[i] = C2[ bar1];
   

      for( j = bar1 + 1; j<i; j++)
      {
         
      if( my_llv1[i] > S1[ j])
            my_llv1[i] = S1[ j];
   if( my_hhh[i] > C2[ j])
            my_hhh[i] = C2[ j];
 
      }
      g1[i] = my_hhh[i] + 2*my_llv[i];


   // здесь не ema, но средняя
   d[i] = 0;
   d1[i] = 0;
   for( j= i-period; j<i; j++)
   {
      d[i] = d[i] + g[j] / period;
      d1[i] = d1[i] + g1[j] / period;
   }

   if ( sig2)
      if( ( g1[i] < High[i]))
      {
         sig1 = True;
         sig2 = False;
         bar1 = i;
      }
       

   if ( sig1)
      if( ( g[i] > Low[i]))
      {
         sig1 = False;
         sig2 = True;
         bar2 = i;
      }

   asig1[i] = sig1;
   asig2[i] = sig2;
}

g = EMA(C,60);

Buy = asig1;
Sell =asig2;
Short = 0;
Cover = 0;
Equity(1);
BuyPrice = Max(O,g1);
SellPrice = Min(O,g); 


Plot(IIf( asig1, g, g1),"IIf( asig1, g, g1)", 4,1);

Plot( Close, "", colorBlack, styleCandle);

PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Sell,shapeDownArrow,0),4,0,Graph0,-15);
PlotShapes(IIf(Cover,shapeHollowUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Short,shapeHollowDownArrow,0),4,0,Graph0,-15);



Для наглядности и фильтрации точки переворотов обозначаются стрелками Buy и Sell. И еще не совсем понятно почему линия почти все время выше лоу причем даже в моменты когда расчет линии ведется для растущего рынка мак( L)-2*мин(h-l) да фильтр в виде d убран

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вс Янв 25, 2009 12:36 am Ответить с цитатой Вернуться к началу

BabyBear писал(а):
commenced писал(а):

Заменил эту часть чтоб брался не минимум а максимум выдает бред и график плывет, почему?

у тебя в этом случае не выполняется условие пересечения с хаем-лоу

всегда
Low > close-max(H-L)


Ка это всегда, у нас вроде условие L>ref(c,-1)-ref(max(h-l),-1); так в начале кода написано, если в процессе цикла верной становиться твоя запись, то подскажи как сделать ее помоему иначе теряется смысл.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
BabyBear
Советник


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

СообщениеДобавлено: Вс Янв 25, 2009 12:53 am Ответить с цитатой Вернуться к началу

commenced писал(а):
BabyBear писал(а):
commenced писал(а):

Заменил эту часть чтоб брался не минимум а максимум выдает бред и график плывет, почему?

у тебя в этом случае не выполняется условие пересечения с хаем-лоу

всегда
Low > close-max(H-L)


Ка это всегда, у нас вроде условие L>ref(c,-1)-ref(max(h-l),-1); так в начале кода написано, если в процессе цикла верной становиться твоя запись, то подскажи как сделать ее помоему иначе теряется смысл.

у нас min
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вс Янв 25, 2009 10:31 am Ответить с цитатой Вернуться к началу

BabyBear писал(а):
commenced писал(а):
BabyBear писал(а):
commenced писал(а):

Заменил эту часть чтоб брался не минимум а максимум выдает бред и график плывет, почему?

у тебя в этом случае не выполняется условие пересечения с хаем-лоу

всегда
Low > close-max(H-L)


Ка это всегда, у нас вроде условие L>ref(c,-1)-ref(max(h-l),-1); так в начале кода написано, если в процессе цикла верной становиться твоя запись, то подскажи как сделать ее помоему иначе теряется смысл.

у нас min


Я и с мак пробывал Smile Так все таки когда цикл проверяет условие он берет значения Ref или нет, а L есно текущий?
C1 = Ref(L,-1);
C2 = Ref(H,-1);

S1 = Ref(H-L, -1);
g[i] = my_lll[i] - 2*my_llv[i];

f( (d[i] < g[i]) && ( g[i] < High[i]));

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вс Янв 25, 2009 11:17 am Ответить с цитатой Вернуться к началу

Посмотри, линия g растет, но лоу на этих барах ниже чем на предыдущих хотя g = макс лоу - макс (H-l) , т.е. линия должна быть прямой либо падать если появиться (h-l) еще больше но рости она может только при росте L, а его нет.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
BabyBear
Советник


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

СообщениеДобавлено: Вс Янв 25, 2009 2:47 pm Ответить с цитатой Вернуться к началу

g = EMA(C,60);
это что?
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вс Янв 25, 2009 3:09 pm Ответить с цитатой Вернуться к началу

BabyBear писал(а):
g = EMA(C,60);
это что?


В данном случае не важно, это я хвостит от одной из идей. Посмотри этот код



Код:
C2 = Ref(H,-1);
C1 =Ref(L, -1);
S1 = Ref( High - Low, -1);

period = Optimize("P1", 2, 1, 18, 1);

g = (C1+C2)/2;
g1 = (c1+C2)/2;

for( i=0; i<period ; i++)
{
   g[i] = (C1[i]+C2[i])/2 - S1[i];
   g1[i] = (C1[i]+C2[i])/2 + S1[i];
}

bar1 = period ;
bar2 = period ;
sig1 = True;
sig2 = False;

asig1 = True;
asig2 = False;

my_llv=0;
my_llv1=0;
my_hhv=0;
my_hhv1=0;


my_llh1=0;
my_hhl=0;


for( i=period+1; i<BarCount; i++)
{
   
      my_hhl[i] = C1[ bar2];
      my_hhv[i] = S1[ bar2];
      my_llv[i] = S1[ bar2];
      for( j = bar2 + 1; j<i; j++)
      {
         if( my_llv[i] > S1[ j])
            my_llv[i] = S1[ j];

         if( my_hhl[i] < c1[ j])
            my_hhl[i] = c1[ j];
         if( my_hhv[i] < S1[ j])
            my_hhv[i] = S1[ j];
      }
      g[i] = my_hhl[i] - my_hhv[i];

   
      my_llh1[i] = C2[ bar1];
      my_hhv1[i] = S1[ bar1];
      my_llv1[i] = S1[ bar1];
      for( j = bar1 + 1; j<i; j++)
      {
         if( my_llv1[i] > S1[ j])
            my_llv1[i] = S1[ j];
         if( my_llh1[i] > C2[ j])
            my_llh1[i] = C2[ j];


         if( my_hhv1[i] < S1[ j])
            my_hhv1[i] = S1[ j];
      }
      g1[i] = my_llh1[i] + my_hhv1[i];
;


   // здесь не ema, но средняя
   d[i] = 0;
   d1[i] = 0;
   for( j= i-period; j<i; j++)
   {
      d[i] = d[i] + g[j] / period;
      d1[i] = d1[i] + g1[j] / period;
   }

   if ( sig2)
      if( (d1[i] < g1[i]) && ( g1[i] < High[i]))      {
         sig1 = True;
         sig2 = False;
         bar1 = i;
      }
       

   if ( sig1)
      if( (d[i] < g[i]) && ( g[i] > Low[i]))
      {
         sig1 = False;
         sig2 = True;
         bar2 = i;
      }

   asig1[i] = sig1;
   asig2[i] = sig2;
}

Buy = asig1;
Sell =asig2;
Short = Sell;
Cover = Buy;
Equity(1);
BuyPrice = CoverPrice = Max(O,g1);
SellPrice = ShortPrice = Min(O,g); 

Plot( IIf( asig1, g, g1), "", IIf( asig1, colorRed, colorBlue), styleDots  );




Plot( Close, "", colorBlack, styleCandle);

PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Sell,shapeDownArrow,0),4,0,Graph0,-15);
PlotShapes(IIf(Cover,shapeHollowUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Short,shapeHollowDownArrow,0),4,0,Graph0,-15);


Мне кажется вся проблема кода в том что, для того чтобы можно было легко оперировать правилами построения линии в условии if( (d1[i] < g1[i]) && ( g1[i] < High[i])) { значения d1 g1 должны браться с прошлого бара, а H с текущего как я и писал когда описывал что мне нужно.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Амиброкеровец



Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия

СообщениеДобавлено: Ср Янв 28, 2009 10:55 pm Ответить с цитатой Вернуться к началу

Есть вопрос:

как написать такой цикл, чтобы он находил самое большое закрытие за последние 5 баров, думаю это совсем просто, а я чего то в циклах амиброкерских не соображаю
Посмотреть профиль Отправить личное сообщение
BabyBear
Советник


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

СообщениеДобавлено: Ср Янв 28, 2009 10:57 pm Ответить с цитатой Вернуться к началу

reg4all писал(а):
Есть вопрос:

как написать такой цикл, чтобы он находил самое большое закрытие за последние 5 баров, думаю это совсем просто, а я чего то в циклах амиброкерских не соображаю

А чем не устраивает

SYNTAX hhv( ARRAY, periods )
RETURNS ARRAY
FUNCTION Calculates the highest value in the ARRAY over the preceding periods (periods includes the current day).

Это просто получится hhv(close,5)
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Амиброкеровец



Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия

СообщениеДобавлено: Ср Янв 28, 2009 11:25 pm Ответить с цитатой Вернуться к началу

BabyBear писал(а):
reg4all писал(а):
Есть вопрос:

как написать такой цикл, чтобы он находил самое большое закрытие за последние 5 баров, думаю это совсем просто, а я чего то в циклах амиброкерских не соображаю

А чем не устраивает

SYNTAX hhv( ARRAY, periods )
RETURNS ARRAY
FUNCTION Calculates the highest value in the ARRAY over the preceding periods (periods includes the current day).

Это просто получится hhv(close,5)


Спасибо, BabyBear, значит я плохо ознакомился с разделом функций "Lowest/Highest"
Посмотреть профиль Отправить личное сообщение
ID
Советник


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

СообщениеДобавлено: Пт Мар 06, 2009 12:13 pm Ответить с цитатой Вернуться к началу

Олег, дарова

Вот я пишу код:
Код:
for(i=2;i<BarCount;i++)
{
   if(i==2)
   {
      revers_down[i]=   revers_down[i];
      revers_up[i]=      revers_up[i];
   }
   
   else
   {
      revers_down[i]=   Null;
      revers_up[i]=      Null;
   }
}

По идее он должен давать значения со второго бара тикера, а почему он дает значения для первых трех баров тикера???
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

ID писал(а):

По идее он должен давать значения со второго бара тикера, а почему он дает значения для первых трех баров тикера???

Только не со второго. Первый нулевой. Проврил таким кодом
Код:

for(i=2;i<BarCount;i++)
{
   if(i==2)
   {
      revers_down[i]=   1;
      revers_up[i]=      1;
   }
   
   else
   {
      revers_down[i]=   Null;
      revers_up[i]=      Null;
   }
}
Plot(revers_down, "", colorRed);

На третьем баре 1, на первых двух = ноль... Sad

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen