Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1051

 
Понятно, что бид состарился, но я надеялся, что данная конструкция позволит открыть несколько позиций на текущем баре с разными ценами открытия бид. И в тестере это отлично проходит, а на демо открывает одну позу и сразу закрывает. как избежать, не понятно.
 
rapid_minus:
Не понял, где там ответ. Имеется в виду вот это: "В функцию встроена проверка состояния флага остановки эксперта каждую 0.1 секунды."? Если так, то  как убрать этот флаг?

Нет, если-бы ты дочитал до конца, то увидел-бы ответ на сопрос...

Примечание

Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить. В функцию встроена проверка состояния флага остановки эксперта каждую 0.1 секунды. Функция Sleep() в тестере стратегий не вызывает никаких задержек.




 
LRA:

Для начала засуньте в конец индикатора вот это. Увидев на экране метку, сообразите как в нее вывести требуемое.  Здесь советуют, а засовывает каждый сам.

простите, дальше незаю(
  int Число=25;

       if(H==H1&&H1==H2)
         {if(J == true) {ObjectCreate(PatternText[shift],
         OBJ_TEXT, 0, Time[shift1], High[shift1] + Range*5);
         ObjectSetText(PatternText[shift], "pattern", 10, "Arial", Red);
         downArrow[shift1] = High[shift1] + Range*0.5;}if(setalert == 0 && Alert == true) {pattern = "pattern";setalert = 1;}} 




  if(ObjectFind(0,"Text")<0)        // Проверка наличия метки для вывода информации
  {
    ObjectCreate("Text", OBJ_LABEL, 0, 0, 0);   // Создание
    ObjectSet("Text", OBJPROP_CORNER, 1);       // Правый верхний угол
    ObjectSet("Text", OBJPROP_XDISTANCE, 10);   //X  
    ObjectSet("Text", OBJPROP_YDISTANCE, 10);   //Y
  }
  ObjectSetText("Text", string(Число), 14,"Arial",Black);   // Вывод в метку
  
 }
   return(0);
  }
 
AlexeyVik:    ты меня удивил...    mathlog10     

Вопрос решается гораздо проще.

С ним конечно проще.... Возможно, тогда он отсутствовал.  Или затерялся... В моем любимом TurboPascal точно отсутствует. Возведение в степень логарифмом делал.
 
Спасибо!
 
LRA:
С ним конечно проще.... Возможно, тогда он отсутствовал.  Или затерялся... В моем любимом TurboPascal точно отсутствует. Возведение в степень логарифмом делал.

Какое-то время после перехода на обновлённый mql4 в документации была ошибка. Нажимая на MathLog10 открывалась справка по MathLog

Я по этому поводу писал в сервисдеск, а они половину исправили, а половину так и оставили...

 
у меня есть индикатор полностью повторяющий бары главного окна с тем же масштабом по цене и времени. Вопрос: есть ли такие CHARTSET CHARTGET что бы в окне индикатора манялся масштаб точно так же как в главном окне когда прокручиваешь график ?
 
AlexeyVik:

log(10) действительно не 1, а вот что в mql нет десятичного логарифма это ты меня удивил...

А это тогда что? https://docs.mql4.com/ru/math/mathlog10 хотя в тексте допущена ошибка.

Вопрос решается гораздо проще.

Отвечу сразу с последнего сообщения.

Что такое логарифмы я понимаю, я не понимал зачем в том коде это, но после Вашей с тем товарищем переписки понял, что это для определения кол-ва знаков после запятой, верно?

Неужели по другому этого не сделать? Зачем это в коде (int) ? Почему Ваш способ лучше, чем та строка, что я предоставил?))

огромное спасибо) 

 
Igemon:

Отвечу сразу с последнего сообщения.

Что такое логарифмы я понимаю, я не понимал зачем в том коде это, но после Вашей с тем товарищем переписки понял, что это для определения кол-ва знаков после запятой, верно?

Неужели по другому этого не сделать? Зачем это в коде (int) ? Почему Ваш способ лучше, чем та строка, что я предоставил?))

огромное спасибо) 

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

Можно и по-другому. Здесь есть уже два варианта решения задачи, есть вариант перевести число в строку, определить длину строки, найти индекс символа "точка" и разница длинны строки и индекса точки будет значность дробной части числа. И на форуме mql5 выложено несколько вариантов, какой-то подлиньше, какой-то попроще.

Вот ещё один мой вариант.

int fun(double ch)
{
 int i = 0;
 double res = 0, ostatok = fmod(ch, 1);
 while(ostatok != 0 && i < 16) // число взято от фонаря для прерывания зацикленности
  {
   res = ostatok * 10;
   ostatok = NormalizeDouble(fmod(res, 1), 8); // Вроде 8 максимально
   i++;
  }
 return(i);
}/*******************************************************************/

Эта функция определяет количество знаков после запятой абсолютно любого числа.

Алгоритм до безобразия прост, считаем сколько раз остаток от деления на 1 будет больше нуля.

То, что мой способ лучше я не говорил. Каждый программист пишет так как ему видится решение задачи.

Число типа double, даже если оно не имеет значащих цифр в дробной части имеет вид, например 2.0 что не совсем корректно и для того чтобы получить нормальное целое число его приводят к типу int неявно.

 

Примечание

Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить. В функцию встроена проверка состояния флага остановки эксперта каждую 0.1 секунды. Функция Sleep() в тестере стратегий не вызывает никаких задержек.

Какие все умные - прямо страшно. Только читать не умеют: я ведь и писал, что в тестере слип проигнорирован (что понятно), но позиции-то открыты все, сколько указал. А на демо слип не работает, и позиция открывается только одна, да и та сразу закрывается. Вот эту проблему я и не могу решить.