Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 89

 
Alexey Kozitsyn:
Не стоит так делать. Перерасход по ресурсам большой будет. И чем не устраивает скорость реакции без зацикливания?
Спасибо. Просто в официальном учебнике по mql4 это приводится как пример, поэтому меня заинтересовало. Я подумал, может это как-то лучше работает, чем обычный способ.
 
LRA:
Тик - это приход новых данных с сервера. И обрабатывать его надо сразу после прихода. Если будете это делать в цикле с задержкой 5 мс, то большинство тиков будет приходить именно во время выполнения этой задержки. Таким образом, обработка будет запаздывать на 0 ... 5 мс.
Да, в этом есть логика. Я просто подумал, что сама функция start() ведь тоже затрачивает время на свой цикл, и возможно его итерация крадет какие-то доли секунд или более (там возможно обязательное обращение к серверу для получения сразу большого пакета данных), в отличии от чистого цикла. Возможно это просто мои фантазии от непонимания внутренних механизмов, но ведь не зря же этот способ был приведен в учебнике по mql4.
 
smart_man:
Спасибо. Просто в официальном учебнике по mql4 это приводится как пример, поэтому меня заинтересовало. Я подумал, может это как-то лучше работает, чем обычный способ.
Да, но учебник несколько устарел. Это, конечно, лучше, чем ничего, но не лишним будет параллельно заглядывать в документацию и проверять, а остались ли в ней функции типа start(). Сейчас лучше использовать обработчик OnTick() для советников.
 

Добрый день! 

 
Добрый день! Скажите пжа  мне самый удобный брокер для валютного пара USD/RUB? Минимальный спред и минимальный своп и.т. др.с комиссией..? 
 
kanybek06:
Добрый день! Скажите пжа  мне самый удобный брокер для валютного пара USD/RUB? Минимальный спред и минимальный своп и.т. др.с комиссией..? 

По скольку Вы только начинаете, то Вам очень понравится у любого. Задайте в поиск по интернету и сравнивайте. Общайтесь с ними, задавайте вопросы. Вам ответят.

Здесь мы обсуждаем вопросы по программированию и по торговой платформе Метатрейдер.

 

Как лучше закрывать встречные ордера, если надо закрыть их одновременно

1) каждый по отдельности (либо вручную, либо по TP/SL)

или

2) парами с помощью OrderCloseBy (только вручную)?

Будет ли экономия одного спреда при OrderCloseBy, как написано в учебнике? Не запрещают ли такое закрытие ДЦ и отдадут ли этот спред? Как это проверить технически?

Спасибо.

 
Есть шаблон класса для работы с массивом.
#property strict
#include <ObjectVariables.mqh>
#include <Arrays\varQSort.mqh>
#include <Arrays\objQSort.mqh>

template<typename T1>
class ArrayList
{
   private:
      T1 array[];
      QuickSorts<T1> *qs;
      int size;
      int index;

   public:
      //прочие функции
      void QuickSort();//отсортировать массив
      //прочие функции
};
//+------------------------------------------------------------------+
//| Сортировка массива
template<typename T1>
void ArrayList::QuickSort()
{
   int idx = index;//сохранение положения индекса
   if(IsPointer(array[0])) // true - массив содержит указатели класса
      qs /*ошибка 2*/ = new ObjQSort<T1>();
   else
      qs /*ошибка 2*/ = new VarQSort<T1>();
   qs.Sort(array, 0, index);
   index = idx;
}

Для этого шаблона-класса нужно реализовать сортировку, учитывая тот факт, что массив может хранить сложные типы данных. Например:
ArrayList<PP*> *dde; // PP - класс

Можно написать разные функции для простых типов и сложных, но компилятор не понимает, что функции жёстко разграничены по типу данных и продолжает ругаться:
'<' - illegal operation use    ArrayList.mqh

Тогда я решил встроить интерфейс:

#property strict
template <typename T1>
interface QuickSorts
{
   void Sort(T1 &array[], int beg, int end);
};
#property strict
#include <Arrays\QuickSorts.mqh>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template <typename T1>
class VarQSort : public /*ошибка 1*/ QuickSorts
{
private:

public:
   void Sort(T1 &array[], int beg, int end);
   VarQSort(){}
   ~VarQSort(){}
};
template <typename T1>
void VarQSort::Sort(T1 &array[], int beg,int end)
{
   //алгоритм функции
}
#property strict
#include <Arrays\QuickSorts.mqh>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template <typename T1>
class ObjQSort : public /*ошибка 1*/ QuickSorts
{
private:

public:
   void Sort(T1 &array[], int beg, int end){}
   ObjQSort(){}
   ~ObjQSort(){}
};

Все части конструкция компилируются. Но если попытаться её объявить:
ArrayList<PP*> *dde; // PP - класс
то, при компиляции файла вот такие ошибки:

'QuickSorts' - template mismatch    varQSort.mqh /*ошибка 1*/
'=' - type mismatch    ArrayList.mqh /*ошибка 2*/


Что нужно исправить в коде, что бы устранить это несоответствие типов? Не понимаю, почему оно вообще возникло.

P.S.
'<' - illegal operation use    varQSort.mqh
преследует меня и в этой конструкции. А именно от неё я и хотел избавиться. Но эта ошибка мне понятна, а вот те две - нет.
 
виталик:
Здравия всем,помогите плиз с куском кода разобраться выдранного из индюка PivotsDaily v2.mq4, как его переделать в часовой или получасовой,только во что нибудь одно,так понятней  будут изменения ,помогите плиз, заранее благодарю

В одной ветке написали. Хватит. В других плодить не надо.
 
Здравствуйте! Подскажите пожалуйста, написал советник 1,5 года назад, работал, все нормально было. Не пользовался им все это время, сейчас не устанавливается на график. Кто знает что может быть причиной? Может из-за каких-то обновлений МТ4?
Причина обращения: