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

 
gince:
Это взято с Moving Average.mq4
небыло там таких строчек )) ты наверное сам когда-то изменил код советника, а теперь сам и ориентируешься по этим записям )
 
Techno:
небыло там таких строчек )) ты наверное сам когда-то изменил код советника, а теперь сам и ориентируешься по этим записям )


Извеняюсь, может не так выразился. За основу взят  Moving Average.mq4  и на нем зделаны изменения мною. 

Я не русский и иногда мне трудно описать то что я хочу. 

 
gince:


Я не русский и иногда мне трудно описать то что я хочу.

Но пока Вы не опишите то, чего хотите, Вам просто трудно помочь
 
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, тогда выдаем сигнал на продажу.

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


 

 
gince:


Есть два сигнала

double tr0=iCustom(NULL,0,"trd",0,0);//может быть 0 или 1 . Если 1 покупаем
double tr1=iCustom(NULL,0,"trd",1,0);//может быть 0 или 1 . Если 1 продоем


Не понятно, в один момент времени может поступить два разных (противоречивых) сигнала?

 
abolk:

Не понятно, в один момент времени может поступить два разных (противоречивых) сигнала?


Нет неможет. Они с разных буферов берется и толко один из них может получитя единицу. Возможные комбинации

tr0     0    1   0

tr1     0    0   1

 1 и 1 невозможная комбинация 

 
void init()
{
  isSign=false;
}

void start() // запускается с каждым тиком
{
   if(!isSign) // если сигнала нет
   {
      sign0=???; // формула определения sign
      if(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) // если сигнал удержался
         {
            //действия по сигналу
         }
      }
   }
}

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

Может где ошибся - извините

 
gince:


Нет неможет. Они с разных буферов берется и толко один из них может получитя единицу. Возможные комбинации

tr0 0 1 0

tr1 0 0 1

1 и 1 невозможная комбинация

пришол сигнал == 1.

включаете таймер бая.

если пришол сигнал ==1. таймер бая не трогаете.

если пришол сигнал == -1 то сбросить таймер бая включить таймер селл.

если пришол сигнал == -1. таймер села не трогаем.

если пришол сигнал 0 сброс обоих таймеров в ноль.

таймер отсчелкал 5-ть минут значитработаем.

 
neama:

 


пришол сигнал сиг_баи== 1. если 0 таймер незапускаетса
включаете таймер бая.
если пришол сигнал ==1. таймер бая не трогаете.
  если пришол сигнал сиг_баи== 0. то сбросить таймер бая

таймер отсчелкал 5-ть минут  с интервалами допустим в минуту два раза значит работаем на баи

пришол сигнал сиг_сел== 1. если 0 таймер незапускаетса
включаете таймер сел. 
если пришол сигнал сиг_сел==1. таймер сел не трогаете. 
если пришол сигнал сиг_сел== 0. то сбросить таймер сел
таймер отсчелкал 5-ть минут  с интервалами допустим в минуту два раза значит работаем на сел
 


 
abolk:

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

Может где ошибся - извините


Все тики негодится