Ваши вопросы по языку MQL4

star603

Новичок форума
Код:
   double Y = NormalizeDouble(iFractals(Symbol(),PERIOD_CURRENT,MODE_UPPER,2),Digits);
   double T = NormalizeDouble(iMA(NULL,PERIOD_CURRENT,5,3,MODE_EMA,PRICE_CLOSE,2),Digits);//Сред скольз губы
      if(Y>0 && Y>T && NormalizeDouble(Y-T,Digits)<0.0020)
        Print(Y,"==",T,"==",NormalizeDouble(Y-T,Digits),"==",iTime(Symbol(),PERIOD_CURRENT,0));

Почему на выделенную дату 2016.10.28 выдался принт хотя помоим расчетам не должен был? Может я что то не учел? Заранее спасибо.
 

Вложения

  • Безымянный.jpg
    Безымянный.jpg
    928,3 КБ · Просмотры: 42

Ugar

Гуру форума
Код:
   double Y = NormalizeDouble(iFractals(Symbol(),PERIOD_CURRENT,MODE_UPPER,2),Digits);
   double T = NormalizeDouble(iMA(NULL,PERIOD_CURRENT,5,3,MODE_EMA,PRICE_CLOSE,2),Digits);//Сред скольз губы
      if(Y>0 && Y>T && NormalizeDouble(Y-T,Digits)<0.0020)
        Print(Y,"==",T,"==",NormalizeDouble(Y-T,Digits),"==",iTime(Symbol(),PERIOD_CURRENT,0));

Почему на выделенную дату 2016.10.28 выдался принт хотя помоим расчетам не должен был? Может я что то не учел? Заранее спасибо.
Потому что фрактал там был, потом 0 бар попёр вверх и пропал фрактал на 2 баре. Перерисовался.
 

FEEX

Активный участник
Подскажите, плиз, как исправить это:

Код:
 Comment("\n Lot: ",Lot(),
         "\n Trades: ",CountTrades());
суть в том, что данный вариант выводит на экран Lot: 0.0700000000001а нужно чтобы выводилось 0.07, т.е. сделать округление.
Искал в гуле, не нашел варианты как в Comment вставить округление((
 

star603

Новичок форума
Код:
int cnt=0;

void OnTick()
  {
   if(f_IsNewBar()) //это взял из интернета
      f_EveryBar();//это взял из интернета
  }//******************************************************************************************************
bool f_IsNewBar()//это взял из интернета
  {
   if(intBars != Bars)
     {
      intBars = Bars;
      return(true);
     }
   return(false);
  }
//###############################################################################################################
void f_EveryBar()//это взял из интернета, сам код мой Между @@ мой код
  {
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   double Y = NormalizeDouble(iFractals(Symbol(),PERIOD_CURRENT,MODE_UPPER,2),Digits);
   double K = NormalizeDouble(iMA(NULL,PERIOD_CURRENT,13,8,MODE_EMA,PRICE_CLOSE,2),Digits);
   if(Y==K)
   {
      Comment(cnt++);
   }
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  }
//+------------------------------------------------------------------+

Почему то сначало 0 показывает вместо 1? Почему не считает? Коммент почему то выдается не сразу?
 
Последнее редактирование:

star603

Новичок форума
Код:
int cnt=0;

void OnTick()
  {
   if(f_IsNewBar()) //это взял из интернета
      f_EveryBar();//это взял из интернета
  }//******************************************************************************************************
bool f_IsNewBar()//это взял из интернета
  {
   if(intBars != Bars)
     {
      intBars = Bars;
      return(true);
     }
   return(false);
  }
//###############################################################################################################
void f_EveryBar()//это взял из интернета, сам код мой Между @@ мой код
  {
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   double Y = NormalizeDouble(iFractals(Symbol(),PERIOD_CURRENT,MODE_UPPER,2),Digits);
   double K = NormalizeDouble(iMA(NULL,PERIOD_CURRENT,13,8,MODE_EMA,PRICE_CLOSE,2),Digits);
   if(Y==K)
   {
      Comment(cnt++);
   }
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  }
//+------------------------------------------------------------------+

Почему то сначало 0 показывает вместо 1? Почему не считает? Коммент почему то выдается не сразу?
Получилось только через пользовательскую функцию. в обычном коде не получилось реализовать. Такое возможно вообще? При пользовательской функции есть возможность вывод несколько счетчиков таких?
 

star603

Новичок форума
Код:
   double Y = NormalizeDouble(iFractals(Symbol(),PERIOD_CURRENT,MODE_UPPER,2),Digits);
   double K = NormalizeDouble(iMA(NULL,PERIOD_CURRENT,13,8,MODE_EMA,PRICE_CLOSE,2),Digits);
   if(Y==K && Y>0.0)
      cnt++;
   Print("A = ",cnt++," Y = ",Y," K = ",K," Дата и время = ",iTime(NULL,PERIOD_CURRENT,2));

Вроде все правильно. Но почему то: выдает это:

2022.10.07 23:49:25.443 2010.04.23 00:00:00 Sova EURUSD,Daily: A = 1641 Y = 0.0 K = 1.3458 Дата и время = 2010.04.21 00:00:00
2022.10.07 23:49:25.334 2010.04.22 00:00:00 Sova EURUSD,Daily: A = 1640 Y = 0.0 K = 1.3451 Дата и время = 2010.04.20 00:00:00
2022.10.07 23:49:25.256 2010.04.21 00:00:00 Sova EURUSD,Daily: A = 1639 Y = 0.0 K = 1.3467 Дата и время = 2010.04.19 00:00:00
2022.10.07 23:49:25.178 2010.04.20 00:00:00 Sova EURUSD,Daily: A = 1638 Y = 0.0 K = 1.3488 Дата и время = 2010.04.16 00:00:00
2022.10.07 23:49:25.022 2010.04.19 00:00:00 Sova EURUSD,Daily: A = 1637 Y = 0.0 K = 1.3504 Дата и время = 2010.04.15 00:00:00
2022.10.07 23:49:24.929 2010.04.16 00:00:00 Sova EURUSD,Daily: A = 1636 Y = 0.0 K = 1.3508 Дата и время = 2010.04.14 00:00:00
 

Абдулхаким

Почетный гражданин
Почему то сначало 0 показывает вместо 1? Почему не считает?
ну делов то :)
если нужно вывести в коммент посчитанный результат, а внутри коммента он не считает, то поставь cnt++; перед комментом.
или попробуй записать Comment(cnt+1);
с таким подходом может и недокументированных особенностей найдёшь не мало :)
есть возможность вывод несколько счетчиков таких?
для примера Comment(cnt," ",cnt2); или Comment(cnt,"\n",cnt2);
каждый следующий вызов будет удалять предыдущий
 

star603

Новичок форума
а что должен выдать ?
Print на каждом тике ?
В моем коде на каждом новом баре, а не на тике. Y=K должен быть так.
Взять скажем этот пример:
2022.10.08 11:21:03.748 2004.01.05 00:00:00 Sova EURUSD,Daily: A = 2 Y = 0.0 K = 1.2277 Дата и время = 2004.01.01 00:00:00
А должно быть так:
2022.10.08 11:21:03.748 2004.01.05 00:00:00 Sova EURUSD,Daily: A = 2 Y = 1.2277 K = 1.2277 Дата и время = 2004.01.01 00:00:00
 

AlexeyVik

Программист mql4 mql5
В моем коде на каждом новом баре, а не на тике. Y=K должен быть так.
Взять скажем этот пример:
2022.10.08 11:21:03.748 2004.01.05 00:00:00 Sova EURUSD,Daily: A = 2 Y = 0.0 K = 1.2277 Дата и время = 2004.01.01 00:00:00
А должно быть так:
2022.10.08 11:21:03.748 2004.01.05 00:00:00 Sova EURUSD,Daily: A = 2 Y = 1.2277 K = 1.2277 Дата и время = 2004.01.01 00:00:00
Ты хоть когда-то научишься думать, прежде чем чего-то сделать?
Ты в Y записываешь верхний фрактал. Если фрактал есть, то значение Y будет равно high этой свечи.
А в К ты записываешь iMA и ждёшь когда-же Y и K будут равны… Жесть.
 

star603

Новичок форума
Ты хоть когда-то научишься думать, прежде чем чего-то сделать?
Ты в Y записываешь верхний фрактал. Если фрактал есть, то значение Y будет равно high этой свечи.
А в К ты записываешь iMA и ждёшь когда-же Y и K будут равны… Жесть.
Я в курсе что они могут не совпадать я это изначально допускал. я просто не понимаю почему так происходит хотя не должно быть так.
 

star603

Новичок форума
Ты хоть когда-то научишься думать, прежде чем чего-то сделать?
Ты в Y записываешь верхний фрактал. Если фрактал есть, то значение Y будет равно high этой свечи.
А в К ты записываешь iMA и ждёшь когда-же Y и K будут равны… Жесть.
Просто не пойму почему выводиться принт когда не должен. даже это добавил &&Y>0.0
 

vladradon

Программист
ы хоть когда-то научишься думать, прежде чем чего-то сделать?
Ты в Y записываешь верхний фрактал. Если фрактал есть, то значение Y будет равно high этой свечи.
А в К ты записываешь iMA и ждёшь когда-же Y и K будут равны… Жесть.
Мне друг несколько месяцев назад написал, что этот кадр так же имел мозги своими вопросами на другом форуме и ему так же пытались помочь, но в итоге он всех достал и толку ноль. Если собрать в кучу все его запросы, то нам (прогерам) понадобится максимум пол часа, чтобы все написать грамотно и без глюков!
 

star603

Новичок форума
Мне друг несколько месяцев назад написал, что этот кадр так же имел мозги своими вопросами на другом форуме и ему так же пытались помочь, но в итоге он всех достал и толку ноль. Если собрать в кучу все его запросы, то нам (прогерам) понадобится максимум пол часа, чтобы все написать грамотно и без глюков!
Это кто?
 

Абдулхаким

Почетный гражданин
Просто не пойму почему выводиться принт когда не должен.
я же ответил :)
Print должен быть в рамках условий if(Y==K && Y>0.0)
т.е. не хватает скобок
Код:
if(Y==K || Y>0.0){
   cnt++;
   Print("A = ",cnt," Y = ",Y," K = ",K," Дата и время = ",iTime(NULL,PERIOD_CURRENT,2));
}
даже это добавил &&Y>0.0
&& (и) не отменяет других условий, может сюда лучше подойдёт || (или) ?
увеличение на 1
 
Верх