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

 
Igor Makanu :

так будет работать:

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

Спасибо за ответ.

Можете ли вы сказать мне, когда я пишу #define FXT_HEADER.intSize 70, то почему это дает ошибку?

 
//+------------------------------------------------------------------+
//|  Функция A/D                       |
//+------------------------------------------------------------------+
double A_D(ENUM_TIMEFRAMES tf, int shift)
  {
   double res=0;
   res=iAD(NULL,tf, shift);
   return res;
  }

//+------------------------------------------------------------------+
//|  Функция A/D  средняя                     |
//+------------------------------------------------------------------+
double A_D_moving(ENUM_TIMEFRAMES tf, int period, int shift)
  {
   double res=0;
   double a[1];
  
   
   for(int i=period-1; i>=0; i--)
     {
   ArrayResize(a,period,0);
      a[i]= A_D(tf, i);    
     }
   for(int j=shift; j>=1; j--)
     {
      res=iMAOnArray(a,0, period,0,MODE_SMA,j);
     }
   return res;
  }

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

Пытаюсь сделать функцию moving Average от iAD(). Получилось не до конца. Функция в выше приведенной редакции выдает значение moving Average от iAD() на текущем баре. Вне зависимости от значения переменной shift.

А необходимо сделать так, чтобы переменная shift  была индексом бара, на котором функция возвращает соответствующее значение moving Average от iAD(). Описанная ошибка была выявлена следующим кодом, вставленным в OnTick():

   Comment("\n  #0= ", DoubleToString(A_D_moving(0, 20, 0)),
           "\n  ++++++++++++++",
           "\n  #1= ", DoubleToString(A_D_moving(0, 20, 1)),
           "\n  ----------------------",
           "\n  #2= ", DoubleToString(A_D_moving(0, 20, 2)));
   

Если кто может, прошу подсказать как устранить ошибку.

 

А подскажите с примитивной задачей:
- в индикаторе есть проверка на номер счета.. если номер счета не тот, что указан - индикатор выдает сообщение (индюк просто для друзей и т.д.)
- после установки индикатора на график - все работает отлично... проверку проходит.. индюк работает

Но после рестарта терминала - индикатор не проходит проверку.. я так понимаю, что загрузка кода индикатора происходит раньше, чем коннект к брокеру? Приходится переставлять его заново на график.. а это - не вариант..
НЕ подскажете в какое место правильно вставить этот код? Чтоб можно было один раз его поставить на график, сохранить как шаблон и все.. 

 {

   if (AccountInfoInteger(ACCOUNT_LOGIN)  != 123456) {

      Alert("Если не работает: блаблабла");

      return(INIT_FAILED);

   }
 
Roman Agafonkin:

НЕ подскажете в какое место правильно вставить этот код? Чтоб можно было один раз его поставить на график, сохранить как шаблон и все.. 

попробуйте перед этим поставить while(), ждущий логина в определённых рамках. не знаю что функция AccountInfoInteger(ACCOUNT_LOGINвыдаёт если не залогинено ещё, - распринтуйте и вставте вместо знаков вопросов.

while (AccountInfoInteger(ACCOUNT_LOGIN)==????) Sleep (100);
 
Igor Zakharov:

попробуйте перед этим поставить while(), ждущий логина в определённых рамках. не знаю что функция AccountInfoInteger(ACCOUNT_LOGINвыдаёт если не залогинено ещё, - распринтуйте и вставте вместо знаков вопросов.

в OnInit нельзя выполнять что то долго - терминал может выгрузить код

в индикаторе не должен слиип работать

ну не понятно почему не работает исходный вариант кода - или брокер с хреновыми серверами или инет такой задумчивый - обычно этот код на всех форумах "друзья" делятся )))


думаю в тело индикатора нужно статик переменную по проверке добавить , по приходу тика будет и конект с брокером и авторизация, единственное индикатор первый тик при загрузке на чарт сам дает - но это можно обработать , да кстати prev_calculated ==0 очень хороший повод проверить "лицензию"

 
Начал обучать свою дочь торговле. У неё возник такой вопрос: мол мне понятно, если допустим купить фунт, но непонятно, как можно продать фунт, если я его не покупала и у меня его нет.  Я, честно говоря, не смог ей понятно объяснить, сказал, нечто туманное, что это мол безналичные, виртуальные сделки и иметь эти фунты в наличии, чтоб продать, не обязательно. Вообщем мне самому не понравился такой мой ответ. А как правильно надо было бы ответить на такой вопрос?
 
khorosh:
Начал обучать свою дочь торговле. У неё возник такой вопрос: мол мне понятно, если допустим купить фунт, но непонятно, как можно продать фунт, если я его не покупала и у меня его нет.  Я, честно говоря, не смог ей понятно объяснить, сказал, нечто туманное, что это мол безналичные, виртуальные сделки и иметь эти фунты в наличии, чтоб продать, не обязательно. Вообщем мне самому не понравился такой мой ответ. А как правильно надо было бы ответить на такой вопрос?

Суть вещей понимать не нужно, чтобы получать прибыль. Меньше знаешь - проще играешь. Имхо.

Круто, что она имеет возможность так рано начать это делать) В процессе сама найдет ответы на вопросы (которые она сама себе задаст), если будут..
 
onedollarusd:

Суть вещей понимать не нужно, чтобы получать прибыль. Меньше знаешь - проще играешь. Имхо.

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

 
Igor Makanu:

в OnInit нельзя выполнять что то долго - терминал может выгрузить код

в индикаторе не должен слиип работать

ну не понятно почему не работает исходный вариант кода - или брокер с хреновыми серверами или инет такой задумчивый - обычно этот код на всех форумах "друзья" делятся )))


думаю в тело индикатора нужно статик переменную по проверке добавить , по приходу тика будет и конект с брокером и авторизация, единственное индикатор первый тик при загрузке на чарт сам дает - но это можно обработать , да кстати prev_calculated ==0 очень хороший повод проверить "лицензию"

Решал такую же задачу, вставил в начало функции OnCalculate такой код:

 if(account_number>0)
 {
   int akk;
   akk=AccountInfoInteger(ACCOUNT_LOGIN);
   if(akk==0)return(0);
   if(akk!=account_number)
   {
     Alert("Неверный номер счёта.");
     int window=ChartWindowFind();
     ChartIndicatorDelete(0,window,MeName);
     return(0);
   }
 }              

account_number определяется с помощью #define (можно и переменную глобальной видимости), MeName - аналогично, ну а в общем это короткое имя индикатора.

 
Yurij Kozhevnikov:

Решал такую же задачу, вставил в начало функции OnCalculate такой код:

account_number определяется с помощью #define (можно и переменную глобальной видимости), MeName - аналогично, ну а в общем это короткое имя индикатора.

да, у Вас хороший пример, я об этом и пишу

но нужно первый запуск индикатора обработать - при первом запуске может быть конект, а может и не быть , а у Вас если лицензия не прошла, то сразу выгружаетесь, как вариант счетчик и 2-3 раза нет лицензии, то выгрузить индикатор