o mais simples EA para correr no strategy tester

Fernando Carreiro  
Marcelo Correa: quando utilizando o template de EA dado pelo MT5 no strategy tester, esse corre e logo aborta a execução. como correr esse EA em visual mode (vendo os candles a passar) no strategy tester?

Funciona no meu sem problema!

int OnInit(){ return(INIT_SUCCEEDED); };
void OnDeinit(const int reason){ };
void OnTick(){ };

Arquivos anexados:
Marcelo Correa  
Fernando Carreiro #:

Funciona no meu sem problema!

Obrigado pela ajuda, penso que tenha descoberto o porquê de não estar correndo.

A figura que postou ajudou muito na solução, penso que tenha sido pelo fato de eu estar testando em um dia que estaria associado ao mini indice passado(WINJ22 no dia 21-2-2022 ate 22-2-2022). No entanto na configuração do ST apenas aparece o simbolo atual(WINM22). Pus uma data nessa(18-4-2022) semana e funcionou perfeitamente.

Se realmente é desse jeito há alguma maneira de usar o ST durante um ano do mini índice (já que ele muda de 2 em dois meses)?

novamente obrigado pela ajuda,

GitHub - mvcorrea-ufc/learning-mql5: metatrader 5 scripting language to automate market orders
GitHub - mvcorrea-ufc/learning-mql5: metatrader 5 scripting language to automate market orders
  • mvcorrea-ufc
  • github.com
metatrader 5 scripting language to automate market orders - GitHub - mvcorrea-ufc/learning-mql5: metatrader 5 scripting language to automate market orders
Marcelo Correa  

Agora tive uma ideia, como já tenho um EA base para experimentar vou aproveitar esse post para ir pondo as atualizações que irei fazer no mesmo.

A ideia de início seria um EA que auxiliasse na decisão de manualmente abrir uma posição ou não.

link: https://github.com/mvcorrea-ufc/learning-mql5

como utilizar: após instalar o git fazer um git clone na pasta "Expert Advisors" do metatrader.

pode ser que dê jeito para alguém, 

GitHub - mvcorrea-ufc/learning-mql5: metatrader 5 scripting language to automate market orders
GitHub - mvcorrea-ufc/learning-mql5: metatrader 5 scripting language to automate market orders
  • mvcorrea-ufc
  • github.com
metatrader 5 scripting language to automate market orders - GitHub - mvcorrea-ufc/learning-mql5: metatrader 5 scripting language to automate market orders
Fernando Carreiro  
Marcelo Correa #: Agora tive uma ideia, como já tenho um EA base para experimentar vou aproveitar esse post para ir pondo as atualizações que irei fazer no mesmo.

A ideia de início seria um EA que auxiliasse na decisão de manualmente abrir uma posição ou não. link: https://github.com/mvcorrea-ufc/learning-mql5. como utilizar: após instalar o git fazer um git clone na pasta "Expert Advisors" do metatrader. pode ser que dê jeito para alguém, 

Em vez de usar o GitHub, porque não simplesmente utilizar MLQ5 Storage e partilhar publicamente o projecto.

Sei, que o MQL5 Storage não é tão poderoso como o Git, mas é bem mais conveniente para a maioria e assim, qualquer utilizador pode lhe seguir no MetaEditor sem dificuldade alguma.

Marcelo Correa  

Otima ideia, irei ver como utilizar o storage, e eventualmente deixar em ambos locais.

Obrigado pela dica,


Não sei se podem ajudar em uma situação que acabei de implementar (em que somente tenho atualizações quando surge um novo candle, e supostamente deveria acontecer a cada tick)?

Sei algum cpp no entanto estou no início da aprendizagem do mql5!

class Demo {

public:
  int rsiHandle, lineTop, lineBot;
  double rsi[];
  double rsiValue, rsiV0, rsiV1, rsiV2;
  string rsiStr1, rsiStr2;
  
  Demo(void) {  lineBot = 30; lineTop = 70;
                rsiHandle = iRSI(_Symbol,_Period, 14, PRICE_CLOSE); 
                ArraySetAsSeries(rsi, true); };
               
  ~Demo(void){  IndicatorRelease(rsiHandle); 
                ArrayFree(rsi); };
  
  string getSignalStr1(){ return rsiStr1; }
  
  string getSignalStr2(){ return rsiStr2; }
  
  double getSignalValue(){ return rsiV0; }
  
  void eachTick(double&);
  
};

void Demo::eachTick(double &rsiVal){
  
  CopyBuffer(rsiHandle,0,0,3,rsi);
  rsiV0 = NormalizeDouble(rsi[0], 2); // current value
  rsiV1 = NormalizeDouble(rsi[1], 2);
  rsiV2 = NormalizeDouble(rsi[2], 2);
  
  // singnal as value
  rsiVal = rsiV0;  // testing passing references
 
  // signal descriptor 
  rsiStr1 = (rsiV0 > lineTop) ? "top" : (rsiV0 < lineBot) ? "bottom" : "middle";
  
  // se o sinal cruzar a linha de topo no sentido descendente diremos que queremos comprar.
  // se o sinal cruzar a linha de fundo no sentido ascendente diremos que queremos vender.
  // caso contrário nao iremos fazer nada.
  // no caso irei testar se ja temos 2x ticks na area superior ou inferior antes de tomar decisão (estabilizando o sinal).
  rsiStr2 = (rsiV2 > lineTop && rsiV1 > lineTop && rsiV0 < lineTop) ? "sell" : 
            (rsiV2 < lineBot && rsiV1 < lineBot && rsiV0 > lineBot) ? "buy" : "no action";
 
}

 E no EA propriamente dito!

Penso que poderia substituir ambas strings por booleans (como temos 3 estados em cada precisamos de 2 bools para os codificar). Ajudaria na performance(nada bom comparar strings)?


*** corrigindo no strategy tester corre perfeitamente, já quando incluo o EA no grafico do mini indice não vejo os "comments" a mudar (somente na mudança dos candles) ***

#include <..\Experts\learning-mql5\tradeAssist\demoClass.mqh>

double rsiVal;
Demo* ta;

int OnInit(){ 
  ResetLastError();
  ta = new Demo();
  Print("onInit finished");
  return(INIT_SUCCEEDED); 
}

void OnDeinit(const int reason){ }

void OnTick(){ 
  ta.eachTick(rsiVal);
  Comment("var1: ", rsiVal, 
          "\nvar2: ", ta.getSignalValue(),
          "\nvar3: ", ta.getSignalStr1(),
          "\nvar4: ", ta.getSignalStr2()
          );
}

de ja Obrigado,

Marcelo Correa  

Ja funciona.. Penso que por estar a correr em um mac(não há versão nativa, isso corre dentro do wine) isso não deve ser essa maravilha toda..

Obrigado

Razão: