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

 
Tretyakov Rostyslav #:
Прикрепите файл кода, я поправлю

Добавлю еще индикатор, с которого берутся данные.

Файлы:
SWT.ex5  21 kb
 
Tretyakov Rostyslav #:
Покажите, очень интересно.

Вот вариант полностью написанный DeepSeek, без моего участия и корректировок.
Первый модуль ИИ рекомендовал вставить перед блоком инициализации, не знаю почему.
Ну а собственно модуль расчета меток в конце.
Вариант менее громоздкий, чем мой, но тоже в общем не маленький...

//+------------------------------------------------------------------+
//| Вспомогательная функция для создания меток                       |
//+------------------------------------------------------------------+
void CreateLabel(string name, string text, int xdist, int ydist, color clr)
  {
   if(!ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0))
     {
      Print("Failed to create label ", name, " error ", GetLastError());
      return;
     }

   ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_LEFT_UPPER);
   ObjectSetInteger(0, name, OBJPROP_XDISTANCE, xdist);
   ObjectSetInteger(0, name, OBJPROP_YDISTANCE, ydist);
   ObjectSetInteger(0, name, OBJPROP_FONTSIZE, SizeLabel);
   ObjectSetString(0, name, OBJPROP_FONT, "Franklin Gothic Medium");
   ObjectSetString(0, name, OBJPROP_TEXT, text);
   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
   ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
   ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
  }


//+------------------------------------------------------------------+
//| Создание всех текстовых меток                                    |
//+------------------------------------------------------------------+
void CreateAllLabels()
  {
   ObjectsDeleteAll(0, -1, OBJ_LABEL);

// Метки наименования тренда
   CreateLabel("TrendName", "TREND", 5, 15, ModifyColorLabel);
   CreateLabel("Basic", "Basic  ", 5, 30, ModifyColorLabel);
   CreateLabel("Long", "Long   ", 5, 43, ModifyColorLabel);
   CreateLabel("Mid", "Medium ", 5, 56, ModifyColorLabel);
   CreateLabel("Short", "Short  ", 5, 69, ModifyColorLabel);
   CreateLabel("Local", "Weekly  ", 5, 82, ModifyColorLabel);
   CreateLabel("Daily", "Daily  ", 5, 95, ModifyColorLabel);
   CreateLabel("IntraDay", "Iday   ", 5, 108, ModifyColorLabel);
   CreateLabel("Hourly", "Hourly ", 5, 121, ModifyColorLabel);
   CreateLabel("IntraHour", "Ihour  ", 5, 134, ModifyColorLabel);
   CreateLabel("VGrid", "V      ", 5, 147, ModifyColorLabel);

// Метки волатильности
   CreateLabel("TrPower", "PowerTr", 55, 15, ModifyColorLabel);
   CreateLabel("Basic_Vol", DoubleToString(2*VolBT, (int)_Digits), 55, 30, ModifyColorLabel);
   CreateLabel("Long_Vol", DoubleToString(2*VolLT, (int)_Digits), 55, 43, ModifyColorLabel);
   CreateLabel("Mid_Vol", DoubleToString(2*VolMT, (int)_Digits), 55, 56, ModifyColorLabel);
   CreateLabel("Short_Vol", DoubleToString(2*VolST, (int)_Digits), 55, 69, ModifyColorLabel);
   CreateLabel("Local_Vol", DoubleToString(2*VolWT, (int)_Digits), 55, 82, ModifyColorLabel);
   CreateLabel("Daily_Vol", DoubleToString(2*VolDT, (int)_Digits), 55, 95, ModifyColorLabel);
   CreateLabel("IntraDay_Vol", DoubleToString(2*VolIT, (int)_Digits), 55, 108, ModifyColorLabel);
   CreateLabel("Hourly_Vol", DoubleToString(2*VolHT, (int)_Digits), 55, 121, ModifyColorLabel);
   CreateLabel("IntraHour_Vol", DoubleToString(2*VolIhT, (int)_Digits), 55, 134, ModifyColorLabel);
   CreateLabel("VGrid_Vol", DoubleToString(V, (int)_Digits), 55, 147, ModifyColorLabel);

// Метки силы тренда
   CreateLabel("PartialPower", "PersTr", 115, 15, ModifyColorLabel);
   CreateLabel("Basic_Pers", DoubleToString(Basic, 2), 115, 30, ModifyColorLabel);
   CreateLabel("Long_Pers", DoubleToString(Long, 2), 115, 43, ModifyColorLabel);
   CreateLabel("Mid_Pers", DoubleToString(Mid, 2), 115, 56, ModifyColorLabel);
   CreateLabel("Short_Pers", DoubleToString(Short, 2), 115, 69, ModifyColorLabel);
   CreateLabel("Local_Pers", DoubleToString(Weekly, 2), 115, 82, ModifyColorLabel);
   CreateLabel("Daily_Pers", DoubleToString(Daily, 2), 115, 95, ModifyColorLabel);
   CreateLabel("IntraDay_Pers", DoubleToString(IntraDay, 2), 115, 108, ModifyColorLabel);
   CreateLabel("Hourly_Pers", DoubleToString(Hourly, 2), 115, 121, ModifyColorLabel);

// Метки направления трендов
   CreateLabel("TM", "TM", 156, 15, ModifyColorLabel);
   CreateLabel("Basic_Z=0", IntegerToString((int)((1+1*(Btr==Btc))*(MathAbs(Btr)/Btr))), 160, 30, ModifyColorLabel);
   CreateLabel("Long_Z=0", IntegerToString((int)((1+1*(Ltr==Ltc))*(MathAbs(Ltr)/Ltr))), 160, 43, ModifyColorLabel);
   CreateLabel("Mid_Z=0", IntegerToString((int)((1+1*(Mtr==Mtc))*(MathAbs(Mtr)/Mtr))), 160, 56, ModifyColorLabel);
   CreateLabel("Short_Z=0", IntegerToString((int)((1+1*(Str==Stc))*(MathAbs(Str)/Str))), 160, 69, ModifyColorLabel);
   CreateLabel("Local_Z=0", IntegerToString((int)((1+1*(Wtr==Wtc))*(MathAbs(Wtr)/Wtr))), 160, 82, ModifyColorLabel);
   CreateLabel("Daily_Z=0", IntegerToString((int)((1+1*(Dtr==Dtc))*(MathAbs(Dtr)/Dtr))), 160, 95, ModifyColorLabel);
   CreateLabel("IntraDay_Z=0", IntegerToString((int)((1+1*(Itr==Itc))*(MathAbs(Itr)/Itr))), 160, 108, ModifyColorLabel);
   CreateLabel("Hourly_Z=0", IntegerToString((int)((1+1*(Htr==Htc))*(MathAbs(Htr)/Htr))), 160, 121, ModifyColorLabel);
   CreateLabel("IHour_Z=0", IntegerToString((int)((1+1*(Ihtr==Ihtc))*(MathAbs(Ihtr)/Ihtr))), 160, 134, ModifyColorLabel);
  }

 
Nikolay Skrigan #:

Прикрепил

  


Файлы:
Test_1_5.1.mq5  37 kb
 
Tretyakov Rostyslav #:

  


Супер!!!
Настолько хорошо, что я даже не хочу спрашивать почему не работало )))
Огромное спасибо.
Теперь у меня не осталось проблем в переводе кода еще одного индикатора и робота.

 
Tretyakov Rostyslav #:

  


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

      double   VolHT = GetIndicator(handle_swt_m1, 11, 1);

По аналогии с МТ4. Или это так не работает?


 
Tretyakov Rostyslav #:

  


Решил оставить ваш вариант формирования меток. Дипсиковский оставлю про запас...
Хотя он вроде бы компактнее, но лень переделывать. Выдохся за сегодняшний день...

 
Nikolay Skrigan #:

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

      double   VolHT = GetIndicator(handle_swt_m1, 11, 1);

По аналогии с МТ4. Или это так не работает?


Да
 
Nikolay Skrigan #:

Решил оставить ваш вариант формирования меток. Дипсиковский оставлю про запас...
Хотя он вроде бы компактнее, но лень переделывать. Выдохся за сегодняшний день...

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

В моем варианте если объект уже есть, то вносятся значение текущих данных

 
Tretyakov Rostyslav #:

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

В моем варианте если объект уже есть, то вносятся значение текущих данных

по затратам времени, проверка объекта на существование - равнозначна его созданию.

один из самых больших тормозов которые только можно придумать : if (!ObjectFind(...)) ObjectCreate(...)

 
Maxim Kuznetsov #:

по затратам времени, проверка объекта на существование - равнозначна его созданию.

один из самых больших тормозов которые только можно придумать : if (!ObjectFind(...)) ObjectCreate(...)

Я не знаю как в МТ5, но в МТ4 без "if(ObjectFind(...))" на каждом тике ошибка 4200

PS Вообще лучше создать при инициализации