Обсуждение статьи "Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее" - страница 11
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это только в пятерке? В четверке планируется?
Так все должно работать в MT4. Это же стандартный OBJ_BITMAP_LABEL + кастомный Resource.
Кстати, компилятор MT4 умнее MT5
m_pixels[y*m_width+x]=(r<<16|g<<8|b<<0|255<<24) &0xffffffff;
И баг выявился (в MT5 не работает, а вот в 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 - false, MT4 - true
}
}
void OnStart()
{
GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);
SaveObjects();
}
//| Update object on screen (redraw) |
//+------------------------------------------------------------------+
void CCanvas::Update(const bool redraw)
{
//--- check
if(m_rcname==NULL)
return;
//--- update resource and redraw
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format) && redraw)
ChartRedraw(this.m_chart_id);
}
Здесь
//| Draw Wu's polyline |
//+------------------------------------------------------------------+
void CCanvas::PolylineWu(int &x[],int &y[],const uint clr,const uint style=UINT_MAX);
случаются деления на ноль.
Прошу доработать CGraphic и CCurve. Слабые классы получились. И наследоваться от них почти нереально, потому что нужное - private. Долго вникал, но чтобы поправить до нормальной эксплуатации, требовалось переписывать самому классы.
Захотел сделать интерактивный тиковый график - вышло только костыльно (без переписывания классов)
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);
}
Нет DeleteCurve, ChangeCurve и т.д.
Прошу доработать CGraphic и CCurve. Слабые классы получились. И наследоваться от них почти нереально, потому что нужное - private. Долго вникал, но чтобы поправить до нормальной эксплуатации, требовалось переписывать самому классы.
Захотел сделать интерактивный тиковый график - вышло только костыльно (без переписывания классов)
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);
}
Нет DeleteCurve, ChangeCurve и т.д.
Это только в пятерке? В четверке планируется?
Только в пятерке.
С четверкой все закончено.
это такой короткий код получается? я почему-то думал,там простыня. а так можно сделать визуализацию стакана с заданными колвом бандов,совмещенную с лентой сделок? как я показывал пример визуализации в другом софте.
Интерактивно рисовать что угодно можно уже много лет. Только никто (публично точно) не использует.
Код не короткий, а длинный и очень кривой (как и результат - мерцания). Библиотеку нужно серьезно дорабатывать.
Да, библиотека пока как проба пера.
Приведем в порядок, разрешим наследование, добавим методы и избавимся от падений из-за неправильной индексации.
Интерактивно рисовать что угодно можно уже много лет. Только никто (публично точно) не использует.
Код не короткий, а длинный и очень кривой (как и результат - мерцания). Библиотеку нужно серьезно дорабатывать.
если брался за аналог именно plot из R,то там вроде только статическая графика. если есть интерактивная графика,то это точно не plot в прямом виде. я искал что-то такое там ради интереса,но были отсылки куда-то в сторону совместной работы с ява и т.п.
типа такого
если я правильно понял,то и такой
timevis:
Create rich and fully interactive timeline visualizations. Timelines can be included in Shiny apps and R markdown documents, or viewed from the R console and RStudio Viewer. 'timevis' includes an extensive API to manipulate a timeline after creation, and supports getting data out of the visualization into R. Based on the 'vis.js' Timeline module and the 'htmlwidgets' R package.