Полезно будет не словами объяснять, а приводить пример: была смена таймфрейма, вот распринтовка из вкладки "Эксперты". Был первый запуск/загрузка терминала/смена символа/смена торгового счёта...
- www.mql5.com
Тут и так всё предельно понятно и прозрачно. Без прикладывания логов терминала и выкладывания параметров системы.
Вы тему зачем создали? Показать различия поведения переменных. Вот и покажите и осветите всевозможные случаи. Без этого информативность нулевая.
Для вас.
Остальным сразу видно какие переменные теряют свои значения при смене таймфрейма, а какие нет. Достаточно запустить приложенный код на любом графике, переключать таймфрейм и глядеть на значения переменных, которые отображаются в комментариях на графике, написанные русским языком предельно лаконично ;)
Я показал.
Для вас.
Остальным сразу видно какие переменные теряют свои значения при смене таймфрейма, а какие нет. Достаточно запустить приложенный код на любом графике, переключать таймфрейм и глядеть на значения переменных, которые отображаются в комментариях на графике, написанные русским языком предельно лаконично ;)
А Вы подумали о тех, кто потребляет информацию просто читая, без запуска терминала? Вот видите издать громкий звук оказывается очень просто и круто, но как только приходит понимание, что нужно немного больше - потратить время, привести примеры, сравнить, сделать выводы - вот здесь сразу сдуваемся.
Вы решили меня потроллить?
Однако - не очень достойное поведение для модератора.
Не засоряйте пожалуйста лишним спамом мою ветку. Есть что сказать по делу - говорите, нету - пройдите пожалуйста мимо.
А Вы подумали о тех, кто потребляет информацию просто читая, без запуска терминала? Вот видите издать громкий звук оказывается очень просто и круто, но как только приходит понимание, что нужно немного больше - потратить время, привести примеры, сравнить, сделать выводы - вот здесь сразу сдуваемся.
Владимир, зачем вы сейчас троллите полезную для сообщества тему?
Артём сделал программу тестовую. Каждый её может запустить и проверить во всех режимах, которые вы указали. И для этого совсем не обязательно писать и расписывать те выводы, которые вы ожидаете.
Мало того, если вы видите, что чего-то не хватает для информативности -- так добавьте сами.
Далее, если вы с ним не согласны, так обоснуйте своё несогласие.
Эта тема возникла после вашего неверного вывода здесь:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Vladimir Karputov, 2016.11.29 07:46
Так делать нельзя:
int TimeScale=50,TimeInMemory,TimeNow;
точнее после такого объявления обязательно в OnInit() нужно явно проинициализировать (присвоить значения) этим переменным.
Метод Sell также обложите проверками, вроде
" (",trade.ResultRetcodeDescription(),")");
А ещё может быть одна загвоздка - утром, при открытии торгов, торги идут не сразу, не с первой секунды - вот в этот момент возможны ошибки.
Код тестового советника:
При его запуске видно, что глобальные переменные, которые инициализируются в OnInit(), теряют свои значения при переключении таймфрейма, тогда как инициализация на глобальном уровне не приводит к такому нежелательному в некоторых случаях поведению глобальной переменной.
Господа, прекращайте перебранку.
Давайте разберемся.
Выкопировка принтов с журнала есть?
Замените Comment на Print
Владимир, зачем вы сейчас троллите полезную для сообщества тему?
Артём сделал программу тестовую. Каждый её может запустить и проверить во всех режимах, которые вы указали. И для этого совсем не обязательно писать и расписывать те выводы, которые вы ожидаете.
Мало того, если вы видите, что чего-то не хватает для информативности -- так добавьте сами.
Далее, если вы с ним не согласны, так обоснуйте своё несогласие.
Эта тема возникла после вашего неверного вывода здесь:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Встал на форуме недавно вопрос по поводу верной/неверной инициализации глобальных переменных в программах. Так как предложение, поступившее от одного из участников форума было не корректным (обязательная инициализация значением в OnInit()), то я решил показать на примере маленького тестового советника как лучше инициализировать глобальные переменные ваших программ так, чтобы при смене таймфрейма не терялись значения глобальных переменных, и можно было спокойно переключать таймфрейм графика, на котором установлен советник.
Думаю, в этой теме можно будет делиться некими знаниями и опытом как всё же правильно выполнять те, или иные действия в ваших программах.
Код тестового советника:
//| exTextInitGlobalVariables.mq5 |
//| Copyright 2015, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
//--- input parameters
input int TestInput=0; // Внешняя переменная
int testInputGlobal=TestInput; // Значение внешней переменной, присвоенное на глобальном уровне
int testInputInit; // Значение внешней переменной, присвоенное в OnInit()
//--- global variables
int TestValueGlobalNoInitNo; // Не инициализирована значением нигде
int TestValueGlobalYesInitNo=0; // Инициализирована значением 0 при объявлении, не инициализирована в OnInit()
//---
int TestValueGlobalNoInitYes; // Не инициализирована значением при объявлении, инициализирована в OnInit() нулём
int TestValueGlobalYesInitYes=0; // Инициализирована нулём и при объявлении, и в OnInit()
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
testInputInit=TestInput;
TestValueGlobalNoInitYes=0;
TestValueGlobalYesInitYes=0;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
testInputInit++;
testInputGlobal++;
TestValueGlobalNoInitNo++;
TestValueGlobalNoInitYes++;
TestValueGlobalYesInitNo++;
TestValueGlobalYesInitYes++;
Comment
(
"\n"+"============================================="+
"\n"+"Значение внешней переменной TestInput(",TestInput,"), присвоенное в OnInit(): ",(string)testInputGlobal+
"\n"+"Значение внешней переменной TestInput(",TestInput,"), присвоенное на глобальном уровне: ",(string)testInputGlobal+
//---
"\n"+"============================================="+
"\n"+"Не инициализирована значением нигде (неявная инициализация нулём): ",(string)TestValueGlobalNoInitNo+
"\n"+"Инициализирована значением 0 при объявлении, не инициализирована в OnInit(): "+(string)TestValueGlobalYesInitNo+
//---
"\n"+"============================================="+
"\n"+"Не инициализирована значением при объявлении, инициализирована в OnInit() нулём: "+(string)TestValueGlobalNoInitYes+
"\n"+"Инициализирована нулём и при объявлении, и в OnInit(): "+(string)TestValueGlobalYesInitYes
);
}
//+------------------------------------------------------------------+
При его запуске видно, что глобальные переменные, которые инициализируются в OnInit(), теряют свои значения при переключении таймфрейма, тогда как инициализация на глобальном уровне не приводит к такому нежелательному в некоторых случаях поведению глобальной переменной.