Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 437

 

remover o fio da estrutura, ele funcionará

ou copiar elemento por elemento, cada variável da estrutura
ou substituir a corda por um uchar de matriz estática [16];

 
Taras Slobodyanik:

remover o fio da estrutura, ele funcionará

Ou você copia elemento por elemento, cada variável da estrutura
ou substituir a corda por um uchar de matriz estática [16];


que cordel você quer remover?

Na verdade fui ao livro de referência para ver um exemplo, para entender como copiar uma variável do tipo estrutura para outra variável do mesmo tipo de estrutura... E o que acontece com as funções que são declaradas nelas. Copiar elemento por elemento não é bom... ...faz um arrastamento muito longo.

 
Aleksandr Brown:

qual fio a ser removido?

Na verdade, usei o livro de referência para ver um exemplo, para entender como uma variável do tipo de estrutura pode ser copiada em outra variável do mesmo tipo de estrutura... E o que acontece com as funções que são declaradas nelas. Copiar elemento por elemento não é bom... ...acaba por ser um arrastamento muito longo.

Você já tentouo ArrayCopy?

 
STARIJ:

Você já tentou o ArrayCopy?


Estamos falando de dados estruturados. Você quer dizer uma variável do tipo de estrutura a ser representada como uma matriz???? :-))) Também não é uma opção... Há funções na estrutura que se forem declaradas separadamente, haverá ainda mais confusão.

 
Sim, o ArrayCopy faz disparates. Se você precisa produzir componentes de cor - aqui
//+------------------------------------------------------------------+ 
//| Компоненты цвета                                                 | 
//+------------------------------------------------------------------+ 
#property strict
#property script_show_inputs
input     color  testColor=0x00ff00;  // задайте цвет для тестирования

//--- функция для вывода цвета в виде строки
string toString(color x)
{
 return  "("+
      (string) ( x & 0xff)           +":"+
      (string) ((x & 0xff00 ) >> 8)  +":"+
      (string) ((x & 0xff0000)>> 16) +")"   ;
}

void OnStart() 
{ 
   Alert("color ",testColor," = ",toString(testColor));  // выдает color clrLime = (0:255:0) а ведь думал это clrGreen
}

Embora seja mais fácil de usar o ColorToString(testColor)

Se você quiser usar conversão de dados, use o ServiceDesk. O erro que você mencionou também está presente no MetaEditor no MT5

 
Aleksandr Brown:

qual fio a ser removido?

Na verdade, usei o livro de referência para ver um exemplo, para entender como uma variável do tipo de estrutura pode ser copiada em outra variável do mesmo tipo de estrutura... E o que acontece com as funções que são declaradas nelas. Copiar elemento por elemento não é bom... ...é um arrasto muito longo.


Sim, desculpe, eu li mal esse conselho...

Até onde me lembro, um novo tipo de sindicato foi agora introduzido e você deveria fazer algo assim:

#property script_show_inputs

#define  red    colir[0]
#define  green  colir[1]
#define  blue   colir[2]

input color          testColor=clrBlue;// задайте цвет для тестирования
//--- структура для представления цвета в RGB
union RGB
  {
   color             cvet;
   uchar             colir[4];
   string            toString();    // функция для получения в виде строки
  };
//--- функция для вывода цвета в виде строки
string RGB::toString(void)
  {
   string out="("+(string)red+":"+(string)green+":"+(string)blue+")";
   return out;
  }

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- переменная для хранения в RGB
   RGB colorRGB;

   colorRGB.cvet=testColor;
   Print("color ",colorRGB.cvet," = ",colorRGB.toString());
//---
  }
 

Boa tarde. Por favor, esclareça por que ela não mostra as informações corretas.


//+------------------------------------------------------------------+
//---- indicator buffers
double      AO[];                // массив для индикатора iAO
//---- handles for indicators
int         AO_handle;           // указатель на индикатор iAO
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- создание указателя на объект - индикатор iAO
   AO_handle=iAO(NULL,0);
//--- если произошла ошибка при создании объекта, то выводим сообщение
   if(AO_handle<0)
     {
      Print("Объект iAO не создан: Ошибка исполнения = ",GetLastError());
      //--- принудительное завершение программы
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ArrayFree(AO);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

//--- Достаточно ли количество баров для работы
   if(Bars(_Symbol,_Period)<10) // общее количество баров на графике меньше 10?
     {
      Alert("На графике меньше 10 баров, советник не будет работать!!");
      return;
     }

   ArraySetAsSeries(AO,true);
//--- заполнение массива AO[] текущими значениями индикатора iAO
//--- задаём порядок индексации массива как в таймсерии
//--- если произошла ошибка, то прекращаем выполнение дальнейших операций;
   if(CopyBuffer(AO_handle,0,0,100,AO)<=0)return;
   double AO_1=AO[1];
   AO_1=NormalizeDouble(AO_1,7);
   Print("AO=",AO_1);
   double AO_2=AO[2];
   AO_2=NormalizeDouble(AO_2,7);
   Print("AO2=",AO_2);
  }
//+------------------------------------------------------------------+
 
gastinets:

Olá. Você poderia me dizer por que ele não dá as informações corretas?


Onde você viu informações incorretas?

E, por favor, insira o código corretamente (eu corrigi em seu posto)

Postado em retângulo vermelho:


 

Eu o recebi do código, desculpe - eu o levarei em conta no futuro

valor negativo é exibido incorretamente. isto pode ser devido ao tipo duplo

deixe-me esclarecer uma questão - como fazer com que um valor negativo seja exibido corretamente e se ele pode ser normalizado como um valor positivo (que é exibido corretamente)

 
gastinets:

Eu o recebi do código, desculpe - eu o levarei em conta no futuro

O valor negativo é exibido incorretamente. Deve ser por causa do tipo duplo.

Vou esclarecer a questão - como fazer com que um valor negativo seja exibido corretamente e se ele pode ser normalizado como um valor positivo (que é exibido corretamente)


Quando eu era criança, quando eu usava uma calculadora, eu costumava ter o mesmo tipo de E's. Depois que comecei a programar, me lembrei de minha calculadora e tudo voltou ao normal.


Tente convertê-lo em um fio se você quiser ver o número em um fio.

   double AO_1=AO[1];
   AO_1=NormalizeDouble(AO_1,7);
   Print("AO=",DoubleToString(AO_1,7));
   double AO_2=AO[2];
   AO_2=NormalizeDouble(AO_2,7);
   Print("AO2=",DoubleToString(AO_2,7));