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

 
A100:
А Вы где нибудь видели, чтобы выводился как "word Hello" ?

Перечитайте внимательно, что я вам написал. Вычисление, а не вывод.

Это выражение из разряда i += ++i + i++

 

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

Ошибки, баги, вопросы

MetaDriver, 2013.08.03 17:55

"

Может.  Только луче б вообще без изменений таймфрейма.  По хорошему для индикаторов нужна тупо генерация тика.

Для мои целей это не всегда пригодно, а общем случае множество "проблем выходного дня" бы сняло.

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

Ошибки, баги, вопросы

MetaDriver, 2013.08.03 18:02

...

Ещё б пригодилась "команда" програмного насильственного обнуления всех prev_calculated для выбpaннoгo cимвoлa. С последующей генерацией тика хорошо бы комбинировалось.

Господа разработчики, на эту тему ничего в планах нет?


 
TheXpert:

Перечитайте внимательно, что я вам написал. Вычисление, а не вывод.


Вы правы, что нужно разделить моменты: вычисления аргументов функций, подстановки этих аргументов и вычисление самой функции. Этот скрипт - показывает, что и аргументы вычисляются слева направо и само выражение слева направо:

int f( int x )  { Print( __FUNCTION__ + "(" + x + ")" ); return ( x ); }

void OnStart()
{
        int a = 0x0;
        int b = f(a+=1) << f(a+=2) << f(a+=3);
	Print( "b=" + b );
}
Результат:
f(1)
f(3)
f(6)
b=512
 
Знающие люди подскажите пожалуйста, чем отличается extern от static, в чем заключается глобальность времени жизни?
//Test.mqh
extern int e1;
static int s1;

#import "testLib.ex5"
        void f();
#import
//test.mq5
#include "Test.mqh"

void OnStart()
{
        e1 = 10;
        s1 = 10;
        f();
}

//testLib.mq5

#property library
#include "Test.mqh"

void f() export
{
        Print( "e1=" + e1 );
        Print( "s1=" + s1 );
}
Результат:
e1 = 0 //не понятно
s1 = 0 //нормально
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Silent:
Не это?

Неа - там использование непроинициализированного стандартного класса.

У меня - все классы самописанные. Да и непонятно - почему внутри класса метод отрабатывает нормально, а в OnInit() - нет.

Upd:  крайне интересно... ;-) Если эксперта запускать в MetaEditor'е под отладчиком - все работает нормально. Более того - скомпилированный под отладчиком EX5 (в полтора раза больше обычного) тоже потом работает нормально. Но как только эксперт перекомпилируется в нормальном режиме - он начинает глючить. Видимо, придется открывать новую заявку в Сервисдеске.

 
A100:
Знающие люди подскажите пожалуйста, чем отличается extern от static, в чем заключается глобальность времени жизни?

В вашем случае вы решили, что два набора переменных, независимо описанных в двух разных файлах, сливаются в одно представление. На самом деле это не так.

Путем добавления mqh файла вы явным образом определяете отдельные наборы переменных в каждый включаемый файл. Грубо говоря, не ставьте в заголовочные файлы опеределения переменных - они будут раскопированы.

 
 Я хотел использовать одну (единую) переменную в нескольких модулях, но не знаю как. Убал .mqh
10 //testLib.mq5
20 #property library
30 extern int e1;
40 void f() export
50 {
60         Print( "e1=" + e1 );
70 }
10 //test.mq5
20 extern int e1;        
30 #import "testLib.ex5"
40          void f();
50 #import
60 void OnStart()
70 {
80         e1 = 10;
90         f();
100 }

Pезультат вывода: e1=0 не поменялся. Куда пропало  e1=10? Если e1 в разных модулях разные, то получается функционал static и extern идентичен? А если нет - то где у меня ошибка?
 
A100:
 Я хотел использовать одну (единую) переменную в нескольких модулях, но не знаю как. Убал .mqhPезультат вывода: e1=0 не поменялся
Специально для вашего случая предусмотрен класс памяти extern. Попробуйте
 
stringo:
Специально для вашего случая предусмотрен класс памяти extern. Попробуйте
Пример приведите пожалуйста - или укажите на ошибку в моем - В одном модуле присваиваю e1 = 10, вызываю е1 во втором модуле, а там оно равно нулю
 
A100:
 Я хотел использовать одну (единую) переменную в нескольких модулях, но не знаю как. Убал .mqhPезультат вывода: e1=0 не поменялся. Куда пропало  e=10? Если e1 в разных модулях разные, то получается функционал static и extern идентичен? А если нет - то где у меня ошибка?
Так она вроде как 1 раз должна быть инициализирована. Внешняя же.