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

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

Оффлайн Gelium

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

Оффлайн Gelium

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

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

Оффлайн Gelium

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

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

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