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

 
Vasiliy Sokolov #:

Это не у Вас все встало на свои места, просто вы подстроились под эту странную реализацию. Логики там нет. Зато ошибка на ошибке. Прогонка на всех символах - это тоже оптимизация, но фреймы в этом режиме не работают. Это нарушение гомогенности, которое к тому же не соответствует документации. В ней четко сказано: вызов фреймов в функции OnTester. И не слово не сказано, что вызов фрейма в этой функции гарантирует ожидаемый результат. Оказывается, он зависит еще от режима запуска.

У MQ всегда так. Проще сделать свой обход проблемы, чем гадать, сочтут нужным поправить или нет.

 
Здравствуйте, подскажите пожалуйста, как растянуть внизу терминала MT4 ограничение названия профиля, задан авторазмер и не вмещается название профиля полностью.
 
Здравствуйте! Подскажите пожалуйста в чем моя ошибка?
Строю трендовую линию под углом в 45 градусов. 
Необходимо получить вторую точку цены линии, для этого воспользовался функцией: 
double EquationDirect(const int left_bar,const double left_price,const int right_bar,const double right_price,const int bar_to_search) 
  {
   return(right_bar==left_bar ? left_price : (right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
  }
Весь код выглядит так: 
void ScaleFix(datetime tme1,double prc1,datetime tme2,double prc2){
   
   TrendByAngleCreate("Trend_Angle",tme1,prc1,tme2,0,45,clrRed,STYLE_SOLID);
   datetime time_trend = (datetime)ObjectGetInteger(0,"Trend_Angle",OBJPROP_TIME,1);
   Print(time_trend);   
   Print(DoubleToString(EquationDirect(tme1,prc1,tme2,prc2, time_trend),_Digits));
   //Print(DoubleToString(ObjectGetValueByTime(0,"Trend_Angle",tme2,OBJ_TRENDBYANGLE),_Digits));
   ChartRedraw(0);
      
} 
time_trend - возвращает необходимое мне время. Но когда я его преобразовываю через функцию EquationDirect, то возвращает он мне совсем не ту цену. В чем может быть проблема?


Функция ObjectGetValueByTime - возвращает все тоже самое, что и EquationDirect
 
Vladimir #:
Здравствуйте! Подскажите пожалуйста в чем моя ошибка?
Строю трендовую линию под углом в 45 градусов. 
Необходимо получить вторую точку цены линии, для этого воспользовался функцией: 
Весь код выглядит так: 
time_trend - возвращает необходимое мне время. Но когда я его преобразовываю через функцию EquationDirect, то возвращает он мне совсем не ту цену. В чем может быть проблема?


Функция ObjectGetValueByTime - возвращает все тоже самое, что и EquationDirect

Вы строите линию по одной точке и углу. А потом у вас откуда то волшебным образом появляется вторая точка. 

Вопрос 1, откуда она взялась?

Вопрос 2, почему вы решили, что эта вторая точка лежит на вашей прямо?

 
Aleksandr Slavskii #:

Вы строите линию по одной точке и углу. А потом у вас откуда то волшебным образом появляется вторая точка. 

Вопрос 1, откуда она взялась?

Вопрос 2, почему вы решили, что эта вторая точка лежит на вашей прямо?

Вторая точка - это точка конца трендовой линии. Т.к трендовая линяя - отрезок, который имеет и начало, и конец

 
Vladimir #:

Вторая точка - это точка конца трендовой линии. Т.к трендовая линяя - отрезок, который имеет и начало, и конец

А определить цену обычными способами не подходит по каким то причинам?

Типа так.

   double price1 = ObjectGetDouble(0, "Trend_Angle", OBJPROP_PRICE, 0);
   double price2 = ObjectGetDouble(0, "Trend_Angle", OBJPROP_PRICE, 1);
 
Aleksandr Slavskii #:

А определить цену обычными способами не подходит по каким то причинам?

Типа так.

Не выходит. Price 2 возвращает 0.0

 
Print(DoubleToString(EquationDirect(tme1,prc1,tme2,prc2, time_trend),_Digits));

Здесь у вас данные синей линии.

 
Vladimir #:

Не выходит. Price 2 возвращает 0.0

Попробуйте ChartRedraw перенести выше.

void ScaleFix(datetime tme1,double prc1,datetime tme2,double prc2){
   
   TrendByAngleCreate("Trend_Angle",tme1,prc1,tme2,0,45,clrRed,STYLE_SOLID);
   ChartRedraw(0);
   double price2 = ObjectGetDouble(0, "Trend_Angle", OBJPROP_PRICE, 1);
   datetime time_trend = (datetime)ObjectGetInteger(0,"Trend_Angle",OBJPROP_TIME,1);
   Print(time_trend);   
   Print(DoubleToString(price2,_Digits));
      
} 
 
Putnik #:

Попробуйте ChartRedraw перенести выше.

Спасибо. Помогло!