[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 369

 

У меня на тестировании советника не работает функция Sleep()

требуется чтобы после закрытия ордера эксперт замер и на долго, а вместо этого он продолжает лепить ложные открытия, что посоветуете?


bool cl() {if (OrderSelect(0,SELECT_BY_POS)==true){ int t=OrderType();
double l=OrderLots();
int tik=OrderTicket();Alert("tik=", tik);
}
if (t==OP_BUY) OrderClose(tik,l,Bid,3,Red);
if (t==OP_SELL) OrderClose(tik,l,Ask,3,Green);
Sleep(300000000);
}

 

Sleep не работает на тестере.

 

хотелось бы узнать возможно ли чтобы советник реагировал на изменение цвета индикатора скажем зеленый-покупка красный-продажа

и на появление различных значков на экране...может быть есть какая-нибудь функция в MT4 ?

 
unumi >>:

хотелось бы узнать возможно ли чтобы советник реагировал на изменение цвета индикатора скажем зеленый-покупка красный-продажа

и на появление различных значков на экране...может быть есть какая-нибудь функция в MT4 ?

Если индикатор меняет цвет, то или а) его линия выводится по разным буферам, а значит достаточно опрашивать их, чтоб понять состояние (в МТ4 динамически цвет буфера менять нельзя, в отл. от МТ5), или б) линия индикатора выводится гр.объектами - тогда просто нужно считывать свойства ObjectGet(....).

То же относится и к значкам - они могут быть выведены как код через буфер, так и как объекты.

 
Svinozavr >>:

Если индикатор меняет цвет, то или а) его линия выводится по разным буферам, а значит достаточно опрашивать их, чтоб понять состояние (в МТ4 динамически цвет буфера менять нельзя, в отл. от МТ5), или б) линия индикатора выводится гр.объектами - тогда просто нужно считывать свойства ObjectGet(....).

То же относится и к значкам - они могут быть выведены как код через буфер, так и как объекты.

спасибо я понял

 

Доброй ночи.

Подскажите, у меня два связанных вопроса.

1. Как обнулять элементы массива на каждом тике (если необходимо согласно примера).

2. Как правильно сложить значения элементов массива.

Например:

На каждом тике заполняются элементы массива, могут заполнится 1 или 2 или 3 или 4.... или 15 элементов,

но каждый раз мне нужна арифметическая сумма значений элементов массива.

 
gvi2504 писал(а) >>

Доброй ночи.

Подскажите, у меня два связанных вопроса.

1. Как обнулять элементы массива на каждом тике (если необходимо согласно примера).

2. Как правильно сложить значения элементов массива.

Например:

На каждом тике заполняются элементы массива, могут заполнится 1 или 2 или 3 или 4.... или 15 элементов,

но каждый раз мне нужна арифметическая сумма значений элементов массива.

1. Функция ArrayInitialize(ИмяМассива,0).

2. По ходу заполнения массива сразу суммируйте. Объявить переменную, например sum, присвоить ей значение 0, затем по ходу заполнение массива прибавлять значение к этой переменной.

 
Integer >>:

1. Функция ArrayInitialize(ИмяМассива,0).

2. По ходу заполнения массива сразу суммируйте. Объявить переменную, например sum, присвоить ей значение 0, затем по ходу заполнение массива прибавлять значение к этой переменной.

Отлично.

То, что нужно. Большое спасибо

 
Bion писал(а) >>

Sleep(300000000);

Такой длительный сончас - не вариант, даже если бы Sleep() рабтал в тестере. После открытия можно запомнить время открытия:

LastTime=TimeCurrent();

В начале функции start() делать проверку:

if(TimeCurrent()<LastTime+Pause)return(0);

Pause - время "засыпания" после открытия (в секундах).

 
Integer писал(а) >>

Такой длительный сончас - не вариант, даже если бы Sleep() рабтал в тестере. После открытия можно запомнить время открытия:

LastTime=TimeCurrent();

В начале функции start() делать проверку:

if(TimeCurrent()<LastTime+Pause)return(0);

Pause - время "засыпания" после открытия (в секундах).

Сделал как вы посоветовали

datetime LastTime;
datetime Pause=3600;

int start()
{
if(TimeCurrent()<LastTime+Pause)return(0);

...

bool cl() {if (OrderSelect(0,SELECT_BY_POS)==true){ int t=OrderType();
double l=OrderLots();
int tik=OrderTicket();Alert("tik=", tik);
}
if (t==OP_BUY) OrderClose(tik,l,Bid,3,Red);
if (t==OP_SELL) OrderClose(tik,l,Ask,3,Green);
LastTime=TimeCurrent();
}

Всеравно на тестере не реагирует открывает ордера все подряд в соответствии с условием, но при этом на время не реагирует.

И еще на тестере не реагирует параметр время существования отложенного ордера, т.е не удаляется когда ему пора удалиться.

Это так и должно быть?

Как сделать чтобы на тестре учитывался параметр времени прошедшего с момента закрытия ордера?