Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Делись ссылками на продукты и получай доход с этого
EugenioKP1983
166
EugenioKP1983 2016.08.15 22:41 

Будет ли такое выражение правельным если я хочу при наступлении времени выполнить тело только 1 раз.


if(TimeMinute(TimeCurrent())<=00*00*03 && TimeMinute(TimeCurrent())>=00*00*05) // ѕ–»Ќя“»≈ –≈Ў≈Ќ»я ќ —ƒ≈Ћ ≈
        {
         
         for(H0=1;H0==1; H0--)
        {
        //Выполняю действие..

        }
       }
H0=1;
EugenioKP1983
166
EugenioKP1983 2016.08.15 22:48  

или будет вернее так . Тут вижу загвозду при новом проходе если время ещо гуд то H0 опщть 1 и цикл выполнится снова

H0=1;
if(TimeMinute(TimeCurrent())<=00*00*03 && TimeMinute(TimeCurrent())>=00*00*05) // ѕ–»Ќя“»≈ –≈Ў≈Ќ»я ќ —ƒ≈Ћ ≈
        {
         
         for(H0=H0;H0==1; H0--)
        {
        //Выполняю действие..

        }
       }
LRA
321
LRA 2016.08.16 07:25  
EugenioKP1983

или будет вернее так . Тут вижу загвозду при новом проходе если время ещо гуд то H0 опщть 1 и цикл выполнится снова

Оба варианта эквивалентны и одинаково бессмысленны.  1. Если тело цикла должно выполняться 1 раз, то цикл то зачем? 2. Предполагаю, что условный оператор расположен в функции OnTick. Тогда выполнение будет происходить на каждый тик, пришедший в заданный промежуток времени.

Представьте, что разносчик пенсии действует по такой инструкции: В течение первой недели месяца (оператор IF), каждый раз, проходя мимо дома, заходить в квартиру НН. Проследить (оператор FOR), чтоб при каждом заходе в квартиру пенсия выдавалась лишь 1 раз.

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

if(другое время) флаг=Выдать;
if(нужное время и флаг == Выдать)
{
  выполнить выдачу;
  флаг = УжеВыдали;
}
EugenioKP1983
166
EugenioKP1983 2016.08.16 09:12  
LRA:

Оба варианта эквивалентны и одинаково бессмысленны.  1. Если тело цикла должно выполняться 1 раз, то цикл то зачем? 2. Предполагаю, что условный оператор расположен в функции OnTick. Тогда выполнение будет происходить на каждый тик, пришедший в заданный промежуток времени.

Представьте, что разносчик пенсии действует по такой инструкции: В течение первой недели месяца (оператор IF), каждый раз, проходя мимо дома, заходить в квартиру НН. Проследить (оператор FOR), чтоб при каждом заходе в квартиру пенсия выдавалась лишь 1 раз.

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

if(другое время) флаг=Выдать;
if(нужное время и флаг == Выдать)
{
  выполнить выдачу;
  флаг = УжеВыдали;
}


Я понял. Нужна функция проверяющая очевидность пенсии. И если значение истинно то вносить изменения.
EugenioKP1983
166
EugenioKP1983 2016.08.16 15:26  

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

В общем что я делаю.

1. Получаю из внешних переменных значения раз в минуту.


Как видно что знчения четко передаются по завершению минуты.


Далее в другом скрипте я обрабатываю полученные данные

void OnTimer()
  {

//---------------------------------------------------------------------------------  
   Open1 =iOpen(Symbol(),0,1);
   Close1=iClose(Symbol(),0,1);
   High1 =iHigh(Symbol(),0,1);
   Low1  =iLow(Symbol(),0,1);
   
   
   
   one_BE=GlobalVariableGet(GV_Summa1);     
   zero_BE= GlobalVariableGet(GV_Summa0);
   one_CH = GlobalVariableGet(GV_Summa1);      
   zero_CH= GlobalVariableGet(GV_Summa0);
//---------------------------------------------------------------------------------  

   Rez_BE=one_BE-zero_BE;
   //Raznica=Rez_BE/Delitel; 

   Rez_Plus=one_CH+zero_CH;
   //Summa=Rez_Plus/Rez_BE;

//---------------------------------------
   Comment(Rez_BE," ",Rez_Plus);


и получаю сумму иразницу при вычислениях в две переменные. То что этот процес происходит точьно у меня нет сомнений так как уже много раз мониторил

Здесь наглядно видно.

Далее я хочу записать в течении часа параметры в переменные при условии если

Rez_BE

<=-1

if(TimeMinute(TimeCurrent())<=23*00*03 && TimeMinute(TimeCurrent())>=23*00*05 && Rez_BE<=-1 ) // ?????  00:01
        {

         H23_min1_summa   = Rez_Plus;
         H23_min1_raznica = Rez_BE;
        }
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
      if(TimeMinute(TimeCurrent())<=23*01*03 && TimeMinute(TimeCurrent())>=23*01*05 && Rez_BE<=-1 ) // ?????  00:02
        {
         H23_min2_summa   = Rez_Plus;
         H23_min2_raznica = Rez_BE;
        }


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

Суммы часа и Разницы я складываю

if(TimeMinute(TimeCurrent())<=23*00*03 && TimeMinute(TimeCurrent())>=23*00*05)

{

H23_summaChasa=H23_min1_summa+H23_min2_summa+H23_min3_summa+H23_min4_summa+H23_min5_summa+..... ;

H23_raznicaChasa=(H23_min1_raznica)+(H23_min2_raznica)+(H23_min3_raznica)+(H23_min4_raznica)+...;

Alert(H23_summaChasa,H23_raznicaChasa);

}

До 60 минуты Все переменные double и не повторяются.

Получить должен чтото типа

658 и -98

но получаю 0,0

что значит что в переменные значения не попадают. Хотя в течении часа ониесть.

-1,9 тоже что и -19 . Для индюка/ на 10


В чем моя ошибка

Mislaid
557
Mislaid 2016.08.16 22:06  
EugenioKP1983:
....


В чем моя ошибка



Из Ваших примеров похоже, что условие Res_BE <= -1 никогда не выполняется..

Вместо переменных типа H23_min1_summa заведите массивы H23_min_summa[60]. Тогда вычисления можно будет оформить циклом и в десятки раз сократить код.

Ну и разберитесь со странными проверками. Загадка, что здесь проверяется?

if(TimeMinute(TimeCurrent())<=23*00*03 && TimeMinute(TimeCurrent())>=23*00*05)

А условия типа

if(TimeMinute(TimeCurrent())<=23*01*03 && TimeMinute(TimeCurrent())>=23*01*05 && Rez_BE<=-1 ) // ?????  00:02

и дальше никогда не выполнятся, независимо от значения Res_BE.

EugenioKP1983
166
EugenioKP1983 2016.08.17 08:53  
if(TimeMinute(TimeCurrent())<=23*01*03 && TimeMinute(TimeCurrent())>=23*01*05 && Rez_BE<=-1 ) // ?????  00:02

здесь я проверяю следующее. Если текущее время больше

<=23*01*03

и текущее время меньше

>=23*01*05

те 2 сикунды для заполнения переменых и данное значение меньше или  равно -1

Rez_BE<=-1

Данных минусов в течении часа у меня несколько

вот последний -3


Притом эти -3 лежат целую минуту в переменной

Rez_BE

А значит. что условие должно в какойто момент обязательно выполнится

притом 2 секунд на это достаточьно с моей точьки зрения

Mislaid
557
Mislaid 2016.08.19 19:08  
EugenioKP1983:
...

притом 2 секунд на это достаточьно с моей точьки зрения


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