Ошибки, баги, вопросы - страница 1783
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вопрос: Когда будет вызван OnDeinit->M5 ?
Мой ответ: Никогда!
Ваш ответ выше: асинхронно и с задержкой
Прошло более 30 минут, а вызова OnDeinit->M5 до сих пор нет
А теперь изменим код Эксперта (слегка поменяем порядок) ...
Результат:
2017.02.06 01:31:45.002 OnInit->M5
2017.02.06 01:31:48.340 OnDeinit->M5:1 Вызов сразу и без задержки!
2017.02.06 01:31:48.409 OnInit->M15
Прошло более 30 минут, а вызова OnDeinit->M5 до сих пор нет
А теперь изменим код Эксперта (слегка поменяем порядок) ...
Приложите код, пожалуйста.
Прикрепил к последнему сообщению с тем же именем. Фактически статический вызов заменен на динамический, а результат - принципиально другой
Похоже, что в первом случае злую шутку оптимизации сыграло отсутствие OnDeinit и статическая переменная, у который в результате забыли деструктор вызвать.
Можете пояснить, про какие потоки идет речь? Разве все индикаторы одного символа не работают в одном потоке?
Если сменить только таймфрейм, то новая копия индикатора будет рассчитываться в том же потоке, что и старая.
Но и тут нельзя закладываться на то, что команда Deinit на M5 будет обработана раньше, чем команда Init на M15
Если сменить только таймфрейм, то новая копия индикатора будет рассчитываться в том же потоке, что и старая.
Но и тут нельзя закладываться на то, что команда Deinit на M5 будет обработана раньше, чем команда Init на M15
Здравствуйте,
очень прошу обратить внимание на сообщение https://www.mql5.com/ru/forum/166358/page4#comment_4064293
Это очень важно,
появилась новая ошибка 1158, в справке ее нет?
Ошибка при выполнении
Access violation at 0x030A00AD read to 0x00000005 in 'Test_s.ex5'
class A {};
#import "TestA.ex5"
A *error();
#import
class B { protected:
B( const string& name ) : name( name ) {}
virtual int g( const MqlParam& param[] ) const { return ::IndicatorCreate( NULL, PERIOD_CURRENT, IND_CUSTOM, ::ArraySize( param ), param ); }
const string name;
bool f( int h ) const
{
if ( ::ChartIndicatorAdd( 0, 0, h ) )
return true;
error();
return false;
}
};
class C : protected B { protected:
C( int h, string name ) : B( name ), h( h ) { f( this.h ); }
const int h;
};
class D : C { public:
D( string path ) : C( g( path ), path ) {}
int g( const string& path )
{
MqlParam param[ 1 ];
param[ 0 ].type = TYPE_STRING;
param[ 0 ].string_value = path;
return g( param );
}
};
void OnStart() { D d( "Test_i" ); }
#property library
class A {};
A *error() export { return NULL; }
Все файлы (кроме Индикатора) размещены в папке MQL5\Scripts\
Сам Индикатор не требуется, но можно взять например отсюда https://www.mql5.com/ru/forum/1111/page1803#comment_4063671
Внесите в Справку, пожалуйста.
раткая сводка по программам на MQL5 приведена в таблице:
Программа
Выполнение
Примечание
Скрипт
В собственном потоке, сколько скриптов - столько потоков выполнения для них
Зацикленный скрипт не может нарушить работу других программ
Эксперт
В собственном потоке, сколько экспертов - столько потоков выполнения для них
Зацикленный эксперт не может нарушить работу других программ
Индикатор
Один поток выполнения для всех индикаторов на одном символе. Сколько символов с индикаторами - столько потоков выполнения для них
Бесконечный цикл в одном индикаторе остановит работу всех остальных индикаторов на этом символе
Они записываются в таком виде B'11111111111111111111111111111111'
Увы, не ведом мне этот формат.
Эксперимент показал, что число в графическом буфере представлено по тем же правилом что и double - т.е. передать такое длинное число через графический буфер не представляется возможным - огорчило.