Projeto aberto - testador-optimizador interno

 
Tenho uma idéia para escrever meu próprio testador na forma de um indicador. A exigência - com um mínimo de retrabalho, o Expert Advisor deve ser adequado tanto para os testadores padrão quanto para os autoescritos. Isto é conseguido acrescentando o prefixo my às constantes e funções padrão. A otimização também é aceitável.
O modelo é escrito, é necessário implementar funções comerciais através da escrita de suas próprias funções.
Quem é bom nisso - junte-se a nós. Funções comerciais através de manipulação de matriz. Também precisamos de um especialista em desenho de objetos no gráfico - use setas/desenhos para representar níveis de abertura, parada e lucro.
Também precisamos organizar a saída do histórico de pedidos e séries numéricas em um arquivo para abrir gráficos em Excel. Em geral, tudo é muito sério :)

Pensei em tudo em princípio, mas não sou um universalista.

Eu posso sugerir idéias, se alguém quiser. Além disso, é possível que, em alguns casos de otimização por desempenho, a variante auto-fabricada seja capaz de superar a variante construída.

//+------------------------------------------------------------------+
//|                                                   SelfTester.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 DarkBlue
#property indicator_color3 LawnGreen
//---- input parameters
extern int       mySpread=4;
extern int       BeginYear=2002;
extern int       BeginMonth=1;
extern int       BeginDay=1;
extern string    ReportName="report";
extern int       Param1=8;
extern int       Param2=13;
extern double    myDepo=10000.0;
extern double    mylots=0.1;
extern int       myTakeProfit=100.0;
extern int       myStopLoss=80.0;
extern int       myTrailingStop=20;
//---- buffers
double myBalance[];
double myEquity[];
double myProfit[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,myBalance);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,myEquity);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,myProfit);
   double TradeOrdersArray[100][14];
   double ClosedOrdersArray[2000][14];
   int myOrdersTotal=0;
   double myOrderOpenPrice=0.0;
   double myOrderLots=0.0; 
   string myOrderComment=""; 
   int myOrderMagicNumber;
   int myOrderOpenTime;
   double myOrderProfit=0.0;
   double myOrderStopLoss=0.0;
   double myOrderTakeProfit=0.0;
   int myOrderTicket;
   int myOrderType; 

   int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+




 
Eu não sei que tipo de algaraviar apareceu. Se alguém quiser, postarei em outro lugar em outro fórum.
 
2 Rosh
Não tenho bem a certeza do que você quer dizer com esta predefinição. Na minha opinião, você quer obter um conjunto de funções que irão calcular o lucro e marcar pontos de entrada/parada no gráfico ao mesmo tempo? E o motor de decisão será diferente para cada um deles?

E um par de dicas:
extern int       BeginYear=2002


melhor ser substituído por

extern string       BeginDate="2002.01.01 18:00"


- é possível trabalhar imediatamente com uma construção do tipo

Time[i] > StrToTime(BeginDate)



Sim e provavelmente coisas como

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 


também seria mais conveniente para armazenar como

#define LOTS 0;
#define OPEN_PRICE 1;

double MyOrder[2] = {0.0, 0.0};
.....................
MyOrder[OPEN_PRICE] = Open[i];
.....................
 


mas isso são apenas as pequenas coisas...

 
Filin, você está fora de suas profundezas. Por que você deve definir a constante
?
#define LOTS 0;

Esta é a variável de entrada para o testador.

De onde isto veio?

#define OPEN_PRICE 1;


Você notou que todas essas variáveis (que podem ser melhor definidas por funções)

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 

São gêmeos da construção em mql-4. Escrevi que o objetivo é que nosso testador e o testador incorporado entendam a
EA com o mínimo de retrabalho.

O motor de decisão é o código EA. E será facilmente integrado a esta EA. E o motor do testador é funções que sugiro
para "anular" - ou seja, pegamos a função padrão incorporada, por exemplo OrderSend(), e usando-a, escrevemos uma função totalmente semelhante - myOrderSend(). E assim por diante.
Escreverei esta função hoje à noite para torná-la mais clara.

Você tem que ser mais minucioso, mais minucioso... :)

 
Eu não sei que tipo de algaraviar apareceu. Se alguém quiser, postarei isso em outro fórum em algum lugar.

Isto apareceu não há muito tempo. Ao transferir o texto da MQL, as cartas russas aparecem desta forma. O mesmo que FronPage faz com as cartas russas.
 
Pensei que as cartas cursivas seriam convertidas de volta às cartas russas quando eu copiasse e colasse no arquivo indicador. Acontece que não foi assim. Vou postar em outro fórum hoje à noite
e eu postarei o link.
 
Rosh,
você não pode apagar o lixo?
É impossível assistir.
Deve ser uma falha de fórum, hospedagem ou MT ao copiar scripts com texto russo.
 
Os testes desta forma são possíveis. E é bom o suficiente. Mas, infelizmente, você não terá universalismo.
Eu passei algumas semanas em tais testes. À primeira vista, parece simples. Você obtém um conjunto de funções padrão e vai.
Mas este conjunto não é mais que uma semente: abertura/fechamento, cálculo de lucro/perda, desenho de setas/dashes.
O principal e mais importante é o algoritmo de abertura/fechamento, que, digamos, já foi descrito em algum Expert Advisor. Você não pode arrastar e soltar este algoritmo
em sua totalidade. Você só pode fazer isso em partes. E depois rastrear "sem erros" do código resultante. Além disso, todos os tipos de reviravoltas associadas a este processo.
todo tipo de conserto... Em resumo, acabamos escrevendo um programa separado sobre o mesmo assunto a partir do zero, pela segunda vez. Depois de tudo isso, em 1 segundo você recebe
ou um resultado insatisfatório, ou as setas estão no lugar errado, ou fechando nos lugares errados. Depois volta-se ao texto do programa e tenta-se novamente...
Seu cérebro funciona ao invés de um depurador, você se transforma em um monitor por um tempo... Eventualmente, no terceiro dia, o teste é realizado
parece bem, mas você se convence de que a estratégia "não é boa". E neste ponto, é mais ou menos isso! Porque testar a próxima estratégia desta forma
não há nenhum desejo de testar a próxima estratégia. Por que eu escrevi tudo isso? A idéia é atrativa. E, em princípio, funciona. Mas, acredite em mim, não é algo
não vai funcionar. Se estamos falando de um modelo, ele tem que ser um modelo muito fundamental, ou seja, um design muito decente e bem pensado. Em geral,
o programa não é o mais fácil. E se alguém depois de ler esta obra não quebrar uma lança no âmbito do descrito, ou seja, usar esta minha
Se alguém usar minha pequena, mas ainda assim prática experiência e seguir em frente sem perder tempo, algo pode dar certo. Então todos aqueles que estão sofrendo
(inclusive eu mesmo) irá contribuir para a construção de um monumento ao autor. :)
 
OK, farei uma função à noite (como prometido), tudo será mais claro. Por enquanto, minha opinião é que, com um testador devidamente projetado, será possível
para utilizar Expert Advisors nativos com algumas modificações cosméticas. A primeira "vítima" é MACD_sample.mq4 .
 
Rosh,<br / translate="no"> o lixo não pode ser apagado?
É impossível assistir.
Deve ser uma falha de fórum, hospedagem ou MT ao copiar scripts com texto russo.


O "Lixo" foi removido. Os programadores provavelmente sabem como é enfadonho escrever (comentários) :).

Alguém sabe - eu defini corretamente estas constantes com base no padrão?
  int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;


Significa valores específicos.

 
Eu sou um boneco, por que reinventar a roda. Vamos simplificar as coisas:

   int myOP_BUY=OP_BUY;
   int myOP_SELL=OP_SELL;
   int myOP_BUYLIMIT=OP_BUYLIMIT;
   int myOP_BUYSTOP=OP_BUYSTOP;
   int myOP_SELLLIMIT=OP_SELLLIMIT;
   int myOP_SELLSTOP=OP_SELLSTOP;


Entretanto, eu não conheço a reação do compilador de antemão, ele vai deixar passar ou não as constantes comerciais no corpo indicador?
O mais provável é que sim.

Razão: