Страница 2 из 6
Добавлено: Сб янв 22, 2011 1:30 pm
Николай Тарасов
Скажите, пожалуйста, как задать прозрачный цвет?
При ручной раскраске объектов это опция "transparent".
Добавлено: Вс янв 23, 2011 5:58 am
Terranin
Николай Тарасов писал(а):Скажите, пожалуйста, как задать прозрачный цвет?
При ручной раскраске объектов это опция "transparent".
color := clNone
Добавлено: Вс янв 23, 2011 12:37 pm
Николай Тарасов
Ха! А я просто 'None' пробовал.
Спасибо, Михаил.
Добавлено: Вт янв 25, 2011 8:31 am
FT Support
Здравствуйте Николай,
Пожалуйста пришлите полный пример скрипта со всеми "спорными моментами".
Заранее спасибо!
Добавлено: Вт янв 25, 2011 8:04 pm
Николай Тарасов
FT Support писал(а):Здравствуйте Николай,
Пожалуйста пришлите полный пример скрипта со всеми "спорными моментами".
Заранее спасибо!
Михаил, Александр.
1. Спасибо за готовность помочь.
Я уже убедился, что
забота о своих клиентах -
отличительная черта вашей компании.
2. С вашим тестовым скриптом я давно уже разобрался.
Мне очень помогла ваша поддержка и квалифицированная помощь.
3. Свои MT4-индикаторы благополучно переделал под FT2.
Теперь вот занимаюсь переводом МТ4-скриптов.
Для унификации приёмов работы в этих разных средах (FT2 и МТ4)
попутно затеял глобальную перестройку алгоритма.
Дело медленно, но продвигается (с вашей помощью).
Вопросы стараюсь задавать по мере возникновения.
4. Надеюсь, мой опыт послужит хорошим примером для тех,
кто привык к МТ4 и ещё побаивается Delphi и/или C++.
Не робейте, это несложно!
Как говориться: "Дважды два и в Африке - четыре".
Добавлено: Пт янв 28, 2011 11:08 am
FT Support
Здравствуйте, Николай, извините за поздний ответ, видимо пропустил эту тему на форуме. В чём именно проблем с цветом? не компилируется код? или не отображается установленный цвет, если не компилируется код, то добавьте библиотеку graphics
Добавлено: Пт янв 28, 2011 4:02 pm
Николай Тарасов
FT Support писал(а):Здравствуйте, Николай, извините за поздний ответ, видимо пропустил эту тему на форуме. В чём именно проблем с цветом? не компилируется код? или не отображается установленный цвет, если не компилируется код, то добавьте библиотеку graphics
Благодарю вас, Александр.
Ваши прежние рекомендации разрешили почти все мои проблемы с раскраской.
Обещаю сообщить, если у меня что-то будет не получаться.
Добавлено: Пт янв 28, 2011 10:14 pm
Николай Тарасов
Ну вот, Александр.
Вам не пришлось долго ждать.
У меня никак не получается из скрипта
присвоить нужные мне имена Фибо-уровням.
Во-первых, вместо имени указываются
значения уровней (OBJPROP_LEVELVALUE, см. рисунок).
Во-вторых, на попытки присвоить уровню текстовую подпись (OBJPROP_TEXT) компилятор ругается,
сообщая, что подпись может принимает
лишь числовые значения.
Хотя, в ручном режиме ввод текстовых подписей к уровням допускается.
Вот фрагмент кода:
А вот сообщение об ошибке:
Код: Выделить всё
[Error] ObjectsTest_Plus.dpr(98): Incompatible types: 'Double' and 'Char'
Полный текст скрипта прилагается.
В общем, помогите, пожалуйста.
Не могу никак разобраться.
Добавлено: Пн янв 31, 2011 7:09 pm
FT Support
Здравствуйте, Николай,
Пока что программно нельзя менять подписи уровеней, но это будет исправлено в ближайших версиях (это улучшение недалеко в очереди)
Добавлено: Пн янв 31, 2011 9:46 pm
Николай Тарасов
FT Support писал(а):Здравствуйте, Николай,
Пока что программно нельзя менять подписи уровеней, но это будет исправлено в ближайших версиях (это улучшение недалеко в очереди)
Хорошо, хорошо.
Можете не торопиться.
Для подписей уровней я нашёл изящный выход.
Я просто подписываю Фибо-уровни
текстовыми метками нужного мне цвета.
Причём наиболее подходящим шрифтом
наиболее удобного для просмотра размера.
Последняя опция (выбор шрифта и его размер) оказалась очень даже полезной и приятной.
Всем рекомендую!!!
Теперь вот подумываю, не сделать ли так же и в скриптах для MT4.
Сдерживает лишь, что от это несколько разбухнет список объектов.
PS
Александр, Михаил,
скажите, пожалуйста,
не планируется ли у вас дополнить текстовую метку опциями:
- Bold (полужирный шрифт) и
- Italic (курсивный шрифт)?
Для полного счастья, так сказать.
А так же для более полного соответствия возможностей автоматической и ручной разметки текстовых меток.
О других параметрах:
- зачёркнуто,
- подчёркнуто и
- набор символов, - я уже и не заикаюсь.
PS2
А как насчёт "Списока объектов"?
Я уже спрашивал об этом, но так и не услышал ответа.
Вы хоть моргните, что ли?
PS3
Кстати, говоря.
Чуть не забыл!
Сами Фибо-уровни, подписанные указанными выше способом,
на графике можно достаточно точно обозначить
символом подчёркивания "_".
Например: "_+2/8" и "_50%".
Кому этого мало, может прикрепить к графику
соизмеримый индикатор уровней.
Добавлено: Вт фев 01, 2011 2:11 am
Николай Тарасов
FT Support писал(а):Здравствуйте, Николай,
Пока что программно нельзя менять подписи уровеней, но это будет исправлено в ближайших версиях (это улучшение недалеко в очереди)
Ха!
Да у вас этот параметр (OBJPROP_TEXT)
вообще во всех программируемых объектах неправильно работает!
Функция ObjectSet() для OBJPROP_TEXT упорно просит дать число,
вместо переменной строкового типа.
Чтобы не было непонимания, перечисляю поимённо всех,
у кого я обнаружил эту проблему (с помощью модификаций скрипта ObjectsTest):
1) obj_VLine;
2) obj_HLine;
3) obj_TrendLine;
4) obj_Ray;
5) obj_FiboFan;
6) obj_Text.
У всех этих объектов вместо текста (описания) выводится пустой результат.
Исключение - объект obj_Text самостоятельно выдаёт подпись "Text".
Вероятно, это какое-то предыдущее необнулённое значение. Ясно, что так быть не должно.
Ребята, вы уж разберитесь, пожалуйста.
PS
Не сочтите за нахальство, но я бы на вашем месте вообще убрал функцию ObjectSetText().
Какая-то она надуманная.
Ведь есть у вас свойства объектов:
1) OBJPROP_TEXT = 27; // значение текста/описания;
2) OBJPROP_COLOR = 6; // цвет;
3) OBJPROP_FONTNAME = 24; // название шрифта;
4) OBJPROP_FONTSIZE = 21; // размер шрифта (для объекта Text и объекта TextLabel).
Вот почти и всё, что нужно.
Зачем же дублировать то же самое, выделять отдельную функцию?
Добавьте ещё:
5) OBJPROP_BOLDFONT = ?? // полужирный шрифт (Bolean);
6) OBJPROP_ITALICFONT = ?? // курсивный шрифт (Bolean), -
и всё будет, как говорится в ажуре.
PS2
Помимо того я столкнулся ещё с одной неразберихой вокруг функции ObjectSetText().
Но об этом в лучше следующем посте.
Добавлено: Вт фев 01, 2011 3:32 am
Николай Тарасов
Продолжение
...
Не хочу сейчас заниматься писаниной.
Постараюсь изложить суть проблемы коротко и по существу.
Значит так.
Намучился я вчера с раскраской трендовых линий.
Всё пытался покрасить их стандартной функцией ObjectSet(),
меняя параметр OBJPROP_COLOR.
Пробовал и так и сяк. Всё без толку.
В итоге помогла функция ObjectSetText(),
как бы удивительно это не выглядело.
Чётко установить все нюансы того, когда и как проявляется ошибка установить не смог.
В одних скриптах проявления одни, в других - другие.
Могу, например, сказать, что без функции ObjectSetText()
мне не удалось обойтись при раскраске вертикальных и горизонтальных трендов.
* * *
Михаил, Александр,
прошу принять меры.
Очень вас прошу.
Мало того, что язык Delphy ещё не достаточно освоен.
Ещё такая вот беда под ногами мешается.
Добавлено: Вт фев 01, 2011 9:43 am
FT Support
Здравствуйте, Николай, написали Вы очень много, поэтому наверное отвечу не на всё, напомните если что оставил без внимания.
1) в ближайшее время дополнять текстовую метку параметрами bold/italic не планируется, мешают более срочные и важные дополнения, но в очередь усовершенствований это добавим и сделаем когда руки дойдут.
Если мы будем заниматься каждой мелочью, на которую тоже уходит вермя, то развитие программы по-сути остановится, ведь это время мы могли бы потратить на что-то большое
2) По поводу "списка объектов": Вы имеете в виду при ручном редактировании выдавать список всех объектов, которые находятся на графике? Такое мы сделаем, но пока что можно выводить список объектов вручную из индикатора например
3) про OBJPROP_TEXT мы подумаем и возможно уберём, оставим ObjectSetText
4) Пожалуйста опишите подробнее проблемы с раскраской трендовых линий
Добавлено: Вт фев 01, 2011 11:46 am
Николай Тарасов
FT Support писал(а):Здравствуйте, Николай, написали Вы очень много, поэтому наверное отвечу не на всё, напомните если что оставил без внимания.
1) в ближайшее время дополнять текстовую метку параметрами bold/italic не планируется, мешают более срочные и важные дополнения, но в очередь усовершенствований это добавим и сделаем когда руки дойдут.
Если мы будем заниматься каждой мелочью, на которую тоже уходит вермя, то развитие программы по-сути остановится, ведь это время мы могли бы потратить на что-то большое
2) По поводу "списка объектов": Вы имеете в виду при ручном редактировании выдавать список всех объектов, которые находятся на графике? Такое мы сделаем, но пока что можно выводить список объектов вручную из индикатора например
3) про OBJPROP_TEXT мы подумаем и возможно уберём, оставим ObjectSetText
4) Пожалуйста опишите подробнее проблемы с раскраской трендовых линий
Здравствуйте.
Второй пункт поподробнее опишите, пожалуйста. Где и как смотреть?
Или вы имеете в виду, что можно запрограммировать перебор объектов?
PS
Проблема с раскраской касается не только трендов, а вообще всех объектов,
которые я упомянул, в связи с проблемой присвоения комментариев к объектам
(см. пост выше от Фев 01, 2011 7:11 am).
В связи с этим моя версия - это всё проявления проблемы с функцией ObjectSetText().
Думаю, если её убрать, думаю все заморочки исчезнут.
Ну или сделать всё как следует.
Подробнее описывать сейчас не могу - устал.
Может быть позже.
Добавлено: Ср фев 02, 2011 12:01 am
Николай Тарасов
Здравствуйте.
1. Разобрался с проблемой раскраски.
Оказалось, что блуждающая ошибка возникала из-за того,
что часть трендовых линий я раскрашивал неправильно.
Вместо:
- OBJPROP_COLOR;
- OBJPROP_STYLE;
- OBJPROP_WIDTH, -
в коде фигурировали похожие параметры:
- OBJPROP_LEVELCOLOR;
- OBJPROP_LEVELSTYLE;
- OBJPROP_LEVELWIDTH.
Сожалею, что поднял столько шума по этому поводу.
Но так часто бывает.
Тут уж ничего не поделаешь - издержки перевода (с другого языка).
2. Зато в процессе поиска подходящего для FT2 кода я наткнулся на интересное побочное проявление функции ObjectSetText().
Оказалось, что она успешно справляется с раскраской не только текстовых меток, но и других графических объектов.
Поэтому порой вместо:
Код: Выделить всё
ObjectSet(names[4], OBJPROP_COLOR, clGreen);
можно писать:
Код: Выделить всё
ObjectSetText(names[4], 'Test text', 12, 'Arial', clGreen);
Хотя, как мне кажется, быть такого не должно.
Как, впрочем, и присваивания подписям Фибо-уровней значений совсем другого параметра OBJPROP_LEVELVALUE.
3. Кстати, заглянул в скрипт для MT4.
Оказывается там Фибо-уровни подписаны специальной функцией ObjectSetFiboDescription().
А функция ObjectSetText() предусмотрена лишь для объектов OBJ_TEXT и OBJ_LABEL.
У вас такой, как я понимаю, пока нет.
И как вы решите этот вопрос - решать, безусловно, вам.
PS
У меня устойчивое ощущение, что ваш продукт сыроват.
Хотя бы в части работы с объектами.
Вероятно, нужно просто подождать,
дать вам возможность всё настроить не спеша.
И со временем всё встанет на свои места.
Но вы меня тоже должны понять.
А в моём лице многих других своих клиентов.
Мне нужен тестировщик, умеющий делать то, что нужно именно мне.
Причём уже сейчас, а не неизвестно когда.
Для этого я готов самостоятельно находить компромиссные решения,
и доводить его до ума доступными на данный момент средствами.
Это проявление настойчивости и целеустремлённости,
а не блажь, эгоизм или что-то ещё.
Поймите меня (нас) правильно.
Искренне желаю успехов в вашем нелёгком труде программистов.
Добавлено: Ср фев 02, 2011 7:55 pm
FT Support
Здравствуйте.
Второй пункт поподробнее опишите, пожалуйста. Где и как смотреть?
Или вы имеете в виду, что можно запрограммировать перебор объектов?
да, имею в виду, что можно "пробежать" по всем объектам и вывести их список в каком-то удобном виде. Чтобы это сделать используйте функции ObjectsTotal и ObjectName
возможно работа с объектами у нас "сыровата" по сравнению с терминалами, которые разрабатывают большие команды программистов (например МТ). Но мы не такая большая компания чтобы их "догнать и перегнать" хотя мы стараемся
Добавлено: Ср фев 02, 2011 8:54 pm
Николай Тарасов
FT Support писал(а):Здравствуйте.
Второй пункт поподробнее опишите, пожалуйста. Где и как смотреть?
Или вы имеете в виду, что можно запрограммировать перебор объектов?
да, имею в виду, что можно "пробежать" по всем объектам и вывести их список в каком-то удобном виде. Чтобы это сделать используйте функции ObjectsTotal и ObjectName
возможно работа с объектами у нас "сыровата" по сравнению с терминалами, которые разрабатывают большие команды программистов (например МТ). Но мы не такая большая компания чтобы их "догнать и перегнать" хотя мы стараемся
Всё хорошо.
Вы молодцы.
Главное - то, что вы делаете, нужно людям.
Поэтому у вас всё получится!
Добавлено: Чт фев 03, 2011 7:08 am
FT Support
Здравствуйте, Николай,
Спасибо
будем стараться дальше!
Добавлено: Ср фев 09, 2011 2:42 am
Николай Тарасов
Итак, продолжим нашу совместную работу.
Рубрика: Из личного опыта
Запись и считывание временнЫх координат
Ряд задач предполагает хранение временнЫх координат.
Для этих целей удобно использовать текстовые метки.
Преобразование даты в текст и обратно можно делать так:
Код: Выделить всё
s := DateTimeToStr(ScriptInterfaceUnit.Time(0));
t := StrToDateTime(s);
Такой способ не зависит от персональных установок пользователя
относительно форматов отображения дат и времени
(см. рисунок и 'Панель управления \ Язык и региональные стандарты').
Это её явное преимущество перед аналогами.
Пример использования прилагается.
PS
Чтобы подобные текстовые метки со служебной информацией не мешались на экране,
их можно закреплять на нулевом price-уровне (OBJPROP_PRICE1=0).
Добавлено: Ср фев 09, 2011 2:54 am
Николай Тарасов
Недоработка, однако
Кстати говоря.
Пытался из скрипта выставить текстовые метки
на бары с отрицательными индексами (вперёди графика).
Так у меня не вышло.
Хотя вручную установить метку получается.
Это странно, поскольку трендовые линии, например,
в той области рисуются правильно: хоть из скрипта, хоть вручную.
Добавлено: Ср фев 09, 2011 9:57 am
FT Support
Здравствуйте, Николай,
Попробуйте вот так:
Код: Выделить всё
if not(ObjectExists('spec text')) then
begin
ObjectCreate('spec text', obj_Text, 0, IncDay(IndicatorInterfaceUnit.Time(0), 1), Close(0));
ObjectSetText('spec text', 'spec text', 12, 'Arial', clYellow);
ObjectSet('spec text', OBJPROP_VALIGNMENT, tlBottom);
ObjectSet('spec text', OBJPROP_HALIGNMENT, taLeftJustify);
end;
у меня сработало.
ключевой момент здесь в установке правильного времени для текстовой метки, например: IncDay(IndicatorInterfaceUnit.Time(0), 1)
Добавлено: Ср фев 09, 2011 11:10 am
Николай Тарасов
FT Support писал(а):Здравствуйте, Николай,
Попробуйте вот так:
Код: Выделить всё
if not(ObjectExists('spec text')) then
begin
ObjectCreate('spec text', obj_Text, 0, IncDay(IndicatorInterfaceUnit.Time(0), 1), Close(0));
ObjectSetText('spec text', 'spec text', 12, 'Arial', clYellow);
ObjectSet('spec text', OBJPROP_VALIGNMENT, tlBottom);
ObjectSet('spec text', OBJPROP_HALIGNMENT, taLeftJustify);
end;
у меня сработало.
ключевой момент здесь в установке правильного времени для текстовой метки, например: IncDay(IndicatorInterfaceUnit.Time(0), 1)
Так-так.
Значит вы, Александр, обошли вопрос с отрицательными индексами баров через приращение даты
(подробнее см. здесь:
http://www.delphisources.ru/pages/faq/f ... y.php.html).
Что ж, красиво.
Теперь мне понятно, почему у меня не возникло проблем с трендами.
Просто я делал подобную вещь - указывал не индекс бара, а по сути вычислял, как и вы, нужное время.
Благодарю за урок.
Как определить год нужной даты
Добавлено: Ср фев 09, 2011 11:29 am
Николай Тарасов
Были у меня вопросы с тем,
как определить год нужной даты.
С другими компонентами даты вопросов не было.
Функции:
MonthOfTheYear,
DayOfTheMonth,
HourOfTheDay и
MinuteOfTheHour, - делают своё дело.
Помнится, нужно лишь модуль
'DateUtils' прицепить.
Итак, про "Год".
Пытался использовать функцию
YearsPerMillenium (взял из всплывающего списка-подсказки в Delphi7,
когда пытался нащупать что-то вроде
'YearOf...'):
Код: Выделить всё
s := IntToStr(DateUtils.YearsPerMillenium(ScriptInterfaceUnit.Time(0)));
Не получилось. Год так не определяется.
Прошерстил англоязычный форум.
Вот здесь товарищ Антон Б. (
'tonyb') из Англии хорошо разложил алгоритмику:
http://forextester.com/forum/viewtopic.php?p=5075#5075
(см. сообщение от 17 ноября 2010 8:40 вечера).
Очень похоже на то, как извлекается логарифм с произвольным основанием,
и возводятся числа в нужную степень.
Там и там - общий принцип - лаконичность языковых средств.
Сложные операции (функции) составляются из простых (базовых).
PS
Всем рекомендую читать оба форума.
С Google-переводчиком даже не заметно, что форум на английском.
Ведь многие по-русски пишут так, что не всем понятно, что человек имел в виду.
PS2
Кстати, вот хорошая ссылка по time-операциям в Delphi: http://delphi.wikia.com/wiki/Category:DateUtils_Unit
А также: http://perevod.yandex.ru/en/?url=http:/ ... earof.html
Как разберусь - поделюсь опытом.
Как определить год (year)?
Добавлено: Ср фев 09, 2011 6:45 pm
Николай Тарасов
Итак, прошу любить и жаловать.
У меня получилось-таки записать дату по частям в текстовую метку.
А потом корректно воспроизвести её (см. рисунок).
Не всё так просто, как я думал.
Оказалось, что сделать это можно лишь с оговоркой, что формат даты в Windows будет иметь определённый вид:
Код: Выделить всё
// Only for SystemDateFormat = ( 'd.M.y', 'd.M.yyyy';
// 'dd.MM.yy', 'dd.MM.yyyy')
// and SystemTimeFormat = ('H:m:ss', 'HH:mm:ss')?
// Ok!!!
// Except for SystemDateFormat = ('y-M-d', 'yyyy-M-d'; // See 't3'
// 'd-M-y', 'd-M-yyyy'; // See 't4'
// 'y.M.d', 'yyyy.M.d') // See 't5'
Поэтому, чтобы не сталкиваться с проблемами из-за индивидуальных (региональных) настроек Windows
рекомендую везде использовать пару взаимодополняющих друг друга
функций DateTimeToStr и StrToDateTime!!!
Подробности выявленных мной особенностей преобразования дат (времени)
в Delphi 7 (Forex Tecter 2) смотрите в скрипте.
Добавлено: Чт фев 10, 2011 11:01 am
Николай Тарасов
А вообще-то, хотелось бы пожелать создателям FT2 обеспечить своих клиентов более структурированной,
информативной и удобной справочно-информационной системой.
Например, такой как в MT4.
Посмотрите только на их справку (см. рисунки) - это же загляденье.
Не нарадуешься.
+ Всё понятно.
+ Всё с примерами.
+ Всё в одном месте.
Пиши и пиши себе коды, да ни в чём себе не отказывай.
Если что-то забыл (или не знаешь), это можно быстро найти в справочнике.