Пожелания для МТ5 - страница 58

 
Urain:

Уже не актуально, разве что для удобства.

int scale =(int)ChartGetInteger(chart_id,CHART_SCALE);
int pointer_per_bar=pow(2,scale);// количество пикселей на бар
// остальное можно высчитать из первого видимого бара, и ширины графика в пикселях.

О! Спасибо, Николай! А можешь доделать до конца? Ну т.е. до реализации 4 конкретных функций:

int  ChartGetX(datetime T);

int  ChartGetY(double P);

datetime ChartGetTime(int X);

double ChartGetPrice(int Y);

Похоже у тебя пасьянс сложился уже, а мне долго возиться придётся. Буду очень признателен если сделаешь.

 

Renat:

Торговля нескольких экспертов на одном символе - это бред.

Это не больший бред, чем возможность размещения нескольких индикаторов на одном графике.

Сама существующая в MT4 возможность создавать одним кликом мыши любые по сложности структуры из экспертов, создавать любые портфели из них - грандиозна.

Чтобы эта возможность была в пятерке, сделайте торговый класс с поддержкой виртуального разделения торгового счета на субсчета

или создайте в терминале возможность добавления своего виртуального символа на основе уже существующих.

 

возможно я отстал от новых возможностей МТ5, но хотелось бы иметь возможность выводить графики по координатам X и Y, а не по барам и цене, если такая возможность уже есть подскажите плз, если нет такой возможности, то думаю ее не сложно реализовать с помощью графического объекта OBJ_CHART с неким символом/инструментом XY_Symbol

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
MetaDriver:

О! Спасибо, Николай! А можешь доделать до конца? Ну т.е. до реализации 4 конкретных функций:

Похоже у тебя пасьянс сложился уже, а мне долго возиться придётся. Буду очень признателен если сделаешь.

Где-то вот так. Если нужен другой угол привязки, это можно пересчитать из пиксельных размеров окна.

//+------------------------------------------------------------------+
//| Преобразование координат. Верхний левый угол привязки            |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| time to X                                                        |
//+------------------------------------------------------------------+
int WindowGetX(long chart_id,datetime T)
  {
   datetime temp[]; int bar=(int)ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR);
   CopyTime(ChartSymbol(chart_id),ChartPeriod(chart_id),bar,1,temp);
   return((int)NormalizeDouble(
          ((T-temp[0])/(double)PeriodSeconds(ChartPeriod(chart_id)))*
          pow(2,ChartGetInteger(chart_id,CHART_SCALE)),0));
  };
//+------------------------------------------------------------------+
//| price to Y                                                       |
//+------------------------------------------------------------------+
int WindowGetY(long chart_id,double P)
  {
   return((int)((ChartGetDouble(chart_id,CHART_PRICE_MAX)-P)*
          (ChartGetInteger(chart_id,CHART_HEIGHT_IN_PIXELS)/
          (ChartGetDouble(chart_id,CHART_PRICE_MAX)-ChartGetDouble(chart_id,CHART_PRICE_MIN)))));
  };
//+------------------------------------------------------------------+
//| X to time                                                        |
//+------------------------------------------------------------------+
datetime WindowGetTime(long chart_id,int X)
  {
   datetime temp[]; int bar=(int)ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR);
   CopyTime(ChartSymbol(chart_id),ChartPeriod(chart_id),bar,1,temp);
   return((datetime)(temp[0]+
          (X/(double)pow(2,ChartGetInteger(chart_id,CHART_SCALE)))*
          PeriodSeconds(ChartPeriod(chart_id))));
  };
//+------------------------------------------------------------------+
//| Y to price                                                       |
//+------------------------------------------------------------------+
double WindowGetPrice(long chart_id,int Y)
  {
   return(ChartGetDouble(chart_id,CHART_PRICE_MAX)-Y/
          (ChartGetInteger(chart_id,CHART_HEIGHT_IN_PIXELS)/
          ChartGetDouble(chart_id,CHART_PRICE_MAX)-ChartGetDouble(chart_id,CHART_PRICE_MIN)));
  };

Пример вызова

void OnStart()
  {
   datetime T=StringToTime("2011.02.25 18:12");
   double P=1.37831;
   Object(ChartID(),T,P);
  }
//+------------------------------------------------------------------+
void Object(long chart_id,datetime T,double P)
  {
   int x=WindowGetX(chart_id,T);
   int y=WindowGetY(chart_id,P);
   string name="Button";
   if(ObjectCreate(chart_id,name,OBJ_BUTTON,0,0,0,0,0))
     {//---
      ObjectSetInteger(chart_id,name,OBJPROP_BACK,1);
      ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(chart_id,name,OBJPROP_STATE,false);
      //--- привяжем кнопку к правому верхнему углу графика
      ObjectSetInteger(chart_id,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      //--- теперь настроим свойства объекта      
      ObjectSetInteger(chart_id,name,OBJPROP_XSIZE,40);
      ObjectSetInteger(chart_id,name,OBJPROP_YSIZE,40);
      ObjectSetInteger(chart_id,name,OBJPROP_BGCOLOR,Silver);
      ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,y);
     }
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки - Документация по MQL5
 
Хотя повторюсь, лучше бы эти функции иметь как стандартные. Тогда о них будут знать все пользователи языка, а не только те кто читает эту ветку.
 
Исправил пост с кодом, описал в виде отдельных функций (без класса) и поменял угол привязки.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки - Документация по MQL5
 
Urain:
Хотя повторюсь, лучше бы эти функции иметь как стандартные. Тогда о них будут знать все пользователи языка, а не только те кто читает эту ветку.

Спасибо!
 
MetaDriver:
Спасибо!
Поставь проверки, а то иногда нет данных и получается деление на ноль.
 

Хотелось бы видеть стандартную реализацию функции поиска номера бара по заданному времени.

Сейчас я это реализовую через CArrayLong. Но при этом приходится загружать кучу данных которые уже имеются в самом чарте. То есть по сути дублировать память. Думаю в стандартном виде работало бы всё намного быстрее.

 
Urain:
Поставь проверки, а то иногда нет данных и получается деление на ноль.
ОК.
Причина обращения: