Fragen zu OOP in MQL5 - Seite 60

 
Igor Makanu:

Hallo noch mal!


diese Frage, es ist ein enum , brauchen wir entweder ein Array enum oder eine Liste enum oder ein Container enum - etwas, wo 7 enum zu speichern, aber der Appetit wächst, vielleicht 70 enum


Wo?

Je nach Aufgabe können sowohl Array als auch Liste und Container verwendet werden. So wie ich es verstehe, müssen Sie höchstwahrscheinlich das Schreiben des Codes vereinfachen, dann können Sie die Enums in Gruppen aufteilen und sie in Strukturen für die Parameter jedes Objekts kombinieren.

Wenn es um die Ausführungsphase geht, ist es meiner Meinung nach üblich, Enums nur für die Angabe von Werten/Paaren zu verwenden. Und um sie zu speichern, verwenden Sie einen einfachen Basistyp.

 
Aleksey Mavrin:

Je nach Aufgabe können Sie ein Array, eine Liste oder einen Container erstellen. So wie ich es verstehe, müssen Sie wahrscheinlich den Code vereinfachen, dann können Sie die Enums in Gruppen aufteilen und sie in Strukturen für Parameter für jedes Objekt kombinieren.

Wenn es um die Ausführungsphase geht, ist es meiner Meinung nach üblich, Enums nur für die Angabe von Werten/Paaren zu verwenden. Und um sie zu speichern, verwenden Sie einen einfachen Basistyp.

tat so auf den ersten, ich ging weg von ihm aus irgendeinem Grund, es scheint, es gab Probleme mit der Initialisierung solcher Felder, oder vielmehr mit Autocomplete-Varianten von enum in ME in einigen Build, vielleicht aufgrund der Tatsache, dass ein Teil des Codes in der anderen Injektor war.... lassen Sie uns diese Option prüfen.


Ich habe im Internet gesurft und möchte etwas Scharfes wie das hier... einige Eigenschaften (((.

 public class COrder
    {
        public enum E_MOTION { HIGHER, LOWER, ZIGZAG }
        public enum E_VOLUME { FIXED, INC, DEC }
        public E_MOTION OrderMotionType { get; set; }
        public E_VOLUME OrderVolumeType { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var current = new COrder { OrderMotionType = COrder.E_MOTION.HIGHER, OrderVolumeType = COrder.E_VOLUME.FIXED };
            
        }
    }
 
Igor Makanu:

tat dies zunächst, aus irgendeinem Grund habe ich es aufgegeben, es scheint, dass es Probleme mit der Initialisierung solcher Felder gab, oder vielmehr mit der Autovervollständigung von Enum-Varianten in ME in einigen Builds, wahrscheinlich weil ein Teil des Codes in einem anderen Injektor war.... lassen Sie uns diese Option prüfen.


Ich habe im Internet gesurft und möchte etwas Scharfes wie das hier... irgendeine Art von Eigenschaften (((

Wo liegt das Problem?

Wenn es eins-zu-eins ist, dann:

class COrder
{
public:
   enum E_MOTION { HIGHER, LOWER, ZIGZAG };
   enum E_VOLUME { FIXED, INC, DEC };
   E_MOTION orderMotionType;
   E_VOLUME orderVolumeType;
   COrder(E_MOTION _motion, E_VOLUME _volume):orderMotionType(_motion),orderVolumeType(_volume){}
};

void OnStart(){
   COrder* current = new COrder(COrder::HIGHER,COrder::FIXED);
 } 

Dies ist der Fall, wenn Sie die Aufzählung nicht in einen globalen Bereich stellen wollen.

 
Vladimir Simakov:

Dies ist der Fall, wenn Sie die Aufzählung nicht in den globalen Bereich stellen wollen.

Hmm ...

Ich wusste nur nicht, wie ich das anstellen sollte:

 COrder* current = new COrder(COrder::HIGHER,COrder::FIXED);

Danke!

 

Hat jemand eine elegante Lösung für JSON, um unkomplizierte Objekte hochzuladen?

Ich brauche ein Beispiel für einen solchen Code für MQL:

public class COrder
    {
        public enum E_MOTION { HIGHER, LOWER, ZIGZAG }
        public enum E_VOLUME { FIXED, INC, DEC }

        public bool IsRunning { get; set; }
        public int OpenPrice { get; set; }
        public int ClosePrice { get; set; }
        public E_VOLUME OrderVolumeType { get; set; }
        public E_MOTION OrderMotionType { get; set; }
        
    }

    class Program
    {
        static void Main(string[] args)
        {
            var current = new COrder {
                IsRunning = false, 
                OpenPrice = 1200,
                ClosePrice = 1300,
                OrderMotionType = COrder.E_MOTION.ZIGZAG, 
                OrderVolumeType = COrder.E_VOLUME.FIXED };

            string json = JsonSerializer.Serialize<COrder>(current);
            Console.WriteLine(json);
            Console.ReadLine();
        }
    }

{"IsRunning":false,"OpenPrice":1200,"ClosePrice":1300,"OrderVolumeType":0,"OrderMotionType":2}

MQL Serializer verfügbarunter https://www.mql5.com/ru/code/13663

aber ich verstehe die Struktur der korrekten Feldüberquerung nicht

 
Igor Makanu:

Aber ich habe keine Ahnung, wie man die Felder des Objekts richtig durchläuft

Makros sind alles.)
 
Alexey Navoykov:
Makros sind alles!)

Aha... Ich werde es noch einmal versuchen:

BITTE HELFEN SIE MIR, EINEM PRÜFER ZU HELFEN!

 
Igor Makanu:

Aha... Ich werde es noch einmal versuchen:

HELFEN SIE MIR UND BENÖTIGEN SIE EIN BEISPIEL! Bitte!

Nun, wenn die Frage speziell auf die Umgehung der Felder abzielt, lautet sie in etwa so:

#define SERIALIZE5(object, m1, m2, m3, m4, m5)  /* your code */

...

SERIALIZE5(current, IsRunning, OpenPrice, ClosePrice, OrderVolumeType, OrderMotionType);

Und Sie können den Körper des Makros selbst ausarbeiten).

 
Alexey Navoykov:

Nun, wenn es bei der Frage speziell um Field Traversal geht, ist es mehr oder weniger wie folgt:

Und Sie können den Körper des Makros selbst ausarbeiten).

OK, das ist doch schon mal was!

Ich danke Ihnen!

 
Andererseits ist es für die Serialisierung wahrscheinlich besser, die Textnamen der Felder explizit anzugeben, so dass Sie sie später im Code umbenennen können, ohne befürchten zu müssen, dass die gespeicherten Dateien nicht mehr funktionieren.
Grund der Beschwerde: