Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 81

 
Gevorg Hakobyan:
if(v=="NZD")
                              {
                              h=(iClose("NZDUSD",p,b)-iOpen("NZDUSD",p,b))/MarketInfo("NZDUSD",MODE_POINT)+
                                 (iOpen("EURNZD",p,b)-iClose("EURNZD",p,b))/MarketInfo("EURNZD",MODE_POINT)+
                                 (iOpen("GBPNZD",p,b)-iClose("GBPNZD",p,b))/MarketInfo("GBPNZD",MODE_POINT)+
                                 (iOpen("AUDNZD",p,b)-iClose("AUDNZD",p,b))/MarketInfo("AUDNZD",MODE_POINT)+
                                 (iClose("NZDJPY",p,b)-iOpen("NZDJPY",p,b))/MarketInfo("NZDJPY",MODE_POINT)+
                                 (iClose("NZDCAD",p,b)-iOpen("NZDCAD",p,b))/MarketInfo("NZDCAD",MODE_POINT)+
                                 (iClose("NZDCHF",p,b)-iOpen("NZDCHF",p,b))/MarketInfo("NZDCHF",MODE_POINT);
                              }
Не суть важно что у вас в коде. Вы можете сказать к какому ДЦ вы подключены, у которого вы получаете ноль вместо Point() ?
 
sile:

Здравствуйте.

Прошу помощи.

Сейчас лот каждого следующего ордера увеличивается так 1, 2, 3, 4, 5…

Хочу, чтобы увеличивался лот не каждого ордера, а с шагом 3,  так  1, 1, 1, 2, 2, 2, 3, 3, 3…

Счётчик надо завести и сбрасывать его на начальное значение при достижении заданного порога:
extern double   LotStop        = 0.01;
extern double   Plus_LotStop   = 0.01;
extern double   Plus_N_ORD  = 3;        //каждые N ордеров
void OnTick()
  {
//---
int c=0;
  for (int i=1; i<=OrdersStop; i++)
   {
       if((Close[1]<Open[1]&&Close[2]>Open[2]&&NumberOfPositions(Symbol(), -1,_Magic)<1))
         {
            OPENORDER (OP_BUYSTOP,PriceBS,LOTs,_Magic,i);
            numB++;
            PriceBS = NormalizeDouble(PriceBS+Step_Stop*Point,Digits);
          
            OPENORDER (OP_SELLSTOP,PriceSS,LOTs,_Magic,i);
            numS++;
            PriceSS = NormalizeDouble(PriceSS-Step_Stop*Point,Digits);
         }
      c++;
      if(c==3){LOTs+=Plus_LotStop;c=0;}
    }
  }
 

Подскажите, работает к примеру в терминале индикатор с названием "iSignal", возможно-ли узнать с советника, что этот индикатор действительно есть в любом окне, или окне с советником?  

 
Vitaly Muzichenko:

Подскажите, работает к примеру в терминале индикатор с названием "iSignal", возможно-ли узнать с советника, что этот индикатор действительно есть в любом окне, или окне с советником?  

В справке ChartIndicatorName(); И другие, которые там же увидите.


ChartIndicatorName

Возвращает короткое имя индикатора по номеру в списке индикаторов на указанном окна графика.

string  ChartIndicatorName(
   long  chart_id,      // идентификатор графика
   int   sub_window,    // номер подокна
   int   index          // индекс индикатора в списке индикаторов, добавленных к данному подокну графика
   );

Параметры

chart_id

[in]  Идентификатор графика. 0 означает текущий график.

sub_window

[in]  Номер подокна графика. 0 означает главное окно графика.

index

[in]  Индекс индикатора с списке индикаторов. Нумерация индикаторов начинается с нуля, то есть самый первый индикатор в списке имеет нулевой индекс. Количество индикаторов в списке можно получить функцией ChartIndicatorsTotal().

Возвращаемое значение

Короткое имя индикатора, которое задается в свойстве INDICATOR_SHORTNAME функцией IndicatorSetString(). Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().


Перебираете все графики, и ищете на них нужный индикатор. Количество индикаторов на графике тоже можете определить, равно, как и количество всех окон одного графика. Там увидите в справке.
 
Vitaly Muzichenko:

Подскажите, работает к примеру в терминале индикатор с названием "iSignal", возможно-ли узнать с советника, что этот индикатор действительно есть в любом окне, или окне с советником?  

Возможно. В цикле перебирать индикаторы на нужном графике и сравнивать имя выбранного индикатора с заданным. Функция ChartIndicatorName().

Вероятно придётся перебирать ещё и подокна графика, если индикатор в "подвале".

 
Artyom Trishkin:

В справке ChartIndicatorName(); И другие, которые там же увидите.


ChartIndicatorName

Возвращает короткое имя индикатора по номеру в списке индикаторов на указанном окна графика.

string  ChartIndicatorName(
   long  chart_id,      // идентификатор графика
   int   sub_window,    // номер подокна
   int   index          // индекс индикатора в списке индикаторов, добавленных к данному подокну графика
   );

Спасибо, искал именно это, и оно работает!

А теперь обратно)  Есть-ли такое-же, вот только с индикатора найти эксперт: (с)этот эксперт действительно есть в любом окне, или окне с индикатором?  

 
Vitaly Muzichenko:

Спасибо, искал именно это, и оно работает!

А теперь обратно)  Есть-ли такое-же, вот только с индикатора найти эксперт: (с)этот эксперт действительно есть в любом окне, или окне с индикатором?  

Как вы кодите вообще? 
WindowExpertName - Операции с графиками - Справочник MQL4
WindowExpertName - Операции с графиками - Справочник MQL4
  • docs.mql4.com
WindowExpertName - Операции с графиками - Справочник MQL4
 
Vitalie Postolache:
Как вы кодите вообще? 
Эту знаю, но она не умеет искать на чужом графике.
 
Vitaly Muzichenko:
Эту знаю, но она не умеет искать на чужом графике.

Она не только не умеет искать на чужом графике, да ещё и на своём находит только "свой" индикатор, скрипт или эксперт, тот в котором прописана эта функция.

Я не проверял, но попробуй перебирая в цикле графики

ChartGetString(chart_id, CHART_EXPERT_NAME)
по идее должно работать.
 
Alexey Viktorov:

Она не только не умеет искать на чужом графике, да ещё и на своём находит только "свой" индикатор, скрипт или эксперт, тот в котором прописана эта функция.

Я не проверял, но попробуй перебирая в цикле графики

ChartGetString(chart_id, CHART_EXPERT_NAME)
по идее должно работать.

Да, работает и находит с индикатора экспертов по имени. Но теперь вопрос: есть такое-же, но для четвёрки, и желательно кроссплатформенное?

Спасибо! 

Причина обращения: