Ищу любой пример индикатора, где есть Ctrl+ХотКей

 

Всех приветствую,

Поделитесь пожалуйста любым индикатором, где есть возможность установки Хоткея с доп.клавишами (CTRL или ALT или SHIFT)
Или ссылкой на такой пример

 
halk2009:

Всех приветствую,

Поделитесь пожалуйста любым индикатором, где есть возможность установки Хоткея с доп.клавишами (CTRL или ALT или SHIFT)
Или ссылкой на такой пример

к сожалению в MQL5 нет события KEYUP, поэтому полноценного события одновременно двух клавих не добиться.
Но возможен такой вариант (на примере сочетания Shift+S):

#property indicator_chart_window

#define DELAY 500
//+------------------------------------------------------------------+
int OnInit() {
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]) {
   return(rates_total);
}
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam) {
   static uint last_shift = 0;
   static uint last_S = 0;
   string str = IntegerToString(id) + ";   lparam = " + IntegerToString( lparam) + ";  dparam = " + DoubleToString(dparam)+ ";   sparam = "+sparam;
   Comment(str);
   if (id==CHARTEVENT_KEYDOWN) {
      if (lparam==16)  {// press Shift key
         last_shift = GetTickCount();
         if(last_shift-last_S<DELAY) EventShift_S();
      }
      if (lparam==83)  {// press S key
         last_S = GetTickCount();
         if(last_S-last_shift<DELAY) EventShift_S();
      }
   }
}
//+------------------------------------------------------------------+
void EventShift_S() {
   Print ("Press Shift +S");
}
//+------------------------------------------------------------------+

особенности выполнения такого кода:

  • если удерживаете клавишу Shift  и при этом нажимаете S несколько раз, то нужное событие будет генерироваться только при первом нажатии S
  • если нажали клавишу Shift и отпустили ее, а после этого в течении 0.5 сек нажали клавижу S, то событие будет генерироваться, т.е. срабатывает не только одновременное нажатие, но и последовательное нажатие клавиш Shift+S
  • последовательность нажатия S и Shift не важна
 
Николай приветствую,
Извиняюсь, забыл уточнить, ищу для МQL4.
То что вы показали, будет работать в МQL4?
 
halk2009 #:
Николай приветствую,
Извиняюсь, забыл уточнить, ищу для МQL4.
То что вы показали, будет работать в МQL4?

да

 
Nikolai Semko #:

к сожалению в MQL5 нет события KEYUP, поэтому полноценного события одновременно двух клавих не добиться.
Но возможен такой вариант (на примере сочетания Shift+S):

особенности выполнения такого кода:

  • если удерживаете клавишу Shift  и при этом нажимаете S несколько раз, то нужное событие будет генерироваться только при первом нажатии S
  • если нажали клавишу Shift и отпустили ее, а после этого в течении 0.5 сек нажали клавижу S, то событие будет генерироваться, т.е. срабатывает не только одновременное нажатие, но и последовательное нажатие клавиш Shift+S
  • последовательность нажатия S и Shift не важна

Николай. может проще 

TerminalInfoInteger(TERMINAL_KEYSTATE_SHIFT) < 0 ? "DN" : "UP"
 
Alexey Viktorov #:

Николай. может проще 

О, спасибо Алексей. Не знал.
тогда, действительно, проще и полноценно работает двойное нажатие:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam) {
   if (id==CHARTEVENT_KEYDOWN) { 
      if (lparam==83)  {// press S key
         if(TerminalInfoInteger(TERMINAL_KEYSTATE_SHIFT) <0) EventShift_S(); 
      }
   }
}
 

Попробовал оба решения, к сожалению команда через Shift не выполняется отдельно от других индикаторов...
Если я использую предложенные варианты с комбинацией "Shift+A" и второй индикатор с ХотКеем "А", то при нажатии на Shift+A срабатывают команды с обоих индикаторов ((

 
halk2009 #:

Попробовал оба решения, к сожалению команда через Shift не выполняется отдельно от других индикаторов...
Если я использую предложенные варианты с комбинацией "Shift+A" и второй индикатор с ХотКеем "А", то при нажатии на Shift+A срабатывают команды с обоих индикаторов ((

Сначала делайте проверку на Shift, потом на нажатие необходимой клавиши
 
Не совсем понял, вы думаете что я как то не правильно зажимаю Shift ?))
 
halk2009 #:
Не совсем понял, вы думаете что я как то не правильно зажимаю Shift ?))
if(TerminalInfoInteger(TERMINAL_KEYSTATE_SHIFT) <0)
{
if (lparam==83)  {// press S key
          EventShift_S(); 
      }
}
 
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_KEYDOWN)
     {
         if(TerminalInfoInteger(TERMINAL_KEYSTATE_SHIFT) <0)
           {
            if(lparam==83)    // press S key
              {
               EventShift_S();
              }
           }
     }
  }

Если вы предлагаете сделать так, то это ничего не меняет. Я просто не программист, мне тяжеловато в коде делать изменения.

Я хотел бы посмотреть на рабочий пример (MQL4), что бы вообще понять, можно реализовать Shift+Хоткей в индикаторах или нет