Работа советника без прихода нового тика - страница 3

 
FION:
Практически все советники, которые я до сих пор встречал работают по приходу нового тика. Может быть есть возможность организовать в советнике что-то вроде тактового генератора, для управления ордерами не ожидая прихода нового тика, а сразу по выполнении условия ?

Посмотрите здесь Учебник по MQL4 О сложных программах и немного поробностей в статье Синхронизация работы экспертов, скриптов и индикаторов.

FION:
Renat писал (а):
Необходимо упомянуть, что зацикленные эксперты нельзя протестировать на истории.
Спасибо за предупреждение,а то бы парился зазря. Будем использовать эту функцию уже после доводки советника по стандартной методике.


Это действительно так, но только в том случае, если эксперт зациклен "грубо". Однако нет технических ограничений для того, чтобы в большом цикле проанализировать ситуацию на предмет тестирования с помощью функции IsTesting(). Если зацикленный советник понимает, что он находится в режиме тестирования, то он может и не сидеть в этом цикле бесконечно, а завершить текущую большую итерацию функции start() и, таким образом, дать возможность осуществиться другим действиям в терминале, а именно, передать управление тестеру, чтоб тот, в свою очередь, сэмитировал поступление нового тика.

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

 
saint739:
Решил не создавать новую тему. Так как вопрос во многом относится к этой.
Как получить новый тик в зацикленной start().


Вот так.

bool New_Tick, New_Bar;          // Глобальные переменные
 
//---------------------- Новый тик -----------------------------------------
   if (RefreshRates()==true )                   
      New_Tick = true;           // Поймать новый тик легко, если знать как
   else
      New_Tick = false;          // Тик не новый   
//---------------------- Новый бар -----------------------------------------
   if (Time_0 != Time[0])        // Если уже другое время начала бара
      {
      New_Bar= true;             // А вот и новый бар
      Time_0 = Time[0];          // Запомним время начала нового бара
      } 
   else
      New_Bar = false;           // Бар не новый   
//--------------------------------------------------------------------------
                                 // Где-то в дальнейшем коде:
   if (New_Tick == true)
      {
      // Здесь то, что надо исполнить на новом тике
      }   
   if (New_Bar == true)
      {
      // Здесь то, что надо исполнить на новом баре
      }
//--------------------------------------------------------------------------
 

Я считаю излишним писать

if (New_Bar == true) { }

достаточно

if (New_Bar) { }
 
saint739:
Но иногда то тики одинаковые приходят.
Не приходят.
Посмотрите Сборщик тиков (TickSave)
 

xnsnet, срок жизни найденных Вами адресов - до следующего билда. Билды выходят раз в 1-2 месяца. В чём фишка?

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