Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 489

 

Здравствуйте. Для МТ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%");

 
Georgy Sled:

Здравствуйте. Для МТ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

   ObjectDelete("FiboLevels"); //------Новый уровень
   WindowRedraw();

   if (iOpen(Symbol(),60,1)>iClose(Symbol(),60,1))
   {
      ObjectCreate(0,"FiboLevels",OBJ_FIBO,0,Time[min],Low[min],Time[timehour1],High[max]);
      ObjectSet("FiboLevels",OBJPROP_COLOR,clrGreen);
   }
   else
   {
      ObjectCreate(0,"FiboLevels",OBJ_FIBO,0,Time[max],Low[max],Time[timehour1],High[min]);
      ObjectSet("FiboLevels",OBJPROP_COLOR,clrRed);
   }

можно еще короче ...  посмотрите мой файл

Файлы:
Proba.mq4  3 kb
 
Artyom Trishkin:

Пожалуйста, правильно вставляйте код.


Ещё нагляднее:


благодарю за пояснения как вставить правильно код))) помогло) Проверьте пожалуйста и помогите плиз правильно код написать, буду премного благодарен! (сегодня у меня телевизор закипел Samsung научился отемонтил, но с этим кодом ну не могу справиться (((((
 
void fOrderOpen() {...
    if( iTime(Symbol(),PERIOD_M1,0)) {
     if((fMarketOrders(OP_BUY))) { ....{
int irvbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,NULL,12345,0,0); 

Ребята, почему у меня открываются ордера с каждым тиком? Подскажите как сконцентрироваться на баре? 

 
Rustam Bikbulatov:

Ребята, почему у меня открываются ордера с каждым тиком? Подскажите как сконцентрироваться на баре? 

По условиям описанным в АТС, дает добро на открытие вот и открывает.
Решений в данном случае довольно много. Все зависит от того что вам более приемлемо.
Можно сказать чтоб следующий ордер открывал только если цена от последнего ушла на N-е количество пунктов. Можно сказать чтоб открывал на 1 баре не более одного ордера. И т.д., и т.п..
Пропишите нужные вам условия и примените их в проверке.

 
Konstantin Nikitin:

По условиям описанным в АТС, дает добро на открытие вот и открывает.
Решений в данном случае довольно много. Все зависит от того что вам более приемлемо.
Можно сказать чтоб следующий ордер открывал только если цена от последнего ушла на N-е количество пунктов. Можно сказать чтоб открывал на 1 баре не более одного ордера. И т.д., и т.п..
Пропишите нужные вам условия и примените их в проверке.

За место этого    if( iTime(Symbol(),PERIOD_M1,0)) {  что написать чтобы открывался ордер на одном баре?

 
Rustam Bikbulatov:  Ребята, почему у меня открываются ордера с каждым тиком? Подскажите как сконцентрироваться на баре? 

вопрос задавался многократно и соответственно много раз отвечали. Используя поиск, например, здесь

 
STARIJ:

вопрос задавался многократно и соответственно много раз отвечали. Используя поиск, например, здесь

Благодарю!

 

Добрый день!


У меня есть советник, который делает определенные вычисления. Он использует разные мат операции, массивы, циклы. Результат записывает в файл. После выполнения всех действий, он должен все начать с начала. Но он делает один раз все вычисления, а на второй раз начинает и зависает, не происходит никаких действий. Подскажите может перед началом нового вычисления нужно обнулять переменные, очищать массивы или еще что-то? 

 
Kot:

Добрый день!


У меня есть советник, который делает определенные вычисления. Он использует разные мат операции, массивы, циклы. Результат записывает в файл. После выполнения всех действий, он должен все начать с начала. Но он делает один раз все вычисления, а на второй раз начинает и зависает, не происходит никаких действий. Подскажите может перед началом нового вычисления нужно обнулять переменные, очищать массивы или еще что-то? 

Здесь точно помогут. А в этой теме нет таких специалистов.
Причина обращения: