Новая версия платформы MetaTrader 5 build 3980: Улучшения и исправления - страница 5

 

Ошибка, которая могла присутствовать во многих сборках до этой...

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

Как сделать цвет уровня индикатора прозрачным?

Фернандо Каррейру , 2023.09.28 12:52

Я потратил время на создание собственного кода тестового примера и вот мои выводы:

  • При настройке «Уровней» через вкладку свойств Индикатора терминала Цвет , Стиль линии и Толщина линии задаются глобально, чтобы влиять на ВСЕ уровни (это отличается от метода MQL).
  • При настройке «Уровней» программно через MQL каждый уровень может иметь свой собственный локальный Цвет , Стиль линии и Толщину линии (это отличается от вкладки свойств).
  • При программной установке цвета «clrNONE» всегда получается «белый», а не «Нет», как это происходит при настройке на вкладке свойств.

Это подтверждает выводы ОП о том, что установка цвета уровня на «clrNONE» НЕ работает должным образом.

Это можно было бы считать ошибкой, но я не знаю, собирается ли MetaQuotes что-то с этим делать.


#property indicator_separate_window
#property indicator_maximum 10
#property indicator_minimum -1

input color i_clrLevel = clrNONE;

int OnInit() {
   IndicatorSetInteger( INDICATOR_LEVELS, indicator_maximum );
   for(int i = 0; i < indicator_maximum; i++ ) {
      IndicatorSetDouble(  INDICATOR_LEVELVALUE, i, (double) i            );
      IndicatorSetInteger( INDICATOR_LEVELCOLOR, i, i_clrLevel            );
      IndicatorSetInteger( INDICATOR_LEVELWIDTH, i, 1                     );
      IndicatorSetInteger( INDICATOR_LEVELSTYLE, i, STYLE_DOT             );
      IndicatorSetString(  INDICATOR_LEVELTEXT,  i, "Level " + (string) i );
   };
   
   return INIT_SUCCEEDED;
};

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]) {
   return rates_total;
};
 
Aleksandr Dziuba #:
Начал проверять в эксперте подключение терминала.  Так вот TerminalInfoInteger(TERMINAL_CONNECTED) выдает что терминал не подключен. Думаю это тоже не правильно.  Этим я хотел проверить подключение терминала к

Снимаю  вопрос. Не работает другая функция. WebRequest. Отправка в телегу запроса. Видимо где то фильтр стоит который проверяет активность терминала. 

 
Renat Fatkhullin #:

Ренат, подскажите пожалуйста как из mql строки, преобразовать размер блока Transfer-Encoding: chunked в десятичную систему
это не работает

Print(StringToInteger("ff9"));  //ожидал 4089

 
Roman #:

как из mql строки

Вариант без проверок.
int f( const string Str )
{
  int Res = 0;
  
  for (int i = 0; i < StringLen(Str); i++)
    Res = (Res << 4) + Str[i] - (Str[i] <= '9' ? '0' : 'a' - 10);
  
  return(Res);
}

void OnStart()
{
  Print(f("ff9"));
}
 
Roman #:

Ренат, подскажите пожалуйста как из mql строки, преобразовать размер блока Transfer-Encoding: chunked в десятичную систему
это не работает

как читабельный вариант:

string hexs="ff9";

long value=StringToInteger("0x"+hexs);

а вообще странно что нет параметра radix у StringToInteger

 
fxsaber #:
Вариант без проверок.

Не корректно вычисляет

Print(StringFormat("%d", 0x1A)); //26   
Print(f("1A"));                  //-6



Maxim Kuznetsov #:

как читабельный вариант:

это не работает, проверял уже

string hexs = "ff9";
long value = StringToInteger("0x"+hexs);
Print(value);

//0
 
Roman #:

Не корректно вычисляет

Думал, это нетрудно добавить при желании.
int f( string Str )
{
  int Res = 0;

  StringToLower(Str);
  
  for (int i = 0; i < StringLen(Str); i++)
    Res = (Res << 4) + Str[i] - (Str[i] <= '9' ? '0' : 'a' - 10);
  
  return(Res);
}
 
fxsaber #:
Думал, это нетрудно добавить при желании.

Дошло. Вроде работает.
Спасибо огромное. Целый день убил в поисках решения.

 
Aleksandr Dziuba #:

Ну все работало. Только с последним обновлением что то изменилось. Я еще проверяю не тестер и оптимизатор. Может там флаги ставит. МТ4 работает без проблем.  Таймер перестает давать сигналы. КАк я вышел из ситуации. Открыл рабочий стол через другой рабочий стол. И тогда все заработало. Только отключаешь рабочий стол МТ5 перестает работать.  Может надо от имени администратора запускать. Ну мяукните что нибудь разрабы. Я же не думаю что это специально сделано что бы их вдс покупали.

Никакой проверки работы под RDP у функции нет. Как и потенциальной логики такого условия.

Будем проверять.

 
Renat Fatkhullin #:

Никакой проверки работы под RDP у функции нет. Как и потенциальной логики такого условия.

Будем проверять.

Все работает верно и под RDP и при закрытии окна (не сессии):

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string headers; 
   char   post[],result[]; 
   int    status;
//---
   while(!IsStopped())
     {
      //---
      if(!TerminalInfoInteger(TERMINAL_CONNECTED))
         Print("Терминал не подключен");
      //---   
      status=WebRequest("GET","https://www.metatrader5.com","","",5000,post,0,result,headers);
      Print("Status: ",status," length: ",result.Size()," error: ",GetLastError());
      //--- sleep 5 sec
      Sleep(5000);
     }
  }

Вывод:

2023.09.29 06:56:55.227 Test (EURUSD,H1)        Status: 200 length: 32702 error: 0
2023.09.29 06:57:00.308 Test (EURUSD,H1)        Status: 200 length: 32702 error: 0
2023.09.29 06:57:05.373 Test (EURUSD,H1)        Status: 200 length: 32702 error: 0    // RDP окно закрыто (не сессия!)
2023.09.29 06:57:10.438 Test (EURUSD,H1)        Status: 200 length: 32702 error: 0
2023.09.29 06:57:15.505 Test (EURUSD,H1)        Status: 200 length: 32702 error: 0
2023.09.29 06:57:20.565 Test (EURUSD,H1)        Status: 200 length: 32702 error: 0
2023.09.29 06:57:25.637 Test (EURUSD,H1)        Status: 200 length: 32702 error: 0
2023.09.29 06:57:30.712 Test (EURUSD,H1)        Status: 200 length: 32702 error: 0

Ищите ошибки у себя.