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

 
ANDREY :
Herkese iyi günler!
MT-4 test cihazındaki algoritmayı mql4 kullanarak test ediyorum. Teklif fiyatını 5 (beş) ondalık basamakla günlüğe kaydetmek için Print() işlevine ihtiyacım var. Ve nedense sadece 4 (dört) karakter gösteriyor. Varsa hatamı nasıl düzelteceğimi söyleyin.
İşte kodum.
geçersiz OnTick()
{
Print("=======Teklif ======= ",NormalizeDouble(Teklif, Rakamlar ) );

}


Aynı zamanda, Print() 'i kullanarak emri açma ve kapama fiyatını (SL ve TP'ye göre ) yazdırırsanız, Print() fiyatı 5 (beş) karakterle yazdırır.
Yardımlarınız için hepinize teşekkür ederim.

NormalizeDouble() yerine DoubleToString( )

 
Igor Makanu :

Sana kararımı beğenmediğimi söyledim.

tekrar yazmak için çok tembel

google "dizi kopyaları bul" - Sanırım bir şey var

 enum EResult{Ok,AllocError};

template < typename T>
EResult GetRepeat( const T &arr[],T &ret[], uint count){
   int size= ArraySize (arr);
   if ( ArrayResize (ret,size)!=size) return AllocError;
   int ii= 0 ;
   for ( int i= 0 ;i<size;){
      T tmp=arr[i];
       uint repeatCount= 1 ;
       while (++i<size&&arr[i]==tmp) ++repeatCount;
       if (repeatCount>=count) ret[ii++]=tmp;}
   return ArrayResize (ret,ii)==ii?Ok:AllocError;
}

void OnStart ()
{
   int arr[]={ 1 , 2 , 4 , 4 , 4 , 55 , 55 , 7 , 7 , 7 , 7 , 7 , 8 , 9 , 77 , 66 , 66 , 66 };
   int ret[];
   if (!GetRepeat(arr,ret, 3 )) ArrayPrint (ret);
} 
 
Artyom Trishkin :

NormalizeDouble() yerine DoubleToString( )

Bilgilendirme desteğiniz için çok teşekkür ederim.

 
Meslektaşlarım, eğer - soruma bir bakın zor değil
https://www.mql5.com/ru/forum/160683/page1251#comment_18219493
Daha spesifik olarak, pozisyonun açıldığı dakikanın değeri nasıl bulunur?
 
Aleksey Masterov :
Daha spesifik olarak, pozisyonun açıldığı dakikanın değeri nasıl bulunur?

TimeToStruct() kullanın

https://www.mql5.com/ru/docs/dateandtime/timetostruct

 
Igor Makanu :

TimeToStruct() kullanın

https://www.mql5.com/ru/docs/dateandtime/timetostruct

Evet, mt4'te var
 
Aleksey Masterov :
Evet, mt4'te var

mt4'te çalışıyor

 
Igor Makanu :

mt4'te çalışıyor

Başarılı bir şekilde tetiklenirse true dönen bu yapıdan pozisyonun açıldığı dakikanın değerini nasıl öğreneceğim hala net değil ...
 
Aleksey Masterov :
Başarılı bir şekilde tetiklenirse true dönen bu yapıdan pozisyonun açıldığı dakikanın değerini nasıl öğreneceğim hala net değil ...

tarihsaat o_open = OrderOpenTime();

MqlDateTime dt_struct;

TimeToStruct( o_open, dt_struct);

int min = dt_struct. dk;

 

Zor değilse, lütfen gösterge arabelleği verilerini okumaya çalışırken neyin yanlış olduğunu anlamama yardım edin.

İşte danışmandan gelen kod:

      if (IsTesting())
         {
         Trend    = GlobalVariableGet(GV_tradesTrend);
         TrendUP  = iCustom(NULL,0,"Used\\# Once Trades Trend",3,0);
         TrendDN  = iCustom(NULL,0,"Used\\# Once Trades Trend",4,0);
         if (TrendUP>0) {Trend=1; GlobalVariableSet(GV_tradesTrend,1);}
         if (TrendDN>0) {Trend=-1;GlobalVariableSet(GV_tradesTrend,-1);}
         if (Trend==1)  {GlobalVariableSet(GV_Trend,1);}
         if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
         if (Trend==0)  {GlobalVariableSet(GV_Trend,0);}
         }
      else
         {
         Trend = GetLastTrendChange();
         if (Trend==1)  {GlobalVariableSet(GV_Trend,1);}
         if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
         if (Trend==0)  {GlobalVariableSet(GV_Trend,0);}
         }
//+----------------------------------------------------------------------------+
int GetLastTrendChange()
   {
   int    trendType= 0 ;
   int    y= 0 ;
   int    t= 500 ;
   while (y<t)
      {
       if ( iOpen ( NULL , 0 ,t)==y) { return ( 0 );}
      trendType=FindTrendChange(y);
       if (trendType== 1 || trendType==- 1 ) { return (trendType);}
      y++;
      }
   return ( 0 );
   }
//+----------------------------------------------------------------------------+
int FindTrendChange( int index)
   {
   double    trendUP,trendDN;
   int       trendType= 0 ;
   trendUP = iCustom ( NULL , 0 , "Used\\# Once Trades Trend" , 3 ,index);
   trendDN = iCustom ( NULL , 0 , "Used\\# Once Trades Trend" , 4 ,index);
   if (trendUP> 0 ) {trendType= 1 ;}
   if (trendDN> 0 ) {trendType=- 1 ;}
   return (trendType);
   }
//+----------------------------------------------------------------------------+

Gerçek hayatta ve testlerde, fonksiyon aracılığıyla son değeri aramak işe yarar, ancak test feci şekilde yavaşlar (yarı yıl testi birkaç gün sürer).

Bu nedenle, test etmek için bir ikame kullanmaya ve son değeri global bir değişkende saklamaya karar verdim - EA arabellek verilerini görmeyi bıraktı. Üstelik boş tamponlar 0'a eşit olmasına rağmen nedense EA değişkenleri EMPTY_VALUE değerlerini alır ve değişmez.

iletişim

Ve veri penceresindeki arabellek satırının üzerine gelindiğinde araç ipucunda ilki 0 olmak üzere iki değer gösterilir, örneğin Değer 5; 0.0000; 0.8855.

Gösterge koduyla uğraşıyor olmama rağmen hiçbir şekilde çözemiyorum. İnternet aramaları ve belgeler yardımcı olmadı. Birisi bana bu göstergeye erişirken testin neden bu kadar yavaş olduğunu söyleyebilir mi?

Bana yardım et lütfen!

Dosyalar: