Erros, bugs, perguntas - página 2353

 
Alexey Navoykov:
Onde é que já viu os cabos de texto? ) E se complicarmos as coisas, as pegas também podem ser especificadas como uma estrutura.
Sim... e assim por diante:
struct A { int i; };
bool SelectHandle( A& ) { return true; }
A GetHandle() { A a; return a; }
A NewHandle;
datetime time = MACRO100( NewHandle, TimeCurrent());

também funciona

 
A100:
Sim... e assim por diante:

também funciona

Ainda existe uma matriz ) E tem de ser primeiro transformada numa matriz de bytes, e depois convertida numa estrutura utilizando a biblioteca proprietária TypeToBytes )

 
Alexey Navoykov:

Ainda resta uma matriz ) E tem de ser feita primeiro numa matriz de bytes, e depois convertida numa estrutura utilizando a biblioteca proprietária TypeToBytes )

Não posso testá-lo - não tenho tal arquivo de biblioteca (build 1961x32). Dentro de uma semana poderá ver por si

 
Alexey Navoykov:
Onde é que já viu os cabos de texto? ) E se complicarmos as condições, as pegas também podem ser definidas como uma estrutura.

Por favor, dê-me um link para a tarefa.
Obrigado.

 
Sergey Dzyublik:

Por favor, dê-me um link para a tarefa.
Obrigado.

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

 

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

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
Infelizmente, esta variante refere-se a
Alexey Navoykov:
variável global a utilizar.


Não tenho pensado muito sobre este problema. Não encontrei de imediato uma solução, por isso decidi aprender neste fórum. Não estou interessado na intriga, porque quero usá-la na prática - Virtual-bibble, sem a qual já não consigo imaginar uma EA de combate.

Bem, como duas pessoas já afirmaram que existe uma solução sem variáveis adicionais, vou experimentá-la no fim-de-semana.

Deixe-me especificar que o NewHandle pode ser uma constante. Isto é, uma chamada válida.

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 pode ser uma constante. Isto é, uma chamada válida como esta

Tudo funciona:

#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 outra oportunidade surgirá... para verificar o nível real
A julgar pelas discussões... aqui... faz malabarismos sérios com palavras sonantes, incluindo sobre o OOP, etc. (por vezes nem sequer compreendo mais de metade dos provérbios)

E o que é real?! Tinsel? Ou nem todos se juntaram ainda?
Devo salientar mais uma vez: se algo complicado...invulgar ou que requeira conhecimentos especiais - eu escreveria imediatamente, e aqui - o mais simples (!). Então, ligue o seu cérebro e escreva opções... Ou espere!

 
Pode colocá-lo numa linha separada, começando em https://www.mql5.com/ru/forum/1111/page2350#comment_9974834? Vai perder-se aqui dentro, quero ver como o A100 está a cagar líquido.
 
pavlick_:
Quero ver como o A100 caga líquido.

Porque é que está a fazer barulho? Porque não criaum trabalho de três dígitos e deixa o tribunal decidir quem se cagou?

 
fxsaber:
Infelizmente, esta opção refere-se a


Não tenho pensado muito no problema. Não encontrei uma solução no local, por isso decidi aprendê-la no fórum. As intrigas não são interessantes, porque quero usar na prática - Bíblias virtuais, sem as quais já não consigo imaginar uma EA de combate.

Já pensei sobre isso de diferentes maneiras. Se bem entendi, o que importa é a variabilidade do tipo retornado da macro. Pode ser resolvido em 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

Mas o pré-processador gcc pode fazê-lo:

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

int val = M(ff());

As tentativas de implementar tudo isto em µl acabaram em fracasso. Talvez a melhor solução seja modificar SelectHandle(new, set_next=INT_MAX). Embora, talvez alguém me surpreenda com uma macro complicada.