Menos código, mais ação... escrever um EA - página 5

 
Vladimir Simakov:

O que você quer ganhar com isso? Para ser honesto, eu não entendo. No início eu pensava que se pretendia uma estrutura à la, mas não, nenhuma classe de invólucros para indicadores, ordens, algoritmos padrão de tomada de decisão, nada. Embora muito mais legível é esta construção: fast.Get(2)>=slow.Get(1); (é apenas para dar o exemplo), mas a declaração:

CMA fast=novo CMA(NULL,0,12,...);

CMA slow=novo CMA(NULL,0,100,...);

Agora podemos discutir isso, enquanto você, IMHO, está pisoteando no local.

Por exemplo, em vez de fast.Get(2)>=slow.Get(1); é um código bastante legal e de trabalho:

table[FAST_MA][1] >=table[SLOW_MA][2]

funciona como uma planilha, com excelência. Ela é resumida em uma tabela, não por manipulações individuais, porque os dados (fórmulas) podem ser interdependentes.

Poderia ser feito (só que ainda não o tenha feito em uma biblioteca específica):

fast=table[FAST_MA]; slow=table[SLOW_MA];

e depois rápido[2]>baixo[1] é ainda mais fácil de ler

e todos os cálculos internos serão realizados "sob demanda".

 
Maxim Kuznetsov:

Também por exemplo, ao invés de fast.Get(2)>=slow.Get(1); código bastante legal e de trabalho:

table[FAST_MA][1] >=table[SLOW_MA][2]

funciona como com uma planilha, com o Excel. Ela é resumida em uma tabela, não por manipulações individuais, porque os dados (fórmulas) podem ser interdependentes.

Pode ser feito (só que ainda não o fez em uma biblioteca específica):

fast=table[FAST_MA]; slow=table[SLOW_MA];

e depois rápido[2]>baixo[1] lê ainda mais fácil

e todos os cálculos internos serão feitos "sob demanda".

É uma espécie de muleta. Aos amortecedores de limpeza, que o terminal vai criar de qualquer forma, acrescentamos também conjuntos de duplas. Eu entendo que você reservará a memória para eles até a profundidade total da história (para M1 USHORT_MAX, se eu me lembrar corretamente *8 bytes) ou você planeja usar o caro ArrayResize regularmente no processo?
 
Vasiliy Sokolov:

Concordo, é muito difícil ler seu código, mesmo que você conheça o idioma.

Na verdade, esta regra funciona para qualquer código de terceiros. A única pergunta é qual código não é difícil, mas mais fácil de ler.

E aqui é mais fácil de ler e editar quase sempre o código MQL4. Os desenvolvedores adivinharam isso uma vez.

 
fxsaber:

Na verdade, esta regra funciona para qualquer código de terceiros. A única pergunta é qual código não é difícil, mas mais fácil de ler.

E é mais fácil de ler e editar quase sempre o código MQL4. Os desenvolvedores adivinharam isso uma vez.

Mas deixe-me fazer-lhe uma pergunta. Qual foi o palpite? O padrão C/C++, exceto para consultas específicas relacionadas a comércio e gráficos, pode ser considerado como "windows.h" em C+++.

Portanto, respeito aos desenvolvedores por não reinventar a roda, embora a proibição de elos seja um inequívoco menos, não pude me regozijar quando caí em C/C++ após mql. É por isso que, se um milagre acontecer, talvez você deva considerar, como alternativa, como C# usafe, especialmente para pessoas como eu, como se você quisesse bater na parede, matar-se, nós o advertimos.

 
Vladimir Simakov:

Deixe-me fazer-lhe uma pergunta. Qual é o palpite?

Kodobase está cheio de MT5 EAs que são remakes de MT4 EAs. Compare o código do original e do remake.


Obviamente, descobrir a lógica do original do MT4 é muito mais fácil. Mas é ainda mais fácil quando há a necessidade de corrigir algo no TS. Não é por nada que a MQL4 é um padrão para discussão de algoritmos comerciais em fóruns em todo o mundo. Nenhum outro idioma, a não ser MQL4. E tem desempenhado um grande papel na popularidade do MT4, e não o contrário.


E se falamos das conversões do MT5, elas são tortas - nem sempre funcionam. Um exemplo simples. Você envia um pedido para fechar uma posição, mas recebe uma ordem comercial em vez de fechá-la. Há muitos truques que precisam ser resolvidos para ir para a conta real. Com o MT4, é simples e confiável.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
fxsaber:

O kodobase está cheio de MT5 EAs que são remakes de MT4 EAs. Compare o código do original e do remake.


Obviamente, é muito mais fácil entender a lógica do MT4 original. Mas é ainda mais fácil quando há a necessidade de corrigir algo no TS. Não é por nada que a MQL4 é um padrão para discussão de algoritmos comerciais em fóruns em todo o mundo. Nenhum outro idioma, a não ser MQL4. E tem desempenhado um grande papel na popularidade do MT4, e não o contrário.


E se falamos das conversões do MT5, elas são tortas - nem sempre funcionam. Um exemplo simples. Você envia um pedido para fechar uma posição, mas recebe uma ordem comercial em vez de fechá-la. Há muitos truques que precisam ser tratados para ir para a conta real. Com o MT4, é simples e confiável.

Portanto, é uma loucura trabalhar com pedidos/posições por analogia. Em mql4 tenho uma classe de embalagem para isso, em mql5 tenho duas diferentes, porque em mt4 é uma entidade, e em mt5 há duas diferentes, agora o plano é implementar uma classe de embalagem nelas e esquecer de trabalhar com encomendas, como tenho por meio ano em mql4.
 
E sim, o mt5 foi criado para trabalhar na bolsa, e existe um princípio diferente de trabalhar com ordens/posições, portanto aprenda a matemática e não se lamente, tudo funciona bem e sem problemas lá, mas a mecânica comercial da bolsa e do câmbio tem que aprender primeiro e levar em conta suas diferenças. Tudo o que é necessário para fazer isso, os desenvolvedores deram e descreveram nas docas, e depois cabe a você.
 
Vladimir Simakov:
Portanto, é um absurdo trabalhar com ordens/posições por analogia. Tenho uma classe de embalagem para ela em mql4 e duas diferentes em mql5 porque em mt4 é uma entidade e em mt5 são duas diferentes. Agora planejo implementar a classe de embalagem nelas e esquecer de trabalhar com encomendas como fiz há meio ano atrás em mql4.
Vladimir Simakov:
É por isso que devemos aprender a mesma coisa em matemática e não em matemática, tudo funciona bem e vai bem lá, mas primeiro temos que aprender a mecânica comercial do câmbio e do Forex e levar em conta suas diferenças. Tudo o que é necessário para fazer isso, os desenvolvedores deram e descreveram nas docas, e depois cabe a você.

Tente ampliar seus horizontes, pois o que você escreveu é realmente lamuriante.

 
Vladimir Simakov:
Parece ser uma muleta. Além dos amortecedores de limpeza, que o terminal vai criar de qualquer forma, adicionamos também matrizes duplas. Eu entendo que você vai reservar a memória para eles até a profundidade total da história (para M1 USHORT_MAX, se eu me lembrar corretamente *8 bytes) ou você planeja usar o caro ArrayResize regularmente no processo de operação?

Aloco memória a eles, é claro. A uma profundidade não maior que a necessária para os cálculos e depuração. No fragmento dado, são 30, o que é mais do que suficiente. Se em algum lugar for necessário calcular, por exemplo, o desvio padrão de profundidade 50, então o cache deve ser aumentado. E é apenas para agilizar os cálculos.

 
fxsaber:

Tente ampliar seus horizontes, pois o que você escreveu é realmente lamuriante.

Estou bem, mas é assim que a conexão entre posição e ordem é implementada em mql5 (como parte do último trabalho foi, em princípio, nesta forma, já será incluída na biblioteca para contas de hedge).

CHedge::CheckOrder(void){
   if (!CheckPointer(cOrder)) return;
   switch(cOrder.Control()){
      case ORDER_FULL:        cPosition=NewPosition(cOrder);
      case ORDER_REMOVE:
      case ORDER_ERROR:       delete cOrder;}}