Discussão do artigo "Distribuições estatísticas no MQL5 - tirando o melhor de R" - página 11
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
Isso é apenas no 5? Está planejado para o 4?
Portanto, tudo deve funcionar no MT4. É um OBJ_BITMAP_LABEL padrão + recurso personalizado.
A propósito, o compilador do MT4 é mais inteligente que o do MT5
m_pixels[y*m_width+x]=(r<<16|g<<8|b<<0|255<<24) &0xffffffff;
E apareceu um bug (não funciona no MT5, mas funciona no MT4).
#include <Graphics/Graphic.mqh>
double Func1(double x) { return MathPow(x,2); }
double Func2(double x) { return MathPow(x,3); }
double Func3(double x) { return MathPow(x,4); }
void SaveObjects( const long chart_id = 0, const int SubWindow = -1 )
{
const int Total = ObjectsTotal(chart_id, SubWindow, OBJ_BITMAP_LABEL);
for (int i = 0; i < Total; i++)
{
const string Name = ObjectName(chart_id, i, SubWindow, OBJ_BITMAP_LABEL);
string ResourceName;
if (ObjectGetString(chart_id, Name, OBJPROP_BMPFILE, 0, ResourceName))
ResourceSave(ResourceName, Name + ".bmp"); // MT5 - falso, MT4 - verdadeiro
}
}
void OnStart()
{
GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);
SaveObjects();
}
//| Atualizar o objeto na tela (redesenhar)|
//+------------------------------------------------------------------+
void CCanvas::Update(const bool redraw)
{
//--- verificação
if(m_rcname==NULL)
return;
//--- atualizar o recurso e redesenhar
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format) && redraw)
ChartRedraw(this.m_chart_id);
}
É aqui que
//| Desenhar a polilinha de Wu|
//+------------------------------------------------------------------+
void CCanvas::PolylineWu(int &x[],int &y[],const uint clr,const uint style=UINT_MAX);
há divisões por zero.
Peço que você melhore a CGraphic e a CCurve. Elas são classes fracas. E é quase impossível herdar delas, porque o que você precisa é privado. Levei muito tempo para entender, mas tive que reescrever as classes para que funcionassem corretamente.
Eu queria criar um gráfico de ticks interativo, que foi criado de forma grosseira (sem reescrever as classes)
void GetPrices( double &Bids[], double &Asks[], const int Count = 100 )
{
MqlTick Ticks[];
const int Amount = CopyTicks(_Symbol, Ticks, COPY_TICKS_INFO, 0, Count);
ArrayResize(Bids, Amount);
ArrayResize(Asks, Amount);
for (int i = 0; i < Amount; i++)
{
Bids[i] = Ticks[i].bid;
Asks[i] = Ticks[i].ask;
}
}
CGraphic* Graphic = new CGraphic;
const string Name = "Graphic" +(string)(GetTickCount() + MathRand());
void OnDeinit( const int Reason )
{
Graphic.Destroy();
delete Graphic;
ChartRedraw();
}
void GraphTicks( const double &Price1[], const double &Price2[] )
{
Graphic.Destroy();
delete Graphic;
Graphic = new CGraphic;
Graphic.Create(0, Name, 0, 0, 0, (int)(ChartGetInteger(0, CHART_WIDTH_IN_PIXELS) * 0.8), (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS));
Graphic.AddCurve(Price1, CURVE_LINES);
Graphic.AddCurve(Price2, CURVE_LINES);
Graphic.PlotAllCurves();
Graphic.Update();
}
void OnTick()
{
double Bids[], Asks[];
GetPrices(Bids, Asks);
GraphTicks(Bids, Asks);
}
Sem DeleteCurve, ChangeCurve, etc.
Peço que você melhore a CGraphic e a CCurve. Elas são classes fracas. E é quase impossível herdar delas, porque o que você precisa é privado. Levei muito tempo para entender, mas tive que reescrever as classes para que funcionassem corretamente.
Eu queria fazer um gráfico de ticks interativo, que foi criado de forma grosseira (sem reescrever as classes)
void GetPrices( double &Bids[], double &Asks[], const int Count = 100 )
{
MqlTick Ticks[];
const int Amount = CopyTicks(_Symbol, Ticks, COPY_TICKS_INFO, 0, Count);
ArrayResize(Bids, Amount);
ArrayResize(Asks, Amount);
for (int i = 0; i < Amount; i++)
{
Bids[i] = Ticks[i].bid;
Asks[i] = Ticks[i].ask;
}
}
CGraphic* Graphic = new CGraphic;
const string Name = "Graphic" +(string)(GetTickCount() + MathRand());
void OnDeinit( const int Reason )
{
Graphic.Destroy();
delete Graphic;
ChartRedraw();
}
void GraphTicks( const double &Price1[], const double &Price2[] )
{
Graphic.Destroy();
delete Graphic;
Graphic = new CGraphic;
Graphic.Create(0, Name, 0, 0, 0, (int)(ChartGetInteger(0, CHART_WIDTH_IN_PIXELS) * 0.8), (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS));
Graphic.AddCurve(Price1, CURVE_LINES);
Graphic.AddCurve(Price2, CURVE_LINES);
Graphic.PlotAllCurves();
Graphic.Update();
}
void OnTick()
{
double Bids[], Asks[];
GetPrices(Bids, Asks);
GraphTicks(Bids, Asks);
}
Sem DeleteCurve, ChangeCurve, etc.
Isso ocorre apenas no modelo cinco? Há planos para um quatro?
Apenas o cinco.
O quatro está pronto.
É possível fazer uma visualização de uma pilha com um determinado número de bandas, combinada com uma fita de negociações? Como mostrei um exemplo de visualização em outro software.
Há muitos anos é possível desenhar qualquer coisa de forma interativa. Somente ninguém (publicamente, com certeza) o utiliza.
O código não é curto, mas longo e muito torto (assim como o resultado - cintilações). A biblioteca precisa ser seriamente aprimorada.
Sim, a biblioteca ainda é apenas uma execução de teste.
Nós a arrumaremos, permitiremos herança, adicionaremos métodos e nos livraremos de falhas devido à indexação incorreta.