abolk: Но пока Вы не опишите то, чего хотите, Вам просто трудно помочь
Есть два сигнала
double tr0=iCustom(NULL,0,"trd",0,0);//может быть 0 или 1 . Если 1 покупаем double tr1=iCustom(NULL,0,"trd",1,0);//может быть 0 или 1 . Если 1 продоем
буду говорить о продаже
Когда после очередного тика tr1 стал равен 1, тогда с времени появления единицы t начинается проверка выдержится ли эта единица с момента t в течении временого отрезка tim . Проверка ведется через промежутки времени delta. Как пример берем t=........ //10.00 час, tim = 600 сек, delta=60 сек. Так вот в 10.00 появилась tr1=1 (перед тем был 0) . Но продовать небыдем. Продажа будет потверждена, если этот сигнал удержится в 600 сек, то есть до 10.10 час. Проверка ведется не постояно, а через отрезки втемени delta=60 сек (10.00, 10.01, 10.02, ....... , 10.09, 10.10). И если при каждой проверке было tr1=1, тогда выдаем сигнал на продажу.
В этом есть и минус - ноль может появится между проверками и тогда сигнал может быть ошибочным. Провеки можно зачастить, но очень загружается компьютер. В этом надо найти золотую середину и посмотреть что получится. Это все для эксперимента.
void init()
{
isSign=false;
}
void start() // запускается с каждым тиком
{
if(!isSign) // если сигнала нет
{
sign0=???; // формула определения signif(sign0==1) // если сигнал поступил
{
t0=TimeCurrent(); //фиксируем время
isSign=true; // переключатель - сигнал поступил
}
}
if(isSign) // если сигнал есть
{
t=TimeCurrent(); // новое время
if(t<=t0+delta) // если временной промежуток не закончился
{
sign1=???; //формула определения нового сигналаif(sign1!=sign0) // если новый сигнал изменился (не продержался)
{
isSign=false; // переключатель - сигнала нет
}
}
if(t>t0+delta) // если промежуток закончился
{
if(isSign) // если сигнал удержался
{
//действия по сигналу
}
}
}
}
Проверка с каждым тиком, не через дискретные промежутки
пришол сигнал сиг_баи== 1. если 0 таймер незапускаетса включаете таймер бая. если пришол сигнал ==1. таймер бая не трогаете. если пришол сигнал сиг_баи== 0. то сбросить таймер бая
таймер отсчелкал 5-ть минут с интервалами допустим в минуту два раза значит работаем на баи
пришол сигнал сиг_сел== 1. если 0 таймер незапускаетса включаете таймер сел. если пришол сигнал сиг_сел==1. таймер сел не трогаете. если пришол сигнал сиг_сел== 0. то сбросить таймер сел таймер отсчелкал 5-ть минут с интервалами допустим в минуту два раза значит работаем на сел
Это взято с Moving Average.mq4
небыло там таких строчек )) ты наверное сам когда-то изменил код советника, а теперь сам и ориентируешься по этим записям )
Извеняюсь, может не так выразился. За основу взят Moving Average.mq4 и на нем зделаны изменения мною.
Я не русский и иногда мне трудно описать то что я хочу.
Я не русский и иногда мне трудно описать то что я хочу.
Но пока Вы не опишите то, чего хотите, Вам просто трудно помочь
Есть два сигнала
double tr0=iCustom(NULL,0,"trd",0,0);//может быть 0 или 1 . Если 1 покупаем
double tr1=iCustom(NULL,0,"trd",1,0);//может быть 0 или 1 . Если 1 продоем
буду говорить о продаже
Когда после очередного тика tr1 стал равен 1, тогда с времени появления единицы t начинается проверка выдержится ли эта единица с момента t в течении временого отрезка tim . Проверка ведется через промежутки времени delta. Как пример берем t=........ //10.00 час, tim = 600 сек, delta=60 сек. Так вот в 10.00 появилась tr1=1 (перед тем был 0) . Но продовать небыдем. Продажа будет потверждена, если этот сигнал удержится в 600 сек, то есть до 10.10 час. Проверка ведется не постояно, а через отрезки втемени delta=60 сек (10.00, 10.01, 10.02, ....... , 10.09, 10.10). И если при каждой проверке было tr1=1, тогда выдаем сигнал на продажу.
В этом есть и минус - ноль может появится между проверками и тогда сигнал может быть ошибочным. Провеки можно зачастить, но очень загружается компьютер. В этом надо найти золотую середину и посмотреть что получится. Это все для эксперимента.
Есть два сигнала
double tr0=iCustom(NULL,0,"trd",0,0);//может быть 0 или 1 . Если 1 покупаем
double tr1=iCustom(NULL,0,"trd",1,0);//может быть 0 или 1 . Если 1 продоем
Не понятно, в один момент времени может поступить два разных (противоречивых) сигнала?
Не понятно, в один момент времени может поступить два разных (противоречивых) сигнала?
Нет неможет. Они с разных буферов берется и толко один из них может получитя единицу. Возможные комбинации
tr0 0 1 0
tr1 0 0 1
1 и 1 невозможная комбинация
Проверка с каждым тиком, не через дискретные промежутки
Может где ошибся - извините
Нет неможет. Они с разных буферов берется и толко один из них может получитя единицу. Возможные комбинации
tr0 0 1 0
tr1 0 0 1
1 и 1 невозможная комбинация
пришол сигнал == 1.
включаете таймер бая.
если пришол сигнал ==1. таймер бая не трогаете.
если пришол сигнал == -1 то сбросить таймер бая включить таймер селл.
если пришол сигнал == -1. таймер села не трогаем.
если пришол сигнал 0 сброс обоих таймеров в ноль.
таймер отсчелкал 5-ть минут значитработаем.
пришол сигнал сиг_баи== 1. если 0 таймер незапускаетса
включаете таймер бая.
если пришол сигнал ==1. таймер бая не трогаете.
если пришол сигнал сиг_баи== 0. то сбросить таймер бая
таймер отсчелкал 5-ть минут с интервалами допустим в минуту два раза значит работаем на баи
пришол сигнал сиг_сел== 1. если 0 таймер незапускаетса
включаете таймер сел.
если пришол сигнал сиг_сел==1. таймер сел не трогаете.
если пришол сигнал сиг_сел== 0. то сбросить таймер сел
таймер отсчелкал 5-ть минут с интервалами допустим в минуту два раза значит работаем на сел
Проверка с каждым тиком, не через дискретные промежутки
Может где ошибся - извините
Все тики негодится