Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 437

 

уберите стринг из структуры, будет работать

или копируйте поэлементно, каждую переменную структуры
или замените стринг на статический массив uchar[16];

 
Taras Slobodyanik:

уберите стринг из структуры, будет работать

или копируйте поэлементно, каждую переменную структуры
или замените стринг на статический массив uchar[16];


какой именно стринг убрать?

Я собственно говоря в справочник полез примерчик подсмотреть, чтобы понять как переменную типа структуры, копировать в другую переменную типа той же структуры... И что будет с функциями которые в них объявлены. Поэлементно копировать не годится... очень уж длинная портянка получается.

 
Aleksandr Brown:

какой именно стринг убрать?

Я собственно говоря в справочник полез примерчик подсмотреть, чтобы понять как переменную типа структуры, копировать в другую переменную типа той же структуры... И что будет с функциями которые в них объявлены. Поэлементно копировать не годится... очень уж длинная портянка получается.

ArrayCopy пробовали?

 
STARIJ:

ArrayCopy пробовали?


Речь идёт о структурированных данных. Имеется ввиду переменную типа структуры представить в виде массива??? :-))) Тоже не вариант... В структуре есть функции, которые если объявлять отдельно, то путаницы будет ещё больше.

 
Да, ArrayCopy ерунду дает. Если Вам нужно вывести компоненты цвета - то вот
//+------------------------------------------------------------------+ 
//| Компоненты цвета                                                 | 
//+------------------------------------------------------------------+ 
#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
}

Хотя проще использовать ColorToString(testColor)

Если Вам приведение данных - то в СервисДеск. Указанная Вами ошибка присутствует и в MT5 MetaEditor

 
Aleksandr Brown:

какой именно стринг убрать?

Я собственно говоря в справочник полез примерчик подсмотреть, чтобы понять как переменную типа структуры, копировать в другую переменную типа той же структуры... И что будет с функциями которые в них объявлены. Поэлементно копировать не годится... очень уж длинная портянка получается.


да, пардон недосмотрел, неправильно насоветовал...

насколько помню, сейчас ввели новый тип union, и нужно делать примерно так:

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

добрый день. уточните плз почему выдает некорректную информацию


//+------------------------------------------------------------------+
//---- 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:

добрый день. уточните плз почему выдает некорректную информацию


А где вы увидели не корректную информацию?

И, пожалуйста, вставляйте код правильно (я исправил в вашем посте)

Обвёл красным прямоугольником:


 

понял по коду, сорри - на будущее учту

отрицательное значение неккорректно отображается . наверно это из-за типа double

 уточню вопрос - как сделать чтобы отрицательное значение отображалось корректно и можно ли его нормализовать как и положительное ( которое корректно отобразилось)

 
gastinets:

понял по коду, сорри - на будущее учту

отрицательное значение неккорректно отображается . наверно это из-за типа double

 уточню вопрос - как сделать чтобы отрицательное значение отображалось корректно и можно ли его нормализовать как и положительное ( которое корректно отобразилось)


я когда в детстве баловался калькулятором, у меня такие же Ешки появлялись. После того, как я начал программировать вспомнил калькулятор, все стало на свои места. 


попробуйте перевести в строку, если хочете видеть число в строке. 

   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));
Причина обращения: