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

 

Здравствуйте, господа программисты! 

Есть советник работающий на основе индикатора на трех скользящих средних: 

double PriceHigh[], PriceLow[], PriceMedium[],

закрытие позиции происходит на средней линии PriceMedium, а хотелось бы чтобы сделка закрывалась на противоположной линии например: PriceHigh или PriceLow:

if(OpenSell>0&&Bid<=PriceMedium[0])

      {

         CloseAll(POSITION_TYPE_SELL);

      }

   

   if(OpenBuy>0&&Bid>=PriceMedium[0])

      {

         CloseAll(POSITION_TYPE_BUY);

      }

в блоке кода отвечающем за закрытие позиций меняю PriceMedium например на PriceHigh затем компилирую и все равно закрытие происходит по PriceMedium.

Подскажите пожалуйста что я делаю не так?

 
if(OpenSell>0&&Ask<=PriceLow[1])

Поменяйте, где Sell цену на Ask, потому что продажа закрывается по Ask.

И попробуйте закрывать по расчётам закрытой свечи PriceLow [1], возможно в момент открытия новой, у Вас все три цены одинаковы, не знаю как там по расчётам в коде. Возможно и нет, но попробуйте.

 

При создании скриншота в мт4 - проблем нет

В мт5 проблема - нет графического объекта, график пустой

--

Чего не хватает?

 
Vitaly Muzichenko #:

При создании скриншота в мт4 - проблем нет

В мт5 проблема - нет графического объекта, график пустой

--

Чего не хватает?

ChartRedraw и небольшой паузы между созданием объекта и скриншотом

 
Aleksei Stepanenko #:

Поменяйте, где Sell цену на Ask, потому что продажа закрывается по Ask.

И попробуйте закрывать по расчётам закрытой свечи PriceLow [1], возможно в момент открытия новой, у Вас все три цены одинаковы, не знаю как там по расчётам в коде. Возможно и нет, но попробуйте.

Спасибо большое, но к сожалению это не помогло! 
 
Maxim Kuznetsov # :

ChartRedraw и небольшой паузы между созданием объекта и скриншотом

не помогло

 
Vitaly Muzichenko #:

не помогло

пауза не в смысле Sleep() а фоткать на следующем эвенте.

то есть нарисовал что там тебе надо, дёрнул ChartRedraw(), выставил таймер на пару секунд и вышел из своего OnXXX..и уже в таймере снимаешь скриншот

просто в 5-ке ChartRedraw реально гарантировано отрисовывает только между OnXXXX. 

 
Maxim Kuznetsov #:

пауза не в смысле Sleep() а фоткать на следующем эвенте.

то есть нарисовал что там тебе надо, дёрнул ChartRedraw(), выставил таймер на пару секунд и вышел из своего OnXXX..и уже в таймере снимаешь скриншот

просто в 5-ке ChartRedraw реально гарантировано отрисовывает только между OnXXXX. 

Спасибо!

 
Oruzheinik #:
Спасибо большое, но к сожалению это не помогло! 
printf(Ask+" : "+Bid+" : "+DoubleToString(PriceHigh[0],8)+" : "+DoubleToString(PriceLow[0],8)+" : "+DoubleToString(PriceMedium[0],8));

Тогда распечатайте и посравнивайте

 

Пытаюсь получить события из экономического календаря. Взял код из справки MT5.  В ответ получаю нули. Что не так в коде? Можете поделиться примером простейшего кода, дающего данные из календаря?

   string EU_code="EU"; // код страны для Европейского союза по стандарту ISO 3166-1 Alpha-2  
   MqlCalendarValue values[]; // получим все значения событий по Европейскому союзу 
   
   //--- зададим границы диапазона, из которого берем события 
   datetime date_from = D'01.01.2023';  // берем все события с 2023 года    
   datetime date_to = 0;                // 0 означает все известные события, даже те, что не наступили еще  

   Print("Начало = ",date_from);
   //--- запросим историю события по Европейскому союзу с 2023 года 
   if(CalendarValueHistory(values,date_from,date_to,EU_code))  { 
      PrintFormat("Получены значения событий по country_code=%s: %d", EU_code,ArraySize(values)); 
      ArrayResize(values,10); // уменьшим размер массива для вывода в Журнал 
      ArrayPrint(values); // выведем значения событий в Журнал 
      } 
   else { 
      PrintFormat("Ошибка! Не удалось получить события по стране country_code=%s",EU_code); 
      PrintFormat("Код ошибки: %d",GetLastError()); 
      } 
Файлы: