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



Зарегистрирован: 03.03.2008
Сообщения: 180
Откуда: Мурманск

СообщениеДобавлено: Вт Май 04, 2010 11:20 am Ответить с цитатой Вернуться к началу

Эпиграф
Не стреляйте в пианиста, он играет, как умеет
Приветствую.
Написал тут свой первый в АМИ цикл. Может есть желающие усовершенствовать.
Недостатки:
- рисуется только последняя свеча,
- плотность линий меняется в зависимости от размера тела и хвостов,
-при наведении курсора на свечу в желтом поле подсказке - все результаты циклов (убрать их надо бы)
-Не получается залить тело.
- работает только, если старший фрейм день, а младший любой.
-если давить иногда на проверку АФЛ, то иногда выскакивает ошибка пишет что цикл не должен быть больше диапазона 0-баркаунт, хотя у меня баркаунт в цикле вообще не используется... (на работу не влияет, но все же?)
Достоинства:
-Просто и вроде понятно как.
- Работает динамически, т.е. строит дневку в реальном времени.
- Дневная свеча строится за основными , ее хорошо видно, меняет цвет Smile - высосано из пальца Smile)
-???
Пожелания:
- распростратнить на предыдущие свечи, хотя бы на 2 шт назад.
- залить тело и хвосты, тогда не надо менять плотность линий
- Подуматькак сделать, чтобы старший фрейм был любой, а не только дни.
- Попробовать по простому привязать низкоуровневую графику к баркаунт или к шкале цен, (В примерах цикл на цикле и циклом погоняет)...
Ну может еще кто напишет чего.
В самом крайнем случае, можно и так пользоваться...

Код:
ThisDayOpen = LastValue(ValueWhen(TimeNum()==103000, Open,1));
ThisDayClose = LastValue(Close);
Positive=IIf(ThisDayClose>ThisDayOpen,1,0);
d=LastValue(BarsSince(TimeNum() == 103000));
Middl=BarCount - d/2;
HeightBody=IIf(Positive,(LastValue (Close)-LastValue(ThisDayOpen)),LastValue(ThisDayOpen)-LastValue (Close));
Del=HeightBody/20;
HeightTop=IIf(Positive,LastValue(HighestSince(TimeNum()==103000,H,1))-LastValue(ThisDayClose),LastValue(HighestSince(TimeNum()==103000,H,1))-LastValue(ThisDayOpen));
DelTop=HeightTop/20;
DepthBot=IIf(Positive,LastValue(ThisDayOpen)-LastValue(LowestSince(TimeNum()==103000,L,1)),LastValue (Close)-LastValue(LowestSince(TimeNum()==103000,L,1)));
DelBot=DepthBot/20;
color=IIf(ThisDayClose>ThisDayOpen,colorWhite,colorBlack);
//Plot(ThisDayClose,"O",colorYellow);
//Plot(HeightTop,"HT",colorBlack,styleOwnScale);
for(k = 0; k < 21; k ++) 
      { 
         Level=IIf(Positive,LastValue(ThisDayOpen) + k*Del,LastValue(ThisDayOpen) - k*Del);
       y0[k]=Level;
      y1[k]=Level;
      x0=BarCount - d-1;
      x1=BarCount - -1;
Line = LineArray( x0, y0[k], x1, y1[k],0);
Plot( Line, "Body", color,4096 );
LevelTop=IIf(Positive,LastValue(ThisDayClose) + k*DelTop,LastValue(ThisDayOpen) + k*DelTop);
       y0[k]=y1[k]=LevelTop;
      x0=Middl-1;
      x1=Middl;
Line2 = LineArray( x0, y0[k], x1, y1[k],0);
Plot( Line2, "Top", colorBlack,4096 );
LevelBot=IIf(Positive,LastValue(ThisDayOpen) - k*DelBot,LastValue(ThisDayClose) - k*DelBot);
       y0[k]=y1[k]=LevelBot;
      x0=Middl-1;
      x1=Middl;
Line3 = LineArray( x0, y0[k], x1, y1[k],0);
Plot( Line3, "Bot", colorBlack,4096 );
      }

_________________
"Единственная pабота, достойная нас, — pабота над собой". Шон де Уоppен
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Первые несколько строк написал получше
Код:

ThisDayOpen = LastValue(TimeFrameGetPrice("O", inDaily));
ThisDayClose = LastValue(Close);
Positive = ThisDayClose > ThisDayOpen;
d = LastValue(BarsSince(TimeNum() == 103000));
Middl = BarCount - d/2;
HeightBody = abs(ThisDayOpen - ThisDayClose);

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


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

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

Тело свечки можно рисовать как то так
Код:

Plot(C, "", colorBlack, styleCandle);
dopen = TimeFrameGetPrice("O", inDaily);
dclose = TimeFrameGetPrice("C", inDaily);
PlotOHLC(dopen, dopen, dclose, dclose, "", IIf(dclose > dopen, colorLightYellow, colorLavender), styleCloud);

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



Зарегистрирован: 03.03.2008
Сообщения: 180
Откуда: Мурманск

СообщениеДобавлено: Ср Май 12, 2010 8:04 am Ответить с цитатой Вернуться к началу

000 писал(а):
Первые несколько строк написал получше
Код:


/// Хорошое упрощение.
Пробую размножить свечки на весь экран...
Проблема возникает в команде LineArray (xxxx)
Она требует чисел, а не массивов. Для этого раньше используется команда LastValue() - которая заполняет массив последним значением, и как бы имитирует числа.
Вопрос по "последним значениям" = это всегда 100% самые последние значения ( например клоуз) или можно пытаться как то обмануть, например через гетпрайс, или засунуть эту команду в цикл.
Внутри цикла какие значения будут последними? или ей наплеквать на цикл, и все равно берутся самые последние?
Идея такая надо получать координаты для рисования линий по всему графику, а не только на последней свече. Если организовать еще один цикл (типа сверху, главный) и с помощью него отмерять дни на мелком фрейме. то внутри этого цикла - какое значение клоуз (на 5 мин) будет последним? Опять с абсолютными чиислами: сегодня 5 мая 12 часов клоуз на 5 мин = 138000 (условно)
Если команда ласт вэлью клоуз включена в цикл, который считает дни ( как то их определяет из 5 мин) то 04 мая в 12 часов что будет результатом команды ластвэлью клоуз? Реально например было 140000.
Извините за вопрос, самому смоделировать быстро 2-й цикл, да еще с фреймами, это пока не быстро.
Если ответ 140 000 - то можно попробовать, а если 138000, то
Может какие еще идеи есть?

_________________
"Единственная pабота, достойная нас, — pабота над собой". Шон де Уоppен
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

C[BarCount-1] это последний Close
C[BarCount-2] это предпоследний Close
C[BarCount-3] это предпредпоследний Close
и т.д.

Можно брать так.

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen