Deseos para MT5 - página 58

 
Urain:

Ya no es relevante, salvo por conveniencia.

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

¡О! ¡Gracias, Nikolai! ¿Puedes terminarlo? Me refiero a la implementación de 4 funciones específicas:

int  ChartGetX(datetime T);

int  ChartGetY(double P);

datetime ChartGetTime(int X);

double ChartGetPrice(int Y);

Parece que ya tienes el puzzle resuelto, y tendré que trastear con él un buen rato. Te agradecería mucho que lo hicieras.

 

Renat:

Operar con varios Asesores Expertos en un mismo símbolo no tiene sentido.

Esto no es más delirante que la posibilidad de colocar varios indicadores en un gráfico.

La propia existencia en MT4 de la capacidad de crear, con un solo clic, cualquier estructura compleja a partir de los EAs, de crear cualquier cartera a partir de ellos, es grandiosa.

Para tener esta característica en cinco, hacer una clase de comercio con el apoyo a la división virtual de la cuenta de operaciones en sub-cuentas

O crear en el terminal una oportunidad para añadir su propio símbolo virtual sobre la base de los existentes.

 

Tal vez estoy detrás de las nuevas características de MT5, pero me gustaría ser capaz de mostrar los gráficos por coordenadas X e Y, y no por las barras y el precio, si tal posibilidad ya existe, aconsejar por favor, si no, creo que es fácil de implementar utilizando OBJ_CHART objeto gráfico con un determinado símbolo / herramienta XY_Symbol

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

¡О! ¡Gracias, Nikolai! ¿Puedes terminar hasta el final? Me refiero a la implementación de 4 funciones específicas:

Parece que ya has resuelto el puzzle, y tendré que trastear con él durante mucho tiempo. Te agradecería mucho que lo hicieras.

En algún lugar como este. Si necesita un ángulo diferente, éste puede recalcularse a partir de las dimensiones en píxeles de la ventana.

//+------------------------------------------------------------------+
//| Преобразование координат. Верхний левый угол привязки            |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| 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)));
  };

Ejemplo de llamada.

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
 
Aunque, de nuevo, sería mejor tener estas funciones de serie. Entonces todos los usuarios de la lengua los conocerían, no sólo los que leen este hilo.
 
Corregido el post del código, descrito como funciones separadas (sin clase) y cambiado el ángulo de unión.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки - Документация по MQL5
 
Urain:
Aunque, de nuevo, sería mejor tener estas funciones de serie. Entonces todos los usuarios de la lengua los conocerían, no sólo los que leen este hilo.

Gracias.
 
MetaDriver:
Gracias.
Poner los controles, porque a veces no hay datos y se obtiene una división por cero.
 

Me gustaría ver una implementación estándar de la función buscando un número de barra en un momento dado.

Ahora mismo lo estoy implementando con CArrayLong. Pero en este caso tengo que cargar muchos datos que ya existen en el propio gráfico. De hecho, duplica la memoria. Creo que funcionaría mucho más rápido de forma estándar.

 
Urain:
Poner los controles, porque a veces no hay datos y se obtiene una división por cero.
DE ACUERDO.