Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 746

 

Ребят, у меня есть функция OnTimer(), которая должна выполняться в начале каждого дня, а при определенном результате выполнения советник должен погружаться в сон. Если я задам для функции OnTimer() время следующее выполнения на начало следующего дня, а после этого погружу советника в сон до того же момента (-1 секунда к примеру), то счетчик времени все еще будет идти и функция сработает после выхода из сна по прошествии 1 секунды?


P. S. Еще волнует немного одни вопрос, как документация может быть составлена в таком убогом стиле? Я имею ввиду пробелы в коде и постановку скобок, я в жизни не видел чтобы кто-то кроме "школьников на лабораторных по программированию" и пацанов, которые пишут на mql выдавали что-то в роде:

for(int x=0;x<10;x++)

{

}


Сайт исправляет как-то сам, по поводу скобок я про то, что скобки ставяться с табуляцией, тоесть нельзя по вертикали отследить интуитивно куда идет скобка.

 
ukrop1203:

Ребят, у меня есть функция OnTimer(), которая должна выполняться в начале каждого дня, а при определенном результате выполнения советник должен погружаться в сон. Если я задам для функции OnTimer() время следующее выполнения на начало следующего дня, а после этого погружу советника в сон до того же момента (-1 секунда к примеру), то счетчик времени все еще будет идти и функция сработает после выхода из сна по прошествии 1 секунды?


P. S. Еще волнует немного одни вопрос, как документация может быть составлена в таком убогом стиле? Я имею ввиду пробелы в коде и постановку скобок, я в жизни не видел чтобы кто-то кроме "школьников на лабораторных по программированию" и пацанов, которые пишут на mql выдавали что-то в роде:

for(int x=0;x<10;x++)

{

}


Сайт исправляет как-то сам, по поводу скобок я про то, что скобки ставяться с табуляцией, тоесть нельзя по вертикали отследить интуитивно куда идет скобка.

Где Sleep поставишь, та функция и встанет на заданное время. Поставь в сон на 5 минут, а в OnTimer поставь Print каждые 10 сек. Это и будет ответом на твой вопрос. Зачем идти в сон, если по итогу одной функции можно просто менять ключ определяющий режим работы основного алгоритма в любых других функциях?

 

Всем привет!


ВОПРОС по МТ5. Текстовые метки (цифры) ставятся в виде тонкого серого отрезка. Точки - это контрольный буфер для визуализации ляпов МТ5 в моей голове....


Сравнивал с Документацией для OBJ_TEXT, вроде тоже.... 

//| Вывод текстовой метки с размером интервала "тела" свечи          |
//+------------------------------------------------------------------+
void LabText(const long  chart_ID=0,
             string      name="Text", 
             string      text="text", // ТЕКСТ ДЛЯ ВЫВОДА НА ГРАФИК
             datetime    time=0, 
             double      price=0,
             int         fontsizes=0,
             color       clr=0)
  {
  if(ObjectFind(chart_ID,name)!=0)
     {
   ObjectCreate(chart_ID,name,OBJ_TEXT,0,0,0);
   ObjectSetInteger(chart_ID,name,OBJPROP_TIME,time);
   ObjectSetDouble(chart_ID,name,OBJPROP_PRICE,price);
//--- установим угол наклона текста 
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,0.0); 
//--- установим способ привязки 
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,ANCHOR_LEFT); 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString(chart_ID,name,OBJPROP_FONT,"Arial");
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,fontsizes);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,true);
     }
  }

********************** В КОДЕ *********************************
    

    double  LW=iLow(NULL,PERIOD_H1,i);  //   ЦИКЛ I

                        *********** 

   LabText(0,"NAME  ("+string(i)+")",DoubleToString(bbull[i],0),iTime(NULL,PERIOD_H1,i),
              LW-(8*_Point),12,clrWhite);
   ExtLineBuffer1[i]=iHigh(NULL,PERIOD_H1,i);


 
kopeyka2:

Всем привет!


ВОПРОС по МТ5. Текстовые метки (цифры) ставятся в виде тонкого серого отрезка. Точки - это контрольный буфер для визуализации ляпов МТ5 в моей голове....


Сравнивал с Документацией для OBJ_TEXT, вроде тоже.... 


Смотрите что передаёте в параметр fontsizes

 
Artyom Trishkin:

Смотрите что передаёте в параметр fontsizes

СПАСИБО!!! Я в fontsizes всовывал из глобальных переменных. Установил в функции void LabText. Заработало...


 

Хочу добавлять и удалять скриптом индикаторы на графике, тк применение шаблона удаляет все нарисованые линии.


#property indicator_label1  "MA8"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1


int indicator_handle;

void OnStart()
  {

   indicator_handle = iMA(0,0,8,0,MODE_EMA,PRICE_CLOSE);

   Print(indicator_handle);

   //ChartIndicatorAdd(0,0,indicator_handle);

   
  }

Получаю ответ 

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) cannot load indicator 'Moving Average' [4302]

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) -1


Хотя код компилируется без ошибок.


 
psyman:

Хочу добавлять и удалять скриптом индикаторы на графике, тк применение шаблона удаляет все нарисованые линии.


Получаю ответ 

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) cannot load indicator 'Moving Average' [4302]

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) -1


Хотя код компилируется без ошибок.


ERR_MARKET_NOT_SELECTED

4302

Символ не выбран в MarketWatch


Зачем 0 ставите вместо имени символа? Если хотите текущий, то нужно NULL писать, или его наименование, например "EURUSD"

iMA

Возвращает хэндл индикатора скользящего среднего. Всего один буфер.

int  iMA(
   string                             symbol,             // имя символа
   ENUM_TIMEFRAMES       period,             // период
   int                                  ma_period,      // период усреднения
   int                                  ma_shift,         // смещение индикатора по горизонтали
   ENUM_MA_METHOD       ma_method,    // тип сглаживания
   ENUM_APPLIED_PRICE   applied_price   // тип цены или handle
   );

Параметры

symbol

[in]  Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.

period

[in]  Значение периода может быть одним из значений перечисления ENUM_TIMEFRAMES, 0 означает текущий таймфрейм.

ma_period

[in]  Период усреднения для вычисления скользящего среднего.

ma_shift

[in]  Сдвиг индикатора относительно ценового графика.

ma_method

[in]  Метод усреднения. Может быть любым из значений ENUM_MA_METHOD.

applied_price

[in]  Используемая цена. Может быть любой из ценовых констант ENUM_APPLIED_PRICE или хендлом другого индикатора.

Возвращаемое значение

Возвращает хэндл указанного технического индикатора, в случае неудачи возвращает INVALID_HANDLE. Для освобождения памяти компьютера от неиспользуемого больше индикатора служит функция IndicatorRelease(), которой передается хэндл этого индикатора.

 
здравствуйте, подскажите пожалуйста, как сделать чтоб массив из хендла МА возвращал нормальные цены, всмысле так как положено, 5 знаков после запятой а не 8
int OnInit()
  {
 ima1_handle        = iMA (Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE);
 ima2_handle        =  iMA (Symbol(),0,64,0,MODE_EMA,PRICE_CLOSE);               //хендл
 Stoch_handle       = iStochastic (Symbol(),0,20,15,15,MODE_EMA,STO_CLOSECLOSE);//хендл
 ATR_handle         = iATR        (Symbol(),0,21);                              //хендл

   if(Digits==3 || Digits==5)
     {
      Slippage*=10;
      TrailingStop *= 10;
      TrailingStep *= 10;
     }
   return(0);
  }
void OnDeinit(const int reason)
  {

  }

void OnTick()
  { 
    double ima1_massiv [];                                          //динамический массив для быстрой машки
    ArraySetAsSeries(ima1_massiv, true);   
    int ima_count1 = CopyBuffer(ima1_handle,0,0,2,ima1_massiv);    //скопировал данные из 2х буферов быстрой машки
    //double ima1_normal = NormalizeDouble(ima1_massiv[0], Digits);
    string ima1_massiv_str0 = DoubleToString (ima1_massiv[0]);
    string ima1_massiv_str1 = DoubleToString (ima1_massiv[1]);
    printf ("сегодня = "+ ima1_massiv_str0 + " вчера = "+ ima1_massiv_str1);  
    
  }    
язык мт5
 
Sergey Lobzankin:
здравствуйте, подскажите пожалуйста, как сделать чтоб массив из хендла МА возвращал нормальные цены, всмысле так как положено, 5 знаков после запятой а не 8
if(Digits==3 || Digits==5)
     {
      Slippage*=10;
      TrailingStop *= 10;
      TrailingStep *= 10;
     }
   return(0);

круто)

double normalMA=NormalizeDouble(MA,_Digits);    
 

здравствуйте, подскажите пожалуйста, как сделать чтоб массив из хендла МА возвращал нормальные цены, всмысле так как положено, 5 знаков после запятой а не 8

язык мт5

DoubleToStr в мт5 нет там DoubleToString(); но она не помогает
DoubleToStr - Преобразование данных - Справочник MQL4
DoubleToStr - Преобразование данных - Справочник MQL4
  • docs.mql4.com
DoubleToStr - Преобразование данных - Справочник MQL4
Причина обращения: