Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1174

 

У меня вопрос по вызову индикаторов через iCustom.

1. Есть возможность исключить некоторые параметры индикатора из списка параметров, передаваемых в iCustom. Например, я не хочу некоторый string параметр передавать или любой другой. Внешний параметр индикатора с модификатором sinput так же необходимо указывать в iCustom при вызове из эксперта?

2. Какое наиболее оптимальное решение, если у индикатора множество параметров (около сотни)? Есть какое-то готовое решение, как такой индикатор вызывать?

Спасибо.

 

Нужно чтобы советник закрывал открытые позиции в момент когда цена пересекает МА.

Прошу подсказать как это реализовать.

Спасибо

 
RichLux:

Нужно чтобы советник закрывал открытые позиции в момент когда цена пересекает МА.

Прошу подсказать как это реализовать.

Спасибо

void CheckForClose_MA()
  {
   double MA=iMA(NULL,0,ma_period,ma_shift,MODE_SMMA,PRICE_MEDIAN,0);

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
        //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Low[1]>=MA) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
     }
//----


double  iMA(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   int          ma_period,        // период
   int          ma_shift,         // сдвиг средней
   int          ma_method,        // метод усреднения
   int          applied_price,    // тип цены
   int          shift             // сдвиг
   );

 

Как узнать какие параметры переданы в советник через iCustom. Получаю неверное значение от указанного в iCustom буфера, хочу проверить верные ли данные "дошли" до индикатора после вызова iCustom.

Как вообще можно отладить?

 
Александр:

Есть функция.


Каждый вызов функции будет изменять переменную ХХ, а мне надо чтобы ХХ была внешней(по нужной мне логике), но каждый вызов функции начинался с того, что ХХ была равна 0 и соответственно  ретурн(ХХ) возвращал свое значение. Т.Е . я не понимаю как сделать переменную ХХ внешней, а функцию можно было вызывать "автономно", изолированно. Именно средствами MQ4. Спасибо!


Прочитал несколько раз, но так и не понял что Вам нужно.

Может быть это:

double XX = 0;


double x()
{
   double rez = XX;
   XX++;
   return rez;
}
 
Каким образом можно определить, что все бары подгружены на график?
Это нужно что бы вызвать пересчёт индикатора только тогда, когда полностью всё подгрузится.

Условие
if(time[0] > TimeCurrent() - 60 * ChartPeriod())
не помогает решить задачу.
 

запомнить и проверять общее количество баров, если в течение нескольких секунд значение не "растёт", значит "приехали"

ну и потом делать перерасчет заново если 

rates_total-prev_calculated > 1
 
Koldun Zloy:

Прочитал несколько раз, но так и не понял что Вам нужно.

Может быть это:

 Есть функция(это индикатор в советнике, мне так надо и это не оспаривается,это  индюк и он начинает работу(отсчет) от новой вершины). У индюка есть несколько параметров которые постоянно меняются. Т.к. цикла хочу избежать эти параметры делаю внешними(для функции внешними) чтобы не потерять их значения. И при любом, новом, вызове функции я вижу лишь изменение значения индикатора. А мне надо иметь новый "экземпляр" индюка от новой вершины, при этом старый "экземпляр" продолжает работу и меняет значения. Хочу добиться этого стандартными методами MQ4, так как классы, структуры и прочию наследственность знаю очень плохо. Спасибо!
 
Александр:
 Есть функция(это индикатор в советнике, мне так надо и это не оспаривается,это  индюк и он начинает работу(отсчет) от новой вершины). У индюка есть несколько параметров которые постоянно меняются. Т.к. цикла хочу избежать эти параметры делаю внешними(для функции внешними) чтобы не потерять их значения. И при любом, новом, вызове функции я вижу лишь изменение значения индикатора. А мне надо иметь новый "экземпляр" индюка от новой вершины, при этом старый "экземпляр" продолжает работу и меняет значения. Хочу добиться этого стандартными методами MQ4, так как классы, структуры и прочию наследственность знаю очень плохо. Спасибо!

Не помогло.

Вам наверно стоит подучить язык, чтобы хотя бы не путаться в терминах.

Не думайте, что всем понятно, что Вы называете внешней переменной, что такое "вызвать функцию автономно".

И каким боком здесь цикл, который Вы не хотите использовать, опять же, по понятным только Вам причинам.

Ну а я уже не надеюсь Вас понять.


 
//+------------------------------------------------------------------+
//|           Проверка нажатия клавиш на клавиатуре                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   if(id==CHARTEVENT_KEYDOWN)
     {
     Alert(lparam);
     }
   }

Подскажите а как комбинацию проверить например Shift+A !?