Souhaits pour MT5 - page 58

 
Urain:

Ce n'est plus pertinent, sauf pour des raisons de commodité.

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

О ! Merci, Nikolaï ! Tu peux finir ? Je veux dire, à la mise en œuvre de 4 fonctions spécifiques :

int  ChartGetX(datetime T);

int  ChartGetY(double P);

datetime ChartGetTime(int X);

double ChartGetPrice(int Y);

On dirait que vous avez déjà résolu le puzzle, et je vais devoir bricoler pendant longtemps. Je vous serais très reconnaissant si vous pouviez le faire.

 

Renat:

Trader plusieurs Expert Advisors sur un même symbole est un non-sens.

Ce n'est pas plus délirant que la capacité de mettre plusieurs indicateurs sur un seul graphique.

L'existence même dans MT4 de la possibilité de créer, en un clic, n'importe quelle structure complexe à partir des EA, de créer n'importe quel portefeuille à partir d'eux, est grandiose.

Pour disposer de cette fonctionnalité en cinq, créez une classe de trading avec un support pour la division virtuelle du compte de trading en sous-comptes.

Ou créez dans le terminal la possibilité d'ajouter votre propre symbole virtuel sur la base de ceux qui existent déjà.

 

Peut-être suis-je en retard sur les nouvelles fonctionnalités de MT5, mais j'aimerais pouvoir afficher les graphiques par coordonnées X et Y, et non par barres et prix. Si une telle possibilité existe déjà, veuillez me conseiller, sinon, je pense qu'il est facile de l'implémenter en utilisant l'objet graphique OBJ_CHART avec un certain symbole/outil XY_Symbol.

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

О ! Merci, Nikolaï ! Tu peux finir jusqu'à la fin ? Je veux dire à la mise en œuvre de 4 fonctions spécifiques :

On dirait que vous avez déjà résolu l'énigme, et je vais devoir m'en occuper pendant longtemps. Je vous serais très reconnaissant si vous pouviez le faire.

Quelque chose comme ça. Si vous avez besoin d'un autre angle, celui-ci peut être recalculé à partir des dimensions en pixels de la fenêtre.

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

Exemple d'appel.

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
 
Mais là encore, il serait préférable de disposer de ces fonctions en standard. Ainsi, tous les utilisateurs de langues les connaîtraient, et pas seulement ceux qui lisent ce fil de discussion.
 
Corrigé le post de code, décrit comme des fonctions séparées (sans classe) et changé l'angle de liaison.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Угол привязки - Документация по MQL5
 
Urain:
Même si, là encore, il serait préférable que ces fonctions fassent partie de la norme. Ainsi, tous les utilisateurs de langues les connaîtraient, et pas seulement ceux qui lisent ce fil de discussion.

Merci !
 
MetaDriver:
Merci !
Mettez les contrôles, car parfois il n'y a pas de données et vous obtenez une division par zéro.
 

Je souhaiterais voir une implémentation standard de la fonction recherchant un numéro de barre à un moment donné.

Pour l'instant, je l'implémente avec CArrayLong. Mais dans ce cas, je dois charger un grand nombre de données qui existent déjà dans le graphique lui-même. Cela signifie qu'elle duplique essentiellement la mémoire. Je pense que ça irait beaucoup plus vite sous une forme standard.

 
Urain:
Mettez les contrôles, car parfois il n'y a pas de données et vous obtenez une division par zéro.
OK.