Ошибки, баги, вопросы - страница 2101

 
Alexey Viktorov:

А что возвращает

и какой прок будет от добавления? Вы предлагаете добавить входящий параметр и получить в ответ тот-же самый хендл индикатора...

И если не затруднит, для каких целей появилась такая необходимость? Вопрос без иронии. Ведь если что-то предлагается, то надо, на мой взгляд, привести убедительные доводы в необходимости предложенного.


Пользователь ставит любой индикатор.

Советник автоматически его находит и для получения сигнала берет данные буферов.


Что бы сейчас такое реализовать надо брать iCustom  и если список параметров мы еще как то можем прописать то вот с буферами проблема....

Можно программно серез Copy посчитать количество буферов, но вот понять какой из них рисует программно не возможно ...

 
Vladimir Pastushak:

Пользователь ставит любой индикатор.

Советник автоматически его находит и для получения сигнала берет данные буферов.


Что бы сейчас такое реализовать надо брать iCustom  и если список параметров мы еще как то можем прописать то вот с буферами проблема....

Можно программно серез Copy посчитать количество буферов, но вот понять какой из них рисует программно не возможно ...

Почему невозможно? Разве буфер INDICATOR_CALCULATIONS можно достать через iCustom()?

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

 
Alexey Viktorov:

Почему невозможно? Разве буфер INDICATOR_CALCULATIONS можно достать через iCustom()?

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


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

 

Вот с такой проблемой столкнулся:

Решил использовать в качестве magic остаток от деления идентификатора чарта на 1000 или 10000, в общем-то не важно.

Но почему-то при разных ChartID() остаток от деления вдруг получается одинаковый. Вопрос: почему?

Проверочный скрипт

/********************Script program start function*******************/
void OnStart()
{
  long chartID = ChartID(), d = 100000;
  Print("ChartID - ", ChartID());
  Print("fmod(ChartID(), ",  d, ") = ", fmod(ChartID(), d));
}/*******************************************************************/

Результат

2018.01.15 13:01:45.881 Script 00 EURUSD,M15: removed
2018.01.15 13:01:45.881 00 EURUSD,M15: uninit reason 0
2018.01.15 13:01:45.881 00 EURUSD,M15: fmod(ChartID(), 100000) = 74912
2018.01.15 13:01:45.881 00 EURUSD,M15: ChartID - 131472503841474907
2018.01.15 13:01:45.881 00 EURUSD,M15: initialized
2018.01.15 13:01:45.871 Script Test\00 EURUSD,M15: loaded successfully
2018.01.15 13:01:40.361 Script 00 EURUSD,H1: removed
2018.01.15 13:01:40.361 00 EURUSD,H1: uninit reason 0
2018.01.15 13:01:40.361 00 EURUSD,H1: fmod(ChartID(), 100000) = 74912
2018.01.15 13:01:40.361 00 EURUSD,H1: ChartID - 131472503841474908
2018.01.15 13:01:40.361 00 EURUSD,H1: initialized
2018.01.15 13:01:40.351 Script Test\00 EURUSD,H1: loaded successfully

Ожидалось увидеть 74907 и 74908 соответственно, ведь остаток от деления именно такой должен быть.


И ещё хотелось-бы услышать ответ на этот вопрос

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Alexey Viktorov, 2018.01.09 14:21

В тестере МТ5 объект "Поле ввода" OBJ_EDIT не позволяет редактировать значение в нём находящееся. Это так задумано или это баг?

В терминалах и тестере МТ4 редактируется, а вот в тестере МТ5 не хочет, вообще пропадает значение введённое в него программно при создании объекта.


 
Alexey Viktorov:

Но почему-то при разных ChartID() остаток от деления вдруг получается одинаковый. Вопрос: почему?

Потому что входные fmod - double. double не может хранить огромное количество целых чисел. Например, Ваш случай:

Print(DoubleToString((double)131472503841474907, 0)); // 131472503841474912

Делайте так

long fmod( const long Value, const long Value2 )
{
  return(Value % Value2);
}


На примере float можно быстро понять особенность double

#define PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  for (int i = 0; i < INT_MAX; i++)
    if ((int)(float)i != i)
    {
      PRINT(i);
      PRINT((float)i);
      PRINT((double)i);
      
      break;
    }
}


Результат

i = 16777217
(float)i = 16777216.0
(double)i = 16777217.0


ЗЫ double не теряет инфу всего int-диапазона, с long уже не так.

 
fxsaber:

Потому что входные fmod - double. double не может хранить огромное количество целых чисел. Например, Ваш случай:

Делайте так

Конечно сейчас проверю предложенный вариант, но у меня был и такой проверочный код

/********************Script program start function*******************/
void OnStart()
{
  long chartID = ChartID(), d=100000;
  Print("ChartID - ", ChartID());
  Print("fmod(ChartID(), ",  d, ") = ", fmod(ChartID(), d));
  printf("LONG_MAX = %I64d",LONG_MAX);
  printf("DBL_MAX = %.16e",DBL_MAX);
  Print("DBL_MAX-LONG_MAX = ", DBL_MAX-LONG_MAX);
}/*******************************************************************/

результат

2018.01.15 14:07:20.440 Script 00 EURUSD,M15: removed
2018.01.15 14:07:20.440 00 EURUSD,M15: uninit reason 0
2018.01.15 14:07:20.440 00 EURUSD,M15: DBL_MAX-LONG_MAX = 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
2018.01.15 14:07:20.440 00 EURUSD,M15: DBL_MAX = 1.7976931348623157e+308
2018.01.15 14:07:20.440 00 EURUSD,M15: LONG_MAX = 9223372036854775807
2018.01.15 14:07:20.440 00 EURUSD,M15: fmod(ChartID(), 100000) = 74912
2018.01.15 14:07:20.440 00 EURUSD,M15: ChartID - 131472503841474907
2018.01.15 14:07:20.440 00 EURUSD,M15: initialized
2018.01.15 14:07:20.430 Script Test\00 EURUSD,M15: loaded successfully

Это говорит о том, что усечения значения не должно происходить.


Но вот проверил такой вариант, чуток изменив предложенный

/********************Script program start function*******************/
void OnStart()
{
  long chartID = ChartID(), d=100000;
  Print("ChartID - ", ChartID());
  Print("fmod(ChartID(), ",  d, ") = ", (long)fmod(ChartID(), d));
  Print("ChartID() % ", d, " = ", ChartID() % d);
}/*******************************************************************/

и получил ожидаемый вариант

2018.01.15 14:17:51.301 Script 00 EURUSD,M15: removed
2018.01.15 14:17:51.301 00 EURUSD,M15: uninit reason 0
2018.01.15 14:17:51.301 00 EURUSD,M15: ChartID() % 100000 = 74907
2018.01.15 14:17:51.301 00 EURUSD,M15: fmod(ChartID(), 100000) = 74912
2018.01.15 14:17:51.301 00 EURUSD,M15: ChartID - 131472503841474907
2018.01.15 14:17:51.301 00 EURUSD,M15: initialized
2018.01.15 14:17:51.291 Script Test\00 EURUSD,M15: loaded successfully

Появляется другой вопрос,

Если MathMod равно как и fmod возвращает вещественный остаток от деления двух чисел. И % согласно документации

Остаток от деления                      minutes = time % 60;


то почему разница?
 
Alexey Viktorov:

почему разница?

Ответ тот же.

 
fxsaber:

Ответ тот же.

Спасибо. Пока я дополнял своё сообщение, не видел вашего дополнения.

Хоть и ничего не понял, да в общем-то и не надо. Главное понял что fmod и % дают разный результат. И при необходимости это буду учитывать.

 

Заметил такой баг в шрифтах.


при Times new roman - глюков нет, 

а вот когда выбрал другой шрифт, например Roboto - некоторые буквы недорисовывает, и все это при размере 10 !!!

и только с английскими P  и  F


слева Roboto справа Times

Вопрос: кто - нибудь сталкивался? 

при увеличение размера до 12 - все рисует нормально, 

все бы ничего, но и на размере 9 = все рисует нормально :-) 

 

OBJ_TRENDBYANGLE

В справке

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

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