Как добавить 3-е условие по нажатие на клавишу с клавиатуры? - страница 3

 
я правильно понимаю, в индюке невозможно сделать 3 варианта, с сохранением положения при смене ТФ?
 
utock:
я правильно понимаю, в индюке невозможно сделать 3 варианта, с сохранением положения при смене ТФ?

Используйте глобальные переменные терминала (GV) с уникальным именем, привязанным к имени индикатора. Важно учитывать, что индикаторов на одном графике может быть много - тут уже ваша задача точно идентифицировать каждый из индикаторов, чтобы точно сопоставить именно с конкретно каждым индикатором конкретную GV.

 
Taras Slobodyanik:

...в советниках

Увы, я где-то пропустил эти изменения.

 
Alexey Viktorov:

Увы, я где-то пропустил эти изменения.

Я ж прям тут давал ссылку на обсуждение и ответ сервисдеска.

 
utock:
я правильно понимаю, в индюке невозможно сделать 3 варианта, с сохранением положения при смене ТФ?

Возможно...Вы в своём примере в первом посте используете графические объекты. Если планируете использовать их в рабочем коде то можно обойтись лишь ими, если нет то глобальные терминала - GlobalVariableSet(...).

 
Artyom Trishkin:

Я ж прям тут давал ссылку на обсуждение и ответ сервисдеска.

Там буковок много. А тогда когда обсуждали я был не с вами.

 
Sergey Kolemanov:

Возможно...Вы в своём примере в первом посте используете графические объекты. Если планируете использовать их в рабочем коде то можно обойтись лишь ими, если нет то глобальные терминала - GlobalVariableSet(...).

Объясните и мне как можно сделать, используя графические элементы? Они же сейчас есть в примере, а при смене таймфрейма они обнуляется
 
vebster005:
Объясните и мне как можно сделать, используя графические элементы? Они же сейчас есть в примере, а при смене таймфрейма они обнуляется

Данные записывать и читать с описания объекта, сам объект удалять только при удалении индикатора с графика. Пример индикатора:

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

int res = 0;
string name_obj = MQLInfoString(MQL_PROGRAM_NAME) + " " + (string)ChartID() + " " + (string)ChartIndicatorsTotal(ChartID(), 0);
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   if(ObjectFind(0, name_obj) < 0)Label_Create(0, name_obj, 50, 50, "0");
   else
   res = (int)ObjectGetString(0, name_obj, OBJPROP_TEXT); 
   
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+ 
//| Custom indicator deinitialization function                       | 
//+------------------------------------------------------------------+ 
void OnDeinit(const int reason)
{
   if(reason == REASON_REMOVE || reason == REASON_RECOMPILE)
   {
      ObjectDelete(0, name_obj);
   }
}
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   if(id == CHARTEVENT_KEYDOWN && lparam == 17)
   {
      res++;
      if(res > 10)res = 0;
      ObjectSetString(0, name_obj, OBJPROP_TEXT, (string)res); 
   }
}
//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+ 
//| Создает текстовую метку                                          | 
//+------------------------------------------------------------------+ 
bool Label_Create(const long              chart_ID = 0,               // ID графика 
                  const string            name = "Label",             // имя метки 
                  const int               x = 0,                      // координата по оси X 
                  const int               y = 0,                      // координата по оси Y 
                  const string            text = "Label",             // текст 
                  const string            font = "Arial",             // шрифт 
                  const int               font_size = 25,             // размер шрифта 
                  const color             clr = clrRed,               // цвет 
                  const bool              back = false,               // на заднем плане 
                  const bool              selection = false)          // выделить для перемещений 
{ 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим текстовую метку 
   if(!ObjectCreate(chart_ID, name, OBJ_LABEL, 0, 0, 0)) 
   { 
      Print(__FUNCTION__, ": не удалось создать текстовую метку! Код ошибки = ", GetLastError()); 
      return(false); 
   } 
   ObjectSetInteger(chart_ID, name, OBJPROP_XDISTANCE, x); 
   ObjectSetInteger(chart_ID, name, OBJPROP_YDISTANCE, y); 
   ObjectSetString(chart_ID, name, OBJPROP_TEXT, text); 
   ObjectSetString(chart_ID, name, OBJPROP_FONT, font); 
   ObjectSetInteger(chart_ID, name, OBJPROP_FONTSIZE, font_size); 
   ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr); 
   ObjectSetInteger(chart_ID, name, OBJPROP_BACK,back); 
   ObjectSetInteger(chart_ID, name, OBJPROP_SELECTABLE, selection); 
   ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection); 
//--- успешное выполнение 
   return(true); 
} 
//+------------------------------------------------------------------+
 
Sergey Kolemanov:

Данные записывать и читать с описания объекта, сам объект удалять только при удалении индикатора с графика. Пример индикатора:

Спасибо большое, вы сами его написали? Спасибо еще раз

 
Alexey Viktorov:

Там буковок много. А тогда когда обсуждали я был не с вами.

Там ответ от сервисдеск на последней станице. Правда не из одной буквы.
Причина обращения: