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

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

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #40 : 19 Сентября 2013, 04:29:58 »
Ясно, копирайт  ;)
но подскажите хоть в какую сторону копать? Это хитрое использование plot или хитрая конструкция из линий TL_?

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #41 : 19 Сентября 2013, 08:00:35 »
Возможности Easy не копирайт, но я не понял про что вы спрашиваете. Что вы хотите сделать и что у вас не получается?

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #42 : 19 Сентября 2013, 08:26:08 »
У вас в тренде цвет, стиль, толщина линий индикатора задаётся в свойствах индикатора. Вы используете Plot или TL_New для отрисовки линий?

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #43 : 19 Сентября 2013, 09:50:36 »
У вас в тренде цвет, стиль, толщина линий индикатора задаётся в свойствах индикатора. Вы используете Plot или TL_New для отрисовки линий?

Для последних линий tl_new, для предыдущих - plot по вершинам. Параметры цвета и прочие берутся с помощью GetPlotXXX.

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #44 : 10 Апреля 2014, 01:46:31 »
Есть ли какой-нибудь более менее простой способ передать параметры вертикальной линии в индикатор?
Например, я рисую вертикальную линию на графике и её дата и время передаются в код. Если я её подвину, то её измененные параметры тоже передадутся (обновятся).
Заранее благодарен за ответ

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #45 : 10 Апреля 2014, 02:48:01 »
Есть ли какой-нибудь более менее простой способ передать параметры вертикальной линии в индикатор?
Например, я рисую вертикальную линию на графике и её дата и время передаются в код. Если я её подвину, то её измененные параметры тоже передадутся (обновятся).
Заранее благодарен за ответ

Не знаю, что считать простым. В последней TS 9.1 есть возможность просмотреть все объекты рисования, которые есть на графике и определить, менялась ли координата. По описанию, для этого все есть. На практике не пробовал, хотя тоже все собираюсь с этим разобраться. Смотрите как пример ChartTrading. Там можно двигать ордера за счет тягания линий на графике.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #46 : 11 Апреля 2014, 12:22:44 »
Есть ли какой-нибудь более менее простой способ передать параметры вертикальной линии в индикатор?
Например, я рисую вертикальную линию на графике и её дата и время передаются в код. Если я её подвину, то её измененные параметры тоже передадутся (обновятся).
Заранее благодарен за ответ

Есть успехи? Вот тоже подумываю позаниматься перетягиванием на графике, для удобства использования.

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #47 : 11 Апреля 2014, 12:50:10 »
пока не смотрел. как раз планировал в эти выходные заняться. отпишусь попозже

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #48 : 12 Апреля 2014, 02:20:45 »
elsystem никогда не разбирался. идёт трудно  ;)

вертикальную линию нарисовал
например на последнем баре

using elsystem.drawingobjects;

vars:
DTPoint myDTPoint(Null),
VerticalLine myVLine(Null);

If (LastBarOnChart = True) then Begin   
    myDTPoint = DTPoint.create(BarDateTime, 0);
    myVLine = VerticalLine.create(myDTPoint);
    DrawingObjects.Add(myVLine);

    myVLine.Color = elsystem.drawing.Color.Red;
    myVLine.Style = StyleType.solid;
End;

она двигается руками, но её координатная точка не меняется ( естественно, с чего бы это) )
может подскажете направление куда копать в следующие классы что бы взять её координату?

подозреваю, что если её сдвинуть, то изменится свойство линии Position
Цитировать
Position    double    Gets or sets the position of the vertical line as drawing object point.
значит теоретически можно задать переменную, которая всегда будет равна значению Position указанной линии
но как задать эту переменную?
что-то вроде myDT = myVLine.Position.? и дальше что-то связанное с get этой самой position линии с идентификатором myVLine

буду благодарен за подсказку

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #49 : 12 Апреля 2014, 04:11:16 »
Опишите в общих понятиях что вы хотите реализовать.

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #50 : 12 Апреля 2014, 04:20:02 »
хочу ограничить расчёт своего индикатора только областью заключённой между двумя вертикальными линиями (startLine и endLine), с возможностью эти линии двигать руками интерактивно.

линию я уже нарисовал, её координата это дата и время, вот теперь хочу найти как эту координату получить в виде переменной

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #51 : 12 Апреля 2014, 05:23:16 »
хочу ограничить расчёт своего индикатора только областью заключённой между двумя вертикальными линиями (startLine и endLine), с возможностью эти линии двигать руками интерактивно.

линию я уже нарисовал, её координата это дата и время, вот теперь хочу найти как эту координату получить в виде переменной

Странно, но свойства для получения именно даты напрямую нет. Недоработка разработчиков.
Надо делать через обработку событий ChartingHost.

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #52 : 12 Апреля 2014, 05:31:22 »
в описании класса вертикальной линии
https://help.tradestation.com/09_01/tsdevhelp/Subsystems/elobject/class/verticalline_class.htm#
есть среди свойств линии такой параметр
Цитировать
Position    double    Gets or sets the position of the vertical line as drawing object point.
я так понимаю он позволяет получить (gets) позицию данной линии на графике как точку (DTpoint например)
разве это не оно?
просто не понятно как это сделать

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #53 : 12 Апреля 2014, 05:56:50 »
я так понимаю он позволяет получить (gets) позицию данной линии на графике как точку (DTpoint например)
разве это не оно?
просто не понятно как это сделать

А никак. Смотрим под отладчиком:

ila_rendered

Свойство Price сделано доступным для чтения, а свойство с временем сделано недоступным. Баг разработчиков. Причем передаваемый в ChartingHost объект Args.Element тоже имеет кастрированные свойства. Нет ни доступа к исходному объекту, ни доступа к свойству Tag. Возможно в TS 9.5 они это пофиксили.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #54 : 12 Апреля 2014, 06:19:33 »
У TrendLine эти удоты тоже заблокировали доступ ко времени начала линии. Можно обратиться к MTL.StartPoint.Price, MTL.EndPoint.Price, но нет доступа к данным по времени. Хотя нужные свойства под отладчиком просматриваются.

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #55 : 12 Апреля 2014, 06:34:15 »
получается, что пока что это просто дополнительные возможности по добавлению графических элементов на чарты.
из-за отсутствия важной координаты по времени интерактива никакого не получится

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #56 : 12 Апреля 2014, 07:05:47 »
получается, что пока что это просто дополнительные возможности по добавлению графических элементов на чарты.
из-за отсутствия важной координаты по времени интерактива никакого не получится

Может я что-то не догоняю. У них ChartTrading сделан на Easy. Значит все должно быть предусмотрено. Пробую разобраться. Свой код прилагаю.
Если через ChartingHost можно получать как-то ссылку на исходный объект рисования, то любая интерактивность возможна.  А если нет, то нет.

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #57 : 12 Апреля 2014, 07:23:14 »
в ChartTrading код большой, но я проверил поиском, там не используются классы линий и точек.
возможно там для интерактивного двигания линий ордеров созданы специальные классы именно для этих задач. а всё остальное интерактивным быть не может.
интеркативная работа с ордерами может интересовать только клиентов их брокерской части.
и возможно это причина по которой интерактив для обычных индикаторов может быть заблокирован - им более выгоден функционал который привлекает новых клиентов, а не работает на независимость платформы.
если такое положение вещей сохранится и в 9.5, то думаю так и есть.


Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #58 : 12 Апреля 2014, 07:28:21 »
Пока я не понял как определить какой из созданных в коде объектов рисования был выбран пользователем. ChartingHost не дает нужных свойств.

интеркативная работа с ордерами может интересовать только клиентов их брокерской части.
и возможно это причина по которой интерактив для обычных индикаторов может быть заблокирован - им более выгоден функционал который привлекает новых клиентов, а не работает на независимость платформы.
если такое положение вещей сохранится и в 9.5, то думаю так и есть.

Не думаю, что они специально блокируют интерактивность. Просто забыли сделать видимыми свойства некоторых объектов. Мы же можем просто использовать таймер и проверять свойства объектов периодически. Так ведь нет всех нужных свойств. Плюс есть глюки с изменением свойств. Например, если менять свойства подписи, объект вообще исчезает с графика. Поэтому сначала надо удалить старый объект, потом создавать новый. В наличии глюки и плохо продуманная структура классов. Нет свойств для задания прозрачности. Возможно в TS 9.5 они поправили эти недоработки.

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #59 : 12 Апреля 2014, 07:36:07 »
кстати, горизонтальная линия не имеет координаты время, а только цену, это свойство доступно.
Цитировать
Price    double    Gets or sets a double representing the Price value of the line.
но что-то я не могу заставить индикатор брать этот параметр у линии которую я передвинул руками
myHLine.Price.ToString() упрямо выдаёт цену на которой линия изначально была создана, а не цену на которую я её передвинул

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #60 : 12 Апреля 2014, 08:00:53 »
кстати, горизонтальная линия не имеет координаты время, а только цену, это свойство доступно.
Цитировать
Price    double    Gets or sets a double representing the Price value of the line.
но что-то я не могу заставить индикатор брать этот параметр у линии которую я передвинул руками
myHLine.Price.ToString() упрямо выдаёт цену на которой линия изначально была создана, а не цену на которую я её передвинул

print(ldt, " MyHLine ", MyHLine.Price);

Выдает измененное значение цены после перетягивания.

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #61 : 12 Апреля 2014, 08:06:35 »
принт выдаёт. а вот как в коде его заставить видеть..
может через GlobalVariables? я когда-то эксперемнтировал (до того как решил что пульс удобнее) и обращал внимание что он хранит свои значения както независимо от чарта.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #62 : 12 Апреля 2014, 08:26:15 »
принт выдаёт. а вот как в коде его заставить видеть..
может через GlobalVariables? я когда-то эксперемнтировал (до того как решил что пульс удобнее) и обращал внимание что он хранит свои значения както независимо от чарта.

Print выдет то, что вы в коде и имеете.  ;)

DP = mText.PointValue astype DTPoint;
print(ldt, " mText ", mText.PointValue.Price, " DP ", DP.DateTimeOfBar.ToString());

Вот так можно получить все координаты текстовой метки.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #63 : 12 Апреля 2014, 08:34:04 »
А вот так можно получать координаты обычной линии:

mtl = TrendLine.create(DTPoint.Create(BarDateTime[20], c[20]), DTPoint.Create(BarDateTime, c));
...

print(ldt, " MTL ",
  (MTL.StartPoint astype DTPoint).DateTimeOfBar.ToString(), " ", MTL.StartPoint.Price, " - ",
  (MTL.EndPoint astype DTPoint).DateTimeOfBar.ToString(), " ", MTL.EndPoint.Price);

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #64 : 12 Апреля 2014, 08:36:49 »
Если создать обычную линию с координатами, выходящими за границы цен графика, получится вертикальная линия. Эту линию можно таскать. На событие ChartingHost1_ChartElementClick вешаете проверку изменения координат своей линии. Изменились координаты, делаете то, что вам нужно. Не очень изящный код конечно, но линии и текст можно тягать и делать нужную интерактивность.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #65 : 12 Апреля 2014, 08:45:05 »
Еще координаты отдают Rectangle и Ellipse. Так что можно поинтерактивничать. Координаты не отдает только вертикальная линия. У горизонтальной линии цена отдается. Надо просто отдельно хранить старые координаты объекта и проверять самому, есть ли изменение. А методы ChartingHost добавляют дополнительную информацию:

Цитировать
11.04.2014 22:00  Args.Type drawingobject
11.04.2014 22:00  Args.DataStreamValue 1316.70
11.04.2014 22:00  Args.StudyValue 1316.70
11.04.2014 22:00  Args.Element charting.DrawingObjectVisualElement
11.04.2014 22:00  Args.Time 11.04.2014 20:55:00
11.04.2014 22:00  Args.Element.Type drawingobject
11.04.2014 22:00  args.IsKeyDown[Key.control]  FALSE
11.04.2014 22:00  args.IsKeyDown[Key.alt]  FALSE
11.04.2014 22:00  args.Button left
11.04.2014 22:00  args.X 2494.00
11.04.2014 22:00  args.Y  573.00

Можно конечно пытаться сравнивать координаты от ChartingHost с координатами изменившихся объектов, чтобы точно узнать что тянулось. Но думаю и без этого можно обойтись.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #66 : 12 Апреля 2014, 08:50:37 »
Попробую на этой неделе сделать в TS интерактивность по типу Gelium_Model в MT4. Чтобы можно было потягать модель на графике. За одно стоит добавить модели уровень руками задаваемого стопа.

Оффлайн ihaar

  • Давно не был на форуме
  • *
  • Сообщений: 1 067
    • Просмотр профиля
EasyLanguage
« Ответ #67 : 12 Апреля 2014, 08:59:57 »
спасибо за информацию, похоже, то что нужно.

единственный момент который пока не укладывается в голове, как пересчитать индикатор, скажем 20 баров назад с учётом новых изменившихся данных полученных сейчас? линию ведь я двигаю сейчас..
или все расчёты производить на последнем баре и просто рисовать значения нужное количество баров назад?
но тогда понятно что перерасчёт будет автоматический при приходе нового тика, а если график статичный, на основе текстовика? как заставить индикатор перерисовать значения в таком случае?
в принте координаты меняются мгновенно, но индикатор считается либо поступательно побарно, либо с приходом тика.
этот момент не ясен..

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #68 : 12 Апреля 2014, 10:18:58 »
единственный момент который пока не укладывается в голове, как пересчитать индикатор, скажем 20 баров назад с учётом новых изменившихся данных полученных сейчас? линию ведь я двигаю сейчас..

Только через вызов комментария эксперта можно заставить TS пересчитать весь график, как это сделано в Gelium_Expert.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #69 : 16 Апреля 2014, 09:13:02 »
Глюки Easy в TS 9.1:

1. Компонент ListView не отдает индекс элемента, по которому пользователь кликнул. Хотя в справке написано, что должен отдавать.
2. Компонент DataGridView сохраняет значения ячеек, но на форме они не отображаются. Может что-то не понял, но победить не удалось.
3. Свойства Dock компонент формы лучше не использовать.
4. Не ясно из-за чего, но после опытов форма, которая нормально стыковалась с графиком, перестала стыковаться.

В общем глюков хватает. :(

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #70 : 16 Апреля 2014, 09:51:17 »
Если ComboBox использовать в режиме Simple, форма перестает нормально цепляться в окно с графиком.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #71 : 18 Апреля 2014, 10:04:56 »
Вот так можно получить индекс активного элемента ListView:

print("lv ", lv.SelectedIndices.Items[0].ToString());

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #72 : 23 Апреля 2014, 06:53:01 »
Если ничто не помогает, почитайте мануал. Почитал. Ларчик с кликом по линии открывался просто:

Цитировать
method void LineClick( Object sender, DrawingObjectEventArgs args)
vars:
    TrendLine tl,
   Int i1;
begin
   // Отображение на графике параметров сделки
   tl = Sender astype TrendLine;
   If p_Debug > 0 then
      print("Line.Tag ", tl.Tag.ToString());

У каждого объекта рисования есть событие на клик мышкой.

Оффлайн val

  • Участник клуба
  • *
  • Сообщений: 148
    • Просмотр профиля
EasyLanguage
« Ответ #73 : 03 Июня 2014, 12:53:58 »
Павел, вопрос.
1. Можно ли добавить не существующий в TS новый символ ( например в Radar) и накапливать его историю ?
Из МТ передаю котировки O,H,L,C (через permvar.dll), в TS их принимаю.
2. Как постороить бар или свечку из принимаемых O,H,L,C .
Спасибо.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #74 : 04 Июня 2014, 04:24:29 »
Павел, вопрос.
1. Можно ли добавить не существующий в TS новый символ ( например в Radar) и накапливать его историю ?
Из МТ передаю котировки O,H,L,C (через permvar.dll), в TS их принимаю.
2. Как постороить бар или свечку из принимаемых O,H,L,C .
Спасибо.

В режиме offline просто пишете данные в файл и открываете график на базе файла или периодически делает Ctrl+R для обновления данных. В режиме real time эти данные должны поступать в программу фидер, которая будет их передавать в TS. Возможно https://traderssoft.com/ts8/ods может принимать данные через DDE и отправлять их дальше в TS.

Оффлайн val

  • Участник клуба
  • *
  • Сообщений: 148
    • Просмотр профиля
EasyLanguage
« Ответ #75 : 04 Июня 2014, 05:00:43 »
Спасибо, а как из поступающих  O,H,L,C построить бар или свечку, это что создавать обьект надо ?

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #76 : 04 Июня 2014, 05:22:20 »
Спасибо, а как из поступающих  O,H,L,C построить бар или свечку, это что создавать обьект надо ?

Поступивших откуда и куда?

Оффлайн val

  • Участник клуба
  • *
  • Сообщений: 148
    • Просмотр профиля
EasyLanguage
« Ответ #77 : 04 Июня 2014, 05:47:30 »
Из МТ передаю котировки O,H,L,C (через permvar.dll), в TS их принимаю как индикатор, рисует линии O,H,L,C, хочется отобразить ввиде бара.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #78 : 04 Июня 2014, 05:53:26 »
Из МТ передаю котировки O,H,L,C (через permvar.dll), в TS их принимаю как индикатор, рисует линии O,H,L,C, хочется отобразить ввиде бара.

Индикатор PaintBar сделайте и рисуйте себе бары.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 221
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #79 : 04 Июня 2014, 13:00:50 »
Из МТ передаю котировки O,H,L,C (через permvar.dll), в TS их принимаю как индикатор, рисует линии O,H,L,C, хочется отобразить ввиде бара.

Может пригодится. В QR есть генератор случайных чисел, частоту которого можно менять. Если вам не нужны валюты, то на график со случайными котировками можно вешать индикаторы, которые будут использовать внешние данные, с обновлением внутри бара. А сами случайные графики сделать невидимыми.