النتائج 1 إلى 3 من 3
الموضوع: تعديل علي فوليوم بروفايل
- 24-12-2019, 10:53 AM #1
تعديل علي فوليوم بروفايل
السلام عليكم
هل ممكن التعديل علي موشر فوليوم بروفايل بدل ما يظهر الخطوط كاملة علي الشمعة يظهر فقط خط صغير بداية value area high و نهاية value area low
الي هيا موجودة فى الموشر باسم main 68% واذا فيى امكانية تبعية الشمعة يكون افضل كما فى الصورة
واذا وجد موشر اخف من دا يكةن افضل لانة دا مرة تقيل علي البرنامج
شكراProfile.mq4
//+------------------------------------------------------------------+
//| Futprint.mq4 |
//| Copyright 2018, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
#property version "1.0"
#property copyright "Roman."
#property description "If you like the indicator, you can thank the author"
#property description "Webmoney: Z330494414179, R222585888867"
#property description " "
#property description "Thank you very much."
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
enum PColor
{
C1=0,// Mono Color
C2=1,// Gauss Bell Color
C3=2 // Rate Color
};
input string KeyFix="Z"; //Key Change Fix 1:1
extern int iTimer = 150; //Timer in MilliSeconds
extern bool bUp = false; //Draw on Top
input string KeyTop="A"; //Key Change Draw Top/Back
extern bool ShowLabelReDraw = true;//Show/Hide Label "Re Draw"
extern PColor Color = C2; //Color Scheme
extern color MainClr = clrTomato; //Main/68 %/First Color
extern color Rate1 = clrYellow; //95 %/Second Color
extern color Rate2 = clrAqua; //5%/Third color
extern color Rate3 = clrGray; //Fourth color
input string KeyRoll="Q"; //Key Change Color Scheme
extern int RateDiv1 = 100; //First Rate Factor
extern int RateDiv2 = 200; //Second Rate Factor
extern int RateDiv3 = 300; //Third Rate Factor
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
EventSetMillisecondTimer(iTimer);
Draw();
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTimer()
{
if(ShowLabelReDraw)
{
ulong star =
GetMicrosecondCount();
Draw();
if(GetMicrosecondCount()-star>10000)
OutText("Redraw","Re Draw",
(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0)/2,
(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0)/2,
clrTomato,23);
else
ObjectDelete(0,"Redraw");
}
else
Draw();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int DrawHigh[], DrawLow[], DrawT[];
int IndexS[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Draw()
{
double H[], L[], F[];
long V[];
int FVB = ChartFirstVisibleBar(), VB = ChartVisibleBars(), vB = FVB - VB, iArraySize = ArraySize(DrawHigh);
bool ReDraw = false;
if(iArraySize == 0)
ReDraw = true;
else
for(int i = 0; i < iArraySize; i ++)
{
int h,l,t;
ChartTimePriceToXY(0,0,Time[IndexS[i]],High[IndexS[i]],t,h);
ChartTimePriceToXY(0,0,Time[IndexS[i]],Low[IndexS[i]],t,l);
if((DrawHigh[i] != h || DrawLow[i] != l || t != DrawT[i]) && IndexS[i] != 0)
{
ReDraw = true;
break;
}
}
if(ReDraw)
{
ObjectsDeleteAll(0,"RectLabel");
ArrayFree(DrawT);
ArrayFree(DrawHigh);
ArrayFree(DrawLow);
ArrayFree(IndexS);
}
ulong star = GetMicrosecondCount(), ulong_ = iTimer*800;
int indexS = -1;
for(int index = vB; index <= FVB; index ++)
{
if(ulong_ < GetMicrosecondCount() - star)
return;
indexS++;
int x, y, w;
if(index < 0 ||
(indexS < ArraySize(DrawHigh) && index!=0)||
CopyTickVolume(_Symbol, PERIOD_M1, Time[index], Time[index] + PeriodSeconds() - 1, V) <= 0 ||
CopyHigh(_Symbol, PERIOD_M1, Time[index], Time[index] + PeriodSeconds() - 1, H) <= 0 ||
CopyLow(_Symbol, PERIOD_M1, Time[index], Time[index] + PeriodSeconds() - 1, L) <= 0)
continue;
ArrayFree(F);
ArrayResize(F,(int)((High[index]-Low[index])/Point)+1);
iArraySize = ArraySize(V);
int Size = ArraySize(F);
for(int j = 0; j < iArraySize; j ++)
{
int E = (int)
((L[j]-Low[index])/Point);
if(H[j]!=L[j])
{
double tmp = (H[j]-L[j])/Point, g = V[j]/tmp;
for(int k = 0; k < (int)tmp; k++)
{
if(E + k < Size && E + k >= 0)
F[E + k] += g;
}
}
else
F[E] += (double)V[j];
}
ChartTimePriceToXY(0,0,Time[index],High[index],x,y);
ChartTimePriceToXY(0,0,Time[index+1],High[index],w,y);
double MaxV = F[ArrayMaximum(F)];
if(MaxV<1)
continue;
MaxV = MathAbs(w-x) / MaxV;
iArraySize = ArraySize(F);
double PrevSumm = 0, SummValue = 0;
if(Color == C2)
for(int j = 0; j < iArraySize; j ++)
SummValue+=F[j];
for(int j = 0; j < iArraySize; j ++)
{
ChartTimePriceToXY(0, 0, Time[index], Low[index] + Point * j, x, y);
string name = "RectLabel" + IntegerToString(index) + "_" + IntegerToString(j);
ObjectCreate(name,OBJ_RECTANGLE_LABEL,0,0,0);
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y-3);
ObjectSetInteger(0,name,OBJPROP_XSIZE,(int)(MaxV * F[j]));
ObjectSetInteger(0,name,OBJPROP_YSIZE,3);
switch(Color)
{
case C1:
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,MainClr);
break;
case C2:
PrevSumm += F[j];
if(PrevSumm / SummValue < 0.025f || PrevSumm / SummValue > 0.975f)
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,Rate2);
else
{
if(PrevSumm / SummValue < 0.16f || PrevSumm / SummValue > 0.84f)
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,Rate1);
else
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,MainClr);
}
break;
case C3:
if(F[j]<RateDiv1)
{
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,Rate3);
break;
}
if(F[j]<RateDiv2)
{
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,Rate2);
break;
}
if(F[j]<RateDiv3)
{
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,Rate1);
break;
}
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,MainClr);
break;
}
ObjectSetInteger(0,name,OBJPROP_WIDTH,0);
ObjectSetInteger(0,name,OBJPROP_BACK,bUp);
}
ArrayResize(DrawHigh,ArraySize(DrawHigh)+1);
ArrayResize(DrawLow,ArraySize(DrawLow)+1);
ArrayResize(IndexS,ArraySize(IndexS)+1);
ArrayResize(DrawT,ArraySize(DrawT)+1);
ChartTimePriceToXY(0,0,Time[index],High[index],y,x);
ChartTimePriceToXY(0,0,Time[index],Low[index],y,w);
DrawT[ArraySize(DrawT)-1]=y;
DrawHigh[ArraySize(DrawHigh)-1]=x;
DrawLow[ArraySize(DrawLow)-1]=w;
IndexS[ArraySize(IndexS)-1]=index;
}
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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[])
{
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
EventKillTimer();
ObjectsDeleteAll(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Функция получает номер первого видимого бара на графике. |
//| Индексация как в таймсерии, последние бары имеют меньшие индексы.|
//+------------------------------------------------------------------+
int ChartFirstVisibleBar(const long chart_ID=0)
{
//--- подготовим переменную для получения значения свойства
long result=-1;
//--- сбросим значение ошибки
ResetLastError();
//--- получим значение свойства
if(!ChartGetInteger(chart_ID,CHART_FIRST_VISIBLE_B AR,0,result))
{
//--- выведем сообщение об ошибке в журнал "Эксперты"
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- вернем значение свойства графика
return((int)result);
}
//+------------------------------------------------------------------+
//| Функция получает количество баров, которые отображаются (видимы )|
//| в окне графика. |
//+------------------------------------------------------------------+
int ChartVisibleBars(const long chart_ID=0)
{
//--- подготовим переменную для получения значения свойства
long result=-1;
//--- сбросим значение ошибки
ResetLastError();
//--- получим значение свойства
if(!ChartGetInteger(chart_ID,CHART_VISIBLE_BARS,0, result))
{
//--- выведем сообщение об ошибке в журнал "Эксперты"
Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- вернем значение свойства графика
return((int)result);
}
//+------------------------------------------------------------------+
bool OutText(const string name="Label", // имя метки
const string text="Label", // текст
const int x=0, // координата по оси X
const int y=0, // координата по оси Y
const color clr=clrYellow, // цвет
const int font_size=12, // размер шрифта
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки
const ENUM_ANCHOR_POINT anchor=ANCHOR_CENTER, // способ привязки
const string font="Arial", // шрифт
const double angle=0.0, // наклон текста
const bool back=false, // на заднем плане
const bool selection=false, // выделить для перемещений
const bool hidden=true, // скрыт в списке объектов
const long z_order=0,
const int sub_window=0, // номер подокна
const long chart_ID=0 // ID графика
) // приоритет на нажатие мышью
{
//--- сбросим значение ошибки
ResetLastError();
//--- создадим текстовую метку
if(ObjectFind(chart_ID,name)==-1)
{
if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_windo w,0,0))
{
Print(__FUNCTION__, ": не удалось создать текстовую метку! Код ошибки = ",GetLastError());
// return(false);
}
}
//--- установим координаты метки
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x );
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y );
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corn er);
//--- установим текст
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- установим размер шрифта
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,fo nt_size);
//--- установим угол наклона текста
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle) ;
//--- установим способ привязки
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anch or);
//--- установим цвет
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения метки мышью
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE, selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,se lection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidd en);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_or der);
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//---
if(id==CHARTEVENT_KEYDOWN)
{
if((int)lparam==StringGetChar(KeyRoll,0))
{
switch(Color)
{
case C1:
Color = C2;
break;
case C2:
Color = C3;
break;
case C3:
Color = C1;
break;
};
ArrayFree(DrawT);
ArrayFree(DrawHigh);
ArrayFree(DrawLow);
ArrayFree(IndexS);
}
if((int)lparam==StringGetChar(KeyTop,0))
{
bUp=!bUp;
ArrayFree(DrawT);
ArrayFree(DrawHigh);
ArrayFree(DrawLow);
ArrayFree(IndexS);
}
if((int)lparam==StringGetChar(KeyFix,0))
{
bool tmp;
ChartScaleFix11Get(tmp);
ChartScaleFix11Set(!tmp);
ArrayFree(DrawT);
ArrayFree(DrawHigh);
ArrayFree(DrawLow);
ArrayFree(IndexS);
}
}
}
//+------------------------------------------------------------------+
bool ChartScaleFix11Get(bool &result,const long chart_ID=0)
{
//--- подготовим переменную для получения значения свойства
long value;
//--- сбросим значение ошибки
ResetLastError();
//--- получим значение свойства
if(!ChartGetInteger(chart_ID,CHART_SCALEFIX,0,valu e))
{
//--- выведем сообщение об ошибке в журнал "Эксперты"
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- запомним в переменную значение свойства графика
result=value;
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Функция включает/выключает режим масштаба "1:1" |
//+------------------------------------------------------------------+
bool ChartScaleFix11Set(const bool value,const long chart_ID=0)
{
//--- сбросим значение ошибки
ResetLastError();
//--- установим значение свойства
if(!ChartSetInteger(chart_ID,CHART_SCALEFIX,0,valu e))
{
//--- выведем сообщение об ошибке в журнал "Эксперты"
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}آخر تعديل بواسطة yamin2000 ، 24-12-2019 الساعة 10:56 AM
- 07-08-2020, 08:28 AM #2
اتمنى تعلم الماركت بروفايل
- 07-07-2022, 06:22 PM #3
موشر فوليوم جاهز علي MQL5
Fixed Range Volume Profile V1