مؤشر تعديل علي فوليوم بروفايل
النتائج 1 إلى 1 من 1
  1. #1
    تاريخ التسجيل
    Oct 2007
    الإقامة
    السعودية
    المشاركات
    782

    افتراضي تعديل علي فوليوم بروفايل

    اضغط على الصورة لعرض أكبر

الاســـم:	si.PNG
المشاهدات:	4
الحجـــم:	28.4 كيلوبايت
الرقم:	518717السلام عليكم
    هل ممكن التعديل علي موشر فوليوم بروفايل بدل ما يظهر الخطوط كاملة علي الشمعة يظهر فقط خط صغير بداية 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