Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 637

 
RostZ:

Olá a todos!

Ajude-me com este erro: Código nº 7 "Direitos insuficientes" ou "Direitos insuficientes".

O que está acontecendo: Um consultor especializado em um par EURCHFX M1 não pode abrir uma posição, este erro aparece (encontrado na revista), mas ao mesmo tempo, abre sem problemas em outros pares e EURCHF M5. Abre à mão sem qualquer problema. Em outro corretor, funciona. Qual pode ser o problema?

Agradeço antecipadamente a ajuda de vocês.

Sem saber o que está escrito dentro de sua EA, é impossível dizer qual é o problema. Como a EA se comporta no EURCHFX M5 e EURCHF M1?
 
Top2n:


Esta função retorna o número da posição do prazo, não o número em si.

Digamos que eu tenho o número da posição, então como eu removo a posição?

Eu lhe dei um link para a ajuda, 6 linhas abaixo há uma ajuda para StringSubstr, que apenas extrai um substrato de uma cadeia de texto a partir de uma posição especificada.
 
AlexeyVik:
Eu lhe dei um link para a ajuda, 6 linhas abaixo há ajuda para StringSubstr, que apenas extrai um substrato de uma cadeia de texto a partir de uma posição 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);
  }
}
O que eu estou fazendo de errado? A tarefa é extrair 99 (dígito) da corda
 
Top2n:

O que eu estou fazendo de errado? A tarefa é extrair 99 (dígito) de um fio

sc=ObjectsTotal(OBJ_LABEL);

Este é o número de objetos de etiqueta, mas se algum outro objeto estiver presente, haverá um erro no laço do objeto.

A seguir, se você não tiver outras etiquetas com o mesmo nome, não precisa passar por todos os objetos. Basta retirar OBJPROP_TEXT e trabalhar com ele.


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

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

e depois converter a corda contendo o número em formato de corda para o tipo requerido.

Bem, a julgar por este exemplo, você está muito longe de entender todo o processo de programação.

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

Esta não é uma parte da descrição do objeto, a esta variável NemeText é atribuído um valor "Trend Power:".

Leia toda a ajuda, então você vai se lembrar que viu a solução. e você achará mais fácil encontrar tudo o que precisa na documentação.

 
paladin80:
Sem saber o que está escrito dentro de sua EA, é impossível dizer qual é o problema. Como a EA se comporta no EURCHFX M5 e EURCHF M1?

Funciona em todos os lugares, exceto em EURCHFX M1. Não está claro para mim o que é o "Direito insuficiente" e não consegui encontrar em nenhum lugar uma explicação mais detalhada, em que casos esta mensagem aparece; como reação ao que... Os metaquotes devem saber o que isso significa.
 
AlexeyVik:

Este é o número de objetos de etiqueta, mas se algum outro objeto estiver presente, haverá um erro no laço do objeto.

A seguir, se você não tiver outras etiquetas com o mesmo nome, não precisa passar por todos os objetos. Basta puxar OBJPROP_TEXT e trabalhar com ele.


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

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

e depois converter a string contendo o número em formato de string para o tipo desejado.

Na verdade, você está longe de entender todo o processo de programação, a julgar por este exemplo.

Esta não é uma parte da descrição do objeto, a esta variável NemeText é atribuído um valor "Trend Power:".

Leia toda a ajuda, e então você vai se lembrar que viu a solução. e você achará mais fácil encontrar o que precisa na documentação.


Obrigado, sim você está certo, vou fazer uma leitura neste fim de semana, vou para o arkaim))))
 

Você pode me dizer, alguém tentou INDICATOR_COLOR_INDEX para colorir um tampão indicador com cores diferentes? Ou ainda não funciona no MT4 ?

Exemplo >>>>

No MT5, este código funciona assim:

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

//---

Em MT4 código similar, mas com algumas correções para MQL4, mostra 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);
  }
//+------------------------------------------------------------------+
 

Sim, eu entendo que existem muitas perguntas estúpidas. Honestamente, tenho tentado o dia todo, mas sem resultados.

Estou escrevendo os valores de preços de várias linhas de tendência na barra atual em uma matriz.

Como apagar o valor da matriz se não houver nenhum objeto?

 
Top2n:

Sim, eu entendo que existem muitas perguntas estúpidas. Honestamente, tenho tentado o dia todo, mas sem resultados.

Estou escrevendo os valores de preços de várias linhas de tendência na barra atual em uma matriz.

Como apagar o valor da matriz se não houver nenhum objeto?

Se passarmos através dos valores das linhas de tendência em cada tick, inicializarmos o array e aumentarmos sua dimensão ao encontrar o próximo preço necessário da linha de tendência necessária, então não haverá necessidade de remover os valores das linhas de tendência eliminadas do array. A matriz será dinâmica, e cada vez a cada tique, conterá apenas os valores dos objetos existentes.
 
Top2n:

Como remover um valor de uma matriz se não há nenhum objeto?


Especificando um preço zero.
Razão: