Características da linguagem mql5, subtilezas e técnicas - página 157

 
Andrey Khatimlianskii:

Hi!

O análogo do MT4 de gráficos off-line é de instrumentos de castingum. Pode preencher qualquer história, incluindo fazer 1 barra = 1 carrapato.

Mas, como no MT4, cada barra tem de ser pelo menos um minuto diferente no tempo da anterior, para que não haja uma escala de tempo normal.

ps: há aqui um indicador pronto a usar - https://www.mql5.com/en/blogs/post/719145

No MT4 o tempo de uma barra só precisa de ser mais longo do que a barra anterior, e depois o MT4 irá mostrar a barra, ou seja, no MT4 pode desenhar barras em gráficos offline com uma precisão de segundos, afixei um gráfico de segundos no QB

mas com MT5 esta "não funcionará", se tentar enviar ao símbolo personalizado 2 barras com o mesmo tempo aberto, sem ter em conta os segundos, então apenas uma barra será exibida, ou seja, a precisão de menos de M1 nos gráficos personalizados de MT5 não funcionará

 
fxsaber:

Há aqui um diagrama. Funciona.

Sem deslocar o AT? Será que funciona sempre? Não mais do que sorte.


fxsaber:

Onde está o limite da perfeição que pode/deve ser tolerado? O que é que as regressões e as exigências que ocasionalmente ocorrem têm a ver com o Testador?

As rejeições não têm nada a ver com isso.

Uma ordem limite não precisa de ser executada ao último preço conhecido, nem no testador nem em tempo real. O preço pode ir para qualquer lugar durante o seu envio.

Outra questão é que no modo de 0-ésimo atraso (execução ideal), o testador pode fingir que a ordem foi enviada ao corretor e executada imediatamente, mas não vejo qualquer lucro nela, uma vez que, repito, não faz sentido testar o ideal se, de qualquer forma, o oposto acontecer na situação real.

 
Igor Makanu:

No MT4 o tempo da barra precisa simplesmente de ser maior do que a barra anterior e depois o MT4 mostrará a barra, ou seja, no MT4 pode desenhar barras em gráficos offline ao segundo mais próximo, afixei um gráfico de segundos em KB

Obrigado pela edição, já tinha esquecido. Era uma vez definitivamente um erro se o tempo não fosse múltiplo de minutos, então também parecia funcionar dessa forma.

Definitivamente não o pode fazer dessa forma em 5.

 
Andrey Khatimlianskii:

Hi!

O análogo do MT4 de gráficos off-line é de instrumentos de castingum. Pode preencher qualquer história, incluindo fazer 1 barra = 1 carrapato.

Mas, como no MT4, cada barra tem de ser pelo menos um minuto diferente no tempo da anterior, para que não haja uma linha temporal normal.

ps: há aqui um indicador pronto a usar - https://www.mql5.com/en/blogs/post/719145

Oh, os símbolos personalizados são mesmo a coisa certa! E o tempo não me interessa. Obrigado, isso é um impulso na direcção certa. )))

 
Andrey Khatimlianskii:

Sem deslocar o AT? Será que funciona sempre bem? Não mais do que sorte.

Não, claro que não. É por isso que o ciclo.

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

Características da linguagem mql4, complexidades e truques

fxsaber, 2019.12.13 00:27

O encerramento esquemático urgente de uma posição é feito da seguinte forma
const double ClosePrice = OrderType() ? MathMin(OrderClosePrice(), Bid + MaxSpread * _Point) 
                                      : MathMax(OrderClosePrice(), Ask - MaxSpread * _Point);
    
OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), ClosePrice, 0); // StopLoss оставлен для истории
No laço, claro. Tem mais alguma opção?

Os Regs não têm nada a ver com isto.

O limitador não tem de ser accionado ao último preço conhecido, nem no testador nem na vida real. O preço pode ir para qualquer lugar durante o tempo em que é enviado.

Outro ponto é que no modo de 0 de atraso (execução ideal), o testador pode fingir que a ordem foi enviada ao corretor e executada instantaneamente, mas não vejo qualquer lucro nela, porque, mais uma vez, não faz sentido testar o ideal se , de qualquer forma, acontecer o contrário no mundo real.

Na realidade, ou será uma execução total (ou parcial) ao preço actual (ou melhor), ou uma refutação. Ou seja, a execução pode ou não ser perfeita.

Assim, o Testador funciona sempre perfeitamente para um mercado, enquanto que falha sempre para uma ordem limite.

 
fxsaber:

Isto significa que o testador tem sempre um desempenho perfeito para um mercado, mas não para um limitador.

Prefiro fazer o próximo tique para um mercado. É melhor para o testador mostrar uma perda do que uma perda real. E é pouco provável que o graal se perca com isto.

 
Andrey Khatimlianskii:

Aqui prefiro fazer o próximo tique de execução para os mercados. É melhor um testador mostrar um prumo do que um verdadeiro. E é pouco provável que o graal se perca com isto.

O próximo tick não está correcto, o seu mercado deve gerar um tick, e ser executado na oferta ou pedido mais próximo, tendo em conta o volume da transacção.
A encomenda limite também deve ser preenchida a um preço garantido com base no volume.
Todos os outros algoritmos que são feitos agora, apenas enganosos, obtendo resultados reais.
Por este motivo, não utilizo de todo o testador. Não vale a pena, quando sobre o próprio fundamento, há uma substituição da execução.

 
Roman:

O próximo tick não está correcto, o seu mercado deve dar origem a um tick, e será executado na oferta ou pedido mais próximo, tendo em conta o volume do comércio.
A encomenda limite também deve ser preenchida a um preço garantido com base no volume.
Todos os outros algoritmos que são feitos agora, apenas enganosos, obtendo resultados reais.
Por este motivo, não utilizo de todo o testador. Não vale a pena, quando sobre o próprio fundamento, há uma substituição da execução.

Bem, para isso é necessária a história da taça ou pelo menos os volumes do lance/venda extremos. E não há nenhum.

E um mercado não deve gerar um tique no testador, caso contrário, a história dependeria da estratégia a ser testada.

 
Andrey Khatimlianskii:

Bem, para isso é necessária a história da taça ou pelo menos os volumes do lance/venda extremos. E não há nenhum.

E o mercado não deve gerar um tique no testador, caso contrário, a história dependeria da estratégia a ser testada.

Como um dos moderadores declarou, o mt5 foi desenvolvido para as bolsas de valores,
mas olhando para a implementação do testador, o seu desenvolvimento foi reduzido ao mesmo princípio de lidar com a execução, mesmo com carraças reais.

Como é que se testa então? Sobre que dados históricos?
E depois confia nos testes de tais citações históricas?
:))

É claro que precisa de um histórico de carraças, e teste em carraças reais.
Onde obter o histórico da carraça é problema do utilizador, recolhê-la você mesmo, comprá-la, tirá-la a alguém que a tenha, etc.

Sim, concordo que os volumes para licitação asc não são guardados agora, mas o que impede os desenvolvedores de adicionar três colunas!

  1. Coluna de volume Perguntar
  2. Coluna de volume Bid
  3. Coluna Última direcção comercial, Comprar ou Vender


Então todos os problemas relativos à correcção dos testes em carraças reais desaparecerão automaticamente.
A execução das ordens de troca no testador será como deve ser.

Sim, o tick gerador, não por isso quis dizer que o mercado no testador deve ser executado no Bid Pergunta mais próximo, recolhendo liquidez a níveis de preços.
Ou seja, se enviarmos um BuyMarket com um volume de 25, o preço de execução reunirá dois níveis, 10 e 15, e automaticamente o preço líquido médio da posição.

182.13 Perguntar1 15
182.12 Perguntar0 10
--------------------
182.11 Bid0 5
182.10 Bid1 8

Para ordens limitadas, o volume da Last trade deve preencher o volume da sua ordem limite ao preço garantido a que a ordem limite é colocada.
Ou seja, a sua ordem limite deve ser parcialmente preenchida. Se a sua encomenda limite for colocada com um volume de 25, então a Última transacção com um volume de 5 tirará 5 da sua encomenda limite.
A sua encomenda limite tem agora o volume 20, a próxima Última transacção passou com o volume 10, a sua encomenda limite tem agora o volume 10,
outra última transacção passada com o volume 10, a sua encomenda limite é completamente preenchida.
Se o preço se inverteu e não executou todo o volume da sua ordem limite, esta é a situação real, a execução real.
E o seu restante volume de encomenda limite continua a esperar até que Last chegue a ele novamente, ou você mesmo retira essa encomenda.

Portanto, a forma como o algoritmo é implementado no testador, não tem nada a ver com a realidade.
É como um brinquedo de lavagem de olhos.


 

Não estou a brincar com as minhas estruturas POD para abrir um formato. Há muitos campos nas estruturas. Algumas estruturas são herdadas, outras têm campos privados.


De qualquer modo, surgiu a tarefa de zerar estas estruturas a fim de editar o formato em estudo. E nada sai realmente. Como resultado, decidi utilizar esta variante.

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

// Обнуление переменной.
template <typename T>
void ToNull( T &Value )
{
  uchar Bytes[sizeof(T)];
  ArrayInitialize(Bytes, 0);
  
  _W(Value) = Bytes;
}


Aplicação.

struct A
{
private:
  int i;
  
public:
  int j;  
};

void OnStart()
{
//  A a = {0};     // 'a' - cannot be initialized with initializer list
//  ZeroMemory(a); // 'a' - not allowed for objects with protected members or inheritance
  
  ToNull(a);
}


Uma alternativa é bem-vinda.

Razão: