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

 
Alexey Viktorov:

Не надо путать переменную string x; и строковый символ "x"

Конкретную задачу я не понял. Соответственно конкретного ответа нет.

Может лучше подумать над перегрузкой функций?

Ситуация такая, что мне нужно создать универсальную функцию function_xy, в которой бы основная программа понимала бы, что имя строковой  переменной object_xy меняется в зависимости от передаваемых параметров(..., ..., string x, string y). Иначе, далее по коду в функции function_xy() мне придется вручную прописывать имя переменной object_xy.
Например,

void function_xy(..., ..., string x="EURUSD", string y="GBPUSD")
{
...
string object_xy=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
}

 Иначе, создавая несколько графических объектов в данной функции function_xy() придется вручную прописывать параметры графических функций

void function_xy(..., ...,...)
{
...
string object_EURUSDGBPUSD=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
ObjectCreate(object_EURUSDGBPUSD,...,...)
ObjectSet(object_EURUSDGBPUSD,...,...)
ObjectSetText(object_EURUSDGBPUSD,...,...)
...
}

void function_wz(..., ...,...)
{
...
string object_USDCHFUSDJPY=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
ObjectCreate(object_USDCHFUSDJPY,...,...)
ObjectSet(object_USDCHFUSDJPY,...,...)
ObjectSetText(object_USDCHFUSDJPY,...,...)
...
}

таких функций до 2х сотен, можно ли как-то сократить и решить эту проблему?
Надеюсь, что выразил свою мысль. 



 

 
Timur1988:

Ситуация такая, что мне нужно создать универсальную функцию function_xy, в которой бы основная программа понимала бы, что имя строковой  переменной object_xy меняется в зависимости от передаваемых параметров(..., ..., string x, string y). Иначе, далее по коду в функции function_xy() мне придется вручную прописывать имя переменной object_xy.
Например,

 Иначе, создавая несколько графических объектов в данной функции function_xy() придется вручную прописывать параметры графических функций

таких функций до 2х сотен, можно ли как-то сократить и решить эту проблему?
Надеюсь, что выразил свою мысль.

Нужно всего лишь написать кусок кода, который в зависимости от X и Y будет формировать имя объекта, например брать его из массива например так: n=10*x+y. Тогда при x=0 и y=0..9 будут выбираться первые 10 элементов, а при x=1 и y=0..9 будут выбираться следующие 10 элементов

 
DOCTORGAD:  Есть код открытия одиночной сделки со проверками ошибок? Именно для реала, а не для теста... Можно как функцией, просто тупик какой-то :(

Что толку проверять ошибки - на них надо реагировать!!! Как?? Print("Ошибка - ...") - это годится только во время отладки. Да и то удобнее Alert(). На ошибку надо реагировать паузой = задержкой. Где-то была статься об этом. Но где? Если кто видел - напомните!!!

 
Timur1988:

Ситуация такая, что мне нужно создать универсальную функцию function_xy, в которой бы основная программа понимала бы, что имя строковой  переменной object_xy меняется в зависимости от передаваемых параметров(..., ..., string x, string y). Иначе, далее по коду в функции function_xy() мне придется вручную прописывать имя переменной object_xy.
Например,

 Иначе, создавая несколько графических объектов в данной функции function_xy() придется вручную прописывать параметры графических функций

таких функций до 2х сотен, можно ли как-то сократить и решить эту проблему?
Надеюсь, что выразил свою мысль. 



 



//+------------------------------------------------------------------+
void OnStart()
  {

   function_xy();

  }
//+------------------------------------------------------------------+x1 x2 x3
void function_xy(string x="EURUSD",string y="GBPUSD")
  {
   string object_xy;
  string c = "object_EURUSDGBPUSD";
//Для начала,  склеим переданные в функцию строковые переменные 

   object_xy=StringConcatenate("object_",x,y);
   
   Alert("object_xy = ",object_xy);
   
// Cравниваем
   if(StringCompare(c,object_xy)==0)
     {
      Alert("       Ура получилось ))))))))");
      Alert("object_EURUSDGBPUSD == object_xy");
     }
//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD 
  }
//+------------------------------------------------------------------+

Если правильно я вас понял,

то как то так.

 
Ptichka12:    Здравствуйте, скобка пьёт с меня кровь не могу сделать ей пару(сразу выдаёт кучу ошибок) . Скобка в первой строке.

Это декомпил? Срочно уберите!   Здесь это запрещено!!! Забанят ...

 
Ptichka12:

Здравствуйте, скобка пьёт с меня кровь не могу сделать ей пару(сразу выдаёт кучу ошибок) . Скобка в первой строке.


Вам предупреждение за публикацию декомпилированного кода.
 
Artyom Trishkin:
Вам предупреждение за публикацию декомпилированного кода.

Извините, больше не буду...

 
Alexey Viktorov:его надо полностью переписывать. А кому оно надо???

Спасибо)
Чтобы не переписывать, может быть можно трендовые линии наложить на те отрезки что >=100 пп.

Подскажите, как задать координаты для точек трендовой линии, чтобы построить её от впадины до вершины zigzag -a.

 

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

Две недели придумываю скрипт, который по ценам в массиве будет проверять есть ли сейчас такой ордер....

Сейчас запнулся на поиске по массиву. Почему-то выдаёт не то, что ожидается.


int start()
{
   while(!IsStopped())
    {    
      double prmas[5] = {11,22,33,44,99}; // Будем проверять каждую цену, есть ли ордер с такой ценой или нет
         for(int ordsel=0; ordsel<=4;ordsel++) {  // Цикл прохода по ценам в массиве
            for(int nmbr = 0; nmbr < OrdersTotal() ;nmbr++) {   // Проверяем каждую цену по всем ордерам
               int os = OrderSelect(nmbr, SELECT_BY_POS, MODE_TRADES); // Выбираем ордер по порядку цикла
               int maspos = ArrayBsearch(prmas,OrderOpenPrice(),5,0,MODE_ASCEND); //Ищем позицию цены в массиве по текущему проверяемому ордеру
               Alert ("Номер в цикле  ", nmbr, " Выбранный ордер  ", os, " Цена из массива ", prmas[maspos]); //Выводим скорбный результат
               Sleep(10000);  
      }
}
     if(!IsExpertEnabled()) break;
    }
return(nmbr);
}

выдаёт не то...

ордера:



 
Dimitry-1983:

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

Две недели придумываю скрипт, который по ценам в массиве будет проверять есть ли сейчас такой ордер....

Сейчас запнулся на поиске по массиву. Почему-то выдаёт не то, что ожидается.


Всё правильно он выдаёт:

ArrayBsearch

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

Возвращает индекс первого найденного элемента. Если искомое значение не найдено, то возвращает индекс ближайшего меньшего по значению из элементов, между которыми расположено искомое значение.

у тебя цены ордеров (порядок по времени выставления)
певый     11,00000
второй    22,00000
третий    0,98020
четвёртый 0,98004
пятый     33,00000

соответственно 1, 2 и 5 находит правильно, а для 2 и 3 ближайшее меньшее значение... 



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