Страница 2 из 6

Добавлено: Сб янв 22, 2011 1:30 pm
Николай Тарасов
Скажите, пожалуйста, как задать прозрачный цвет?

При ручной раскраске объектов это опция "transparent".

Добавлено: Вс янв 23, 2011 5:58 am
Terranin
Николай Тарасов писал(а):Скажите, пожалуйста, как задать прозрачный цвет?

При ручной раскраске объектов это опция "transparent".
color := clNone

Добавлено: Вс янв 23, 2011 12:37 pm
Николай Тарасов
Ха! А я просто 'None' пробовал.
:D

Спасибо, Михаил.

Добавлено: Вт янв 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++.
Не робейте, это несложно!
Как говориться: "Дважды два и в Африке - четыре".
:wink:

Добавлено: Пт янв 28, 2011 11:08 am
FT Support
Здравствуйте, Николай, извините за поздний ответ, видимо пропустил эту тему на форуме. В чём именно проблем с цветом? не компилируется код? или не отображается установленный цвет, если не компилируется код, то добавьте библиотеку graphics

Добавлено: Пт янв 28, 2011 4:02 pm
Николай Тарасов
FT Support писал(а):Здравствуйте, Николай, извините за поздний ответ, видимо пропустил эту тему на форуме. В чём именно проблем с цветом? не компилируется код? или не отображается установленный цвет, если не компилируется код, то добавьте библиотеку graphics
Благодарю вас, Александр.
Ваши прежние рекомендации разрешили почти все мои проблемы с раскраской.
Обещаю сообщить, если у меня что-то будет не получаться.
:wink:

Добавлено: Пт янв 28, 2011 10:14 pm
Николай Тарасов
Ну вот, Александр.
Вам не пришлось долго ждать.
:?

У меня никак не получается из скрипта
присвоить нужные мне имена Фибо-уровням.


Во-первых, вместо имени указываются значения уровней (OBJPROP_LEVELVALUE, см. рисунок). :!:

Во-вторых, на попытки присвоить уровню текстовую подпись (OBJPROP_TEXT) компилятор ругается,
сообщая, что подпись может принимает лишь числовые значения. :!:
Хотя, в ручном режиме ввод текстовых подписей к уровням допускается.

Вот фрагмент кода:

Код: Выделить всё

          ObjectSet(names[4], OBJPROP_TEXT, 'i');
А вот сообщение об ошибке:

Код: Выделить всё

[Error] ObjectsTest_Plus.dpr(98): Incompatible types: 'Double' and 'Char'
Полный текст скрипта прилагается.


В общем, помогите, пожалуйста.
Не могу никак разобраться.

Добавлено: Пн янв 31, 2011 7:09 pm
FT Support
Здравствуйте, Николай,

Пока что программно нельзя менять подписи уровеней, но это будет исправлено в ближайших версиях (это улучшение недалеко в очереди)

Добавлено: Пн янв 31, 2011 9:46 pm
Николай Тарасов
FT Support писал(а):Здравствуйте, Николай,

Пока что программно нельзя менять подписи уровеней, но это будет исправлено в ближайших версиях (это улучшение недалеко в очереди)
Хорошо, хорошо.
Можете не торопиться.

Для подписей уровней я нашёл изящный выход.

Я просто подписываю Фибо-уровни
текстовыми метками нужного мне цвета.

Причём наиболее подходящим шрифтом
наиболее удобного для просмотра размера.

:wink:
Последняя опция (выбор шрифта и его размер) оказалась очень даже полезной и приятной.
Всем рекомендую!!! :!:

Теперь вот подумываю, не сделать ли так же и в скриптах для MT4.
:D
Сдерживает лишь, что от это несколько разбухнет список объектов.





PS
Александр, Михаил,

скажите, пожалуйста,
не планируется ли у вас дополнить текстовую метку опциями:
- Bold (полужирный шрифт) и
- Italic (курсивный шрифт)?

Для полного счастья, так сказать.
А так же для более полного соответствия возможностей автоматической и ручной разметки текстовых меток.

О других параметрах:
- зачёркнуто,
- подчёркнуто и
- набор символов, - я уже и не заикаюсь.
:?



PS2
А как насчёт "Списока объектов"?
Я уже спрашивал об этом, но так и не услышал ответа.
Вы хоть моргните, что ли?
:D



PS3
Кстати, говоря.
Чуть не забыл!
:wink:

Сами Фибо-уровни, подписанные указанными выше способом,
на графике можно достаточно точно обозначить
символом подчёркивания "_".
Например: "_+2/8" и "_50%".

Кому этого мало, может прикрепить к графику
соизмеримый индикатор уровней.

:D

Добавлено: Вт фев 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), -
и всё будет, как говорится в ажуре.
:wink:



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.
Сожалею, что поднял столько шума по этому поводу.
:oops:
Но так часто бывает.
Тут уж ничего не поделаешь - издержки перевода (с другого языка).


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

возможно работа с объектами у нас "сыровата" по сравнению с терминалами, которые разрабатывают большие команды программистов (например МТ). Но мы не такая большая компания чтобы их "догнать и перегнать" хотя мы стараемся :)
Всё хорошо.
Вы молодцы.
:wink:

Главное - то, что вы делаете, нужно людям.
Поэтому у вас всё получится!

Добавлено: Чт фев 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-переводчиком даже не заметно, что форум на английском.
Ведь многие по-русски пишут так, что не всем понятно, что человек имел в виду.

:wink:


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.

Посмотрите только на их справку (см. рисунки) - это же загляденье.
Не нарадуешься.
+ Всё понятно.
+ Всё с примерами.
+ Всё в одном месте.
Пиши и пиши себе коды, да ни в чём себе не отказывай.
:wink:

Если что-то забыл (или не знаешь), это можно быстро найти в справочнике.