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

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

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 176
    • Просмотр профиля
EasyLanguage
« Ответ #200 : 12 Апреля 2019, 14:18:21 »
Скриншот экрана покажите! Скорее всего с кодом проблемы...а лучше сделайте в коде подсчёт количества создаваемых трендовых линий!

Подскажите пожалуйста, как бороться с этой ошибкой при добавлении индикатора, можно ли как-то увеличить допустимое число трендовых линий, T.S. 8.2 не ругалась на добавляемый индикатор, а T.S. 9.1 выдает ошибку.

Error: Exceeded the maximum number of Trendlines allowed on this chart. Excessive use of Trendlines causes decreased performance. Please adjust analysis technique to dispose of unneeded Trendlines. Call Stack

MaksimZZ

  • Гость
EasyLanguage
« Ответ #201 : 12 Апреля 2019, 18:18:17 »
К сожалению код залочен. Но на 8.2 он работал.

Скрин:

ila_rendered

Думал может где-то в интерфейсе есть ограничитель типа максбарсбэк.

Кстати, для старых версий выкладывали утилиту для просмотра залоченного кода. Вам не попадалась случайно для 9.1

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 176
    • Просмотр профиля
EasyLanguage
« Ответ #202 : 14 Апреля 2019, 08:09:40 »
не встречал подобных утилит по снятию блокировок! хотя они не особо и нужны, если представляешь механизм, как он должен работать, то его проще написать самому, и понятней будет и для развития полезно :)


К сожалению код залочен. Но на 8.2 он работал.

Скрин:

(Ссылка на вложение)

Думал может где-то в интерфейсе есть ограничитель типа максбарсбэк.

Кстати, для старых версий выкладывали утилиту для просмотра залоченного кода. Вам не попадалась случайно для 9.1

MaksimZZ

  • Гость
EasyLanguage
« Ответ #203 : 16 Апреля 2019, 14:40:30 »
Этим и занят ;)

MaksimZZ

  • Гость
EasyLanguage
« Ответ #204 : 16 Апреля 2019, 15:09:55 »
Как может быть такая фигня?

Пишу в первой строчке кода такую команду:

if barnumber=1 then Print(date,";",time);

A Print Log выдает такой результат:

980102.00; 130.00
980102.00; 200.00
980102.00;1630.00
980102.00;1700.00
980102.00;1730.00
980102.00;1800.00

MaksimZZ

  • Гость
EasyLanguage
« Ответ #205 : 25 Апреля 2019, 16:48:54 »
Такая проблема:

Написал индикатор работает корректно, MaxBarsBack детектируется автоматом в разумных пределах.

Решил превратить индикатор в стратегию добавил всего две строки и сохранил в strategies:

If LH4=0.05 and LH4[1]>0.05 then Buy ( "long1" ) 1 shares next bar at market;

If HL4=0.05 and HL4[1]>0.05 then Sell from entry ( "long1" ) next bar at market;

При попытке запустить стратегию для расчета сделок в TS 8.2 вылетает ошибка MaxBarsBack, TS 9.1 просто мечется между waiting data... и attributes..., горит черный экран.

В TS 8.2 стратегия запустилась при параметре MaxBarsBack 40.000, TS 9.1 с таким значением висит.

Пробую в стратегии вообще отключить фигурными скобками две строчки приведенные выше, все равно ошибка MaxBarsBack в TS 8.2 и темный экран в TS 9.1.

Т.е. после отключения торговых строчек код стратегии это копия кода индикатора, который прекрасно работает с MaxBarsBack до 300. Почему же тогда TS не считает этот же код сохраненный и запущенный как стратегия.

Помогите пожалуйста, бьюсь не могу понять!

MaksimZZ

  • Гость
EasyLanguage
« Ответ #206 : 25 Апреля 2019, 19:13:17 »
Такая проблема:

Написал индикатор работает корректно, MaxBarsBack детектируется автоматом в разумных пределах.

Решил превратить индикатор в стратегию добавил всего две строки и сохранил в strategies:

If LH4=0.05 and LH4[1]>0.05 then Buy ( "long1" ) 1 shares next bar at market;

If HL4=0.05 and HL4[1]>0.05 then Sell from entry ( "long1" ) next bar at market;

При попытке запустить стратегию для расчета сделок в TS 8.2 вылетает ошибка MaxBarsBack, TS 9.1 просто мечется между waiting data... и attributes..., горит черный экран.

В TS 8.2 стратегия запустилась при параметре MaxBarsBack 40.000, TS 9.1 с таким значением висит.

Пробую в стратегии вообще отключить фигурными скобками две строчки приведенные выше, все равно ошибка MaxBarsBack в TS 8.2 и темный экран в TS 9.1.

Т.е. после отключения торговых строчек код стратегии это копия кода индикатора, который прекрасно работает с MaxBarsBack до 300. Почему же тогда TS не считает этот же код сохраненный и запущенный как стратегия.

Помогите пожалуйста, бьюсь не могу понять!

Отбой. Решил проблему с MaxBarsBack. Теперь правда странная ситуация. TS 8.2 бэктестит стратегию, TS 9.1 нет.
Причем TS 9.1 не бэктестит даже стратегии, которые идут с ней в комплекте. Какая-то настройка видимо блокирующая включена. Вот какая?

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 349
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #207 : 26 Апреля 2019, 03:21:02 »
У TS есть help, в котором есть ответы на многие вопросы.

MaksimZZ

  • Гость
EasyLanguage
« Ответ #208 : 26 Апреля 2019, 04:12:51 »
У TS есть help, в котором есть ответы на многие вопросы.
Хелп отличная штука. 99% моих проблем по EL и TS решаются через него. Но не всегда получается найти ответ за приемлемое время. Мне казалось, что вопросы интересные.

Ответы на них найдены:

Описанная проблема с Maxbarsback решилась так. Нашел опытным путем часть кода, которая не генерит ошибку. Дальше стал к ней поэтапно добавлять следующие порции кода, пока не высветилась ошибка Maxbarsback. Дело оказалось в такой конструкции:

If value4<low[barnumber-HL4] and HL4>0.05 then begin

[barnumber-HL4] - при значениях HL4<=0.05 принимает значения близкие к порядковому номеру бара т.е. на пятиминутках за год более 60.000, что покрывает все доступные данные. Как видно выше, чтобы этого не происходило в If мной было встроено условие HL4>0.05. Оказалось что порядок кода имеет значение не только между функциями, но и внутри них. Т.е. в таком виде TS сначала видит неприемлемые [barnumber-HL4], а только потом фильтрует их HL4>0.05.

Т.е. верный код
If HL4>0.05 and value4<low[barnumber-HL4] then begin

P.S.1 -- Невыясненным осталось, почему в виде индикатора неправильный код не выдавал ошибки Maxbarsback.
P.S.2 -- T.S 9.1 не считала стратегию не из-за ошибки Maxbarsback, а из-за того что я пытался ее применить к 3rdparty data, на онлайн данных правильный код работает.
P.S.3 -- T.S 9.1 показывает себя плохо по сравнению с 8.2, она не высвечивает ряд ошибок, а просто подвисает на черном экране.
Если бы не 8.2, я думаю, я до сих пор искал бы ошибку.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 349
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #209 : 26 Апреля 2019, 04:40:35 »
TS 9.2 нет в природе. С TS 9.5 пока лично у меня проблем не было, хоть она и работает с текстовиками. TS 9.1 работает real time.

MaksimZZ

  • Гость
EasyLanguage
« Ответ #210 : 26 Апреля 2019, 07:01:52 »
TS 9.2 нет в природе. С TS 9.5 пока лично у меня проблем не было, хоть она и работает с текстовиками. TS 9.1 работает real time.
Ошибся, прошу прощения исправил в тексте выше на TS 9.1. Cпасибо за историю для QR.

Алексей

  • Гость
EasyLanguage
« Ответ #211 : 17 Июня 2019, 04:59:44 »
Прошу совета.
Не могу найти функцию/способ как получить значение какой нибудь функции в определённое, но не текущее время.
Например в 2346 надо узнать какое было значение какого то индикатора в 1246.
Знал бы количество баров, сделал бы ind[nbars] и всё.
Но nbars=(Time-1246)/BarInterval - не даст нужное значение баров, т.к. надо делать поправку на то что в часе 60 минут, а не 100.
Может есть какая то функция, которая позволяет посчитать количество баров, закрытых с заданного времени ?
Не смог найти самостоятельно.

PS:
нашёл решение
необходимая функция - FindBar(TargetDate, TargetTime)
возвращает количество баров с текущего до бара, заданного переменными TargetDate, TargetTime   -то что надо.

Алексей

  • Гость
EasyLanguage
« Ответ #212 : 23 Сентября 2019, 09:43:02 »
Подс4кажите, плз, где можно взять индикатор горизонтального объёма для Tradestation ?
Странно что его не могу найти в самом TS

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 349
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #213 : 23 Сентября 2019, 14:00:47 »
Подс4кажите, плз, где можно взять индикатор горизонтального объёма для Tradestation ?
Странно что его не могу найти в самом TS

https://www.google.com/search?q=horizontal+volume+indicator+for+Tradestation&ie=utf-8&oe=utf-8

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 349
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #214 : 07 Января 2020, 14:04:20 »
В Vector есть ошибка в TS 9.1/9.5. При вставке элемента в начало коллекции элемент может оказаться в итоге в случайном месте коллекции.

Например:

MyVector.insert(0, MyValue);

Так вставка элемента в начало коллекции предполагает её упорядоченность. Но элементы могут быть иногда перепутаны случайным образом. Баг проявляется на графиках с разным объёмом истории. Так что еще и не всегда проявляется.

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 176
    • Просмотр профиля
EasyLanguage
« Ответ #215 : 08 Января 2020, 12:57:50 »
В Vector есть ошибка в TS 9.1/9.5. При вставке элемента в начало коллекции элемент может оказаться в итоге в случайном месте коллекции.

Например:

MyVector.insert(0, MyValue);

Так вставка элемента в начало коллекции предполагает её упорядоченность. Но элементы могут быть иногда перепутаны случайным образом. Баг проявляется на графиках с разным объёмом истории. Так что еще и не всегда проявляется.

Попробовал такой код для проверки, работает верно. Интересно, от чего зависит сбой в работе вектора?

If CurrentBar = 1
Then Begin
   VVector = Vector.Create();
   For Value1 = 1 To 5 Begin
      Value3 = Power(10, Value1);
      For Value2 = 0 To Value3 Begin
         VVector.insert(0, Value2 AsType Int);
      End;
      Print(Value1, "   ", Value3, "   ", VVector.Items[0] AsType Int);
   End;
End;



Оффлайн Gelium

  • Администратор
  • Сообщений: 9 349
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #216 : 08 Января 2020, 15:58:07 »
Попробовал такой код для проверки, работает верно. Интересно, от чего зависит сбой в работе вектора?

От объема истории на графике. Скорее всего, этот баг как-то связан с памятью.

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 176
    • Просмотр профиля
EasyLanguage
« Ответ #217 : 09 Января 2020, 06:31:07 »
Попробовал такой код для проверки, работает верно. Интересно, от чего зависит сбой в работе вектора?

От объема истории на графике. Скорее всего, этот баг как-то связан с памятью.
Работает верно, попробовал проверку таким кодом:

VVector.insert(0, BarDateTime[0].Value AsType String);

If Date > Date[1]
Then Begin
   If BarDateTime[0].Value <> VVector.Items[0] AsType String
   Then Begin
      Print(BarDateTime[0].Value, "   ", VVector.Items[0] AsType String);
      Value1 = Value1 + 1;
   End;
End;

If BarDateTime = LastCalcDateTime
Then Begin
   Print("DateTimeStart", Spaces(3), BarDateTime[CurrentBar].Value);
   Print("DateTimeLast ", Spaces(3), BarDateTime[0]         .Value);
   Print("BarInterval  ", Spaces(3), BarInterval:0:0, " Minutes");
   Print("BarsOnChart  ", Spaces(3), CurrentBar:0:0);
   Print("ErrorsCount  ", Spaces(3), Value1:0:0);
End;



Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 176
    • Просмотр профиля
EasyLanguage
« Ответ #218 : 09 Января 2020, 06:36:33 »
Попробовал такой код для проверки, работает верно. Интересно, от чего зависит сбой в работе вектора?

От объема истории на графике. Скорее всего, этот баг как-то связан с памятью.
Да, скорее всего зависимость от памяти есть. После долгой работы в TS91, при запуске кода на диаграмме с большой историей (5 лет 1 минутной компрессии), у меня даже команда Print() не срабатывала, после закрытия TS91 и запуска вновь, всё работает в рабочем режиме.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 349
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #219 : 09 Января 2020, 10:43:29 »
Работает верно, попробовал проверку таким кодом:

99% времени работает верно, но в 1% случаев порядок элементов меняется случайным образом, что лишает доверия к сортировке таким способом. Сами по себе данные не теряются, нарушается порядок сортировки.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 349
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #220 : 21 Декабря 2020, 06:02:42 »
Есть куча определений q_XXX для быстрого получения разного рода данных по последним котировкам. Полезно использовать без создания объектов для доступа к информации по символу.

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 349
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #221 : 21 Декабря 2020, 13:41:55 »
Простой код получения котировок от QuotesProvider:

using tsdata.marketdata ;
using tsdata.common ;
using elsystem ;

Inputs:
p1_Field("BID");

Vars:
IntrabarPersist v1(0);

method void QP_Updated( elsystem.Object sender, tsdata.marketdata.QuoteUpdatedEventArgs args )
begin
  if QP.State = DataState.Loaded then begin
  v1 = QP[p1_Field].DoubleValue;
  If V1 <> 0 then begin
  print(v1:1:4);
  end;
end;
end;

once begin
QP.Symbol = Symbol;
QP.Fields += p1_Field;
Qp.Realtime = true;
QP.Load = true;
end;

if LastBarOnChart then begin
  if QP.State = DataState.Loaded then begin
  v1 = QP[p1_Field].DoubleValue;
  If V1 <> 0 then begin
print(v1:1:4);
Plot1(v1);
end;
end;
end;

Chaika84

  • Гость
EasyLanguage
« Ответ #222 : 17 Января 2021, 11:43:05 »
нашёл решение
необходимая функция - FindBar(TargetDate, TargetTime)
возвращает количество баров с текущего до бара, заданного переменными TargetDate, TargetTime   -то что надо.

Спасибо, что дописали ответ!

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 349
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #223 : 13 Апреля 2021, 08:19:19 »

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 176
    • Просмотр профиля
EasyLanguage
« Ответ #224 : 25 Августа 2021, 04:05:25 »
ВНИМАНИЕ! TS9.1:
If XmlNode.Attributes.Contains("*") - не работает, всегда возвращает True!

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 176
    • Просмотр профиля
EasyLanguage
« Ответ #225 : 31 Июля 2023, 06:12:29 »
Добрый день! Кто-нибудь знает, как отключить появление ошибки "method arguments cannot be used as inputs due to their life time" ?? Она возникает, если в методе используется функция и Инпут метода передаётся в инпут функции. Может можно как-нибудь отключить этот контроль синтаксиса? через реестр возможно...?

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 349
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #226 : 31 Июля 2023, 16:43:11 »
Добрый день! Кто-нибудь знает, как отключить появление ошибки "method arguments cannot be used as inputs due to their life time" ?? Она возникает, если в методе используется функция и Инпут метода передаётся в инпут функции. Может можно как-нибудь отключить этот контроль синтаксиса? через реестр возможно...?

А разве оно должно так работать? Разработчики ошибку не зря генерируют, так как видимо такую возможность они не закладывали в свой код.

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 176
    • Просмотр профиля
EasyLanguage
« Ответ #227 : 31 Июля 2023, 16:59:15 »
Добрый день! Кто-нибудь знает, как отключить появление ошибки "method arguments cannot be used as inputs due to their life time" ?? Она возникает, если в методе используется функция и Инпут метода передаётся в инпут функции. Может можно как-нибудь отключить этот контроль синтаксиса? через реестр возможно...?

А разве оно должно так работать? Разработчики ошибку не зря генерируют, так как видимо такую возможность они не закладывали в свой код.
Не могу однозначно сказать, как оно должно работать, но можно было бы сделать этот контроль опционально! Например, сделал функцию ExtractFileName(PathFile) - получения имени файла из его полного имени, которую использую в нескольких других функциях, в которых есть методы, которые используют ExtractFileName, а в инпуты этих методов уже не установить PathFile, возникает ошибка. Неудобно! Хотя я понимаю, что Методы ниже Функции, и логика такого контроля имеет смысл, но можно бы было эту логику опционально использовать!

Оффлайн csk

  • Подписчик сайта
  • *
  • Сообщений: 107
    • Просмотр профиля
EasyLanguage
« Ответ #228 : 02 Августа 2023, 03:23:57 »
Цитировать
"method arguments cannot be used as inputs due to their life time"

Sounds like a variable going out of scope. If this is the case then ...
Цитировать
It occurs if a function is used in a method and the input of the method is passed to the input of the function.
... this is where the out of scope happen.

Цитировать
For example, I made the ExtractFileName(PathFile) function - getting the file name from its full name, which I use in several other functions that have methods that use ExtractFileName, and PathFile cannot be set to the inputs of these methods, an error occurs.
Will defining another variable to be assigned with the value of PathFile before the calls, will it help?

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 176
    • Просмотр профиля
EasyLanguage
« Ответ #229 : 02 Августа 2023, 06:07:59 »
Цитировать
"method arguments cannot be used as inputs due to their life time"

Sounds like a variable going out of scope. If this is the case then ...
Цитировать
It occurs if a function is used in a method and the input of the method is passed to the input of the function.
... this is where the out of scope happen.

Цитировать
For example, I made the ExtractFileName(PathFile) function - getting the file name from its full name, which I use in several other functions that have methods that use ExtractFileName, and PathFile cannot be set to the inputs of these methods, an error occurs.
Will defining another variable to be assigned with the value of PathFile before the calls, will it help?
Да, приходится назначать переменную на входное значение, тогда всё работает хорошо! Думал, есть ли варианты обойти это переназначение, но как оказывается вариантов нет! Спасибо!
Yes, you have to assign a variable to the input value, then everything works fine! I thought if there were options to get around this reassignment, but as it turns out, there are no options! Thank you!