Erreurs, bugs, questions - page 2353

 
A100:
Oui... et ainsi de suite :

fonctionne également

Il y a toujours un tableau ) Et il doit d'abord être transformé en tableau d'octets, puis converti en structure à l'aide de la bibliothèque propriétaire TypeToBytes )

 
Alexey Navoykov:

Il reste encore un tableau). Il faut d'abord le transformer en un tableau d'octets, puis le convertir en une structure à l'aide de la bibliothèque propriétaire TypeToBytes) .

Je ne peux pas le tester - je ne dispose pas d'un tel fichier de bibliothèque (build 1961x32). Dans une semaine, vous pourrez constater par vous-même

 
Alexey Navoykov:
Où avez-vous vu des poignées de texte ? ) Et si nous compliquons les conditions, les poignées peuvent également être définies comme une structure.

Veuillez me donner un lien vers la tâche.
Merci.

 
Sergey Dzyublik:

Veuillez me donner un lien vers la tâche.
Merci.

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

 

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

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
Malheureusement, cette variante fait référence à
Alexey Navoykov:
variable globale à utiliser.


Je n'ai pas trop réfléchi à ce problème. Je n'ai pas trouvé de solution immédiate, alors j'ai décidé de me renseigner sur ce forum. L'intrigue ne m'intéresse pas, parce que je veux l'utiliser dans la pratique - le Virtual-bibble, sans lequel je ne peux plus imaginer une EA de combat.

Eh bien, comme deux personnes ont déjà déclaré qu'il existe une solution sans variables supplémentaires, je vais l'essayer pendant le week-end.

Je précise que NewHandle peut être une constante. C'est-à-dire un appel valide.

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 peut être une constante. C'est-à-dire un appel valide comme celui-ci

Tout fonctionne :

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

Quand l'occasion se présentera-t-elle... pour vérifier le niveau réel
A en juger par les discussions... ici... des blogueurs sérieux qui jonglent habilement avec des mots qui sonnent bien, y compris sur OOP, etc. (Parfois, je ne comprends même pas plus de la moitié des dictons).

Et qu'est-ce qui est réel ?! Tinsel ? Ou tout le monde ne s'est pas encore inscrit ?
Je dois souligner une fois de plus : si quelque chose de compliqué... d'inhabituel ou nécessitant des connaissances particulières - je l'écrirais immédiatement, et ici - le plus simple ( !). Alors allumez votre cerveau et écrivez des options... Ou attendez !

 
Pouvez-vous le mettre dans un fil séparé à partir de https://www.mql5.com/ru/forum/1111/page2350#comment_9974834 ? Ça va se perdre ici, je veux voir comment l'A100 chie du liquide.
 
pavlick_:
Je veux voir comment l'A100 chie du liquide.

Pourquoi tu fais des histoires ? Pourquoi ne pas créerun emploi à trois chiffres et laisser le tribunal décider qui s'est chié dessus ?

 
fxsaber:
Malheureusement, cette option fait référence à


Je n'ai pas beaucoup réfléchi à ce problème. Je n'ai pas trouvé de solution sur place, j'ai donc décidé de l'apprendre sur le forum. L'intrigue n'est pas intéressante, car je veux utiliser en pratique - Virtual-bibble, sans lequel je ne peux plus imaginer une EA de combat.

J'y ai déjà réfléchi de différentes manières. Si je comprends bien, c'est la variabilité du type renvoyé par la macro qui importe. Elle peut être résolue en 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

Mais le préprocesseur de gcc peut le faire :

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

int val = M(ff());

Les tentatives d'implémenter tout cela en µl se sont soldées par un échec. La meilleure solution consiste peut-être à modifier SelectHandle(new, set_next=INT_MAX). Mais peut-être que quelqu'un me surprendra avec une macro délicate.

 
fxsaber:

Bon, puisque deux personnes ont déjà déclaré qu'il existe une solution sans variables supplémentaires, je vais y réfléchir pendant le week-end.

Je me demande qui a dit ça ? PrevHandle doit être stocké quelque part de toute façon.