Начало работы советника в определённое время. Время - внешняя переменная - страница 2

 
Спасибо огромное! Наконец-то простое решение задачки появилось) Хотя, на самом деле, мне кажется, что без подвешивания советника всё же не обойтись, т.к. я не всю задачу описал. В определенное время нужно проанализировать появившийся бар, а спустя 4 часа после этого еще раз проанализировать только что появившийся бар. Похоже, придется подвешивать. Ну или подумать немного...
 
Это тоже не сложно. Настало определённое время - запомнили число баров. Если мы при этом работаем на Н1, то как только число баров станет на 4 больше, то значит прошло ещё 4 часа :)
 
Ну да, я до этого только что сам дошел :) Псасибо за терпение.
 

Хотя не так-то всё и просто.. int OldBars = Bars; пишу это перед функцией init(); говорит, что ошибка: Bars: initialization expected;

Это же системная преопределенная переменная, почему он ругается на неё?

 
farewell:

Хотя не так-то всё и просто.. int OldBars = Bars; пишу это перед функцией init(); говорит, что ошибка: Bars: initialization expected;

Это же системная преопределенная переменная, почему он ругается на неё?


потому что инициировать переменные функциями вне функций нельзя
 

Да, уже инициировал переменную внутри init();

Но, само собой, снова проблемы. Входной параметр - TimeToStart, следующий кусок кода не работает:

if(Minute()==TimeToStart)

{

Alert("Ypa");

}

TimeToStart ставлю равной 17, запускаю прогу в 21:15, жду 2 минуты, время переваливает за 21:17, но Ура он мне не пишет. Казалось бы, кусок кода простейший, но не работает..

 
sergeev:

потому что инициировать переменные функциями вне функций нельзя


Алекс, ты прирождённый Модератор с большой буквы "М"! Я иной раз просто удивляюсь уже не тому, откуда ты берёшь терпение, а тому, откуда в тебе ещё остаётся сила шутить при этом. Знаешь, ты талантлив. Реально талантлив. Я рад, что имею возможность время от времени созерцать твои посты. Некоторые из них - это просто шедевры искусства общения. И у других жителей этого форума иной раз проскакивает такое, что диву даёшься - не в смысле бездарности, а аж дух захватывает от восхищения.

Некоторые из тут живущих иной раз выдают гениальные решения, проявляют гениальную рекацию на воздействующий импульс. Люди, я тихо радуюсь, что мне посчатливилось общаться с вами.

Простите админ и модер за отклонение от темы :) - просто к месту пришлось :)

 
farewell:

Хотя не так-то всё и просто.. int OldBars = Bars; пишу это перед функцией init(); говорит, что ошибка: Bars: initialization expected;

Это же системная преопределенная переменная, почему он ругается на неё?


Так нельзя. Нужно вот так:

int OldBars; 

int init(){

   OldBars=0;  

}

Или вот так:

int OldBars=0; 

int init(){

     

}

В первом случае переменная сначала объявлена, затем в блоке инициализации проинициализирована нулём. Во втором случае мы сразу проинициализировали её нулём, поэтому в блоке инициализации можно ни чего про неё не отписывать. НО!

Но дело в том, что запись типа:

int OldBars=Bars; 

int init(){



}

будет не правильная. Почему? Потому что Bars - это не просто переменнная. Это меняющаяся переменная. И на момент старта советника ни кто не знает сколько там свечек. Поэтому процессор не знает, сколько ячеек в оперативной памяти отвести для этой переменной. Это станет ясно только после того, как стартонёт советник. А поскольку мы попытались вызвать Барсы ПЕРЕД стартом советника, то получается, что он вообще не в курсе, о чём речь.

Чтоб писать код советников ума много не нужно - нужно усердие, терпимость и желание кодить. Язык MQL4 насолько прост и настолько много имеет неожиданных закоулков, что иной раз диву даёшься.

Добро пожаловать в клуб искателей :)

 

Часто существует несколько решений одной задачи. Для себя взял на вооружение такой код из чужого советника:

/////
datetime Today=0;
//ожидаем открытие новой свечи
if(Time[0]==Today) return(0);
Today=Time[0];

Просто наглядная иллюстрация сказанного получилась! )))) :

drknn:


.... Язык MQL4 настолько прост и настолько много имеет неожиданных закоулков, что иной раз диву даёшься....

 

Много полезной инфы вы написали!) Спасибо, друзья. Старая проблема, правда, от этого никуда не ушла.. А она заключалась вот в чем:

if (Minute() == 30) {

alert("ypa!");

}

Вот этот код должен каждый час, в 00:30, 01:30, 02:30 и так далее, писать "ура!". Ну почему он не пишет "ура!"-то? Ни при каком раскладе. Убиться можно.