Yazma hakkında soru - sayfa 6

 
Hatırladığım kadarıyla, C# mql ile iyi arkadaş değil
 
Ilya Malev :
Hatırladığım kadarıyla, C# mql ile iyi arkadaş değil

https://www.mql5.com/ru/forum/285631

10. MQL5: "Akıllı" işlevlerin içe aktarılmasıyla .NET kitaplıkları için yerel destek eklendi. Artık .NET kitaplıkları özel sarmalayıcılar yazmadan kullanılabilir - MetaEditor bununla ilgilenir.

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.25
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
C# üzerine yazmaya teşvik etmiyorum. Sadece örtük dönüşümün faydaları şüphelidir (IMHO, şeker, artık yok), bu stratejilerin karlılığını artırmaz. Birisi bunun stratejileri kodlamada nasıl bu kadar yardımcı olacağını açıklarsa, yeni bir şey öğrenmekten memnuniyet duyacağım.
 
Vasiliy Sokolov :
Bu, stratejilerin karlılığını artırmaz.

Programlama tekniklerini tartışırken stratejilerin karlılığından bahsetmek oldukça iç karartıcı.

Vasili Sokolov :
Birisi bunun kodlamaya nasıl bu kadar yardımcı olacağını açıklarsa, yeni bir şey öğrenmekten memnuniyet duyacağım.

Dolayısıyla diziyi çok boyutlu yapmamak bile normaldir. Farklı değer türlerine sahip bir diziden bahsetmiyorum bile. Biriyle bile yapamazsınız, çünkü böyle bir kod mql'ye sığmaz:

  Array array;

   double d= 123.456 ;

  array[ 5 ]=d;

  d=array[ 5 ];

Elbette buraya d=array[5].to_double() yazabilir, olması gerektiği gibi davranabilir ve çarpık kodunuzun keyfini çıkarabilirsiniz. Ancak , döküm işlemlerinin aşırı yüklenmesine hala izin verilseydi, herhangi birinin böyle bir d=dizi[5] gösterimini tercih etmesi olası değildir.

 
Ilya Malev :

...

Elbette buraya d=array[5].to_double() yazabilir, olması gerektiği gibi davranabilir ve çarpık kodunuzun keyfini çıkarabilirsiniz. Ancak , döküm işlemlerinin aşırı yüklenmesine hala izin verilseydi, herhangi birinin böyle bir d=dizi[5] gösterimini tercih etmesi olası değildir.

Pekala, düz. d=dizi[5] şunları yapabilirsiniz:

 template < typename T>
class MainArray
{
private :
   T m_items[];
   int m_curr;
public :
   MainArray()
   {
       ArrayResize (m_items, 16 );
      m_curr = 0 ;
   }
   void Add(T item)
   {
      m_items[m_curr++] = item;
   }
   T operator []( int index)
   {
       return m_items[index];
   }
};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   MainArray< double > array;
   array.Add( 123.456 );
   double v = array[ 0 ];
   printf (( string )v);
}

Eğer sıkıldıysanız dizi[3] = 4.00123; Ama yine de oldukça okunaklı ve kullanışlı.

 
Vasiliy Sokolov :

Pekala, düz. d=dizi[5] şunları yapabilirsiniz:

Eğer sıkıldıysanız dizi[3] = 4.00123; Ama yine de oldukça okunaklı ve kullanışlı.

Evet, d=dizi[5] mümkündür. ancak o zaman [5]=d dizisini yapamazsınız. = yerine %= yapmak oldukça mümkün olsa da. sorun değil, aynı zamanda simge size her şeyin hangi yerden yapıldığını hatırlatacaktır))

 
Ilya Malev :

Evet, d=dizi[5] mümkündür. ancak o zaman dizi[5]=d yapamazsınız . = yerine %= yapmak oldukça mümkün olsa da. sorun değil, aynı zamanda simge size her şeyin hangi yerden yapıldığını hatırlatacaktır))

Eğer gerçekten istiyorsan, yapabilirsin

 #property strict

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

#define PRINT(A) :: Print ( #A + " = " + ( string )(A));

void OnStart ( void )
{
// Работа со стандартными типами
   color Color = C'241,248,255' ;

  PRINT(_R(Color)[( uchar ) 1 ])             // Green-составляющая цвета - 248

   _W(Color)[ 2 ] = ( uchar ) 230 ;             // Записали по смещению 2 значение (uchar)230.
  PRINT(Color)                           // Убедились, что Color теперь C'241,248,230'

// Работа со строками
   string Str = "abcd" ;

   _W(Str)[ 2 ] = "98765" ;                   // Побайтовая запись строки в строку со смещением 2
  PRINT(Str)

   string StrArray[] = { "123" , "45" , "6789" };
  _W(Str) = StrArray;                     // Записали в строку строковый массив
  PRINT(Str)

   _W(Str)[ 3 ] = ( uchar ) 0 ;                 // В байт со смещением 3 записали ноль, тем самым отбрезав строку (длина - 3 ANSI-символа (4 байта))
  PRINT(Str);
}

vb.

 
pavlick_ :

İlk başta ben de eleştireldim ve sonra düşündüm - kendime bir kullanım bulurdum:

Evet, kahretsin, üç dört yıl önce parantez operatörünü ve tip döküm operatörünü istemiştim.

daha iyisini yapıp yapamayacağını sor

 
Buradaki yazılara artı koyamamanız üzücü)
 
Ilya Malev :

...

Elbette buraya d=array[5].to_double() yazabilir, olması gerektiği gibi davranabilir ve çarpık kodunuzun keyfini çıkarabilirsiniz. Ancak , döküm işlemlerinin aşırı yüklenmesine hala izin verilseydi, herhangi birinin böyle bir d=dizi[5] gösterimini tercih etmesi olası değildir.

Eh, insanların sorunları var))) Alışveriş, ben böyle yaşadım!

Bu arada, d=array[5].to_double() yazmak d=(double)array[ 5] yazmaktan çok daha kolay, sadece noktaya basın. Ama kolay yollar aramıyoruz...