Errori, bug, domande - pagina 2353

 
Alexey Navoykov:
Dove avete visto maniglie di testo? ) E se complichiamo le cose, le maniglie possono anche essere specificate come una struttura.
Sì... e così via:
struct A { int i; };
bool SelectHandle( A& ) { return true; }
A GetHandle() { A a; return a; }
A NewHandle;
datetime time = MACRO100( NewHandle, TimeCurrent());

funziona anche

 
A100:
Sì... e così via:

funziona anche

C'è ancora un array ) E deve essere trasformato prima in un array di byte, e poi convertito in una struttura usando la libreria proprietaria TypeToBytes )

 
Alexey Navoykov:

C'è ancora un array rimasto ) E deve essere trasformato prima in un array di byte, e poi convertito in una struttura usando la libreria proprietaria TypeToBytes )

Non posso testarlo - non ho un tale file di libreria (build 1961x32). Tra una settimana potrete vedere voi stessi

 
Alexey Navoykov:
Dove avete visto maniglie di testo? ) E se complichiamo le condizioni, le maniglie possono anche essere impostate come una struttura.

Per favore, datemi un link al compito.
Grazie.

 
Sergey Dzyublik:

Per favore, datemi un link al compito.
Grazie.

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

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

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
Sfortunatamente, questa variante si riferisce a
Alexey Navoykov:
variabile globale da usare.


Non ho pensato troppo a questo problema. Non ho trovato subito una soluzione, così ho deciso di imparare su questo forum. Non mi interessa l'intrigo, perché voglio usarlo in pratica - Virtual-bibble, senza il quale non riesco più a immaginare un combattimento EA.

Bene, visto che due persone hanno già dichiarato che esiste una soluzione senza variabili aggiuntive, la proverò nel fine settimana.

Lasciatemi specificare che NewHandle può essere una costante. Cioè una chiamata valida.

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 può essere una costante. Cioè una chiamata valida come questa

Tutto funziona:

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

Quando mai si presenterà l'occasione... per controllare il livello reale
A giudicare dalle discussioni... qui... seri proggers che si destreggiano abilmente tra parole altisonanti come OOP, ecc. (A volte non capisco nemmeno più della metà dei detti)

E cos'è reale?! Tinsel? O non tutti si sono ancora iscritti?
Devo sottolineare ancora una volta: se qualcosa di complicato... insolito o che richiede conoscenze speciali - lo scriverei immediatamente, e qui - il più semplice (!). Quindi accendi il tuo cervello e scrivi opzioni... O aspetta!

 
Puoi metterlo in un thread separato a partire da https://www.mql5.com/ru/forum/1111/page2350#comment_9974834? Si perderà qui, voglio vedere come l'A100 caga liquido.
 
pavlick_:
Voglio vedere come l'A100 caga liquidi.

Perché fai tante storie? Perché non createun lavoro a tre cifre e lasciate che sia il tribunale a decidere chi si è cagato addosso?

 
fxsaber:
Sfortunatamente, questa opzione si riferisce a


Non ho pensato molto al problema. Non ho trovato una soluzione sul posto, così ho deciso di impararla sul forum. Gli intrighi non sono interessanti, perché voglio usare in pratica - Virtual-bibble, senza il quale non posso più immaginare un combattimento EA.

Ci ho già pensato in diversi modi. Se ho capito bene, è la variabilità del tipo restituito dalla macro che conta. Può essere risolto in C++.

//------------------------------------ 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

Ma il preprocessore gcc può farlo:

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

int val = M(ff());

I tentativi di implementare tutto questo in µl sono finiti in un fallimento. Forse la soluzione migliore è modificare SelectHandle(new, set_next=INT_MAX). Anche se forse qualcuno mi sorprenderà con una macro complicata.