Sergey Pavlov:
显示完整代码。
//+------------------------------------------------------------------+
//|draw_histogram.mqh
//| 2016 年 MetaQuotes 软件公司版权所有。|
//|https://www.mql5.com ||
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
//+------------------------------------------------------------------+
//| defines|
//+------------------------------------------------------------------+
// #define MacrosHello "你好,世界!"
// #define MacrosYear 2010
//+------------------------------------------------------------------+
//| DLL 导入|
//+------------------------------------------------------------------+
// #import "user32.dll"(导入 "user32.dll"
// int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
// #import "my_expert.dll"(导入 "我的专家.dll")。
// int ExpertRecalculate(int wParam,int lParam);
// #进口
//+------------------------------------------------------------------+
//| EX5 进口|
//+------------------------------------------------------------------+
// #import "stdlib.ex5"。
// 字符串 ErrorDescription(int error_code);
// #进口
//+------------------------------------------------------------------+
void DrawHistogram(bool draw, // 向左或向右绘制直方图
string h_name, // 对象名称的唯一前缀
double price, // 价格(分析参数)
datetime time, // 将直方图绑定到当前条形图
int span, // 分析的参数位数容量
int swin=0) // 直方图窗口
{
double y=NormalizeDouble(price,span);
string pfx=DoubleToString(y,span);
// 如果绘制=true,则向右绘制直方图
if(draw)
{
string name="+ "+h_name+pfx; // 对象名称:前缀+价格
ObjectCreate(0,name,OBJ_TREND,swin,time,y); // 创建对象
ObjectSetInteger(0,name,OBJPROP_COLOR,color_R_active); // 设置对象颜色
ObjSet; // 代码缩写宏
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{// 如果结果价格首次进入样本
ObjectSetString(0,name,OBJPROP_TEXT,"*1"); // 价格频率为 1
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize); // 定义时间坐标
}
else
{// 如果结果价格不是首次进入样本
string str=ObjectGetString(0,name,OBJPROP_TEXT); // 获取属性值
string strint=StringSubstr(str,1); // 突出显示子串
long n=StringToInteger(strint); // 获得频率,以便进一步计算
n++; // 数值增加 1
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n); // 向属性写入新值
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize*n);// 定义时间坐标
}
}
// 如果 draw=false,则将直方图写到左边
if(!draw)
{
string name="- "+h_name+pfx;
ObjectCreate(0,name,OBJ_TREND,swin,time,y);
ObjectSetInteger(0,name,OBJPROP_COLOR,color_L_active);
ObjSet;
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{
ObjectSetString(0,name,OBJPROP_TEXT,"*1");
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize);
}
else
{
string str=ObjectGetString(0,name,OBJPROP_TEXT);
string strint=StringSubstr(str,1);
long n=StringToInteger(strint);
n++;
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n);
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize*n);
}
}
ChartRedraw();
}
//|draw_histogram.mqh
//| 2016 年 MetaQuotes 软件公司版权所有。|
//|https://www.mql5.com ||
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
//+------------------------------------------------------------------+
//| defines|
//+------------------------------------------------------------------+
// #define MacrosHello "你好,世界!"
// #define MacrosYear 2010
//+------------------------------------------------------------------+
//| DLL 导入|
//+------------------------------------------------------------------+
// #import "user32.dll"(导入 "user32.dll"
// int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
// #import "my_expert.dll"(导入 "我的专家.dll")。
// int ExpertRecalculate(int wParam,int lParam);
// #进口
//+------------------------------------------------------------------+
//| EX5 进口|
//+------------------------------------------------------------------+
// #import "stdlib.ex5"。
// 字符串 ErrorDescription(int error_code);
// #进口
//+------------------------------------------------------------------+
void DrawHistogram(bool draw, // 向左或向右绘制直方图
string h_name, // 对象名称的唯一前缀
double price, // 价格(分析参数)
datetime time, // 将直方图绑定到当前条形图
int span, // 分析的参数位数容量
int swin=0) // 直方图窗口
{
double y=NormalizeDouble(price,span);
string pfx=DoubleToString(y,span);
// 如果绘制=true,则向右绘制直方图
if(draw)
{
string name="+ "+h_name+pfx; // 对象名称:前缀+价格
ObjectCreate(0,name,OBJ_TREND,swin,time,y); // 创建对象
ObjectSetInteger(0,name,OBJPROP_COLOR,color_R_active); // 设置对象颜色
ObjSet; // 代码缩写宏
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{// 如果结果价格首次进入样本
ObjectSetString(0,name,OBJPROP_TEXT,"*1"); // 价格频率为 1
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize); // 定义时间坐标
}
else
{// 如果结果价格不是首次进入样本
string str=ObjectGetString(0,name,OBJPROP_TEXT); // 获取属性值
string strint=StringSubstr(str,1); // 突出显示子串
long n=StringToInteger(strint); // 获得频率,以便进一步计算
n++; // 数值增加 1
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n); // 向属性写入新值
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize*n);// 定义时间坐标
}
}
// 如果 draw=false,则将直方图写到左边
if(!draw)
{
string name="- "+h_name+pfx;
ObjectCreate(0,name,OBJ_TREND,swin,time,y);
ObjectSetInteger(0,name,OBJPROP_COLOR,color_L_active);
ObjSet;
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{
ObjectSetString(0,name,OBJPROP_TEXT,"*1");
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize);
}
else
{
string str=ObjectGetString(0,name,OBJPROP_TEXT);
string strint=StringSubstr(str,1);
long n=StringToInteger(strint);
n++;
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n);
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize*n);
}
}
ChartRedraw();
}
//+------------------------------------------------------------------+
//|draw_histogram.mqh
//| 2016 年 MetaQuotes 软件公司版权所有。|
//|https://www.mql5.com ||
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
//--- Макросы
#define R 43 // значения префикса (+) для гистограмм справа
#define L 45 // значения префикса (-) для гистограмм слева
#define WIDTH 2 // толщина линий
#define ObjSet1 ObjectSetInteger(0,name,OBJPROP_WIDTH,WIDTH)
#define ObjSet2 ObjectSetDouble(0,name,OBJPROP_PRICE,0,y)
#define ObjSet3 ObjectSetInteger(0,name,OBJPROP_TIME,0,time)
#define ObjSet4 ObjectSetDouble(0,name,OBJPROP_PRICE,1,y)
#define ObjSet5 ObjectSetInteger(0,name,OBJPROP_BACK,true)
#define ObjSet ObjSet1;ObjSet2;ObjSet3;ObjSet4;ObjSet5
//---
int hsize=10; // масштаб гистограммы
color color_R_active=clrRed; // цвет активных линий справа
color color_R_passive=clrLightCoral;// цвет пассивных линий справа
color color_L_active=clrBlue; // цвет активных линий слева
color color_L_passive=clrSkyBlue; // цвет пассивных линий слева
void DrawHistogram(bool draw, // 向左或向右绘制直方图
string h_name, // 对象名称的唯一前缀
double price, // 价格(分析参数)
datetime time, // 将直方图绑定到当前条形图
int span, // 分析的参数位数容量
int swin=0) // 直方图窗口
{
double y=NormalizeDouble(price,span);
string pfx=DoubleToString(y,span);
// 如果绘制=true,则向右绘制直方图
if(draw)
{
string name="+ "+h_name+pfx; // 对象名称:前缀+价格
ObjectCreate(0,name,OBJ_TREND,swin,time,y); // 创建对象
ObjectSetInteger(0,name,OBJPROP_COLOR,color_R_active); // 设置对象颜色
ObjSet; // 代码缩写宏
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{// 如果结果价格首次进入样本
ObjectSetString(0,name,OBJPROP_TEXT,"*1"); // 价格频率为 1
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize); // 定义时间坐标
}
else
{// 如果结果价格不是首次进入样本
string str=ObjectGetString(0,name,OBJPROP_TEXT); // 获取属性值
string strint=StringSubstr(str,1); // 突出显示子串
long n=StringToInteger(strint); // 获得频率,以便进一步计算
n++; // 数值增加 1
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n); // 向属性写入新值
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize*n);// 定义时间坐标
}
}
// 如果 draw=false,则将直方图写到左边
if(!draw)
{
string name="- "+h_name+pfx;
ObjectCreate(0,name,OBJ_TREND,swin,time,y);
ObjectSetInteger(0,name,OBJPROP_COLOR,color_L_active);
ObjSet;
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{
ObjectSetString(0,name,OBJPROP_TEXT,"*1");
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize);
}
else
{
string str=ObjectGetString(0,name,OBJPROP_TEXT);
string strint=StringSubstr(str,1);
long n=StringToInteger(strint);
n++;
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n);
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize*n);
}
}
ChartRedraw();
}
//|draw_histogram.mqh
//| 2016 年 MetaQuotes 软件公司版权所有。|
//|https://www.mql5.com ||
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
//--- Макросы
#define R 43 // значения префикса (+) для гистограмм справа
#define L 45 // значения префикса (-) для гистограмм слева
#define WIDTH 2 // толщина линий
#define ObjSet1 ObjectSetInteger(0,name,OBJPROP_WIDTH,WIDTH)
#define ObjSet2 ObjectSetDouble(0,name,OBJPROP_PRICE,0,y)
#define ObjSet3 ObjectSetInteger(0,name,OBJPROP_TIME,0,time)
#define ObjSet4 ObjectSetDouble(0,name,OBJPROP_PRICE,1,y)
#define ObjSet5 ObjectSetInteger(0,name,OBJPROP_BACK,true)
#define ObjSet ObjSet1;ObjSet2;ObjSet3;ObjSet4;ObjSet5
//---
int hsize=10; // масштаб гистограммы
color color_R_active=clrRed; // цвет активных линий справа
color color_R_passive=clrLightCoral;// цвет пассивных линий справа
color color_L_active=clrBlue; // цвет активных линий слева
color color_L_passive=clrSkyBlue; // цвет пассивных линий слева
void DrawHistogram(bool draw, // 向左或向右绘制直方图
string h_name, // 对象名称的唯一前缀
double price, // 价格(分析参数)
datetime time, // 将直方图绑定到当前条形图
int span, // 分析的参数位数容量
int swin=0) // 直方图窗口
{
double y=NormalizeDouble(price,span);
string pfx=DoubleToString(y,span);
// 如果绘制=true,则向右绘制直方图
if(draw)
{
string name="+ "+h_name+pfx; // 对象名称:前缀+价格
ObjectCreate(0,name,OBJ_TREND,swin,time,y); // 创建对象
ObjectSetInteger(0,name,OBJPROP_COLOR,color_R_active); // 设置对象颜色
ObjSet; // 代码缩写宏
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{// 如果结果价格首次进入样本
ObjectSetString(0,name,OBJPROP_TEXT,"*1"); // 价格频率为 1
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize); // 定义时间坐标
}
else
{// 如果结果价格不是首次进入样本
string str=ObjectGetString(0,name,OBJPROP_TEXT); // 获取属性值
string strint=StringSubstr(str,1); // 突出显示子串
long n=StringToInteger(strint); // 获得频率,以便进一步计算
n++; // 数值增加 1
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n); // 向属性写入新值
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize*n);// 定义时间坐标
}
}
// 如果 draw=false,则将直方图写到左边
if(!draw)
{
string name="- "+h_name+pfx;
ObjectCreate(0,name,OBJ_TREND,swin,time,y);
ObjectSetInteger(0,name,OBJPROP_COLOR,color_L_active);
ObjSet;
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{
ObjectSetString(0,name,OBJPROP_TEXT,"*1");
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize);
}
else
{
string str=ObjectGetString(0,name,OBJPROP_TEXT);
string strint=StringSubstr(str,1);
long n=StringToInteger(strint);
n++;
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n);
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize*n);
}
}
ChartRedraw();
}
Sergey Pavlov:
谢谢 !
//+------------------------------------------------------------------+
//|draw_histogram.mqh
//| 2016 年 MetaQuotes 软件公司版权所有。|
//|https://www.mql5.com ||
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
//--- Макросы
#define R 43 // значения префикса (+) для гистограмм справа
#define L 45 // значения префикса (-) для гистограмм слева
#define WIDTH 2 // толщина линий
#define ObjSet1 ObjectSetInteger(0,name,OBJPROP_WIDTH,WIDTH)
#define ObjSet2 ObjectSetDouble(0,name,OBJPROP_PRICE,0,y)
#define ObjSet3 ObjectSetInteger(0,name,OBJPROP_TIME,0,time)
#define ObjSet4 ObjectSetDouble(0,name,OBJPROP_PRICE,1,y)
#define ObjSet5 ObjectSetInteger(0,name,OBJPROP_BACK,true)
#define ObjSet ObjSet1;ObjSet2;ObjSet3;ObjSet4;ObjSet5
//---
int hsize=10; // масштаб гистограммы
color color_R_active=clrRed; // цвет активных линий справа
color color_R_passive=clrLightCoral;// цвет пассивных линий справа
color color_L_active=clrBlue; // цвет активных линий слева
color color_L_passive=clrSkyBlue; // цвет пассивных линий слева
void DrawHistogram(bool draw, // 向左或向右绘制直方图
string h_name, // 对象名称的唯一前缀
double price, // 价格(分析参数)
datetime time, // 将直方图绑定到当前条形图
int span, // 分析的参数位数容量
int swin=0) // 直方图窗口
{
double y=NormalizeDouble(price,span);
string pfx=DoubleToString(y,span);
// 如果绘制=true,则向右绘制直方图
if(draw)
{
string name="+ "+h_name+pfx; // 对象名称:前缀+价格
ObjectCreate(0,name,OBJ_TREND,swin,time,y); // 创建对象
ObjectSetInteger(0,name,OBJPROP_COLOR,color_R_active); // 设置对象颜色
ObjSet; // 代码缩写宏
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{// 如果结果价格首次进入样本
ObjectSetString(0,name,OBJPROP_TEXT,"*1"); // 价格频率为 1
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize); // 定义时间坐标
}
else
{// 如果结果价格不是首次进入样本
string str=ObjectGetString(0,name,OBJPROP_TEXT); // 获取属性值
string strint=StringSubstr(str,1); // 突出显示子串
long n=StringToInteger(strint); // 获得频率,以便进一步计算
n++; // 数值增加 1
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n); // 向属性写入新值
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize*n);// 定义时间坐标
}
}
// 如果 draw=false,则将直方图写到左边
if(!draw)
{
string name="- "+h_name+pfx;
ObjectCreate(0,name,OBJ_TREND,swin,time,y);
ObjectSetInteger(0,name,OBJPROP_COLOR,color_L_active);
ObjSet;
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{
ObjectSetString(0,name,OBJPROP_TEXT,"*1");
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize);
}
else
{
string str=ObjectGetString(0,name,OBJPROP_TEXT);
string strint=StringSubstr(str,1);
long n=StringToInteger(strint);
n++;
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n);
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize*n);
}
}
ChartRedraw();
}
//|draw_histogram.mqh
//| 2016 年 MetaQuotes 软件公司版权所有。|
//|https://www.mql5.com ||
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
//--- Макросы
#define R 43 // значения префикса (+) для гистограмм справа
#define L 45 // значения префикса (-) для гистограмм слева
#define WIDTH 2 // толщина линий
#define ObjSet1 ObjectSetInteger(0,name,OBJPROP_WIDTH,WIDTH)
#define ObjSet2 ObjectSetDouble(0,name,OBJPROP_PRICE,0,y)
#define ObjSet3 ObjectSetInteger(0,name,OBJPROP_TIME,0,time)
#define ObjSet4 ObjectSetDouble(0,name,OBJPROP_PRICE,1,y)
#define ObjSet5 ObjectSetInteger(0,name,OBJPROP_BACK,true)
#define ObjSet ObjSet1;ObjSet2;ObjSet3;ObjSet4;ObjSet5
//---
int hsize=10; // масштаб гистограммы
color color_R_active=clrRed; // цвет активных линий справа
color color_R_passive=clrLightCoral;// цвет пассивных линий справа
color color_L_active=clrBlue; // цвет активных линий слева
color color_L_passive=clrSkyBlue; // цвет пассивных линий слева
void DrawHistogram(bool draw, // 向左或向右绘制直方图
string h_name, // 对象名称的唯一前缀
double price, // 价格(分析参数)
datetime time, // 将直方图绑定到当前条形图
int span, // 分析的参数位数容量
int swin=0) // 直方图窗口
{
double y=NormalizeDouble(price,span);
string pfx=DoubleToString(y,span);
// 如果绘制=true,则向右绘制直方图
if(draw)
{
string name="+ "+h_name+pfx; // 对象名称:前缀+价格
ObjectCreate(0,name,OBJ_TREND,swin,time,y); // 创建对象
ObjectSetInteger(0,name,OBJPROP_COLOR,color_R_active); // 设置对象颜色
ObjSet; // 代码缩写宏
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{// 如果结果价格首次进入样本
ObjectSetString(0,name,OBJPROP_TEXT,"*1"); // 价格频率为 1
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize); // 定义时间坐标
}
else
{// 如果结果价格不是首次进入样本
string str=ObjectGetString(0,name,OBJPROP_TEXT); // 获取属性值
string strint=StringSubstr(str,1); // 突出显示子串
long n=StringToInteger(strint); // 获得频率,以便进一步计算
n++; // 数值增加 1
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n); // 向属性写入新值
ObjectSetInteger(0,name,OBJPROP_TIME,1,time+hsize*n);// 定义时间坐标
}
}
// 如果 draw=false,则将直方图写到左边
if(!draw)
{
string name="- "+h_name+pfx;
ObjectCreate(0,name,OBJ_TREND,swin,time,y);
ObjectSetInteger(0,name,OBJPROP_COLOR,color_L_active);
ObjSet;
if(StringFind(ObjectGetString(0,name,OBJPROP_TEXT),"*",0)<0)
{
ObjectSetString(0,name,OBJPROP_TEXT,"*1");
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize);
}
else
{
string str=ObjectGetString(0,name,OBJPROP_TEXT);
string strint=StringSubstr(str,1);
long n=StringToInteger(strint);
n++;
ObjectSetString(0,name,OBJPROP_TEXT,"*"+(string)n);
ObjectSetInteger(0,name,OBJPROP_TIME,1,time-hsize*n);
}
}
ChartRedraw();
}
谢尔盖先生
我想用买入和卖出的成交量来代替买入和卖出的成交量,以获得类似于价格指标的成交量,这可能吗? 您有可以发布的带买入/卖出成交量的代码吗?
非常感谢!
我想绘制的数据示例,它在单独窗口中绘制买入/卖出刻度线成交量 的水平柱状图,我想在主图表窗口中绘制垂直柱状图:
#property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 2 // #property indicator_label1 "SELL Tick" #property indicator_type1 DRAW_HISTOGRAM #property indicator_color1 clrTomato #property indicator_style1 STYLE_SOLID // #property indicator_label2 "BUY Tick" #property indicator_type2 DRAW_HISTOGRAM #property indicator_color2 clrSpringGreen #property indicator_style2 STYLE_SOLID #property indicator_width2 5 //--- 指示器缓冲区 double ExtBuyBuffer[]; double ExtSellBuffer[]; int OnInit() { //--- 指示器缓冲区映射 SetIndexBuffer(0,ExtBuyBuffer,INDICATOR_DATA); SetIndexBuffer(1,ExtSellBuffer,INDICATOR_DATA); PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0); //--- return(INIT_SUCCEEDED); } int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { static int ticks=0; //--- if(ticks==0) { ArrayInitialize(ExtSellBuffer,0); ArrayInitialize(ExtBuyBuffer,0); } //--- MqlTick last_tick; if(SymbolInfoTick(Symbol(),last_tick) && last_tick.flags == 56) { ExtBuyBuffer[ticks]+=NormalizeDouble(last_tick.volume,2); int shift=rates_total-1-ticks; ticks++; ExtBuyBuffer[rates_total-1]=last_tick.volume; PlotIndexSetInteger(0,PLOT_SHIFT,shift); } if(SymbolInfoTick(Symbol(),last_tick) && last_tick.flags == 88) { ExtSellBuffer[ticks]+=NormalizeDouble(last_tick.volume,2); int shift=rates_total-1-ticks; ticks++; ExtSellBuffer[rates_total-1]=last_tick.volume; PlotIndexSetInteger(1,PLOT_SHIFT,shift); } // //--- 为下一次调用返回 prev_calculated 的值 return(rates_total); }
新文章 直方图形式的统计分布, 无需指标缓冲区和数组已发布:
本文讨论当绘制市场条件的统计分布直方图时利用图形存储器的可能性, 而无需指标缓冲区和数组。描述了样本直方图的细节, 并展示了 MQL5 图形对象的 "隐藏" 功能。
在本文中, 我们将关注变化序列的垂直直方图: 分析参数的价格值将按照升序位于垂直轴上, 而频率位于水平轴上 (图例. 1)。传入的价格数据在当前柱线上分布并分组, 并且可以从左侧、右侧或两侧同时相对于其数轴显示。
图例. 1. 买卖价格分布的垂直直方图
作者:Sergey Pavlov