Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 637

 
RostZ:

Bonjour à tous !

Aidez-moi à résoudre cette erreur : "Pas assez de droits" ou "Pas assez de droits" code #7

Ce qui se passe : Un Expert Advisor sur une paire EURCHFX M1 ne peut pas ouvrir une position, cette erreur apparaît (trouvée dans le journal), mais en même temps, il s'ouvre sans problèmes sur d'autres paires et EURCHF M5. Il s'ouvre à la main sans aucun problème. Chez un autre courtier, cela fonctionne. Quel est le problème ?

Je vous remercie d'avance pour votre aide.

Sans savoir ce qui est écrit dans votre EA, il est impossible de dire quel est le problème. Comment l'EA se comporte-t-il sur EURCHFX M5 et EURCHF M1 ?
 
Top2n:


Cette fonction renvoie le numéro de position de l'échéance, et non le numéro lui-même.

Disons que j'ai le numéro de la position, alors comment puis-je supprimer la position ?

Je vous ai donné un lien vers l'aide, 6 lignes plus bas il y a une aide pour StringSubstr, qui extrait simplement une sous-chaîne d'une chaîne de texte à partir d'une position spécifiée.
 
AlexeyVik:
Je vous ai donné un lien vers l'aide, 6 lignes plus bas il y a de l'aide pour StringSubstr, qui extrait simplement une sous-chaîne d'une chaîne de texte à partir d'une position spécifiée.


sc=ObjectsTotal(OBJ_LABEL);
for(int i=0;i<sc;i++) 
 {
 Neme=ObjectName(i);
 
 if(Neme="lTrend_Power") //Если имя объекта OBJ_LABEL то самое,
{
  NemeText="Trend Power: "; // часть описания из строки текст
  for(int il=0;il<=99;il++) // перебираем 1-99
  {
NemeTextPol = StringFind(NemeText+il+"%",il,0); //Полное имя строки текст "Trend Power: 99%". (99% меняется от 1 до 99)

Kon = StringSubstr(NemeText+il+"%",13,3);
  }
}
Qu'est-ce que je fais de mal ? La tâche consiste à extraire 99 (chiffre) de la chaîne de caractères
 
Top2n:

Qu'est-ce que je fais de mal ? La tâche consiste à extraire 99 (chiffre) d'une chaîne de caractères

sc=ObjectsTotal(OBJ_LABEL);

C'est le nombre d'objets étiquettes, mais si un autre objet est présent, il y aura une erreur dans la boucle des objets.

Ensuite, si vous n'avez pas d'autres étiquettes portant le même nom, vous n'avez pas besoin de passer par tous les objets. Il suffit de sortir OBJPROP_TEXT et de l'utiliser.


string NameText = ObjectGetString(0, "lTrend_Power", OBJPROP_TEXT) ;

chaîne Kon = StringSubstr(NameText, 13, 2) ;

puis convertir la chaîne contenant le nombre au format chaîne au type requis.

À en juger par cet exemple, vous êtes trop loin de comprendre l'ensemble du processus de programmation.

NemeText="Trend Power: "; // часть описания из строки текст

Ceci n'est pas une partie de la description de l'objet, cette variable NemeText a la valeur "Trend Power : ".

Lisez toute l'aide, et vous vous souviendrez alors que vous avez vu la solution... et il vous sera plus facile de trouver tout ce dont vous avez besoin dans la documentation.

 
paladin80:
Sans savoir ce qui est écrit dans votre EA, il est impossible de dire quel est le problème. Comment l'EA se comporte-t-il sur EURCHFX M5 et EURCHF M1 ?

Il fonctionne partout, sauf sur EURCHFX M1. Il n'est pas clair pour moi ce qu'est le "droit insuffisant" et je n'ai pas pu trouver nulle part une explication plus détaillée, dans quels cas ce message apparaît ; en réaction à ce que... Methaquotes devrait savoir ce que cela signifie.
 
AlexeyVik:

C'est le nombre d'objets étiquettes, mais si un autre objet est présent, il y aura une erreur dans la boucle des objets.

Ensuite, si vous n'avez pas d'autres étiquettes portant le même nom, vous n'avez pas besoin de passer par tous les objets. Il suffit de sortir OBJPROP_TEXT et de l'utiliser.


string NameText = ObjectGetString(0, "lTrend_Power", OBJPROP_TEXT) ;

chaîne Kon = StringSubstr(NameText, 13, 2) ;

puis convertir la chaîne contenant le nombre au format chaîne au type souhaité.

En fait, vous êtes loin de comprendre l'ensemble du processus de programmation, à en juger par cet exemple.

Ceci n'est pas une partie de la description de l'objet, cette variable NemeText a la valeur "Trend Power : ".

Lisez toute l'aide, et vous vous souviendrez alors que vous avez vu la solution... et vous trouverez plus facilement ce dont vous avez besoin dans la documentation.


Merci, oui vous avez raison, je vais faire un peu de lecture ce week-end, je vais à l'arkaim))).
 

Pouvez-vous me dire si quelqu'un a essayé INDICATOR_COLOR_INDEX pour colorer un tampon indicateur avec des couleurs différentes ? Ou bien cela ne fonctionne pas encore dans MT4 ?

Exemple >>>

Dans MT5, ce code fonctionne comme suit :

//+------------------------------------------------------------------+
//|                                                        #Test.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_color1  clrRoyalBlue,clrRed
//--- Индикаторные буферы
double indicator_buffer[];
double color_indicator_buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Установка буферов
   SetIndexBuffer(0,indicator_buffer,INDICATOR_DATA);
   SetIndexBuffer(1,color_indicator_buffer,INDICATOR_COLOR_INDEX);
//--- Свойства
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,5);
   PlotIndexSetInteger(0,PLOT_ARROW,159);
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_ARROW);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--- Инициализация буфера
   ArrayInitialize(indicator_buffer,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int      rates_total,
                const int      prev_calculated,
                const datetime &time[],
                const double   &open[],
                const double   &high[],
                const double   &low[],
                const double   &close[],
                const long     &tick_volume[],
                const long     &volume[],
                const int      &spread[])
  {
   int limit=0;
//--- Если первый вызов
   if(prev_calculated==0)
     {
      limit=0;
      ArrayInitialize(indicator_buffer,0);
     }
   else
      limit=prev_calculated-1;
//--- Основной цикл
   for(int i=limit; i<rates_total && !IsStopped(); i++)
     {
      indicator_buffer[i]=rand()%3;
      color_indicator_buffer[i]=(indicator_buffer[i]==1) ? 0 : 1;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+

//---

Dans MT4, un code similaire, mais avec quelques corrections pour MQL4, donne ce résultat :

//+------------------------------------------------------------------+
//|                                                        #Test.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrRoyalBlue,clrRed
//--- Индикаторные буферы
double indicator_buffer[];
double color_indicator_buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Установка буферов
   SetIndexBuffer(0,indicator_buffer,INDICATOR_DATA);
   SetIndexBuffer(1,color_indicator_buffer,INDICATOR_COLOR_INDEX);
//--- Свойства
   SetIndexStyle(0,DRAW_ARROW,EMPTY,5);
   SetIndexArrow(0,159);
   SetIndexEmptyValue(0,0);
//--- Инициализация буфера
   ArrayInitialize(indicator_buffer,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int      rates_total,
                const int      prev_calculated,
                const datetime &time[],
                const double   &open[],
                const double   &high[],
                const double   &low[],
                const double   &close[],
                const long     &tick_volume[],
                const long     &volume[],
                const int      &spread[])
  {
   int limit=0;
//--- Если первый вызов
   if(prev_calculated==0)
     {
      limit=0;
      ArrayInitialize(indicator_buffer,0);
     }
   else
      limit=prev_calculated-1;
//--- Основной цикл
   for(int i=limit; i<rates_total && !IsStopped(); i++)
     {
      indicator_buffer[i]=rand()%3;
      color_indicator_buffer[i]=(indicator_buffer[i]==1) ? 0 : 1;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

Oui, je comprends qu'il y a beaucoup de questions stupides. Honnêtement, j'ai essayé toute la journée, mais sans résultat.

J'écris les valeurs de prix de plusieurs lignes de tendance sur la barre actuelle dans un tableau.

Comment supprimer la valeur du tableau s'il n'y a pas d'objet ?

 
Top2n:

Oui, je comprends qu'il y a beaucoup de questions stupides. Honnêtement, j'ai essayé toute la journée, mais sans résultat.

J'écris les valeurs de prix de plusieurs lignes de tendance sur la barre actuelle dans un tableau.

Comment supprimer la valeur du tableau s'il n'y a pas d'objet ?

Si nous parcourons les valeurs des prix des lignes de tendance à chaque tick, que nous initialisons le tableau et que nous augmentons sa dimension lorsque nous trouvons le prochain prix nécessaire de la ligne de tendance nécessaire, alors il ne sera pas nécessaire de supprimer les valeurs des lignes de tendance supprimées du tableau. Le tableau sera dynamique, et à chaque fois, à chaque tick, il ne contiendra que les valeurs des objets existants.
 
Top2n:

Comment supprimer une valeur d'un tableau s'il n'y a pas d'objet ?


En spécifiant un prix de zéro.
Raison: