Здравствуйте, сейчас при нажатии на клавишу клавиатуры показывается число, при 2-м нажатии оно удаляется
Как сделать так чтобы было 3-е значение????
т.е при одном нажатии показывается первое число, при втором нажатии показывается 2-е число, при 3-м нажатии все убирается(удаляется)
Вот пример, доработаете под свои нужды. Нажимать Ctrl
#property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict int res = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create timer EventSetMillisecondTimer(100); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); Comment(""); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { Comment(res); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id == CHARTEVENT_KEYDOWN && lparam == 17) { if(res == 0)res = 1; else if(res == 1)res = 2; else if(res == 2)res = 0; } } //+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { static int click=0; if(id==CHARTEVENT_KEYDOWN && lparam==17) { click = (click)%3+1; switch(click){ case 0: Print("0!"); break; // не выполняется!!!! case 1: Print("1!"); break; case 2: Print("2!"); break; case 3: Print("3!"); break; case 4: Print("4!"); break; // не выполняется!!!! case 5: Print("5!"); break; // не выполняется!!!! case 6: Print("6!"); break; // не выполняется!!!! default: Print("Ошибка!!!"); click=0; } } }
можно и так, но проверить бы, вроде работает
Нажимать Ctrl
можно и так, но проверить бы, вроде работает
Нажимать Ctrl
Вот пример, доработаете под свои нужды. Нажимать Ctrl
Спасибо большое, но в ваших примерах при смене ТФ счетчик сбивается, как заставить при смене ТФ знать что у нас уже включено?
Спасибо большое, но в ваших примерах при смене ТФ счетчик сбивается, как заставить при смене ТФ знать что у нас уже включено?
проверил, действительно в индикаторах не работает модификатор static и глобально описанные переменные сбрасываются в ноль, даже не помню где бы такое в справке было написано, вот 2 тестовых исходника:
индикатор:
//+------------------------------------------------------------------+ //| tst_click.mq4 | //| IgorM | //| https://www.mql5.com/ru/users/igorm | //+------------------------------------------------------------------+ #property copyright "IgorM" #property link "https://www.mql5.com/ru/users/igorm" #property version "1.00" #property strict #property indicator_chart_window #include <ChartObjects\ChartObjectsTxtControls.mqh> CChartObjectLabel *TxtLabel; static int click=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { TxtLabel=new CChartObjectLabel; TxtLabel.Create(0,"Ind_tst_click",0,100,20); TxtLabel.Color(clrRed); TxtLabel.FontSize(28); TxtLabel.Description(IntegerToString(click)); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { TxtLabel.Delete(); delete TxtLabel; } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id==CHARTEVENT_KEYDOWN && lparam==17) { click++;// = (click)%3+1; TxtLabel.Description(IntegerToString(click)); } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
эксперт:
//+------------------------------------------------------------------+ //| tst_click.mq4 | //| IgorM | //| https://www.mql5.com/ru/users/igorm | //+------------------------------------------------------------------+ #property copyright "IgorM" #property link "https://www.mql5.com/ru/users/igorm" #property version "1.00" #property strict #include <ChartObjects\ChartObjectsTxtControls.mqh> CChartObjectLabel *TxtLabel; static int click=0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { TxtLabel=new CChartObjectLabel; TxtLabel.Create(0,"EA_tst_click",0,300,20); TxtLabel.Color(clrYellow); TxtLabel.FontSize(28); TxtLabel.Description(IntegerToString(click)); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { TxtLabel.Delete(); delete TxtLabel; } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id==CHARTEVENT_KEYDOWN && lparam==17) { click++;// = (click)%3+1; TxtLabel.Description(IntegerToString(click)); } } //+------------------------------------------------------------------+
в индикаторе не работает, в эксперте все корректно работает при переключении ТФ
проверил, действительно в индикаторах не работает модификатор static и глобально описанные переменные сбрасываются в ноль, даже не помню где бы такое в справке было написано, вот 2 тестовых исходника:
индикатор:
эксперт:
в индикаторе не работает, в эксперте все корректно работает при переключении ТФ
В индикаторах прекрасно работают статические переменные.
Дело всё в том, что при смене таймфрейма создаётся совершенно новый экземпляр индикатора, а старый удаляется.
В индикаторах прекрасно работают статические переменные.
Дело всё в том, что при смене таймфрейма создаётся совершенно новый экземпляр индикатора, а старый удаляется.
ну и как работают тогда статические переменные? - я проверил, исходники выше, не работает, запускаю и индикатор и эксперт на одном графике, эксперт все корректно отрабатывает при смене ТФ, а индикатор сбрасывает переменную click
или речь идет о вызове индикаторов через iCustom() ???
запустил и индикатор и эксперт, нажимаю 4 раза Ctrl:
переключил ТФ и нажал еще 4 раза Ctrl:
красным счетчик индикатора, желтым счетчик нажатий Ctrl в эксперте
ну и как работают тогда статические переменные? - я проверил, исходники выше, не работает, запускаю и индикатор и эксперт на одном графике, эксперт все корректно отрабатывает при смене ТФ, а индикатор сбрасывает переменную click
или речь идет о вызове индикаторов через iCustom() ???
запустил и индикатор и эксперт, нажимаю 4 раза Ctrl:
переключил ТФ и нажал еще 4 раза Ctrl:
красным счетчик индикатора, желтым счетчик нажатий Ctrl в эксперте
Внимательнее)
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Как добавить 3-е условие по нажатие на клавишу с клавиатуры?
Artyom Trishkin, 2018.11.04 19:01
В индикаторах прекрасно работают статические переменные.
Дело всё в том, что при смене таймфрейма создаётся совершенно новый экземпляр индикатора, а старый удаляется.
Внимательнее)
чтобы мы без Вашего комментария делали бы ))))
в справке пока не вижу этих случаев:
https://docs.mql4.com/ru/basis/variables
https://docs.mql4.com/ru/basis/variables/static
- docs.mql4.com
чтобы мы без Вашего комментария делали бы ))))
в справке пока не вижу этих случаев:
Справка правильно описывает статические переменные. И они и работают правильно в индикаторах в пределах одного экземпляра. При смене таймфрейма создаётся новый экземпляр индикатора со своими переменными. Старый удаляется.
Справка правильно описывает статические переменные. И они и работают правильно в индикаторах в пределах одного экземпляра. При смене таймфрейма создаётся новый экземпляр индикатора со своими переменными. Старый удаляется.
это я уже слышал, где информация об этом случае? как и где в указанным мной ссылках упоминание об этом? где найти разъяснения этого случая?
в MQL5 так же работают в индикаторах глобально описанные переменные и переменные с модификатором static ?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, сейчас при нажатии на клавишу клавиатуры показывается число, при 2-м нажатии оно удаляется
Как сделать так чтобы было 3-е значение????
т.е при одном нажатии показывается первое число, при втором нажатии показывается 2-е число, при 3-м нажатии все убирается(удаляется)