Автор Тема: EasyLanguage  (Прочитано 52339 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Craft

  • Гость
EasyLanguage
« Ответ #20 : 28 Октября 2012, 14:11:32 »
Да, начальный (в МТ перебор баров можно осуществлять, как слева направо, так и наоборот (в данном случае это и используется) - в ТС перебор слева направо).
Первоначально сдвиг (shift) = 0;
Определяется время начала этого бара;
По найденному времени находится первый бар младшего т/ф;
Определяется kolvo баров младшего т/ф входящих в бар старшего т/ф;
И начинается перебор - учёт всех младших баров в старшем т/ф: for (int i=a;i>=kolvo;i--),
Далее происходит сдвиг на следующий бар и всё по новой...

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #21 : 28 Октября 2012, 14:39:41 »
ну тогда действительно не вижу особой проблемы использовать два таймфрейма, как советовал Павел сразу

принцип такой

data1 - 240 мин
data2 - 1 мин

на каждом баре минуток вычисляется некоторый параметр и суммируется (накапливается), т.е. меняется раз минуту.
на data1 мы обращаемся к data2 при каждом изменении этого параметра и имеем накопленный результат на момент закрытия 4х часового бара или накопленные 240 изменений параметра.

не вижу причин что бы это не работало..
и не нужно никаких счётчиков


Craft

  • Гость
EasyLanguage
« Ответ #22 : 28 Октября 2012, 15:23:26 »
Ок, попробуйте посчитать, для начала, количество минуток закрывшихся с понижением data2 - 1 мин, внутри data1 - 240 мин.
Может я чего-нибудь не так понимаю (по этой причине не показываю свои попытки, чтобы не сбить с толку возможной ошибкой).

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #23 : 28 Октября 2012, 15:41:11 »
ну както так думаю

if Close Data2 < Open Data2 then kolvo = kolvo + 1;

и обнулять kolvo при открытии нового бара 240

Craft

  • Гость
EasyLanguage
« Ответ #24 : 28 Октября 2012, 15:47:42 »
))) ihaar, ну конкретней с Plot1(kolvo,"kolvo"), что получается?

P. S. Ещё, наверное, логичнее сравнивать изменение последнего Close[0] с предыдущим Close[1].
[] - не наводит на мысль о необходимости автоподстановки индекса для углубления в историю?

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #25 : 28 Октября 2012, 17:18:39 »
вот что вышло

ila_rendered

data1 - 240 мин
data2 - 1 мин
плот в виде гистограммы,
собраны все медвежьи минутные свечки внутри четырёхчасовика
на принтлоге справа виден момент как на предпоследнем пятничном баре в 20:00 накопилось 88 таких свечек и на новом баре в 20:01 значение обнулилось и пошло новое накопление

 ;)

Vars:
kolvo(0);

If Close Data2 < Open Data2 then kolvo = kolvo + 1;
If Time[1] Data2 = Time Data1 then kolvo = 0;

plot1(kolvo,"kolvo");
plot2(0,"0");

print( Time:4:0, " / ", kolvo);

Craft

  • Гость
EasyLanguage
« Ответ #26 : 28 Октября 2012, 17:59:26 »
А если цены закрытия баров сравнивать, как будет?

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #27 : 28 Октября 2012, 18:07:01 »
так как вы и писали:
If Close Data2 < Close[1] Data2

Craft

  • Гость
EasyLanguage
« Ответ #28 : 05 Ноября 2012, 15:24:03 »
Пока не получилось получить достоверный результат. Для проверки попытался посчитать отрицательные и положительные бары внутри 5 мин. бара (Data1 - 5 мин., Data2 - 1 мин.).
По логике, внутри 5 мин. бара состоящего из 5 минуток не может быть больше 5 положительных либо 5 отрицательных баров, но мы видим превышение.
Необходимо усовершенствовать механизм обнуления на новом баре (если, конечно, я где-нибудь не ошибся).
Цитировать
Vars: barpl(0),barmin(0);

If Close Data2>Close[1] Data2 then begin
barpl = barpl + 1;
If Time[1] Data2 = Time Data1 then barpl = 0;
End;

If Close Data2<Close[1] Data2 then begin
barmin = barmin - 1;
If Time[1] Data2 = Time Data1 then barmin = 0;
End;

Plot1(barpl,"pl");
Plot2(barmin,"min");

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #29 : 05 Ноября 2012, 16:41:35 »
при сравнении цен закрытий у разных баров обнуление и подсчёт должны быть сложнее.
примерно так

vars: barpl(0), barmin(0);

condition1 = Close Data2 > Close[1] Data2;
condition2 = Close Data2 < Close[1] Data2;
condition3 = Time[1] Data2 = Time Data1;

if condition3 then begin
If Condition1 then begin
barpl = 1; barmin = 0;
end else
if Condition2 then begin
barmin = 1; barpl = 0;
end else begin
barmin = 0; barpl = 0;
end;
end else begin
if Condition1 then barpl = barpl + 1;
if Condition2 then barmin = barmin + 1;
end;

plot1(barpl,"barpl");
plot2(-barmin,"barmin");

так же необходимо в свойствах индикатроа снять галку "update value intra-bar (tick-by-tick)", иначе в рилтайме будет каша