MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 437

 

dizeyi yapıdan çıkarın, çalışacaktır

veya eleman eleman kopyalayın, her yapı değişkeni
veya dizeyi statik bir dizi uchar[16] ile değiştirin;

 
Taras Slobodyanik :

dizeyi yapıdan çıkarın, çalışacaktır

veya eleman eleman kopyalayın, her yapı değişkeni
veya dizeyi statik bir dizi uchar[16] ile değiştirin;


hangi dize kaldırılacak?

Nitekim bir yapı tipi değişkeninin nasıl aynı yapı tipindeki başka bir değişkene kopyalandığını anlamak için referans kitabına göz atmak için girdim... Peki bunlarda bildirilen fonksiyonlara ne olacak. Eleman eleman kopyalamak iyi değil ... çok uzun bir ayak örtüsü elde ediliyor.

 
Aleksandr Brown :

hangi dize kaldırılacak?

Nitekim bir yapı tipi değişkeninin nasıl aynı yapı tipindeki başka bir değişkene kopyalandığını anlamak için referans kitabına göz atmak için girdim... Peki bunlarda bildirilen fonksiyonlara ne olacak. Eleman eleman kopyalamak iyi değil ... çok uzun bir ayak örtüsü elde ediliyor.

Arraycopy'yi denediniz mi?

 
STARIJ :

Arraycopy'yi denediniz mi?


Yapılandırılmış verilerle ilgilidir. Bir dizi biçiminde sunulmak üzere bir yapı türü değişkeni anlamına gelir ??? :-))) Bir seçenek de değil... Yapı, ayrı olarak bildirildiğinde daha da kafa karıştırıcı olacak işlevlere sahiptir.

 
Evet, ArrayCopy saçmalık veriyor. Renk bileşenlerini görüntülemeniz gerekiyorsa - o zaman burada
 //+------------------------------------------------------------------+ 
//| Компоненты цвета                                                 | 
//+------------------------------------------------------------------+ 
#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) kullanmak daha kolay olsa da

Veri getirmeniz gerekiyorsa - o zaman ServiceDesk'e. Bahsettiğiniz hata MT5 MetaEditor'da da mevcut.

 
Aleksandr Brown :

hangi dize kaldırılacak?

Nitekim bir yapı tipi değişkenin nasıl olduğunu anlamak için referans kitabına girdim, aynı yapıdaki başka bir tip değişkene nasıl kopyalayın... Peki bunlarda bildirilen fonksiyonlara ne olacak. Eleman eleman kopyalamak iyi değil ... çok uzun bir ayak örtüsü elde ediliyor.


evet, üzgünüm, gözden kaçmış, yanlış tavsiye edilmiş...

Hatırladığım kadarıyla şimdi yeni bir sendika türü tanıtıldı ve bunun gibi bir şey yapmanız gerekiyor:

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

tünaydın. Lütfen neden yanlış bilgi verdiğini açıklayın.


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

tünaydın. Lütfen neden yanlış bilgi verdiğini açıklayın.


Yanlış bilgiyi nerede gördünüz?

Ve lütfen kodu doğru yapıştırın (yazınızda düzelttim)

Kırmızı bir dikdörtgenle daire içine alınmış:


 

kod tarafından anlaşıldı, üzgünüm - gelecek için aklımda tutacağım

negatif bir değer doğru şekilde görüntülenmiyor. muhtemelen çift tip yüzünden

Soruyu netleştireceğim - negatif bir değerin doğru bir şekilde nasıl görüntüleneceği ve pozitif bir değer gibi normalleştirilip normalleştirilemeyeceği (doğru görüntüleniyor)

 
gastinets :

kod tarafından anlaşıldı, üzgünüm - gelecek için aklımda tutacağım

negatif bir değer doğru şekilde görüntülenmiyor. muhtemelen çift tip yüzünden

Soruyu netleştireceğim - negatif bir değerin doğru bir şekilde nasıl görüntüleneceği ve pozitif bir değer gibi normalleştirilip normalleştirilemeyeceği (doğru görüntüleniyor)


Çocukken bir hesap makinesiyle uğraştığımda, aynı Eshki'ye sahiptim. Programlamaya başladıktan sonra hesap makinesini hatırladım, her şey yerli yerine oturdu.


dizedeki sayıyı görmek istiyorsanız bir dizeye dönüştürmeyi deneyin.

   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 ));