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

 
Alexander:

Необходимо больше подробностей и нужны индикаторы для воспроизведения проблемы. Напишите в сервисдеск. 

Попробуйте установить этот индикатор на МТ4 билд 851 и всё станет ясно.
Файлы:
OSMA1.mq4  3 kb
 
Sergey Kucher:
Попробуйте установить этот индикатор на МТ4 билд 851 и всё станет ясно.
Проверим
[Удален]  

Уважаемые разработчики!

В классе CCanvas отсутствует важный функционал - это толщина рисования. В связи с этим возникает вопрос - добавите ли вы данный функционал в класс CCanvas?

Если добавлять не планируете данный функционал, то сделайте пожалуйста метод PixelSet виртуальным, иначе придется половину класса при наследовании переписывать. А менять что либо в классах стандартной библиотеки самому считаю дурным тоном и даже вредным, т.к. при обновлении терминала или его установке, придется все обратно менять, да и не запомнишь всех изменений по прошествии времени.

Прилагаю наследованный класс CCanvasNew. Что бы класс работал правильно, нужно внести изменение в метод PixelSet базового класса CCanvas, т.е. сделать его виртуальным.

Строку:

void              PixelSet(const int x,const int y,const uint clr);

заменить на:

virtual void      PixelSet(const int x,const int y,const uint clr);
Файлы:
CanvasNew.mqh  5 kb
 

Ошибка при компиляции

#property library
class name {};
class A {
public:
        int name() { Print( __FUNCTION__ ); return 0; }
        void f();
};
void A::f()
{
                name(); //1//нормально - вызывается A::name()
        int i = name(); //2//ошибка при компиляции
}
void OnStart()
{
	A a;
	a.f();
}
а в чём разница между 1 и 2 ?
 

Пояснения к заявке #1268334

Notepad

MetaEditor 

 

В документации заявлено:

"Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной" . 

 У меня чтение глобальных переменных происходит ежедневно. И несмотря на это они все равно уничтожаются. Нужно каждый месяц их создавать заново. Очень хотелось бы, чтобы вы устранили данное несоответствие работы МТ4 документации. 

[Удален]  
Igor733:

В документации заявлено:

"Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной" . 

 У меня чтение глобальных переменных происходит ежедневно. И несмотря на это они все равно уничтожаются. Нужно каждый месяц их создавать заново. Очень хотелось бы, чтобы вы устранили данное несоответствие работы МТ4 документации. 

А Вы точно не перепутали понятие "Глобальная переменная" и "Глобальная переменная клиентского терминала"?
 

Tapochun:
А Вы точно не перепутали понятие "Глобальная переменная" и "Глобальная переменная клиентского терминала

Переменные терминала имел ввиду. Не перепутал. GlobalVariableSet("_LastBalance",MathMax(AccountEquity(),GlobalVariableGet("_LastBalance"))); Если создать переменную из терминала, а в советнике потом ее только читать, то она все равно через месяц удалится.
[Удален]  

Igor733:

Переменные терминала имел ввиду. Не перепутал.

GlobalVariableSet("_LastBalance",MathMax(AccountEquity(),GlobalVariableGet("_LastBalance")));

Если создать переменную из терминала, а в советнике потом ее только читать, то она все равно через месяц удалится. 

Тогда оформляйте заявку в сервисдеск.
 

Ошибка при передаче параметров в .dll

#import "Test.dll"
        int stringLen( const string& );
#import
void f( const string& text[], const string& text3 )
{
        int len1 = stringLen( text[ 0 ] ); // ?????    len1 = 0
        string text2        = text[ 0 ];
        int len2 = stringLen( text2     ); //нормально len2 = 5
        int len3 = stringLen( text3     ); //нормально len3 = 5
        Print( "  len1=", len1,
               ", len2=", len2,
               ", len3=", len3 );
}
void OnStart()
{
        string text[] = { "ABCDE" };
        f( text, text[ 0 ] );
}
//Test.cpp
#include <tchar.h>
int WINAPI stringLen( LPCTSTR text )
{
        return _tcslen( text ); //длина строки
}

если вместо Test.dll использовать Test.ex5,

//Test.mq5
int stringLen( const string& text ) { return ::StringLen( text ); }
то ошибки не возникает

Test.dll   - результат: len1=0, len2=5, len3=5

Test.ex5 - результат: len1=5, len2=5, len3=5

Ошибки не возникает также, если поместить void f(...)  в отдельный модуль

#import "Test2.ex5"
        void f( const string& text[], const string& text3 );
#import
void OnStart()
{
        string text[] = { "ABCDE" };
        f( text, text[ 0 ] );
}
//Test2.mq5
#import "Test.dll"
        int stringLen( const string& );
#import
void f( const string& text[], const string& text3 ) export
{
//...
}

Test2.ex5 - результат: len1=5, len2=5, len3=5

а какая разница где находится void f(..) - в основном (там где OnStart) или другом (Test2) модуле ?