Domanda sulla digitazione - pagina 6

 
Per quanto mi ricordo, C# non è un buon amico di mql
 
Ilya Malev:
Per quanto mi ricordo, C# non è buon amico di mql

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

10. MQL5: Aggiunto il supporto nativo per le librerie .NET con importazione di funzioni "intelligenti". Ora puoi usare le librerie .NET senza scrivere wrapper speciali - MetaEditor si occupa di questo.

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.25
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Non chiamando a scrivere in C#. Solo che i benefici della conversione implicita sono discutibili (imho, zucchero, non di più), non aumenta la redditività delle strategie. Se qualcuno può spiegare perché aiuta così tanto quando si codificano le strategie, sarei felice di imparare qualcosa di nuovo.
 
Vasiliy Sokolov:
Non aumenta la redditività delle strategie.

Fare riferimento alla redditività delle strategie quando si parla di tecniche di programmazione è piuttosto deprimente.

Vasiliy Sokolov:
Se qualcuno può spiegare perché aiuta così tanto nella codifica - sarò felice di imparare qualcosa di nuovo.

Non riesci nemmeno a creare correttamente il tuo array multidimensionale. Figuriamoci un array con diversi tipi di valori. Non si può nemmeno fare con uno solo, perché tale codice non entrerebbe in mql:

  Array array;

  double d=123.456;

  array[5]=d;

  d=array[5];

Naturalmente, potete scrivere d=array[5].to_double(), far finta che sia così ed essere felici del vostro brutto codice. Ma se l'overloading delle operazioni di conversione dei tipi fosse permesso, quasi nessuno preferirebbe questo modo di scrivere d=array[5].

 
Ilya Malev:

...

Naturalmente potete scrivere d=array[5].to_double(), fingere che questo sia corretto ed essere felici del vostro codice buggato. Ma se l'overloading delle operazioni di conversione dei tipi fosse permesso, quasi nessuno preferirebbe questo modo di scrivere d=array[5].

Semplice. d=array[5] potrebbe:

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);
}

Se si diventa nerd, ci sono ancora difficoltà con array[3] = 4.00123; Ma è leggibile e va bene così com'è.

 
Vasiliy Sokolov:

Giusto. d=array[5] va bene:

Se si diventa noiosi, allora ci sono difficoltà con array[3] = 4.00123; Ma è leggibile e abbastanza buono così com'è.

Sì, d=array[5] va bene. ma poi non puoi fare array[5]=d. Ma si può fare %= al posto di =. nessun problema, allo stesso tempo l'icona ci ricorderà attraverso quale luogo si fa tutto))

 
Ilya Malev:

Sì, d=array[5] può. ma allora non puoi fare array[5]=d. Ma puoi fare %= invece di =. Nessun problema, e l'icona ti ricorderà quale posto usare))

Se vuoi davvero farlo, puoi fare così

#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);
}

ecc.

 
pavlick_:

Anch'io ero critico all'inizio, ma poi ho pensato che avrei trovato un uso per me stesso:

Ho chiesto un operatore di parentesi e un operatore di colpo d'uva circa tre o quattro anni fa.

chiedete, forse potete fare di meglio.

 
È un peccato che tu non possa aggiungere dei "plus" ai tuoi post).
 
Ilya Malev:

...

Naturalmente potete scrivere d=array[5].to_double(), fingere che questo sia corretto ed essere felici del vostro codice buggato. Ma se l'overloading delle operazioni di conversione dei tipi fosse permesso, quasi nessuno preferirebbe questo modo di scrivere d=array[5].

Che problemi ha la gente))) Oh, che la mia vita sia benedetta!

A proposito, scrivered=array[5].to_double() è molto più semplice did=(double)array[5] Basta premere un punto. Ma non stiamo cercando modi facili...