Mikalas: Неужели больше ни у кого нет Демо Открытия?
У меня есть. Как глянул эту ветку - решил повременить с использованием глобальных переменных - как альтернативу им, использую запись в текстовые файлы.
А теперь, вместо миллисекундного таймера делаем обычный посекундный таймер. Отключаем проблемную функцию SetTransCount() и в событии таймера просто увеличиваем глобальную переменную "trans_count". В итоге когда алгоритм простой и понятный - глобальные переменные работают, так как им и положено.
//+------------------------------------------------------------------+//| Global_demo.mq5 |//| Copyright 2015, Mikalas |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2015, Mikalas"#property link"http://www.mql5.com"#property version"1.00"//inputint TimerTime=10; //Период таймера//ulong trans_count;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---
trans_count=0;
//--- Установка таймераif(!EventSetTimer(TimerTime))
{
MessageBox("Таймер не установлен!","Ошибка",MB_OK|MB_ICONHAND);
return( INIT_FAILED );
}
//---if(!GlobalVariableCheck("trans_count"))
{
datetime a_time=GlobalVariableSet("trans_count",0);
if(ulong(a_time)==0)
{
MessageBox("Глобальная переменная терминала 'Счётчик транзакций' не создана!","Ошибка",MB_OK|MB_ICONHAND);
return( INIT_FAILED );
}
}
if(GlobalVariableSet(_Symbol,0))
Print("Глобальная переменная ",_Symbol," =0");
else
{
MessageBox("Глобальную переменную не удалось обнулить","Ошибка обнуления",0);
return(INIT_FAILED);
}
//--- получим значение гл. пер. trans_countPrint("Гл. перем. trans_count = ",GlobalVariableGet("trans_count"));
//--- return( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- удаление таймераEventKillTimer();
//---if(GlobalVariableCheck(_Symbol))
{
if(!GlobalVariableDel(_Symbol))
MessageBox("С символа гл. перем. не удалена",_Symbol,0);
}
//--- получим значение гл. пер. trans_countdouble tmp=GlobalVariableGet("trans_count");
string str_temp="Глобальная переменная trans_count = "+DoubleToString(tmp,0);
MessageBox("Закрываем терминал",str_temp,0);
}
//+------------------------------------------------------------------+//| Expert Set transaction count function |//+------------------------------------------------------------------+void SetTransCount(constbool up_down)
{
double tr_count;
uint i=0;
do
{
i++;
if(GlobalVariableGet("trans_count",tr_count))
{
if(up_down)
{
if(GlobalVariableSetOnCondition("trans_count",tr_count+1,tr_count))
{
i=100;
}
}
else
{
if(GlobalVariableSetOnCondition("trans_count",tr_count-1,tr_count))
{
i=100;
}
}
}
}
while(i<100);
}
//+------------------------------------------------------------------+//| Expert timer function |//+------------------------------------------------------------------+voidOnTimer()
{
// debugComment("переменная (не гл. перем. терминала) trans_count=",trans_count);
if(trans_count<2000)
{
trans_count++;
//SetTransCount(true);ResetLastError();
GlobalVariableSet(_Symbol,double(trans_count));
GlobalVariableSet("trans_count",trans_count);
}
}
//+------------------------------------------------------------------+//| The END |//+------------------------------------------------------------------+
Попробуйте "ручками" создать глобальную переменную, закрыть терминал и затем посмотреть - файл с глобальными переменными. Есть ли там новая переменная?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Пробовал
Не помогло
В DeInit делал GlobalVariablesFlush();
Тоже мимо
Неужели больше ни у кого нет Демо Открытия?
Глобальные переменные при старте терминала благополучно обнуляются. Недочёты программирования не стоит перекладывать на платформу.
Надеюсь, что код ниже убедит Вас в необоснованности обвинения терминала:
Глобальные переменные при старте терминала благополучно обнуляются. Недочёты программирования не стоит перекладывать на платформу.
Надеюсь, что код ниже убедит Вас в необоснованности обвинения терминала:
Нет, не убедит.
Вы путаете переменные.
'trans_count" и "_Symbol"
З.ы И давайте я Вас поучу программированию:
Возвращаемое значение не BOOL а DATETIME
Нет, не убедит.
Вы путаете переменные.
'trans_count" и "_Symbol"
З.ы И давайте я Вас поучу программированию:
Возвращаемое значение не BOOL а DATETIME
Улыбнуло. Чтобы утверждать про обнуление или необнуление - позаботьтесь о проверках:
Теперь хорошо будет видно, что происходит с переменной глобальной при закрытии и при старте. Желающие могут проверить на х32 и х64 системах.
Улыбнуло. Чтобы утверждать про обнуление или необнуление - позаботьтесь о проверках:
Теперь хорошо будет видно, что происходит с переменной глобальной при закрытии и при старте. Желающие могут проверить на х32 и х64 системах.
Пожалуйста, не втягивайте меня в полемику о коде....
И я улыбаюсь больше, чем Вы!
А теперь, вместо миллисекундного таймера делаем обычный посекундный таймер. Отключаем проблемную функцию SetTransCount() и в событии таймера просто увеличиваем глобальную переменную "trans_count". В итоге когда алгоритм простой и понятный - глобальные переменные работают, так как им и положено.
Владимир!
Не выставляйте себя "дурном свете"!
Вы не понимаете о чём идёт речь.
Почему Вы не слушаете дружеские советы и просьбы?