jaffer wilson: A biblioteca funcionará no Strategy Tester? Quero experimentar o teste manual no Strategy Tester.
Sim, funcionará. Mas você precisa tomar cuidado com algumas coisas, porque os eventos no testador não funcionam corretamente e para não sobrecarregar o testador com cálculos de tela devido à maior densidade de tempo.
jaffer wilson: A biblioteca funcionará no Strategy Tester? Quero tentar fazer testes manuais no Strategy Tester.
#property indicator_chart_window#include <Canvas\iCanvas.mqh> //https://www.mql5.com/pt/code/22164//+------------------------------------------------------------------+int max=0,min=0;
double Max=0,Min=0;
intOnInit() {
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+intOnCalculate (constint rates_total,
constint prev_calculated,
constdatetime& time[],
constdouble& open[],
constdouble& high[],
constdouble& low[],
constdouble& close[],
constlong& tick_volume[],
constlong& volume[],
constint& spread[]) {
max= ArrayMaximum(high,rates_total-W.Left_bar,W.BarsInWind);
min= ArrayMinimum(low,rates_total-W.Left_bar,W.BarsInWind);
Max=high[max];
Min=low[min];
max=rates_total-1-max;
min=rates_total-1-min;
if (rates_total>0) Draw();
return(rates_total);
}
//+------------------------------------------------------------------+voidOnChartEvent(constint id, // identificador de eventoconstlong& lparam, // parâmetro de evento de tipo longoconstdouble& dparam, // parâmetro de evento do tipo doubleconststring& sparam) { // parâmetro de evento do tipo stringif (id==CHARTEVENT_MOUSE_MOVE) Draw();
}
//+------------------------------------------------------------------+void Draw () {
staticdouble pr=0;
staticuint clr=0;
staticuint lastCalc=0;
uint cur=GetTickCount();
if (cur-lastCalc<30) return;
lastCalc=cur; double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
if (Canvas.tester) ChartChanged(); // atualizar os parâmetros do gráfico se estiver no modo testadorif (pr<Ask) clr=0x800000FF; // vermelhoif (pr>Ask) clr=0x80FF0000; // azul
Canvas.Erase(clr);
Canvas.FillCircle((int)Canvas.X(double(max)),(int)Canvas.Y(Max),20,0xAA50FF50);
Canvas.FillCircle((int)Canvas.X(double(min)),(int)Canvas.Y(Min),20,0xAAFFFF50);
Canvas.CurentFont("Tahoma",50,50,0xFF80FF80,0.4);
Canvas.TextPosition(W.MouseX,W.MouseY);
Canvas.Comm("Ask = " + DoubleToString(Ask,_Digits));
Canvas.Comm("Bid = " + DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits));
Canvas.Comm("Spread = " + DoubleToString((Ask-Bid)/_Point,0));
Canvas.Update();
pr=Ask;
}
//+------------------------------------------------------------------+
O que está destacado em amarelo é o necessário para reduzir a carga no testador O que está destacado em verde é o necessário para renderizar as coordenadas corretamente. Tente remover essa linha e veja o que acontece no testador.
Nesse indicador, a cor da tela muda dependendo da direção da mudança de preço, o preço mínimo e máximo na tela é destacado e as informações de texto sobre Bid e Ask na posição atual do ponteiro do mouse são exibidas.
Mas, infelizmente, no Tester, o evento de movimento do mouse é executado somente quando o botão esquerdo do mouse é pressionado. Isso se aplica não somente à minha classe iCanvas, mas também a qualquer saída gráfica no Tester. Só que eu tenho uma maneira mais simples de implementá-lo. E até mesmo o controle GUI funciona muito bem:
A biblioteca funcionará no Strategy Tester? Quero experimentar o teste manual no Strategy Tester.
A biblioteca funcionará no Strategy Tester? Quero tentar fazer testes manuais no Strategy Tester.
O que está destacado em amarelo é o necessário para reduzir a carga no testador
O que está destacado em verde é o necessário para renderizar as coordenadas corretamente. Tente remover essa linha e veja o que acontece no testador.
Nesse indicador, a cor da tela muda dependendo da direção da mudança de preço, o preço mínimo e máximo na tela é destacado e as informações de texto sobre Bid e Ask na posição atual do ponteiro do mouse são exibidas.
Mas, infelizmente, no Tester, o evento de movimento do mouse é executado somente quando o botão esquerdo do mouse é pressionado.
Isso se aplica não somente à minha classe iCanvas, mas também a qualquer saída gráfica no Tester.
Só que eu tenho uma maneira mais simples de implementá-lo.
E até mesmo o controle GUI funciona muito bem:
Muito obrigado pela resposta e pelo exemplo.
Olá,
trabalho muito bom. Muito obrigado.
Você pode verificar a amostra do CanvasBar? Ele não funcionará no testador, mesmo com as modificações sugeridas.
Atenciosamente, Mighty
Olá,
trabalho muito bom. Muito obrigado.
Você pode verificar a amostra do CanvasBar? Ele não funcionará no testador, mesmo com as modificações sugeridas.
Atenciosamente, Mighty
Tente mover ChartChanged antes de CopyRates
Obrigado pela resposta rápida, mas ainda não está funcionando.
Isso ocorre porque a chamada vem de OnChartEvent, que não está funcionando corretamente no testador.
Tente o seguinte.
No futuro, anexe um código ou link. Afinal de contas, não me lembro do nome do meu código, que escrevi há quase dois anos."No futuro, anexe um código ou link. Afinal de contas, não me lembro do nome do meu código, que escrevi há quase dois anos."
Ok, vou fazer isso. Agora está funcionando (tive que remover as linhas GetTickCount para sincronizar). Muito obrigado.