[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 705

 
Infinity:

Так понятно, смотрю в книгу и не вижу, работает спасибо! Иду дальше) с вопросами. Все о тех же глобальных переменных. Вот добавил я в индикатор следующее условие:

Хочу определить какой глобальной переменной присваивать значение, в зависимости от того на какой валюте стоит индикатор.

я так понимаю в глоб перем GlobalVariableSet(valuta,param), имя (valuta) должно содержать значение присвоеное ему выше

в коде эксперта снова вызываю глобальную переменную

string valuta="valuta";

int i= GlobalVariableGet(valuta); // но значения не получаю,.... тоесть получаю 0. Может быть так нельзя менять имя глобальной переменной?

непонятно.. если в советнике производится проверка сохраненного индикатором значения, то логично было бы предположить, что в советнике же значение параметра valuta должно соответствовать названию инструмента, т.е. EURUSD или GBPUSD..

соответственно, если советник проверяет значение по текущем инструменту, то

string valuta= Symbol();

int i= GlobalVariableGet(valuta);
 
zhuki:

Для начала из справки

double GlobalVariableGet(string name)

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


Вы видите содержимое GV,но не можете его получить?


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

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


Замените

if (symb==EUR) {valuta=EUR;} 

на

if (symb=="EURUSD") {valuta="EUR";}  

 
keekkenen:

непонятно.. если в советнике производится проверка сохраненного индикатором значения, то логично было бы предположить, что в советнике же значение параметра valuta должно соответствовать названию инструмента, т.е. EURUSD или GBPUSD..

соответственно, если советник проверяет значение по текущем инструменту, то

string valuta= Symbol();

int i= GlobalVariableGet(valuta);


Да так работает)) Все проще чем оно кажется )

Всем огромное СПАСИБО кто сюда заходит и помогает!  

 

Друзья, подскажите где напортачил... Понять не могу. Данные с индикатора считываются, а дальше не работает. Найти не могу. Может кто подскажет, чего я не понимаю:

//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// Поиск экстремумов
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
void   SaveDataIND(double &TempIND[], int nBars)
{
   ArrayResize(TempIND,nBars);                     // Размер массива под переданный в ф-цию размер
   for (int j=0; j<=nBars-1; j++)
      {
         TempIND[j]=iAD(NULL,PERIOD_M5,j);         // Запишем данные инд. в цикле в массив
         Print("TempIND[",j,"] = ",TempIND[j]);
      }
//------------------------------------------------------------------
// Заполнение массивов данными о пичках и донышках
//------------------------------------------------------------------
   double   PeakUP[], PeakDN[];                    // Объявляем массивы пичков/донышков
   int i, k, l, asize;
   if (TempIND[nBars-1]<TempIND[1])                // Если последний бар массива ниже первого - тенденция вверх
      {
         k=0;                                      // Инициализируем индекс массива донышков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i-1] && 
                   TempIND[i-1]<TempIND[i-2])      // Нашли донышко
                  {
                     PeakDN[k]=TempIND[i-1];       // Заносим его значение в массив донышек 
                     k++;                          // Увеличиваем индекс массива донышков
                  }
            }
         asize=ArraySize(PeakDN);
         for (l=0; l<=asize; l++)
            {
               Print("PeakDN[",l,"] = ",PeakDN[l]);
            }
      }
   if (TempIND[nBars-1]>TempIND[1])                // Если последний бар массива выше первого - тенденция вниз
      {
         k=0;                                      // Инициализируем индекс массива пичков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i-1] && 
                   TempIND[i-1]>TempIND[i-2])      // Нашли пичёк
                  {
                     PeakUP[k]=TempIND[i-1];       // Заносим его значение в массив пичков 
                     k++;                          // Увеличиваем индекс массива пичков
                  }
            }
         asize=ArraySize(PeakUP);
         for (l=0; l<=asize; l++)
            {
               Print("PeakUP[",l,"] = ",PeakUP[l]);
            }
      }            
         

}   

В журнале всегда выводит данные массива значений индюкатора, а вот дальше - стоп...
... только одна нулевая ячеечка... и только ноль... Помогите пжлст...


 
odiseif:
 ивиняюсь ошибочка вышла .....вот оригинал

Одисей, если их нет, так нужно добавить :))

Файлы:
 
artmedia70:

Друзья, подскажите где напортачил... Понять не могу. Данные с индикатора считываются, а дальше не работает. Найти не могу. Может кто подскажет, чего я не понимаю:

В журнале всегда выводит данные массива значений индюкатора, а вот дальше - стоп...
 ... только одна нулевая ячеечка... и только ноль... Помогите пжлст...

Артём, пока нашел первую ошибку:

Массивы PeakUP[] и PeakDN[], объявлены без заданного количества элементов, то есть вы создали их вообще без ячеек, а далее в коде пытаетесь в них что то записать, но так как они не содержат в себе элементов, естественно в них ничего не записывается, и в принте постоянно ноль. Так как вы не знаете сколько точно будет пиков и впадин, то рекомендую поступить так, динамически увеличивать количества элементов в этих массивах при поступлении новых данных, исправленные участки выделены красным.

if (TempIND[nBars-1]<TempIND[1])                // Если последний бар массива ниже первого - тенденция вверх
      {
         k=0;                                      // Инициализируем индекс массива донышков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]>TempIND[i-1] && 
                   TempIND[i-1]<TempIND[i-2])      // Нашли донышко
                  {
                     ArrayResize(PeakDN, k + 1);
                     PeakDN[k]=TempIND[i-1];       // Заносим его значение в массив донышек 
                     k++;                          // Увеличиваем индекс массива донышков
                  }
            }
         asize=ArraySize(PeakDN);
         for (l=0; l< asize; l++)
            {
               Print("PeakDN[",l,"] = ",PeakDN[l]);
            }
      }
   if (TempIND[nBars-1]>TempIND[1])                // Если последний бар массива выше первого - тенденция вниз
      {
         k=0;                                      // Инициализируем индекс массива пичков
         for (i=3; i<=nBars-1; i++)                // Пробежимся по массиву значений
            {
               if (TempIND[i]<TempIND[i-1] && 
                   TempIND[i-1]>TempIND[i-2])      // Нашли пичёк
                  {
                     ArrayResize(PeakUP, k + 1);
                     PeakUP[k]=TempIND[i-1];       // Заносим его значение в массив пичков 
                     k++;                          // Увеличиваем индекс массива пичков
                  }
            }
         asize=ArraySize(PeakUP);
         for (l=0; l< asize; l++)
            {
               Print("PeakUP[",l,"] = ",PeakUP[l]);
            }
      }    

функция ArraySize() возвращает общее количество элементов массива, но так как индексация начинается с нуля то фактическое количество элементов равно ArraySize() - 1. 

 
И снова с вопросами я тут)  Вопрос теперь следующего характера. (Спасибо всем кто помог ранее), вот теперь у меня эксперт получает данные  глобальных переменных из индикаторов,  определяя с какого символа были получены данные. На основании этих данных в эксперте я указываю - открывать ордер на той валюте, с которой я получил данные глобальной переменной.  Эксперт прикручиваю к одному графику, индикаторы ко всем другим,... данные он получает, а открывает ордер только по валюте на которой стоит (сам эксперт),... я так понимаю что это мультиэксперт должен быть,... как сделать, или хотябы что в нем должно быть указано, для того чтобы он открывал ордера на других парах.   несколько советников запускать не хочется ((
 
Infinity:
 ...как сделать, или хотябы что в нем должно быть указано, для того чтобы он открывал ордера на других парах.   несколько советников запускать не хочется ((
OrderSend(Смвольное имя валютной пары.... ну и прочие параметры......)
 
ToLik_SRGV:

Артём, пока нашел первую ошибку:

Массивы PeakUP[] и PeakDN[], объявлены без заданного количества элементов, то есть вы создали их вообще без ячеек, а далее в коде пытаетесь в них что то записать, но так как они не содержат в себе элементов, естественно в них ничего не записывается, и в принте постоянно ноль. Так как вы не знаете сколько точно будет пиков и впадин, то рекомендую поступить так, динамически увеличивать количества элементов в этих массивах при поступлении новых данных, исправленные участки выделены красным.

функция ArraySize() возвращает общее количество элементов массива, но так как индексация начинается с нуля то фактическое количество элементов равно ArraySize() - 1.

Анатолий! Памятник вам нужно поставить - бюст на родине! Самое интересное, что я ж ведь это сделал для массива TempIND, а для этих - позабыл и пол-ночи проколдовал над ними... :))