Fehler, Irrtümer, Fragen - Seite 2353

 
Alexey Navoykov:
Wo haben Sie schon mal Textgriffe gesehen? ) Und wenn wir die Dinge komplizierter machen, können Griffe auch als Struktur angegeben werden.
Ja... und so weiter:
struct A { int i; };
bool SelectHandle( A& ) { return true; }
A GetHandle() { A a; return a; }
A NewHandle;
datetime time = MACRO100( NewHandle, TimeCurrent());

funktioniert auch

 
A100:
Ja... und so weiter:

funktioniert auch

Es ist immer noch ein Array ) Und es muss zuerst in ein Byte-Array umgewandelt werden, und dann in eine Struktur mit der proprietären TypeToBytes-Bibliothek )

 
Alexey Navoykov:

Es ist noch ein Array übrig ) Und das muss zuerst in ein Array von Bytes umgewandelt werden, und dann in eine Struktur mit der proprietären TypeToBytes-Bibliothek )

Ich kann es nicht testen - ich habe keine solche Bibliotheksdatei (Build 1961x32). In einer Woche können Sie sich selbst davon überzeugen

 
Alexey Navoykov:
Wo haben Sie schon mal Textgriffe gesehen? ) Und wenn wir die Bedingungen verkomplizieren, können die Griffe auch als Struktur gesetzt werden.

Bitte geben Sie mir einen Link zu der Aufgabe.
Ich danke Ihnen.

 
Sergey Dzyublik:

Bitte geben Sie mir einen Link zu der Aufgabe.
Ich danke Ihnen.

https://www.mql5.com/ru/forum/1111/page2350#comment_9974834

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

pavlick_, 2018.12.21 17:23

int MACROS_helper_PrevHandle;
datetime MACROS_helper_time;
#define  MACROS(NEW_HANDLE_, FN_)   (MACROS_helper_PrevHandle=GetHandle())*0 == 0 ?  \
                                     (MACROS_helper_time=SelectHandle(NEW_HANDLE_) ? FN_ : 0)*0 == 0 ? \
                                        SelectHandle(MACROS_helper_PrevHandle)*0 == 0 ? MACROS_helper_time : 0 : 0 : 0
Leider bezieht sich diese Variante auf
Alexey Navoykov:
zu verwendendeglobale Variable.


Ich habe mir über dieses Problem noch nicht allzu viele Gedanken gemacht. Ich habe nicht sofort eine Lösung gefunden, also beschloss ich, mich in diesem Forum zu informieren. Ich interessiere mich nicht für Intrigen, weil ich sie in der Praxis nutzen möchte - Virtual-bibble, ohne die ich mir eine Kampf-EA nicht mehr vorstellen kann.

Nun, da zwei Personen bereits erklärt haben, dass es eine Lösung ohne zusätzliche Variablen gibt, werde ich es am Wochenende versuchen.

Lassen Sie mich präzisieren, dass NewHandle eine Konstante sein kann. D.h. ein gültiger Anruf.

time = MACROS(0, TimeCurrent()); // TimeCurrent из 0-хендла.
time = MACROS(1, TimeCurrent()); // TimeCurrent из 1-хендла.

MACROS(0, SymbolInfoTick(_Symbol, Tick)); // SymbolInfoTick из 0-хендла.

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
Price = MACROS(3, Bid); // Bid из 3-хендла.
 

fxsaber:

NewHandle kann eine Konstante sein. D.h. ein gültiger Aufruf wie dieser

Alles funktioniert:

#include "Простейшее.mqh"
 int GetHandle() { return 0; }
bool SelectHandle( int ) { return true; }
#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
void OnStart()
{
        datetime time = MACRO100(0, TimeCurrent());
                 time = MACRO100(1, TimeCurrent());
        MqlTick tick;
        MACRO100(0, SymbolInfoTick(_Symbol, tick));
        double price = MACRO100(3, Bid);
}

Wann sonst wird sich die Gelegenheit ergeben... zur Überprüfung der tatsächlichen Höhe
Nach den Diskussionen zu urteilen... hier... seriöse Progger, die geschickt mit hochtrabenden Worten jonglieren, u.a. über OOP, etc. (Manchmal verstehe ich nicht einmal mehr die Hälfte der Sprüche)

Und was ist echt? Lametta? Oder haben sich noch nicht alle angeschlossen?
Ich muss noch einmal betonen: Wenn etwas kompliziert...ungewöhnlich oder erfordern spezielle Kenntnisse - ich würde es sofort zu schreiben, und hier - die einfachste (!). Schalten Sie also Ihr Gehirn ein und schreiben Sie Optionen... Oder warten Sie!

 
Kannst du das in einen separaten Thread packen, der unter https://www.mql5.com/ru/forum/1111/page2350#comment_9974834 beginnt ? Es geht hier drinnen verloren, ich will sehen, wie der A100 Flüssigkeit scheißt.
 
pavlick_:
Ich möchte sehen, wie der A100 flüssig scheißt.

Warum machen Sie so einen Aufstand? Warum schaffen Sie nichteine dreistelligeStelle und lassen das Gericht entscheiden, wer sich in die Hose gemacht hat?

 
fxsaber:
Leider bezieht sich diese Option auf


Ich habe nicht viel über das Problem nachgedacht. Da ich vor Ort keine Lösung gefunden habe, beschloss ich, mich im Forum zu informieren. Die Intrigen sind nicht interessant, weil ich in der Praxis verwenden wollen - Virtual-bibble, ohne die ich nicht mehr vorstellen kann, einen Kampf EA.

Ich habe bereits auf verschiedene Weise darüber nachgedacht. Wenn ich es richtig verstehe, kommt es auf die Variabilität des vom Makro zurückgegebenen Typs an. Das Problem kann in C++ gelöst werden.

//------------------------------------ 1 вариант
template <typename T>
T f(T(*fp)()) {...}
//------------------------------------ 2 вариант
template <typename T>
struct Store {
   static inline T val;
};
int MACROS_helper_PrevHandle;
#define  MACROS(NEW_HANDLE_, FN_)   (MACROS_helper_PrevHandle=GetHandle())*0 == 0 ?           \
      (Store<decltype(FN_)>::val=SelectHandle(NEW_HANDLE_) ? FN_ : 0)*0 == 0 ?               \
      SelectHandle(MACROS_helper_PrevHandle)*0 == 0 ? Store<decltype(FN_)>::val : 0 : 0 : 0

Aber der gcc-Präprozessor kann das:

#define  M(FN_) ({int a=5; ; FN_;})
int ff() {return 50;}

int val = M(ff());

Die Versuche, all dies in µl umzusetzen, scheiterten. Vielleicht ist die beste Lösung, SelectHandle(new, set_next=INT_MAX) zu ändern. Aber vielleicht überrascht mich ja jemand mit einem kniffligen Makro.

Grund der Beschwerde: