Вопросы от "чайника" - страница 148

 
Yedelkin:
Ну посмотрите свой код сами. В нынешнем виде условие if(timeOntrade.hour==4 || timeOntrade.hour==15 || timeOntrade.hour==16) вообще бесполезно. Потому что какой бы результат оно не возватило, Ваша функция bool timeOntrade() всегда вернёт true.
Звучит логично. Вот я и интересуюсь. Мне кажется ненужного-лишнего написал, а нужное может упустил. 
 
Interesting:

alph, Yedelkin  вот про что толкует.

Эти варианты функции по нашему разумению идентичны

 

Теперь вижу.
 
alph:
Звучит логично. Вот я и интересуюсь. Мне кажется ненужного-лишнего написал, а нужное может упустил. 


 Еще один момент, для меня пока не ясный

   timeOntrade.hour= 0;
   timeOntrade.min = 0;
   timeOntrade.sec = 1;
   if(timeOntrade.hour==4 || timeOntrade.hour==15 || timeOntrade.hour==16) return(true);

Т.е. если я все правильно понял сначала присваиваем часам 0, а потом сравниваем их.  

А логика где?
 
Interesting:


 Еще один момент, для меня пока не ясный

Т.е. если я все правильно понял сначала присваиваем часам 0, а потом сравниваем их.  

А логика где?
Я ещё не убирал строчку с true, но мне кажется если её убрать,уже  в ontik сравнение именно с часами как величиной конкретной или параметром не будет.
 
alph:
Я ещё не убирал строчку с true, но мне кажется если её убрать,уже  в ontik сравнение именно с часами как величиной конкретной или параметром не будет.

 На текущий момент эти варианты на мой взгляд идентичны

bool timeOntrade(int TradeHour)
   {
   MqlDateTime timeOntrade;
   TimeTradeServer(timeOntrade);
   if(timeOntrade.hour!=TradeHour) return(false);
   timeOntrade.hour= 0;
   timeOntrade.min = 0;
   timeOntrade.sec = 1;
   if(timeOntrade.hour==4 || timeOntrade.hour==15 || timeOntrade.hour==16) return(true);
   return(true);
   }

bool timeOntrade(int TradeHour)
   {
   MqlDateTime timeOntrade;
   TimeTradeServer(timeOntrade);
   if(timeOntrade.hour!=TradeHour) return(false);
   return(true);
   }

Вообще не пойму зачем присваивать значения нужно было?

Т.е. насколько я понимаю наиболее вреный вариант такой

bool timeOntrade(int TradeHour)
   {
   MqlDateTime timetrade;
   TimeTradeServer(timetrade);
   if(timetrade.hour!=TradeHour) return(false);
   return(true);
   }
При этом если текущее время сервера (речь только о часе) не равно заданному, то возвращается false, в противном случае возращается true.
 
Interesting:

На текущий момент эти варианты идентичны

Вообще не пойму зачем присваивать значения нужно было?

Чтобы прописать вот это:

void OnTick()

  {...

//-----------------------------------------------------------------------------------------+   

//Основание для перехода к Опен   

   MqlRates rt[1];

   if(CopyRates(Symbol(),MyTframe,0,1,rt)<0) return;

   if(rt[0].tick_volume>1) return;

   if(!PositionSelect(_Symbol)                            && (timeOntrade(4) || ((timeOntrade(15) || timeOntrade(16))&& timeOntrade2(0)))) Open();// переход к открытию позиции

 timeOntrade.min = 0;

Вот это точно ненужно в данном контексте 


   timeOntrade.min = 0;
   timeOntrade.sec = 1;
 

alph:

Чтобы прописать вот это:

void OnTick() 

Попробуйте этот вариант. если не он значит я совсем не понимаю что вы хотите получить...

bool timeOntrade(int TradeHour)
   {
   MqlDateTime timetrade;
   TimeTradeServer(timetrade);
   if(timetrade.hour!=TradeHour) return(false);
   return(true);
   }
 
Interesting:

Попробуйте этот вариант. если не он значит я совсем не понимаю что вы хотите получить...

 

Да-да, а в: 

 

 bool timeOntrade2(int TradeMin)  
   {
   MqlDateTime timetrade2;
   TimeTradeServer(timetrade);
   if(timetrade.min!=TradeMin) return(false);
   return(true);
   }
 
alph:

Да-да, а в: 

 Тогда уже так (для верности). Но, в принципе, Вы меня правильно поняли

 bool timeOntrade2(int TradeMin)  
   {
   MqlDateTime timetrade;
   TimeTradeServer(timetrade);
   if(timetrade.min!=TradeMin) return(false);
   return(true);
   }
 
Interesting:

 Тогда уже так (для верности). Но, в принципе, Вы меня правильно поняли

 

Спасибо! А в остальном код правильный?
Причина обращения: