Como você vê o Metatrader X em 2030? - página 6

 
fxsaber:

Escreva qualquer dado para o global pode ser visto aqui nos inlúdios correspondentes.

OK, ainda não vi esta solução.

Não é fácil de descobrir, você tem que verificar

 
fxsaber:

Quaisquer dados escritos para o global podem ser vistos aqui nos inlúdios correspondentes.

Você está ciente de que existe um mundo enorme de outros dados além de carrapatos? Você quer o estranho - escrever/leitura de dados de uma instância de classe.

 
Igor Makanu:

OK, ainda não vi esta solução.

Não é fácil de descobrir, você tem que verificar.

Sim escrevendo e lendo dados brutos de/para o recurso. Bom exemplo, obrigado!

Mas e o meu estimado fxsaber para fazer a mesma coisa com as aulas? Pode mesmo com definições, as pessoas prometem não ficar loucas ))))

 
Alexey Volchanskiy:

Isso não é cocaína, oh, vovós.


Não. Futuros de pão de gengibre.

 
Alexey Volchanskiy:

Você está ciente de que existe um mundo enorme de outros dados além de carrapatos?

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

Precisamos de variáveis terminais globais como string?

fxsaber, 2017.04.10 18:25

void OnStart()
{
  string Name = "Name";

// Записываем/считываем строки
  _GlobalVariableSet(Name, "Hello World!");
  Print(_GlobalVariableGet<string>(Name));

// Записываем/считываем простые структуры
  MqlTick Tick;
  SymbolInfoTick(_Symbol, Tick);

  _GlobalVariableSet(Name, Tick);
  Print(_GlobalVariableGet<MqlTick>(Name).time);

// Записываем/считываем массивы
  MqlTick Ticks[2];

  Ticks[0] = Tick;
  Ticks[1] = Tick;

  _GlobalVariableSet(Name, Ticks);

  MqlTick NewTicks[];

//  if (_GlobalVariableGet(Name, NewTicks)) // https://www.mql5.com/ru/forum/1111/page1868#comment_4853867
//    Print(NewTicks[1].time);

  _GlobalVariableDel(Name);
}


Eu quero o estranho - escrever/ler dados de uma instância de uma classe.

Eu armazeno dados em estruturas, assim como os desenvolvedores. É conveniente e lógico. Por isso, não olhei para as aulas nesta edição, embora não haja indicadores de estruturas.

 
fxsaber:


Eu armazeno dados em estruturas, assim como os desenvolvedores. É conveniente e lógico. Portanto, não olhei para as aulas sobre este assunto, embora não haja indicadores de estruturas.

Eu construí o roteiro para verificação, mas não sei como ler o MqlTick array

#property strict
#include <fxsaber\TypeToBytes.mqh>        //https://www.mql5.com/ru/code/16282
#define  POSTFIX "___"

string GetName( const string Name, const int Num, const string PostFix = POSTFIX )
{
  return(Name + PostFix + (string)Num);
}

bool _GlobalVariableDel( const string Name )
{
  return(GlobalVariableDel(Name) && (GlobalVariablesDeleteAll(Name + POSTFIX) >= 0));
}

#define  GLOBAL_VARIABLE_SET(A)                                                        \
template <typename T>                                                                 \
  datetime _GlobalVariableSet( const string Name, const T A )                         \
  {                                                                                   \
    _GlobalVariableDel(Name);                                                         \
                                                                                      \
    double Array[];                                                                   \
                                                                                      \
    const datetime Res = GlobalVariableSet(Name, _ArrayCopy(Array, _R(Value).Bytes)); \
    const int Size = ArraySize(Array);                                                \
                                                                                      \
    for (int i = 0; i < Size; i++)                                                    \
      GlobalVariableSet(GetName(Name, i), Array[i]);                                  \
                                                                                      \
    return(Res);                                                                      \
  }

GLOBAL_VARIABLE_SET(Value)
GLOBAL_VARIABLE_SET(&Value)
GLOBAL_VARIABLE_SET(&Value[])

#define  GLOBAL_VARIABLE_GET(A)                                              \
  {                                                                         \
    double Array[];                                                         \
                                                                            \
    const int Amount = (int)Tmp;                                            \
    const int Size = ArrayResize(Array, Amount / sizeof(double) +           \
                                 ((Amount % sizeof(double) == 0) ? 0 : 1)); \
                                                                            \
    for (int i = 0; i < Size; i++)                                          \
      Array[i] = GlobalVariableGet(GetName(Name, i));                       \
                                                                            \
    uchar Bytes[];                                                          \
                                                                            \
    _ArrayCopy(Bytes, Array, 0, 0, Amount);                                 \
                                                                            \
    _W(A) = Bytes;                                                          \
  }

template <typename T>
const T _GlobalVariableGet( const string Name )
{
  T Res; // https://www.mql5.com/ru/forum/1111/page1869#comment_4854112

  double Tmp;

  if (GlobalVariableGet(Name, Tmp))
    GLOBAL_VARIABLE_GET(Res)

  return(Res);
}

template <typename T>
bool _GlobalVariableGet( const string Name, T &Value )
{
  double Tmp;
  const bool Res = GlobalVariableGet(Name, Tmp);

  if (Res)
    GLOBAL_VARIABLE_GET(Value)

  return(Res);
}


void OnStart()
  {
   string Name="Name";

// Записываем/считываем строки
   _GlobalVariableSet(Name,"Hello World!");
   Print(_GlobalVariableGet<string>(Name));

// Записываем/считываем простые структуры
   MqlTick Tick;
   SymbolInfoTick(_Symbol,Tick);

   _GlobalVariableSet(Name,Tick);
   Print("time --> ",_GlobalVariableGet<MqlTick>(Name).time);
   Print("bid --> ",_GlobalVariableGet<MqlTick>(Name).bid);

// Записываем/считываем массивы
   MqlTick Ticks[2];

   Ticks[0] = Tick;
   Ticks[1] = Tick;

   _GlobalVariableSet(Name,Ticks);
   
//    Print("time --> ",_GlobalVariableGet<MqlTick>(Name).time);
//    Print("bid --> ",_GlobalVariableGet<MqlTick>(Name).bid);
   
   _GlobalVariableDel(Name);
  }
//+------------------------------------------------------------------+


PS: avisos de compilação possível uso da variável não inicializada "Res", deve ser removida se possível


 
Alexey Volchanskiy:

Pessoalmente, sinto falta do multitarefa. Lembro-me (10 linhas de nostalgia, salto de juventude), em 2000 eu estava pendurado no fórum de programadores RSDN quando o Pentium 4 foi lançado. E a Intel estava indo em cerca de 15GHz na P4. Sim, não estou brincando, estava em todo lugar. Bem, eu não sei se eles realmente pensaram assim ou se foi um embuste, mas eu não acreditei nisso, afinal sou um homem de ferro.

Fiz então uma grande discussão sobre os multiconjuntos que virão em breve, vocês vão ver, precisamos nos preparar. As pessoas riram, foi como um conto de fadas, como você pode programar código paralelo? É uma fantasia.

E quem estava certo? A Intel falhou com seus 15Ghz, depois a versão desktop recebeu o Pentium D dual core e depois o Duo revolucionário.

E ainda estamos vivendo em 199*s na MQL5. Sem multithreading, sem exceções... Fui buscar uma melancia por desgosto...

A partir da descrição do MT5, segue-se que ele é multi-tarefa. Devido ao fato de que a CPU moderna é uma lixeira de código executável sob o usuário, então existem melancias, não há nenhum sentido pragmático em todas as roscas. As empresas não estão interessadas em códigos eficientes, nem no uso racional do poder computacional: se não houver o suficiente - compre mais.

P.S. Talvez 1,5GHz? Eu poderia estar errado, naqueles anos eles definiram o limite físico da tecnologia a 5nm, e a partir daí os supostos GHz. Gostaria de ir de 200nm a 5nm, exatamente como isso em alguns anos - certamente que sim.

 

Em 2030 a Metatrader será banida,

a pessoa que vai proibir tudo chegará ao poder.

Então, haverá um sistema de pagamento no mundo.

E um Régua em todo o mundo.

Ele começará a colocar fichas em todos e colocará todos sob GLONASS, 5G.

Não haverá dinheiro. Os pagamentos serão feitos através de fichas implantadas no corpo.

Somente os membros privilegiados da sociedade poderão negociar na internet - aqueles que pensam que este governante é um verdadeiro deus...


Amém.

 
Igor Makanu:

Eu construí um roteiro para testá-lo, mas não sei como ler a matriz MqlTick.

Acrescente esta sobrecarga

template <typename T>
bool _GlobalVariableGet( const string Name, T &Value[] )
{
  double Tmp;
  const bool Res = GlobalVariableGet(Name, Tmp);

  if (Res)
  {
    double Array[];                                                         
                                                                            
    const int Amount = (int)Tmp;                                            
    const int Size = ArrayResize(Array, Amount / sizeof(double) +           
                                 ((Amount % sizeof(double) == 0) ? 0 : 1)); 
                                                                            
    for (int i = 0; i < Size; i++)                                          
      Array[i] = GlobalVariableGet(GetName(Name, i));                       
                                                                                                                                                        
    _ArrayCopy(Value, Array, 0, 0, Amount);
  }  

  return(Res);
}
Igor Makanu:

PS: avisos de compilação possível uso da variável não-inicializada 'Res' , poderia ser removida se possível

Adicione esta linha

  T Res;
  ZeroMemory(Res);
 
Unicornis:

A partir da descrição do MT5, segue-se que ele é multi-tarefa. Devido ao fato de que o processador moderno em seu trabalho sob o usuário é uma lixeira de códigos executáveis, ainda há melancias, não há nenhum sentido pragmático em todas as roscas. As empresas não estão interessadas em códigos eficientes, nem no uso racional do poder computacional: se não houver o suficiente - compre mais.

P.S. Talvez 1,5GHz? Eu poderia estar errado, naqueles anos eles definiram o limite físico da tecnologia a 5nm, e a partir daí os supostos GHz. Eu gostaria de ir de 200nm a 5nm, exatamente assim em alguns anos - claro que gostaria.

Eu sou analfabeto e não leio instruções. Mas eu sei que o MT5 é multi-tarefa apenas no otimizador). No testador, funciona em um único fio.

Para paralelizar, você pode usar o OpenCL, mas esta tecnologia em si é apenas suportada pelo MT5.

E cerca de 15GHz no roteiro tenho certeza, tenho memória de programador, o que vejo, nunca vou esquecer.