Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 489
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте. Для МТ4 хочу написать советник, одна из его задач рисовать линии Fibo, на М1, за один час. То есть при наступлении 11.00, он должен нарисовать линии в интервале с 10.00 до 10.59, ориентируясь на максимумы и минимумы. Перепробовал разные способы, выложил то, что было последним. Скорее всего можно укоротить код для прорисовки уровней. Проблема, что он не рисует линии в заданном районе.
int timemin=TimeMinute(Time[59]==0);
int timehour=TimeHour(Time[1] && TimeMinute(Time[0]));
int timemin1=TimeMinute(Time[0]==0);
int timehour1=TimeHour(Time[1] && TimeMinute(Time[59]));
int max=iHighest(Symbol(),1,MODE_HIGH,60,timehour);
int min=iLowest(Symbol(),1,MODE_LOW,60,timehour);
double barup=(iOpen(Symbol(),60,1)>iClose(Symbol(),60,1));
double bardn=(iOpen(Symbol(),60,1)<iClose(Symbol(),60,1));
ObjectDelete("FiboLevels"); //------Новый уровень
if (barup)
{
WindowRedraw();
ObjectCreate(0,"FiboLevels",OBJ_FIBO,0,Time[min],Low[min],Time[timehour1],High[max]);
ObjectSet("FiboLevels",OBJPROP_COLOR,clrGreen);
}
if (bardn)
{
WindowRedraw();
ObjectCreate(0,"FiboLevels",OBJ_FIBO,0,Time[max],Low[max],Time[timehour1],High[min]);
ObjectSet("FiboLevels",OBJPROP_COLOR,clrRed);
}
double f1=ObjectGet("FiboLevels",OBJPROP_PRICE1); //Выбирает первую цену
double f2=ObjectGet("FiboLevels",OBJPROP_PRICE2); //Выбирает вторую цену и рисует график
double Diff=f2-f1;
string a11=DoubleToStr(f2-Diff*0.0,Digits);
string a12=DoubleToStr(f2-Diff*0.236,Digits);
string a13=DoubleToStr(f2-Diff*0.382,Digits);
string a14=DoubleToStr(f2-Diff*0.50,Digits);
string a15=DoubleToStr(f2-Diff*0.618,Digits);
string a16=DoubleToStr(f2-Diff*1.0,Digits);
bool a1=ObjectSet("FiboLevels",OBJPROP_FIBOLEVELS,6);
bool a2=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+0,0.0);
bool a3=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+1,0.236);
bool a4=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+2,0.382);
bool a5=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+3,0.50);
bool a6=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+4,0.618);
bool a7=ObjectSet("FiboLevels",OBJPROP_FIRSTLEVEL+5,1.0);
bool a111=ObjectSetFiboDescription("FiboLevels",0,"0.0%");
bool a122=ObjectSetFiboDescription("FiboLevels",1,"23.6%");
bool a133=ObjectSetFiboDescription("FiboLevels",2,"38.2%");
bool a144=ObjectSetFiboDescription("FiboLevels",3,"50.0%");
bool a155=ObjectSetFiboDescription("FiboLevels",4,"61.8%");
bool a166=ObjectSetFiboDescription("FiboLevels",5,"100.0%");
Здравствуйте. Для МТ4 хочу написать советник, одна из его задач рисовать линии Fibo, на М1, за один час. То есть при наступлении 11.00, он должен нарисовать линии в интервале с 10.00 до 10.59, ориентируясь на максимумы и минимумы. Перепробовал разные способы, выложил то, что было последним. Скорее всего можно укоротить код для прорисовки уровней. Проблема, что он не рисует линии в заданном районе.
double barup=(iOpen(Symbol(),60,1)>iClose(Symbol(),60,1));double bardn=(iOpen(Symbol(),60,1)<iClose(Symbol(),60,1));
ObjectDelete("FiboLevels"); //------Новый уровень
if (barup)
{
WindowRedraw();
ObjectCreate(0,"FiboLevels",OBJ_FIBO,0,Time[min],Low[min],Time[timehour1],High[max]);
ObjectSet("FiboLevels",OBJPROP_COLOR,clrGreen);
}
if (bardn)
{
WindowRedraw();
ObjectCreate(0,"FiboLevels",OBJ_FIBO,0,Time[max],Low[max],Time[timehour1],High[min]);
ObjectSet("FiboLevels",OBJPROP_COLOR,clrRed);
}
вот так короче? bool barup=... WindowRedraw(); все равно выполнится - вынес из if
можно еще короче ... посмотрите мой файл
Пожалуйста, правильно вставляйте код.
Ещё нагляднее:
Ребята, почему у меня открываются ордера с каждым тиком? Подскажите как сконцентрироваться на баре?
Ребята, почему у меня открываются ордера с каждым тиком? Подскажите как сконцентрироваться на баре?
По условиям описанным в АТС, дает добро на открытие вот и открывает.
Решений в данном случае довольно много. Все зависит от того что вам более приемлемо.
Можно сказать чтоб следующий ордер открывал только если цена от последнего ушла на N-е количество пунктов. Можно сказать чтоб открывал на 1 баре не более одного ордера. И т.д., и т.п..
Пропишите нужные вам условия и примените их в проверке.
По условиям описанным в АТС, дает добро на открытие вот и открывает.
Решений в данном случае довольно много. Все зависит от того что вам более приемлемо.
Можно сказать чтоб следующий ордер открывал только если цена от последнего ушла на N-е количество пунктов. Можно сказать чтоб открывал на 1 баре не более одного ордера. И т.д., и т.п..
Пропишите нужные вам условия и примените их в проверке.
За место этого if( iTime(Symbol(),PERIOD_M1,0)) { что написать чтобы открывался ордер на одном баре?
вопрос задавался многократно и соответственно много раз отвечали. Используя поиск, например, здесь
вопрос задавался многократно и соответственно много раз отвечали. Используя поиск, например, здесь
Благодарю!
Добрый день!
У меня есть советник, который делает определенные вычисления. Он использует разные мат операции, массивы, циклы. Результат записывает в файл. После выполнения всех действий, он должен все начать с начала. Но он делает один раз все вычисления, а на второй раз начинает и зависает, не происходит никаких действий. Подскажите может перед началом нового вычисления нужно обнулять переменные, очищать массивы или еще что-то?
Добрый день!
У меня есть советник, который делает определенные вычисления. Он использует разные мат операции, массивы, циклы. Результат записывает в файл. После выполнения всех действий, он должен все начать с начала. Но он делает один раз все вычисления, а на второй раз начинает и зависает, не происходит никаких действий. Подскажите может перед началом нового вычисления нужно обнулять переменные, очищать массивы или еще что-то?