Как запрограммировать,чтобы советник ,взвисимости от задаваемого времени изменял вводимые переменные
//---------эти функции не работают--------------------- 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:
Вам нужно завести локальную переменную, в которой надо сохранять удвоенное или утроенное значение Distan, и с ней работать в start().
Кстати, TimeHour(TimeCurrent()) ничем не отличается от Hour().
//---------эти функции не работают--------------------- 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. Подскажите ,позжалуйста ,как этого добиться :)
Большое спасибо 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 я сейчас попробую изменить код,но в действительности мне нужно было чтобы значение менялось с 8 до 13,с 13 до17,с 17 до 8. Подскажите ,позжалуйста ,как этого добиться :)
Irtron:
Вам нужно завести локальную переменную, в которой надо сохранять удвоенное или утроенное значение Distan, и с ней работать в start().
Кстати, TimeHour(TimeCurrent()) ничем не отличается от Hour().
//---------эти функции не работают--------------------- 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 ?
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите или лучше покажите ,как запрограммировать,чтобы советник ,взвисимости от задаваемого времени изменял вводимые переменные.
Мои попытки не увенчались успехом(я лишь учусь программировать)
Код советника прилагаю.
Зараннее большое спасибо всем откликнувшимся :)