Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 637

 
RostZ:

Hola a todos.

Ayúdame con este error: "No hay suficientes derechos" o "No hay suficientes derechos" código #7

Qué sucede: Un Asesor Experto en un par EURCHFX M1 no puede abrir una posición, aparece este error (encontrado en el diario), pero al mismo tiempo, se abre sin problemas en otros pares y EURCHF M5. Se abre a mano sin problemas. En otro corredor funciona. ¿Cuál es el problema?

Le agradezco de antemano su ayuda.

Sin saber lo que está escrito dentro de su EA es imposible decir cuál es el problema. ¿Cómo se comporta el EA en EURCHFX M5 y EURCHF M1?
 
Top2n:


Esta función devuelve el número de posición de la fecha límite, no el número en sí.

Digamos que tengo el número de posición, entonces ¿cómo elimino la posición?

Te he dado un enlace a la ayuda, 6 líneas más abajo hay una ayuda para StringSubstr, que simplemente extrae una subcadena de una cadena de texto a partir de una posición especificada.
 
AlexeyVik:
Te he dado un enlace a la ayuda, 6 líneas más abajo hay ayuda para StringSubstr, que simplemente extrae una subcadena de una cadena de texto a partir de una posición especificada.


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é estoy haciendo mal? La tarea consiste en extraer 99 (dígito) de la cadena
 
Top2n:

¿Qué estoy haciendo mal? La tarea consiste en extraer 99 (dígito) de una cadena

sc=ObjectsTotal(OBJ_LABEL);

Este es el número de objetos de la etiqueta, pero si algún otro objeto está presente, habrá un error en el bucle de objetos.

A continuación, si no tiene ninguna otra etiqueta con el mismo nombre, no es necesario recorrer todos los objetos. Sólo hay que sacar OBJPROP_TEXT y trabajar con él.


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

string Kon = StringSubstr(NombreTexto, 13, 2);

y luego convertir la cadena que contiene el número en formato de cadena al tipo deseado.

Bueno, a juzgar por este ejemplo, estás muy lejos de entender todo el proceso de programación.

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

Esto no forma parte de la descripción del objeto, a esta variable NemeText se le asigna un valor "Trend Power: "

Lee toda la ayuda, y entonces recordarás que has visto la solución... y te será más fácil encontrar todo lo que necesitas en la documentación.

 
paladin80:
Sin saber lo que está escrito dentro de su EA es imposible decir cuál es el problema. ¿Cómo se comporta el EA en EURCHFX M5 y EURCHF M1?

Funciona en todas partes, excepto en EURCHFX M1. No me queda claro qué es el "Derecho insuficiente" y no he podido encontrar en ningún sitio una explicación más detallada, en qué casos aparece este mensaje; como reacción a lo que... Los metaquotes deben saber lo que significa.
 
AlexeyVik:

Este es el número de objetos de la etiqueta, pero si algún otro objeto está presente, habrá un error en el bucle de objetos.

A continuación, si no tiene ninguna otra etiqueta con el mismo nombre, no es necesario recorrer todos los objetos. Sólo tienes que sacar OBJPROP_TEXT y trabajar con él.


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

string Kon = StringSubstr(NombreTexto, 13, 2);

y luego convertir la cadena que contiene el número en formato de cadena al tipo deseado.

En realidad, estás muy lejos de entender todo el proceso de programación, a juzgar por este ejemplo.

Esto no forma parte de la descripción del objeto, a esta variable NemeText se le asigna un valor "Trend Power:".

Lee toda la ayuda, y entonces recordarás que has visto la solución... y te será más fácil encontrar lo que necesitas en la documentación.


Gracias, sí tienes razón, este fin de semana leeré un poco, me voy al arkaim)))
 

¿Me pueden decir si alguien ha probado INDICATOR_COLOR_INDEX para colorear un buffer de indicador con diferentes colores? ¿O todavía no funciona en MT4?

Ejemplo >>>

En MT5 este código funciona así:

//+------------------------------------------------------------------+
//|                                                        #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);
  }
//+------------------------------------------------------------------+

//---

En MT4 un código similar, pero con algunas correcciones para MQL4, muestra este resultado:

//+------------------------------------------------------------------+
//|                                                        #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);
  }
//+------------------------------------------------------------------+
 

Sí, entiendo que hay muchas preguntas estúpidas. Sinceramente, llevo todo el día intentándolo, pero sin resultados.

Estoy escribiendo los valores del precio de varias líneas de tendencia en la barra actual en un array.

¿Cómo borro el valor del array si no hay ningún objeto?

 
Top2n:

Sí, entiendo que hay muchas preguntas estúpidas. Honestamente, he estado intentando todo el día, pero sin resultados.

Estoy escribiendo los valores del precio de varias líneas de tendencia en la barra actual en un array.

¿Cómo borro el valor del array si no hay ningún objeto?

Si recorremos los valores de los precios de las líneas de tendencia en cada tick, inicializamos el array y aumentamos su dimensión al encontrar el siguiente precio necesario de la línea de tendencia necesaria, entonces no habrá necesidad de eliminar los valores de las líneas de tendencia borradas del array. El array será dinámico, y cada vez, en cada tick, contendrá sólo los valores de los objetos existentes.
 
Top2n:

¿Cómo puedo eliminar un valor de un array si no hay ningún objeto?


Especificando un precio de cero.