Автор |
Сообщение |
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
commenced писал(а): |
Заменил эту часть чтоб брался не минимум а максимум выдает бред и график плывет, почему? |
у тебя в этом случае не выполняется условие пересечения с хаем-лоу
всегда
Low > close-max(H-L) |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
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
|
потому что это - условия включения "условия". а выключается оно противоположным условием |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
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
Откуда: от "Верблюда"
|
BabyBear писал(а): |
commenced писал(а): |
Заменил эту часть чтоб брался не минимум а максимум выдает бред и график плывет, почему? |
у тебя в этом случае не выполняется условие пересечения с хаем-лоу
всегда
Low > close-max(H-L) |
Ка это всегда, у нас вроде условие L>ref(c,-1)-ref(max(h-l),-1); так в начале кода написано, если в процессе цикла верной становиться твоя запись, то подскажи как сделать ее помоему иначе теряется смысл. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
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
Откуда: от "Верблюда"
|
BabyBear писал(а): |
commenced писал(а): |
BabyBear писал(а): |
commenced писал(а): |
Заменил эту часть чтоб брался не минимум а максимум выдает бред и график плывет, почему? |
у тебя в этом случае не выполняется условие пересечения с хаем-лоу
всегда
Low > close-max(H-L) |
Ка это всегда, у нас вроде условие L>ref(c,-1)-ref(max(h-l),-1); так в начале кода написано, если в процессе цикла верной становиться твоя запись, то подскажи как сделать ее помоему иначе теряется смысл. |
у нас min |
Я и с мак пробывал Так все таки когда цикл проверяет условие он берет значения 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
Откуда: от "Верблюда"
|
Посмотри, линия g растет, но лоу на этих барах ниже чем на предыдущих хотя g = макс лоу - макс (H-l) , т.е. линия должна быть прямой либо падать если появиться (h-l) еще больше но рости она может только при росте L, а его нет. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
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
Откуда: Воображляндия
|
Есть вопрос:
как написать такой цикл, чтобы он находил самое большое закрытие за последние 5 баров, думаю это совсем просто, а я чего то в циклах амиброкерских не соображаю |
|
|
Посмотреть профиль Отправить личное сообщение |
|
BabyBear
Советник
Зарегистрирован: 10.12.2008
Сообщения: 53
|
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
Откуда: Воображляндия
|
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
|
Олег, дарова
Вот я пишу код:
Код: |
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
|
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, на первых двух = ноль... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|