Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 7

 
RAM dosyalarıyla çalışmak için aşağıdaki yapıyı kullanabilirsiniz.
const int handleRAM = FileOpen ( "\\\\.\\pipe\\RAM" , FILE_READ | FILE_WRITE | FILE_BIN );

İlgili dosyayı daha önce oluşturmuş olmak.

Böyle bir uygulama ile, örneğin, herhangi bir boyuttaki (ve farklı olanlardan) dizileri birbirine kopyalamak için uygun / hızlıdır - HDD / SDD'ye tecavüz etmeden.

// Копирование массивов любых размерностей (и разных) друг в друга
#define ARRAYCOPY(Dest, Source) \
   if ( ArraySize (Source) > 0 )                                                                  \
  {                                                                                           \
     const int handleRAM = FileOpen ( "\\\\REN\\pipe\\RAM" , FILE_READ | FILE_WRITE | FILE_BIN );  \
                                                                                              \
     if (handleRAM != INVALID_HANDLE )                                                          \
    {                                                                                         \
       if ( FileWriteArray (handleRAM, Source) > 0 )                                              \
         FileReadArray (handleRAM, Dest);                                                       \
                                                                                              \
       FileClose (handleRAM);                                                                   \
    }                                                                                         \
  }
Bu evrensel bir çözümdür. Bu tür kopyalamanın klasiği şöyle görünür
// Копирует двумерный массив в одномерный
#define MATRIX_TO_VECTOR(Matrix, Vector)      \
   if ( ArraySize (Matrix) > 0 )                  \
  {                                           \
     const int Range1 = ArrayRange (Matrix, 0 ); \
     const int Range2 = ArrayRange (Matrix, 1 ); \
                                              \
     ArrayResize (Vector, Range1 * Range2);     \
                                              \
     int k = 0 ;                                \
                                              \
     for ( int i = 0 ; i < Range1; i++)          \
       for ( int j = 0 ; j < Range2; j++)        \
      {                                       \
        Vector[k] = Matrix[i][j];             \
                                              \
        k++;                                  \
      }                                       \
  }

// Копирует одномерный массив в  двумерный
#define VECTOR_TO_MATRIX(Vector, Matrix)                               \
   if ( ArraySize (Vector) > 0 )                                           \
  {                                                                    \
     const int Size = ArraySize (Vector);                                \
     const int Range = ArrayRange (Matrix, 1 );                           \
                                                                       \
     ArrayResize (Matrix, Size / Range + ((Size % Range == 0 ) ? 0 : 1 )); \
                                                                       \
     for ( int i = 0 ; i < Size; i++)                                     \
      Matrix[i / Range][i % Range] = Vector[i];                        \
  }
Genel bir diziyi bir işleve geçiremeyeceğiniz için işlevler yerine makrolar kullanılır.
 
Dmitry Fedoseev :

Mesele şu ki, OnTradeTransaction() içinde OrderSend'den hemen sonra çalışmayacaktır.

Kısacası, anlaşmazlığın konusuna girmeden tartışacak bir sevgili kalabalığı var.

OrderSend()'den hemen sonra bir şeyler yapmanız gerekiyorsa, algoritmanın iki çeşidi vardır:

1. Sipariş ve anlaşma listelerini güncellemek için bekleme döngüsünü açın.

2. OnTick()'i bitirin ve OnTradeTransaction()'ın tetiklenmesini bekleyin.

3. Listede yeni bir sipariş veya anlaşmanın görünüp görünmediğini kontrol edin.

2 ve 3) seçiyorum)
 
mql5'teki dörtlü MODE_MARGINREQUIRED'in yerini ne alabilir?
 
Artyom Trishkin :
mql5'teki dörtlü MODE_MARGINREQUIRED'in yerini ne alabilir?

Geliştiricilere sormanız gereken şey bu, çünkü forum üyelerinin hiçbiri bunu bilmiyor. Bu soruyu farklı başlıklarda 4 kez sordum, hatta bir kez cevabını bile aldım: "aramayı kullan" ama aramada 100'den fazla soru var ve tek bir cevap yok. Geliştirici, muhtemelen ilk beşte mevduat para birimi dışındaki çiftler için marj almanın bir yolu olmadığı için soruyu yanıtlamıyor .

Her nasılsa ilk beşte her şey hala nemli ve öyle kalacak gibi görünüyor, ancak herkesin ihtiyaç duyduğu OpenGL var =)

 
Artyom Trishkin :
mql5'teki dörtlü MODE_MARGINREQUIRED'in yerini ne alabilir?
OrderCalcMargin() https://www.mql5.com/en/docs/trading/ordercalcmargin&#39;i deneyin
 
Andrey Barinov :
OrderCalcMargin() deneyin

Bu anlaşılabilir, ancak göstergeden çalışmıyor

   double One_Lot= 0.0 ;
   OrderCalcMargin ( ORDER_TYPE_BUY , Symbol (), 1.0 , SymbolInfoDouble ( Symbol (), SYMBOL_ASK ),One_Lot);
   Comment (One_Lot); // залог на 1 лот
 
Vitaly Muzichenko :

Anlaşılır, ancak göstergeden çalışmıyor

   double One_Lot= 0.0 ;
   OrderCalcMargin ( ORDER_TYPE_BUY , Symbol (), 1.0 , SymbolInfoDouble ( Symbol (), SYMBOL_ASK ),One_Lot);
   Comment (One_Lot);
Bu konuda doğrudan https://www.mql5.com/ru/docs/runtime/running göstergesinden çalışmadığı yardımında yazılmıştır.
 
Andrey Barinov :
Bu konuda doğrudan https://www.mql5.com/ru/docs/runtime/running göstergesinden çalışmadığı yardımında yazılmıştır.
Program türünden bağımsız bir hesaplama istiyorum.
 
Artyom Trishkin :
Program türünden bağımsız bir hesaplama istiyorum.
oooo bende öyle istiyorum :)
 
Andrey Barinov :
oooo bende öyle istiyorum :)
Şey... Cevap bu değil...
Ve bu soru sadece dalın konusuyla ilgili.