Ошибки, баги, вопросы - страница 2031

 
Andrey Barinov:

Читайте про приведение типов и потери при этом. https://www.mql5.com/ru/docs/basis/types/casting


Спасибо! Идея-то вот в чем: имеем индикатор, который дает малочисленные точные сигналы.

Открываем любое количество графиков и, соответственно ММ и сигналу индикатора, открываем позиции. Создаем на графике текстовые метки или кнопки с указанием символа и текущей прибыли открытых поз. При нажатии кнопки выводим нужный график на передний план. 

 
На Metaquotes-Demo сменился источник FOREX-котировок? Сильно меньше спреды стали.
 
Slava:
Четвёрка?

Yes

 
Вместо ошибки компиляции возникает странное поведение при выполнении
// Запускаем на MT5

#import "Temp.ex4" // EX4 - не ошибка
  void Func();
#import

void OnInit()
{
  Func();
}

Нет ни то что DLL, нет даже Temp.ex4!

 
Vitaly Muzichenko:

Yes

Проблема заключается в том, что в новом MQL4 строки - юникодные. Во всех остальных местах: объекты, индикаторы, графики, имена символов, журналы, настройки и т.п. - строки остались ансишными. Поэтому при общении с "внешним миром" в MQL4-программах каждый раз производится преобразование WideCharToMultiByte. В обычном случае символы строк однобайтовые (но в разных кодировках - разные), в Юго-Восточной Азии это - мультибайт (в китайской раскладке 1 символ занимает от 1 до 4 байт.

То есть, не только китайцы, но и европейцы не поймут надписей, предполагающих кодовую страницу 1251

 
Slava:

Проблема заключается в том, что в новом MQL4 строки - юникодные. Во всех остальных местах: объекты, индикаторы, графики, имена символов, журналы, настройки и т.п. - строки остались ансишными. Поэтому при общении с "внешним миром" в MQL4-программах каждый раз производится преобразование WideCharToMultiByte. В обычном случае символы строк однобайтовые (но в разных кодировках - разные), в Юго-Восточной Азии это - мультибайт (в китайской раскладке 1 символ занимает от 1 до 4 байт.

То есть, не только китайцы, но и европейцы не поймут надписей, предполагающих кодовую страницу 1251

В чём вся соль: Создаём объект с кириллическим название, далее по клику обрабатывает его в  OnChartEvent, но там его названия не видно.

Сегодня проверим в пятёрке, будет ли это место иметь проблему.

 
Vitaly Muzichenko:

В чём вся соль: Создаём объект с кириллическим название, далее по клику обрабатывает его в  OnChartEvent, но там его названия не видно.

Сегодня проверим в пятёрке, будет ли это место иметь проблему.

В пятёрке работать будет

А для Вашего случая есть решение и в четвёрке

В OnInit вызовите MQLSetInteger(MQL_CODEPAGE,CP_ACP);

Тогда строковые преобразования "туда-сюда" будут адекватными


MQLSetInteger - Проверка состояния - Справочник MQL4
MQLSetInteger - Проверка состояния - Справочник MQL4
  • docs.mql4.com
Функция MQLSetInteger() предназначена для изменения текущей кодовой страницы в запущенной mql4-программе. Это может понадобиться в тех случаях, когда для запускаемых mql4-программ терминал устанавливает по умолчанию кодовую страницу, отличающаяся от той, которая использовалась при её компиляции. Например, mql4-программа скомпилирована на...
 
подскажите пожалуйста кто знает, что я делаю не так: 

данный код запускается на EURUSD 30m

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0
ENUM_MA_METHOD     MA_Type   = MODE_SMA;
ENUM_APPLIED_PRICE MA_Price  = PRICE_CLOSE;
int handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   handle = iMA("AAPL",_Period, 10,0,MA_Type,MA_Price);

   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{

   return(rates_total);
}
//+------------------------------------------------------------------+


терминал выдаёт ошибку:
2017.10.11 14:35:23.352 11111111111111111111111111111111 (EURUSD,M30) cannot load indicator 'Moving Average' [4302]

handle при распечатке выдаёт -1;

 
Money_Man:
подскажите пожалуйста кто знает, что я делаю не так: 

данный код запускается на EURUSD 30m



терминал выдаёт ошибку:
2017.10.11 14:35:23.352 11111111111111111111111111111111 (EURUSD,M30) cannot load indicator 'Moving Average' [4302]



А так:

   handle = iMA(Symbol(),Period(), 10,0,MA_Type,MA_Price);

?

 
Money_Man:
подскажите пожалуйста кто знает, что я делаю не так: 

данный код запускается на EURUSD 30m



терминал выдаёт ошибку:
2017.10.11 14:35:23.352 11111111111111111111111111111111 (EURUSD,M30) cannot load indicator 'Moving Average' [4302]


Что означает ошибка 4302?
Причина обращения: