Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 85

 

Yol boyunca birkaç soru daha geldi:

1. bir satır var:

datetime ProvTimeX1=ObjectGetInteger(0,"Y="+IntegerToString(y,0,' '),OBJPROP_TIME);

derleyici buna küfreder, "tür dönüşümü nedeniyle olası veri kaybı " yazar. Burada sorun ne?

2. Veriler dizilere nasıl girilir ve mql5'te hangi yönde dağıtılır?

 
WindSW :

Yol boyunca birkaç soru daha geldi:

1. bir satır var:

datetime ProvTimeX1=ObjectGetInteger(0,"Y="+IntegerToString(y,0,' '),OBJPROP_TIME);

derleyici buna küfreder, "tür dönüşümü nedeniyle olası veri kaybı " yazar. Burada sorun ne?

Eh, haklısınız, ObjectGetInteger tarafından döndürülen uzun değeri datetime değişkenine yazmaya çalışıyorsunuz. Tip dökümü yapın.

 datetime ProvTimeX1=( datetime ) ObjectGetInteger ( 0 , "Y=" + IntegerToString (y, 0 , ' ' ), OBJPROP_TIME );
2. Veriler dizilere nasıl girilir ve mql5'te hangi yönde dağıtılır?

Yön her zaman aynıdır - baştan (dizin sıfırdır) sonuna kadar, ANCAK , ArraySetAsSeries işlevi kullanılarak dizin oluşturma belirtilmemişse. Soru indeksleme ile ilgili ise.

 

İyi günler, sayıları bölemiyorum sonuç 0.0

Niye ya?

   double res =   8000 / 16000 * 100 ;
   Print (res);
 
ryzhak.vladimir :

İyi günler, sayıları bölemiyorum sonuç 0.0

Niye ya?



   double res=(( double ) 8000 / 16000 )* 100 ;
   Print (res);
Belgeler >>> Tip döküm
 

Elbette aptallık, değiştirmek için bir şeyler eklemeniz gerekiyor, bazı noktasız hesap makinesi her şeyin yolunda olduğunu düşünüyor ve ona hangi veri tipi olduğunu söylemenize gerek yok, ama ah peki, ikinci yol ".0" eklemektir. tam sayının sonunda

yani doğru ifade şöyle olurdu

 double res = 8000.0 / 16000.0 * 100 ;
Print (res);
Bu arada, bazı programlama dillerinde, terminalin kendi türünü seçeceği şekilde değişken bir atama gördüm, belki bu yalnızca dijital verilerle ilgiliydi, ancak yine de uygun, burada tesadüfen uygulanmadı, belgelerde bulmaya çalıştım - bulamadın mı?
 
herkese teşekkürler)
 

4. versiyonda: datetime TimeX2=Time[0]+18000; - zaman değerini 5 mum ileride artırdı

Şimdi 5'te yazarken:

 datetime Topen[];
ArraySetAsSeries (Topen, true );
CopyTime ( _Symbol , _Period , 0 , 3 ,Topen);
datetime TimeX2=Topen[ 0 ]+ 18000 ;

hata ayıklarken, bir dizi taşma hatası veriyor ve datetime dizesini işaret ediyor TimeX2=Topen[ 0 ]+ 18000 ;

Lütfen bana 4'te olduğu gibi 5'te de aynı sonucu nasıl alacağımı söyle?

Ekleme: Her şey doğru yazılmış, sadece bir hata yaptım - OnInit'te dizi boştu.

 
WindSW :

4. versiyonda: datetime TimeX2=Time[0]+18000; - zaman değerini 5 mum ileride artırdı

Şimdi 5'te yazarken:

hata ayıklarken, bir dizi taşma hatası veriyor ve datetime dizesini işaret ediyor TimeX2=Topen[ 0 ]+ 18000 ;

Lütfen bana 4'te olduğu gibi 5'te de aynı sonucu nasıl alacağımı söyle?

 datetime b= TimeTradeServer ()+ 60 *min; //min - кол-во минут от текущего времени
 

Çizim seviyeleri sorunu ile karşı karşıya.

 void OnInit ()
  {
   ObjectCreate ( 0 ,oPP, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
   ObjectSetInteger ( 0 ,oPP, OBJPROP_COLOR , clrDeepSkyBlue );
   ObjectSetInteger ( 0 ,oPP, OBJPROP_STYLE , STYLE_SOLID );
   ObjectSetInteger ( 0 ,oPP, OBJPROP_WIDTH , 2 );
   ObjectSetInteger ( 0 ,oPP, OBJPROP_RAY , false );
   ObjectCreate ( 0 ,oRes1, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
   ObjectSetInteger ( 0 ,oRes1, OBJPROP_COLOR , clrDeepSkyBlue );
   ObjectSetInteger ( 0 ,oRes1, OBJPROP_STYLE , STYLE_DASH );
   ObjectSetInteger ( 0 ,oRes1, OBJPROP_WIDTH , 1 );
   ObjectSetInteger ( 0 ,oRes1, OBJPROP_RAY , false );
   ObjectCreate ( 0 ,oSup1, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
   ObjectSetInteger ( 0 ,oSup1, OBJPROP_COLOR , clrDeepSkyBlue );
   ObjectSetInteger ( 0 ,oSup1, OBJPROP_STYLE , STYLE_DASH );
   ObjectSetInteger ( 0 ,oSup1, OBJPROP_WIDTH , 1 );
   ObjectSetInteger ( 0 ,oSup1, OBJPROP_RAY , false );
   PPlevel();
  }
//+------------------------------------------------+
//| Пивот поинт                                    |
//+------------------------------------------------+
void PPlevel()
   {
     double iH=iHigh( Symbol (), PERIOD_D1 , 1 );
     double iL=iLow( Symbol (), PERIOD_D1 , 1 );
     double iC=iClose( Symbol (), PERIOD_D1 , 1 );
     double iO=iOpen( Symbol (), PERIOD_D1 , 1 );
     int New_candle= 0 ;
    New_candle=NBar(); // функция появления новой свечи
     if (New_candle== 1 )
      {
       double range= NormalizeDouble (iH-iL, _Digits );
       double PP= NormalizeDouble ((iH+iL+iC)/ 3 , _Digits );
       double R1= NormalizeDouble (( 2 *PP)-iL, _Digits );
       double S1= NormalizeDouble (( 2 *PP)-iH, _Digits );
       TimeStart=iTime( Symbol (), PERIOD_D1 , 0 )- 7200 ;
       TimeFinish=Topen[ 0 ]+ 64000 ;
       ObjectSetInteger ( 0 ,oPP, OBJPROP_TIME ,TimeStart);                 // отрисовка PP
       ObjectSetDouble ( 0 ,oPP, OBJPROP_PRICE ,PP);
       ObjectSetInteger ( 0 ,oPP, OBJPROP_TIME , 1 ,TimeFinish);
       ObjectSetDouble ( 0 ,oPP, OBJPROP_PRICE , 1 ,PP);
       ObjectSetInteger ( 0 ,oRes1, OBJPROP_TIME ,TimeStart);               // отрисовка сопротивления
       ObjectSetDouble ( 0 ,oRes1, OBJPROP_PRICE ,R1);
       ObjectSetInteger ( 0 ,oRes1, OBJPROP_TIME , 1 ,TimeFinish);
       ObjectSetDouble ( 0 ,oRes1, OBJPROP_PRICE , 1 ,R1);
       ObjectSetInteger ( 0 ,oSup1, OBJPROP_TIME ,TimeStart);               // отрисовка поддержки
       ObjectSetDouble ( 0 ,oSup1, OBJPROP_PRICE ,S1);
       ObjectSetInteger ( 0 ,oSup1, OBJPROP_TIME , 1 ,TimeFinish);
       ObjectSetDouble ( 0 ,oSup1, OBJPROP_PRICE , 1 ,S1);
      }
   }
Print() kullanarak kontrol ediyorum, normal hesaplama sonuçları veriyor "Örnek: (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" ama bunları çizmiyor seviyeler. Terminali " Nesne listesi " aracılığıyla kontrol ediyorum, orada değiller. Lütfen bana sorunun ne olduğunu söyle? nereye tüküreyim?
 
WindSW :

Çizim seviyeleri sorunu ile karşı karşıya.

Print() kullanarak kontrol ediyorum, normal hesaplama sonuçları veriyor "Örnek: (GBPUSD,H1) 0.0152 i 1.5911 i 1.59682 i 2013.01.20 22:00:00 i 2013.01.22 09:46:40" ama bunları çizmiyor seviyeler. Terminali " Nesne listesi " aracılığıyla kontrol ediyorum, orada değiller. Lütfen bana sorunun ne olduğunu söyle? nereye tüküreyim?
ObjectCreate sonuçlarını print ile yazdırın, belki bir hata vardır.