#7
Сообщение
Alexey » Пт ноя 26, 2010 6:18 pm
Уважаемые друзья,
Я сам написал код этого индикатора, опираясь на примеры из хелпа.
Наверняка я сделал какую-то ошибку. Кроме того, я не знаю, есть ли такой оператор как minute(), хотя hour() нашел и использовал. Да, еще я не знаю, как рисовать палочки не в виде галки "0-1-0", а в виде гистограммы.
Может быть, кто-то сможет проверить и скомпиллировать этот код и сказать, какие ошибки вылезают? У меня нет дельфи, а в жизни ее не видел никогда, и вообще сегодня только понял, что такое dll. А пиратскую покупать не хочу что-то.
Если у кого получится, и случайно индикатор заработает, вы прицепите в эту ветку dll, пожалуйста. Будет у нас с вами общая слава. А если не заработает, покритикуйте, плиз, что там не так.
Спасибо.
--------
library TimeToTrade;
//
uses
// использовать интерфейсный модуль
graphics, IndicatorInterfaceUnit;
//
var
// внешние параметры
sh: integer;
sm: integer;
eh: integer;
em: integer;
//
// индексные буферы и переменные
StartTime: TIndexBuffer;
EndTime: TIndexBuffer;
RestTime: TIndexBuffer;
//
//------------------------------
// Инициализация
//------------------------------
procedure Init; stdcall;
begin
// Назначение параметров
IndicatorShortName('Time');
SetOutputWindow(ow_ChartWindow);
// зарегистрировать внешние параметры
AddSeparator('Start');
RegOption('StartHour', ot_Integer, sh);
RegOption('StartMin', ot_Integer, sh);
AddSeparator('End');
RegOption('EndHour', ot_Integer, eh);
RegOption('EndMin', ot_Integer, em);
SetOptionRange('StartHour', 0,24);
SetOptionRange('StartMin', 0,60);
SetOptionRange('EndHour', 0,24);
SetOptionRange('EndMin', 0,60);
sh:=6;
sm:=5;
eh:=17;
eh:=5;
//
// Создание индексного буфера
IndicatorBuffers(3);
StartTime:= CreateIndexBuffer;
EndTime:= CreateIndexBuffer;
RestTime:= CreateIndexBuffer;
SetIndexBuffer(1,StartTime);
SetIndexBuffer(2,EndTime);
SetIndexBuffer(3,RestTime);
SetIndexStyle(1,0,psSolid,1,Red);
SetIndexStyle(2,0,psSolid,1,Green);
SetIndexStyle(3,0,psSolid,1,Grey);
end;
//
//-----------------------------
// Расчет одного бара
//----------------------------
procedure Calculate(index: integer); stdcall;
var
i: integer;
begin
for i:=0 to index do
begin
if Hour(Time(0))=sh and Minute(Time(0))=sm then StartTime:=1; else StartTime:=0;
if Hour(Time(0))=eh and Minute(Time(0))=em then EndTime:=1; else EndTime:=0;
if (Hour(Time(0))<=sh and Minute(Time(0))<sm) or (Hour(Time(0))>=eh and Minute(Time(0))>em) then RestTime:=1; else RestTime:=0;
end;
//
exports
// данные процедуры должны быть назначены как внешние
Init, Done, Calculate;
end.