市場で作業する際の大きな助けになるのが、メインウィンドウに注文数のスタックデータをヒストグラム形式で表示するインジケーターを作成する ことです。
(例として、#Xaser-infoというインジケーターがあります。
Sergey Pavlov:
完全なコードを表示する。
//+------------------------------------------------------------------+
//|draw_histogram.mqh||draw_histogram.
//| Copyright 2016, MetaQuotes Software Corp.|
//|https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
//+------------------------------------------------------------------+
//| 定義|
//+------------------------------------------------------------------+
// #define MacrosHello "Hello, world!"
#define マクロスイヤー2010
//+------------------------------------------------------------------+
| DLLインポート|
//+------------------------------------------------------------------+
// #import "user32.dll"
// int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
// #import "my_expert.dll"
// int ExpertRecalculate(int wParam,int lParam);
// インポート
//+------------------------------------------------------------------+
| EX5インポート|
//+------------------------------------------------------------------+
// #import "stdlib.ex5"
// string 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);
// draw=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||draw_histogram.
//| Copyright 2016, MetaQuotes Software Corp.|
//|https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
//+------------------------------------------------------------------+
//| 定義|
//+------------------------------------------------------------------+
// #define MacrosHello "Hello, world!"
#define マクロスイヤー2010
//+------------------------------------------------------------------+
| DLLインポート|
//+------------------------------------------------------------------+
// #import "user32.dll"
// int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
// #import "my_expert.dll"
// int ExpertRecalculate(int wParam,int lParam);
// インポート
//+------------------------------------------------------------------+
| EX5インポート|
//+------------------------------------------------------------------+
// #import "stdlib.ex5"
// string 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);
// draw=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||draw_histogram.
//| Copyright 2016, MetaQuotes Software Corp.|
//|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);
// draw=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||draw_histogram.
//| Copyright 2016, MetaQuotes Software Corp.|
//|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);
// draw=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||draw_histogram.
//| Copyright 2016, MetaQuotes Software Corp.|
//|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);
// draw=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||draw_histogram.
//| Copyright 2016, MetaQuotes Software Corp.|
//|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);
// draw=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); }

取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 インジケータのバッファや配列を使わずにヒストグラムを形成する統計分布 はパブリッシュされました:
この記事では、グラフィックメモリの助けを借りて、相場の統計的分布ヒストグラムをプロットする可能性について説明します。サンプルのヒストグラムと mql5のグラフィカルオブジェクトの「非表示」関数があります。
ヒストグラムとは連続的な棒グラフです。軸の 1 つは、別の変数の値を表します。各バーの高さは、値の周波数 (数) を示しています。このような図は通常う水平方向に表示されます。すなわち、変数の値は横軸にあります。研究データを表すヒストグラムを使用すると、見やすい統計データになります。
この記事では垂直方向のヒストグラムに注力します。つまり、 価格分析のパラメータの値が昇順、横軸 (図1) 上に配置する周波数を垂直軸上に配置します。価格データは、グループ化し、表示される軸に左、右または両側から同時にできます。
図1。ビットとアスクの価格の垂直ヒストグラム
作者: Sergey Pavlov