Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Claro que deveria, todos eles são apenas inteiros, não um tipo separado.
Uma pequena dica.
É claro que é desejável não reescrever a estratégia para o testador. Uma vez escrita, a estratégia deve funcionar no testador e sem ele (no mundo real).
Isto pode ser feito com a ajuda de bibliotecas.
1. Todas as funções relacionadas ao comércio, mudar um pouco seus nomes (meu... - não muito bom, talvez melhor _....).
2. Criar 2 bibliotecas. O primeiro contém código para testes (sem realmente enviar ordens), o segundo apenas duplica parâmetros em chamadas de funções padrão. A troca de trabalho/teste é feita simplesmente substituindo a biblioteca.
É claro que poderíamos colocar tudo em uma biblioteca e introduzir um parâmetro global para mudar, mas provavelmente é desnecessário.
E seria maravilhoso introduzir à MT mais uma função, que, imho, simplificaria radicalmente a escrita de tal testador - a função de estabelecer a última barra atual.
Isto é, suponha que tenhamos 1000 barras na história em que estamos testando.
Vamos definir 200 bar como a última e usar Close[200] em vez de Close[0]. Esta característica deve funcionar em todas as funções incorporadas.
O testador então parecerá um loop no número da barra em que este valor é definido (a última barra no teste) e a chamada da função de início na estratégia.
Na verdade, não é tão simples assim :))
Preciso de mais alguns pontos ...
A frase "código para teste" é um código de teste ou código EA? Seja mais específico.
Isso também
Definimos 200 barras como a última, então em vez de Fechar[0] usamos Fechar[200] em todos os lugares.
E esta ficção deve funcionar (afetar) em todas as funções em linha.
Qualquer código EA é facilmente convertido em código para um indicador :
Pegamos o bloco start() do EA, adicionamos uma construção para (testerconter=Bars;testerconter>=0;testerconter--)
{
fechá-lo com um suporte no final
}
Substituir todos os lugares que utilizam referências por [testerconter+referência].
Aqui está um exemplo do MACD_sample.mq4 Expert Advisor incorporado.
Código fonte:
Modificado
Como você pode ver, não há nenhum problema. Se você quiser, você pode sempre redefinir o testadorconter=0 se
O código é executado no órgão do Expert Advisor, não no órgão do Expert Advisor .
Na primeira biblioteca, a função
emula a execução da ordem no testador, ou seja, adiciona-a à lista de ordens no testador e não envia a ordem para o servidor.
Na segunda biblioteca, esta função simplesmente chama a função embutida
int _OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) { return (OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color) ); }Pegamos o bloco start() do EA, adicionamos uma construção para(testerconter=Bars;testerconter>=0;testerconter--)
{
fechá-lo com um suporte no final
}
Substituir todos os lugares que utilizam referências por [testerconter+referência].
É isso que eu quero dizer.
Seria mais fácil chamar a função que define o valor da variável testconter em MT (0 por padrão) ao invés de substituí-la e esta substituição ([testconter+referência]) seria feita na própria MT.
Assim, não teríamos que fazer essas substituições na própria estratégia.
for(testerconter=Bars;testerconter>=0;testerconter--) { SetTestPoint(testerconter); далее текст эксперта без переделки, или лучше вызов его функции start (или _start) }Por favor, substitua pré por. pré com citação em "ou seja, digamos que temos 1000 barras em ...".
caso contrário, a página desaparece novamente.
sobre
Minha conclusão: parece que estamos falando da mesma coisa. Podemos esquecer o pedido atual do último bar, por enquanto.
Devemos tentar fazer isso.
Por enquanto, basta redefinir as funções comerciais padrão, o prefixo _. é ainda mais respeitável :)
Eu suspeito que você testou "com muito sangue", ou seja, você não redefiniu as funções comerciais. E cada novo teste
Cada novo teste requer a escrita de um novo indicador-avaliador. Mas você só precisa fazer isso uma vez - e sem problemas.
Se eu estiver errado - afixar as funções - não seja mesquinho.
Parece que não podemoschamar diretamente afunção de partida do Expert Advisor.
Portanto, seria melhor escrever o código do Expert Advisor em uma biblioteca e ter lá funções _init, _deinit e _start.
No Expert Advisor, escreveremos
#include "....."; ............... int init() { return(_init()); } int deinit() { return(_deinit()); } int start() { return(_start()); }No entanto, é um pouco obscuro quais são os parâmetros.
Como é feito em Omega:
#include "A1....."; #include "A2....."; ............... int init() { _initA1(); _initA2(); return(0); } int deinit() { _deinitA1(); _deinitA2(); return(0); } int start() { _startA1(); _startA2(); return(0); }Não é muito bonito, mas vai funcionar.
Em geral, um sistema de processamento de eventos caseiros irá funcionar :))
Ele processa este código - insere todos os tipos de includes, arrays de trabalho para Equilíbrio, Equidade, etc,
renomeia as variáveis Lotes em _Lots (e outros). Em geral, ele faz o trabalho rude.
Só terei que arquivar a saída e ir embora. :)
Método de transporte simples.
Eu suspeito que você testou "com muito sangue", ou seja, você não redefiniu as funções comerciais. E cada novo teste exigia que você escrevesse um novo indicador de testador. Mas você só precisa fazer isso uma vez - e não precisa mais ter problemas. Se eu estiver errado, eu quero que você poste funções - não seja mesquinho.
Absolutamente certo. "Sangue grande". Não houve substituições. Eu fiz tais testadores de volta no MT3.x. A MQL4 é tão diferente da MQL2 quanto o céu é da terra. Entretanto, eu não tirei proveito da MQL4. Eu tenho um estupor psicológico. Eu deveria ter pensado primeiro, e depois trabalhado.
A mulher foi aconselhada: "Pense primeiro, fale depois". A mulher respondeu: "Como posso pensar no que ainda não disse".