Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 650

 

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

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам

Taras Slobodyanik, 2018.10.07 09:47

я жеж для примера пишу)

если помнить символ ненужно, то да можно его не запоминать

если имя будет только айди чарта, то как удалять ненужные переменные?
(при частом использовании наберется куча переменных)

если без префикса - тоже самое, как удалять ненужные переменные?


=я жеж для примера пишу)

Ну если для расширения незамутненного сознания, то да, для обучения хороший пример :-)

=если имя будет только айди чарта, то как удалять ненужные переменные?

А зачем их вообще удалять? Если например нужно хранить только период, то достаточно имя = префикс+символ. У меня есть предположение что можно вообще одной ГП обойтись - если я на графике выполняю всего одну операцию изменения фрейма, то она заканчивается до того как я перейду на следующий чарт, а там заново опрашивается период и ГП перезаписывается. Нет ли в таком случае подводных камней?

 
Taras Slobodyanik:

мой код, у меня работает, ваш код не вижу.
пожалуйста)

Так я ваш скрипт на график бросил, а в списке глобальных переменных 0. 
 
inter78:
Так я ваш скрипт на график бросил, а в списке глобальных переменных 0. 

вам шашечки или ехать?)
смотреть список визуально - это смотреть лонговые биты, как биты для дабла - там абракадабра, или NaN

 
psyman:

А зачем их вообще удалять? Если например нужно хранить только период, то достаточно имя = префикс+символ. У меня есть предположение что можно вообще одной ГП обойтись - если я на графике выполняю всего одну операцию изменения фрейма, то она заканчивается до того как я перейду на следующий чарт, а там заново опрашивается период и ГП перезаписывается. Нет ли в таком случае подводных камней?

всё зависит от цели

если индикатор (или что там), будет работать в одном экземпляре, на одном символе, и никто больше не будет делать таких же переменных, то конечно, можно не заморачиваться

 
Taras Slobodyanik:

вам шашечки или ехать?)
смотреть список визуально - это смотреть лонговые биты, как биты для дабла - там абракадабра, или NaN

Вот если бы я сейчас понял что вы мне сейчас написали я бы не стал к вам приставать. Просто мои познания в программировании стремятся к нулю. Но если бы я сумел запихать ChartID в глобальные переменные без искажения я был бы счастлив. Спасибо.
 

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

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам

Taras Slobodyanik, 2018.10.06 21:47

      string name=prefix_gv+"Price_"+IntegerToString(num,4,'0');
      if (GlobalVariableCheck(name) || GlobalVariableTemp(name))
         GlobalVariableSet(name, Line_ALL[i].price);
      

Объясните как так хитро получается что переменной name присваивается значение текстовой строки, а потом туда же пишется Line_ALL[i].price, но уже в качестве ГП?

По идее name должна просто перезаписаться.

UPD

Кажется понял - обычная переменная нужна чтобы хранить имя ГП. Название переменных может быть одинаковое. Так?

 
psyman:

Объясните как так хитро получается что переменной name присваивается значение текстовой строки, а потом туда же пишется Line_ALL[i].price, но уже в качестве ГП?

По идее name должна просто перезаписаться.

UPD

Кажется понял - обычная переменная нужна чтобы хранить имя ГП. Название переменных может быть одинаковое. Так?

В переменной name  создается имя (текстовое), потом с этим именем создается Глобальная Переменная и в эту ГП записывается значение.
то есть генерируется список ГП и в них сохраняется часть массива

1

 
inter78:
Вот если бы я сейчас понял что вы мне сейчас написали я бы не стал к вам приставать. Просто мои познания в программировании стремятся к нулю. Но если бы я сумел запихать ChartID в глобальные переменные без искажения я был бы счастлив. Спасибо.

мой код записывает лонг-ChartID во временную Глобальную переменную.

Визуально, если нажать F3, там отображается ноль (или другое отличное значение).
Это происходит потому что терминал думает что это double-значение и пытается его показать, но мы ему подсунули long - это совсем другой формат числа.

Если это значение прочитать назад как обычный дабл, там будет непонятно что.
Если его прочитать моим кодом, то там снова будет лонг (тот же что и сохраняли).
Если же вручную, в окне терминала, ткнуть в эту переменную, то она обнулится, потому что терминал обнаружит подмену.

 
Taras Slobodyanik:

В переменной name  создается имя (текстовое), потом с этим именем создается Глобальная Переменная и в эту ГП записывается значение.
то есть генерируется список ГП и в них сохраняется часть массива


А вот это условие 

GlobalVariableCheck(name) || GlobalVariableTemp(name)

зачем?

Мне само определение "GlobalVariableTemp производит попытку создания временной глобальной переменной" непонятно. 

Зачем пытаться создать, когда это делает GlobalVariableSet?

UPD

В OnInit прописал:

   string   GV_prefix="ZZ_";
   string   ctime=GV_prefix+_Symbol+"_"+ChartID();
   GlobalVariablesDeleteAll(NULL, 0);
    if (GlobalVariableCheck(ctime) || GlobalVariableTemp(ctime))
      GlobalVariableSet(ctime, Period());

Вызываю в  OnChartEvent:

if(GlobalVariableGet(ctime)!=Period()) 

В ответ получаю сообщение 'ctime' - undeclared identifier


 
psyman:

А вот это условие 

зачем?

GlobalVariableCheck() - проверяет есть ли уже такая переменная, если нет, то
GlobalVariableTemp()  - создает временную переменную, которая сама удалится при следующем запуске.

psyman:

UPD

В OnInit прописал:

Вызываю в  OnChartEvent:

В ответ получаю сообщение 'ctime' - undeclared identifier

стринги нужно перенести над ОнИнит-ом, в глобальные переменные кода.

или добавить в OnChartEvent

string   GV_prefix="ZZ_";
string   ctime=GV_prefix+_Symbol+"_"+ChartID();
Причина обращения: