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

 
Доброго времени суток всем :)

Подскажите или лучше покажите ,как запрограммировать,чтобы советник ,взвисимости от задаваемого времени изменял вводимые переменные.
Мои попытки не увенчались успехом(я лишь учусь программировать)
Код советника прилагаю.
 Зараннее большое спасибо всем откликнувшимся :)
Файлы:
bard.mq4  3 kb
 
//---------эти функции не работают---------------------
   if(TimeHour(TimeCurrent())==8) Distan= Distan*2; // Distan удваивается каждый тик с 8 до 9 утра
    if(TimeHour(TimeCurrent())==13) Distan= Distan*3; // Distan утраивается каждый тик с 1 до 2 дня
      if(TimeHour(TimeCurrent())==17) Distan= Distan; // Distan не изменяется
//-----------------------------------------------------
Они работают. Скорее всего, Вы просто ожидаете результат не тот, что запрограммировали. В Вашем коде глобальная переменная Distan растет экспоненциально в течение часа. Глобальные переменные сохраняют свое значение между вызовами start().
Вам нужно завести локальную переменную, в которой надо сохранять удвоенное или утроенное значение Distan, и с ней работать в start().
Кстати, TimeHour(TimeCurrent()) ничем не отличается от Hour().
 
Irtron:
//---------эти функции не работают---------------------
   if(TimeHour(TimeCurrent())==8) Distan= Distan*2; // Distan удваивается каждый тик с 8 до 9 утра
    if(TimeHour(TimeCurrent())==13) Distan= Distan*3; // Distan утраивается каждый тик с 1 до 2 дня
      if(TimeHour(TimeCurrent())==17) Distan= Distan; // Distan не изменяется
//-----------------------------------------------------
Они работают. Скорее всего, Вы просто ожидаете результат не тот, что запрограммировали. В Вашем коде глобальная переменная Distan растет экспоненциально в течение часа. Глобальные переменные сохраняют свое значение между вызовами start().
Вам нужно завести локальную переменную, в которой надо сохранять удвоенное или утроенное значение Distan, и с ней работать в start().
Кстати, TimeHour(TimeCurrent()) ничем не отличается от Hour().

Большое спасибо Irtron я сейчас попробую изменить код,но в действительности мне нужно было чтобы значение менялось с 8 до 13,с 13 до17,с 17 до 8. Подскажите ,позжалуйста ,как этого добиться :)
 
voolvo:

Большое спасибо Irtron я сейчас попробую изменить код,но в действительности мне нужно было чтобы значение менялось с 8 до 13,с 13 до17,с 17 до 8. Подскажите ,позжалуйста ,как этого добиться :)

int start()
{
    double distance;
    
    if (Hour() >= 17 || Hour() < 8) distance = Distan;
    else if (Hour() >= 13) distance = Distan * 3;
    else if (Hour() >= 8) distance = Distan * 2;
    
    distance *= Point;
 
    int OpenOrders=OrdersTotal();
    if (OpenOrders<1)
    {
        Op_bar = iOpen(NULL, 0, 0); // здесь лучше использовать Open[0]
        if ((Ask - Op_bar) > distance) // спред не учтен! Должно быть (Bid - Op_bar), наверное.
            OrderSend(Symbol(), OP_SELL, 1, Bid, 3, 
                      Bid + StopLoss * Point, Bid - TakeProfit * Point, // Стопы должны ставиться от текущей цены закрытия, т.е. от Ask
                      0, 0, 0, Red);
        else if ((Op_bar - Bid) > distance)
            OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 
                      Ask - StopLoss * Point, Ask + TakeProfit * Point, // Стопы от Bid!
                      0, 0, 0, Blue);
    }
 
    return(0);
}
 
voolvo писал (а):
Irtron:
//---------эти функции не работают---------------------
   if(TimeHour(TimeCurrent())==8) Distan= Distan*2; // Distan удваивается каждый тик с 8 до 9 утра
    if(TimeHour(TimeCurrent())==13) Distan= Distan*3; // Distan утраивается каждый тик с 1 до 2 дня
      if(TimeHour(TimeCurrent())==17) Distan= Distan; // Distan не изменяется
//-----------------------------------------------------
Они работают. Скорее всего, Вы просто ожидаете результат не тот, что запрограммировали. В Вашем коде глобальная переменная Distan растет экспоненциально в течение часа. Глобальные переменные сохраняют свое значение между вызовами start().
Вам нужно завести локальную переменную, в которой надо сохранять удвоенное или утроенное значение Distan, и с ней работать в start().
Кстати, TimeHour(TimeCurrent()) ничем не отличается от Hour().

Большое спасибо Irtron я сейчас попробую изменить код,но в действительности мне нужно было чтобы значение менялось с 8 до 13,с 13 до17,с 17 до 8. Подскажите ,позжалуйста ,как этого добиться :)

Ещё раз спасибо.Всё оказалось так просто.
Будет ли так правильно, если я изменю ТП ,по тому же принципу. ..

if (Hour() >= 17 || Hour() < 8) distance = Distan;tp=TakeProfit;
else if (Hour() >= 13) distance = Distan * 3;tp=TakeProfit*3;
else if (Hour() >= 8) distance = Distan * 2;tp=TakeProfit*2;
 
voolvo:

Ещё раз спасибо.Всё оказалось так просто.
Будет ли так правильно, если я изменю ТП ,по тому же принципу. ..



Нет, так работать не будет. Выражения надо объединять в блоки при помощи {}:
int start()
{
    double distance, tp;
    
    if (Hour() >= 17 || Hour() < 8) 
    {
        distance = Distan;
        tp = TakeProfit;
    }
    else if (Hour() >= 13)
    {
        distance = Distan * 3;
        tp = TakeProfit * 3;
    }
    else if (Hour() >= 8)
    {
        distance = Distan * 2;
        tp = TakeProfit * 2;
    }    
    
    distance *= Point;
    tp *= Point;
 
...
}
Вообще, с такими вопросами лучше обращаться не к форуму, а к учебникам по Си.
 
Irtron:
voolvo писал (а):

Ещё раз спасибо.Всё оказалось так просто.
Будет ли так правильно, если я изменю ТП ,по тому же принципу. ..



Нет, так работать не будет. Выражения надо объединять в блоки при помощи {}:
int start()
{
    double distance, tp;
    
    if (Hour() >= 17 || Hour() < 8) 
    {
        distance = Distan;
        tp = TakeProfit;
    }
    else if (Hour() >= 13)
    {
        distance = Distan * 3;
        tp = TakeProfit * 3;
    }
    else if (Hour() >= 8)
    {
        distance = Distan * 2;
        tp = TakeProfit * 2;
    }    
    
    distance *= Point;
    tp *= Point;
 
...
}
Вообще, с такими вопросами лучше обращаться не к форуму, а к учебникам по Си.

Только что проверил ,всё работает.На счёт скобок,я это знал :) Наверное сегодня запарился в изучении mql4.
Вы правы, нужно для начала открыть книгу.С++ сильно отличается от mql4 ?
Причина обращения: