Особенности языка mql5, тонкости и приёмы работы - страница 220

 
Nikolai Semko #:

значит в боевом режиме нужно выключать все графические нахлабуды без минимизации. Пусть графика заморожена если окно остается видимым, но не активным.
А проще и лучше, как мне кажется, автоматически выключать и убирать всю графику при неактивности мышки, например, 1 минуту. Как только мышь активна - графика возобновляется. 

Это совсем не хорошо. Вот смотришь на график минуты 2, а графика умерла ещё минуту назад. Зачем тогда она нужна?

 
Vitaly Muzichenko #:

Это совсем не хорошо. Вот смотришь на график минуты 2, а графика умерла ещё минуту назад. Зачем тогда она нужна?

ну конечно, для такого режима нужен switch "Auto-hide"

 
Nikolai Semko #:

значит в боевом режиме нужно выключать все графические нахлабуды без минимизации.

Канвас самого чарта рисуется без минимизации. Опытным путем был найден режим работы Терминала, когда VPS грузится минимально.

 

Надеюсь, пишу в правильной теме.

1. Проводим тест по нескольким парам одновременно, мультивалютник

Вопрос: как получить результат по каждой паре?

2. Проводим оптимизацию по нескольким парам одновременно

Вопрос: как получить результат по каждой паре?

---

Когда-то давно, года 3 назад обещали это включить в тестер, но так до сих пор ничего нет. Или Я не нахожу?

 

Есть легальный способ остановить, например, работу Маркет-советника или Сигнал-сервиса. Допустим, к ним отсутствует доступ по тем или иным причинам - VPS.

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


Возможно, кто напишет такой аварийный Маркет-продукт...

 

MQL5. MESSAGE BOX дублирует сообщения в журнале "Эксперты". Подскажите пожалуйста как отключить. ***

Спасибо!

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2017.09.22 20:43

POSITION_TIME_UPDATE имеет отношение только в изменению лота позиции. Например, частичное закрытие позиции на любом типе счета или доливка на неттинге.

Изменения же SL/TP-уровней на POSITION_TIME_UPDATE не влияют.

Перефразировав, на POSITION_TIME_UPDATE влияют только модификации, имеющие отражение в Истории торгов - сделки. SL/TP-уровни к таким модификациям не относятся, поэтому не влияют.

Могут быть ситуации, когда POSITION_TIME_UPDATE_MSC == POSITION_TIME_UPDATE, несмотря на изменения лотности.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".
 
fxsaber #:
Удобная сортировка массива структур


Применение


Результат

Hi and thanks for sharing!

This would be perfect if it worked. However, when pasted into a .mq5 script and executed unfortunately your code throws the following error(s):

  • template declarations are not allowed in local classes  ArraySortStruct.mq5 87  4
  • (after slightly changing your code): template declarations are allowed on global, namespace or class scope only ArraySortStruct.mq5 90  4 )

Could you please fix this? For you it's probably easy whereas I wouldn't know where to start :-)

 
Bodolino #:

Hi and thanks for sharing!

This would be perfect if it worked. However, when pasted into a .mq5 script and executed unfortunately your code throws the following error(s):

  • template declarations are not allowed in local classes  ArraySortStruct.mq5 87  4
  • (after slightly changing your code): template declarations are allowed on global, namespace or class scope only ArraySortStruct.mq5 90  4 )

Could you please fix this? For you it's probably easy whereas I wouldn't know where to start :-)

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

// Сортировка массива структур и указателей на объекты 
по полю.
#define ArraySortStruct_Define(TYPE, FIELD)                                      \
namespace TYPE##FIELD                                                            \
{                                                                                \
  class SORT                                                                     \
  {                                                                              \
  private:                                                                       \
    template <typename T>                                                        \
    static void Swap( T &Array[], const int i, const int j )                     \
    {                                                                            \
      const T Temp = Array[i];                                                   \
                                                                                 \
      Array[i] = Array[j];                                                       \
      Array[j] = Temp;                                                           \
                                                                                 \
      return;                                                                    \
    }                                                                            \
                                                                                 \
    template <typename T>                                                        \
    static int Partition( T &Array[], const int Start, const int End )           \
    {                                                                            \
      int Marker = Start;                                                        \
                                                                                 \
      for (int i = Start; i <= End; i++)                                         \
        if (Array[i].##FIELD <= Array[End].##FIELD)                              \
        {                                                                        \
          SORT::Swap(Array, i, Marker);                                          \
                                                                                 \
          Marker++;                                                              \
        }                                                                        \
                                                                                 \
       return(Marker - 1);                                                       \
    }                                                                            \
                                                                                 \
    template <typename T>                                                        \
    static void QuickSort( T &Array[], const int Start, const int End )          \
    {                                                                            \
      if (Start < End)                                                           \
      {                                                                          \
        const int Pivot = Partition(Array, Start, End);                          \
                                                                                 \
        SORT::QuickSort(Array, Start, Pivot - 1);                                \
        SORT::QuickSort(Array, Pivot + 1, End);                                  \
      }                                                                          \
                                                                                 \
      return;                                                                    \
    }                                                                            \
                                                                                 \
  public:                                                                        \
    template <typename T>                                                        \
    static void Sort( T &Array[], int Count = WHOLE_ARRAY, const int Start = 0 ) \
    {                                                                            \
      if (Count == WHOLE_ARRAY)                                                  \
        Count = ::ArraySize(Array);                                              \
                                                                                 \
      SORT::QuickSort(Array, Start, Start + Count - 1);                          \
                                                                                 \
      return;                                                                    \
    }                                                                            \
  };                                                                             \
}

#define ArraySortStruct(TYPE, ARRAY, FIELD) TYPE##FIELD::SORT::Sort(ARRAY)


Применение.

ArraySortStruct_Define(MqlRates, open)
ArraySortStruct_Define(MqlRates, high)
ArraySortStruct_Define(MqlRates, time)

void OnStart()
{
  MqlRates Rates[];
  
  CopyRates(_Symbol, PERIOD_CURRENT, 0, 5, Rates); // Взяли бары
  
  Print("\nБары без сортировки - как получили.");
  ArrayPrint(Rates);
  
  Print("\nСортируем по open-цене.");
  ArraySortStruct(MqlRates, Rates, open);
  ArrayPrint(Rates);

  Print("\nСортируем по high-цене.");
  ArraySortStruct(MqlRates, Rates, high);
  ArrayPrint(Rates);

  Print("\nСортируем по времени.");
  ArraySortStruct(MqlRates, Rates, time);
  ArrayPrint(Rates);
}
Причина обращения: