Hatalar, hatalar, sorular - sayfa 3155

 
murziks # :


Söyle bana, csv yerine Metatrader başka ne okuyabilir?

İkili dosyalar okunabilir ve yazılabilir. Değişkenler, yapılar, diziler. Bütün bunlar dosyalara yazılır ve tekrar okunur.

 

Sevgili mobil terminal geliştiricileri, lütfen çalışmayı "Posta" sekmesindeki harflerle düzeltin.

Mobil terminalin (Android) son kurulumundan önce, çalışan bir hesaba bağlanırken, "Posta" sekmesinde, daha önce birkaç kez silinmiş olan mektuplar yığılmıştı.

Yalnızca, "Posta" sekmesinde olduğu gibi, silinmemiş ve önceden silinmiş mektuplardan oluşan bir yulaf lapası gibi hesaba yeniden bağlanmanız gerekir. Peki ondan kurtulmak için ne yapmak gerekiyor?

 

Onay kutusunun herhangi bir değeri için, "RMB > İşlem geçmişi" ve "F8 > Göster aracılığıyla işlem geçmişinin görüntülenmesini etkinleştirebilir/devre dışı bırakabilirseniz, lütfen PC "Araçlar > Ayarlar > İşlem geçmişini göster" terminalinde hangi değişiklikleri açıklayın ticaret geçmişi"?

Yani, terminalin genel ayarlarında, işlem geçmişinin görüntülenmesini engellememek için devre dışı bırakabilirim, ancak grafik ayarlarında veya RMB aracılığıyla etkinleştirilirse herhangi bir grafikte görüntülenecektir. mantığı anlamıyorum.

 

Sevgili PC terminal geliştiricileri. Uzun bir süre boyunca, grafik profilleriyle (şablonlarla değil, yani profillerle) çalışırken, profildeki herhangi bir değişikliğin manuel olarak belirtmeden otomatik olarak kaydedilmesine yol açan garip bir mantık korunmuştur.

Kullanıcı profili kurulum hataları veya terminal çökmeleri, yapılandırılması zor bir çalışma alanını bir su kabağına dönüştürür.

Peki, kullanıcı profili manuel olarak kaydetmemişken, profilde yapılan değişiklikler kaydedilmeyecek şekilde neden yapılamaz (geçici bir profil dosyasına kaydedilmelerine izin verin, son çalışma profili)?

Uzun yıllardır TradingView gibi yerleşik arayüzdeki değişiklikleri bekliyoruz, ancak bu sizin için kesinlikle zor değil ve Kullanıcılar için çok uygun.

 

Neden böyle bir fark, örneğin, " hesaplamaları hızlandırmak için pip cinsinden kar" onay kutusuna sahip bir test, %15'lik bir düşüş ve bu onay kutusu olmadan, %93'lük bir düşüş?

Hangi sonuç daha doğrudur?

İşlem sayısı aynı

Aynı zamanda, 1 durumda, kar 2 dolar ve ikinci durumda, aynı lot ile 20 dolar.

Partiyi değiştirirseniz de görülebilir, fark da 10k.

 
Teşekkür ederim. Ve sonra txt ve ben istemezdim
 
Kripto para birimleri MQ sunucularından kayboldu. Bozulma, üzüntü ve sıkıntı.
 

Genel/Sıradaki Hatalar.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

[OLASI HATA] CQueue kapsayıcı sınıfı

Loris De Marchi , 2022.02.14 13:00

Merhaba!

En azından CQueue::Contains(T item) ve CQueue::Remove(T item) yöntemlerinde bir hata olduğundan şüpheleniyorum.

Kuyruk, klasik bir baştan sona yuvarlak robin kullanılarak yönetilir, bu nedenle bu kod yanlış olmalıdır:

 //+------------------------------------------------------------------+
//| Removes all values from the CQueue<T>.                           |
//+------------------------------------------------------------------+
template < typename T>
bool CQueue::Contains(T item)
  {
   int count=m_size;
//--- try to find item in array
   while (count--> 0 )
     {
       //--- use default equality function
       if (::Equals(m_array[count],item))
         return ( true );
     }
   return ( false );
  }

Ayrıca yöntemin en üstte yanlış anlatılması bu dersi yazarken bazı hatalar yapılmış olabileceğini düşündürüyor.


Remove yöntemi, aşağıdaki gibi bu basit kodu çalıştırırken açıkça başarısız oluyor:

   CQueue< ulong > foo;
   foo.Enqueue( 1 );
   foo.Remove( 1 );
   foo.Enqueue( 2 );
   printf (foo.Contains( 2 ));

Öğe açıkça sıraya girdiğinde "yanlış" yazdırır...


Bu sınıf düzeltildiyse veya benimkilerden birini kullanmam gerekip gerekmediğini bana bildirin.

Teşekkür ederim!


 

Merhaba. MQL'de dizilerin hem doğrudan hem de ters indeksleme (seri) ile olabileceği bilinmektedir. Bu nedenle, bir sorum var, bir diziye veya ters indekslemeye ihtiyacınız varsa, MQL'de dizilerle çalışmanın en iyi yolu nedir? Bir dizi için dizine göre değer almanın ilk yolu şöyle görünebilir.

 double arrayValue( const double array[], conct int shift) {
   int len = ( int )array.Size();
   if (shift < 0 || shift >= len)
     return WRONG_VALUE ;
   return array[len - shift - 1 ];
}

ArraySetAsSeries kullanan ikinci seçenek.

 double arrayValue( double &array[], conct int shift) {
   int len = ( int )array.Size();
   double ret;
   if (shift < 0 || shift >= len)
     return WRONG_VALUE ;
   if (! ArraySetAsSeries (array, true ))
     return WRONG_VALUE ;
  ret = array[shift];
   ArraySetAsSeries (array, false );
   return ret;
}

Tabii ki, bir şey iddia etmiyorum, ama bence dizi bir nesne olduğu için ( hatta görülebilir   verilen örneklerin kodundan), ardından ArraySetAsSeries diziye seri bayrağını açar ve index ile değere erişirken , ilk örnekteki gibi olur.

 double arrayValue( const double array[], conct int shift) {
   int len = ( int )array.Size();
   if (shift < 0 || shift >= len)
     return WRONG_VALUE ;
   return array[ len - shift - 1 ];
}

Ve yaklaşık olarak, endekse göre değer konusunda bir takıntı var.

Göstergelerin OnCalculate işleyicisine her seferinde diziler için bir dizi eklemek mantıklı mı, yoksa oranların toplam dizilerinin uzunluğunu kullanarak alt çubuğa başvurmak daha mı iyi?

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[]) 
{
   Print (price[rates_total- 1 ]); // получение цены на младшем баре без использования серии
   return (rates_total);
}

Sunulan bu iki yöntemin hızı aynı mı yoksa düşüncemde bir yerde mi yanılıyorum?

 

Terminal, kapatılan pozisyonların birikmiş karını iade etmez. Söyle bana, sorun nerede olabilir?

 double GetClosedPositionsInstrumentProfit( string symbol, datetime from) 
{
   HistorySelect (from, TimeCurrent ());

   double profitSum = 0 ;

       for ( int i = HistoryDealsTotal ()- 1 ; i >= 0 ; i--) 
    {   
       ulong ticket = HistoryDealGetTicket (i);
       if (ticket < 0 ) continue ; 
       long magic = HistoryDealGetInteger (ticket, DEAL_MAGIC );
       if (magic != EXPERT_MAGIC) continue ; 
       string positionSymbol = HistoryDealGetString (ticket, DEAL_SYMBOL );
       if (symbol != positionSymbol) continue ; 
      
       double profit = HistoryDealGetDouble (ticket, DEAL_PROFIT ) + HistoryDealGetDouble (ticket, DEAL_SWAP )+ HistoryDealGetDouble (ticket, DEAL_COMMISSION );
      profitSum += profit; 
         
       Print ( "Profit " + DoubleToString (profitSum, 2 ));              
    }         
   return profitSum;
}