久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    MT4軟件---多品種趨勢監控界面源碼公式指標

     艾云策略 2023-07-22 發布于廣東
    想要找一些外匯MT4的指標,附有源碼,交易的時候可以輔助,編寫指標的時候可以參考學習,想改善的時候,可以編輯。

    多品種監控界面指標
    做外匯的朋友都不會只關注一個品種,想同時監控多個品種的趨勢,打開N個交易品種的K線圖眼都花了。
    下方是100個交易品種(一般建議交易者關注十個以內就夠了)1小時的Price、Spread、ATR、VOL、RSI、Stoch、SDX、Pivots、MA監控數據。


    源  碼
      

    string INDI_NAME="MPSCN-";

    input int TimerInterval=60; //Update interval (secs)
    input int FontSize=10;  //Font Size
    input string FontName="Calibri"; //Font Name
    input int ColumnHeight=50; //Max symbols per column

    input string Group0; //---------------------------------------------------
    input bool ShowPrice=true; //Show Price
    input string Group01; //---------------------------------------------------
    input bool ShowSpread=true; //Show Spread

    input string Group1; //---------------------------------------------------
    input bool ShowATR=true; //Show ATR
    input ENUM_TIMEFRAMES AtrTimeframe=PERIOD_H1; //ATR Timeframe
    input int AtrPeriod=20; //ATR Period

    input string Group2; //---------------------------------------------------
    input bool ShowVolume=true; //Show Volume
    input ENUM_TIMEFRAMES VolumeTimeframe=PERIOD_H1; //Volume Timeframe
    input int VolumePeriod=60; //Volume Period

    input string Group3; //---------------------------------------------------
    input bool ShowRsi=true; //Show RSI
    input ENUM_TIMEFRAMES RsiTimeframe=PERIOD_H1; //RSI Timeframe
    input int RsiPeriod=14; //RSI Period
    input int RsiUpperLevel = 75; //RSI Upper Level
    input int RsiLowerLevel = 25; //RSI Lower Level

    input string Group4; //---------------------------------------------------
    input bool ShowStoch=true; //Show Stochastic
    input ENUM_TIMEFRAMES StochTimeframe=PERIOD_H1; //Stoch Timeframe
    input int StochK = 5;   //%K period
    input int StochD = 3;   //%D period
    input int StochSlow = 3;//Slowing
    input ENUM_MA_METHOD StochMethod=MODE_SMA; //MA Method
    input ENUM_STO_PRICE StochPrice=STO_LOWHIGH; //Price Field
    input int StochUpperLevel = 80; //Stoch Upper Level
    input int StochLowerLevel = 20; //Stoch Lower Level

    input string Group5; //---------------------------------------------------
    input bool ShowAdx=true; //Show ADX
    input ENUM_TIMEFRAMES AdxTimeframe=PERIOD_H1; //ADX Timeframe
    input int AdxPeriod=20; //ADX Period
    input ENUM_APPLIED_PRICE AdxAppliedPrice=PRICE_CLOSE; //ADX Applied Price

    input string Group6; //---------------------------------------------------
    input bool ShowPivots=true; //Show Pivots

    input string Group7; //---------------------------------------------------
    input bool ShowMA=true; //Show MA
    input ENUM_TIMEFRAMES MATimeframe=PERIOD_H1; //MA Timeframe
    input int MAPeriod=60; //MA Period
    input ENUM_MA_METHOD MAMethod=MODE_SMA; //MA Method
    input ENUM_APPLIED_PRICE MAAppliedPrice=PRICE_CLOSE; //MA Applied

    int GUIXOffset = 20;
    int GUIYOffset = 45;

    int GUIHeaderXOffset = 20;
    int GUIHeaderYOffset = 0;

    int GUIColOffset=100;

    int ListXOffset = 10;
    int ListYOffset = 15;

    int ListXMultiplier = 10;
    int ListYMultiplier = 15;




    datetime TimeMissing;
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //--- indicator buffers mapping      
       ChartColorSet(CHART_COLOR_BACKGROUND,clrBlack);
       ChartColorSet(CHART_COLOR_FOREGROUND,clrWhite);
       ChartColorSet(CHART_COLOR_GRID,clrNONE);
       ChartColorSet(CHART_COLOR_VOLUME,clrNONE);
       ChartColorSet(CHART_COLOR_CHART_UP,clrNONE);
       ChartColorSet(CHART_COLOR_CHART_DOWN,clrNONE);
       ChartColorSet(CHART_COLOR_CHART_LINE,clrNONE);
       ChartColorSet(CHART_COLOR_CANDLE_BULL,clrNONE);
       ChartColorSet(CHART_COLOR_CANDLE_BEAR,clrNONE);
       ChartColorSet(CHART_COLOR_BID,clrNONE);
       ChartColorSet(CHART_COLOR_ASK,clrNONE);
       ChartColorSet(CHART_COLOR_LAST,clrNONE);
       ChartColorSet(CHART_COLOR_STOP_LEVEL,clrNONE);
       ChartModeSet(CHART_LINE);
    //---
       EventSetTimer(1);

       DrawHeader();
       DrawScanner();

       return(INIT_SUCCEEDED);
      }
    //+-------------------------------------------------------------------------------------------+
    int deinit()
      {
       ObjectsDeleteAll(ChartID(),INDI_NAME);
       return(0);
      }
    //+------------------------------------------------------------------+
    //| 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[])
      {
       DrawMissingTime();
    //--- return value of prev_calculated for next call
       return(rates_total);
      }
    //+------------------------------------------------------------------+
    //| Timer function                                                   |
    //+------------------------------------------------------------------+
    void OnTimer()
      {
       DrawMissingTime();
       if(TimeSeconds(TimeCurrent())%TimerInterval==0)
         {
          DrawScanner();
         }
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    long getAvgVolume(string symbol,int period)
      {
       long volume_total=0;
       for(int i=0; i<period; i++)
         {
          volume_total+=iVolume(symbol,VolumeTimeframe,i);
         }
       return volume_total / period;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    double getRange(string symbol,int period)
      {
       int DataPeriod=PERIOD_D1;
       int DataBar=iBarShift(symbol,DataPeriod,Time[0]);
       double range = iHigh(symbol, period, DataBar) - iLow(symbol, period, DataBar);
       double point = MarketInfo(symbol, MODE_POINT);
       if(point > 0) return (NormalizeDouble(range / point, 0));
       return 1;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawMissingTime(int deltaY=0)
      {
       int x=GUIXOffset+ListXOffset,y=20;

       DrawLabel("CurTimeLbl",x,y,"Server Time:"+TimeToStr(TimeCurrent(),TIME_MINUTES),FontSize,FontName,clrWhite);
       DrawLabel("LocalTimeLbl",x+=150,y,"Local Time:"+TimeToStr(TimeLocal(),TIME_MINUTES),FontSize,FontName,clrWhite);
       DrawLabel("TimeLeftLbl",x+=150,y,"Time until Candle close:",FontSize,FontName,clrWhite);
       DrawTimeMissingColum(PERIOD_M1,x+=150,y);
       DrawTimeMissingColum(PERIOD_M5,x+=GUIColOffset,y);
       DrawTimeMissingColum(PERIOD_M15,x+=GUIColOffset,y,30);
       DrawTimeMissingColum(PERIOD_H1,x+=GUIColOffset, y);
       DrawTimeMissingColum(PERIOD_H4,x+=GUIColOffset, y);
       DrawTimeMissingColum(PERIOD_D1,x+=GUIColOffset, y);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawTimeMissingColum(int period,int x,int y,int dxOffset=25)
      {
       int dx=x;
       color timeColor;
       string periodStr= GetPeriodStr(period);
       string timeLeft = GetTimeToClose(period, timeColor);

       DrawLabel("TimeLeftLbl_"+periodStr,dx,y,periodStr+":",FontSize,FontName,clrWhite);
       DrawLabel("TimeLeftVal_"+periodStr,dx+=dxOffset,y,timeLeft,FontSize,FontName,timeColor);

      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    string GetTimeToClose(int period,color &timeColor)
      {
       int periodMinutes = periodToMinutes(period);
       int shift         = periodMinutes*60;
       int currentTime   = (int)TimeCurrent();
       int localTime     = (int)TimeLocal();
       int barTime       = (int)iTime(period);
       int diff          = (int)MathMax(round((currentTime-localTime)/3600.0)*3600,-24*3600);

       string time=getTime(barTime+periodMinutes*60-localTime-diff,timeColor);
       time=(TerminalInfoInteger(TERMINAL_CONNECTED)) ? time : time+" x";

       return time;
      }
    //+------------------------------------------------------------------+

    void DrawLabel(string name,int x,int y,string label,int size=9,string font="Arial",color clr=DimGray,string tooltip="")
      {
       name=INDI_NAME+":"+name;
       ObjectDelete(name);
       ObjectCreate(name,OBJ_LABEL,0,0,0);
       ObjectSetText(name,label,size,font,clr);
       ObjectSet(name,OBJPROP_CORNER,0);
       ObjectSet(name,OBJPROP_XDISTANCE,x);
       ObjectSet(name,OBJPROP_YDISTANCE,y);
       ObjectSetString(0,name,OBJPROP_TOOLTIP,tooltip);
    //--- justify text
    //ObjectSet(name, OBJPROP_ANCHOR, 0);
    //ObjectSetString(0, name, OBJPROP_TOOLTIP, tooltip);
    //ObjectSet(name, OBJPROP_SELECTABLE, 0);
    //---
      }
    //+------------------------------------------------------------------+
    //| The function sets chart background color.                        |
    //+------------------------------------------------------------------+
    bool ChartColorSet(int prop_id,const color clr,const long chart_ID=0)
      {
    //--- reset the error value
       ResetLastError();
    //--- set the chart background color
       if(!ChartSetInteger(chart_ID,prop_id,clr))
         {
          //--- display the error message in Experts journal
          Print(__FUNCTION__+", Error Code = ",GetLastError());
          return(false);
         }
    //--- successful execution
       return(true);
      }
    //+------------------------------------------------------------------+
    //| Set chart display type (candlesticks, bars or                    |
    //| line).                                                           |
    //+------------------------------------------------------------------+
    bool ChartModeSet(const long value,const long chart_ID=0)
      {
    //--- reset the error value
       ResetLastError();
    //--- set property value
       if(!ChartSetInteger(chart_ID,CHART_MODE,value))
         {
          //--- display the error message in Experts journal
          Print(__FUNCTION__+", Error Code = ",GetLastError());
          return(false);
         }
    //--- successful execution
       return(true);
      }
    //+------------------------------------------------------------------+

    //+------------------------------------------------------------------+
    void DrawScanner()
      {
       Print("=============>DrawScanner");
       for(int x=0; x<SymbolsTotal(true); x++)
         {
          DrawSymbol(SymbolName(x,true),x);
         }
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawSymbol(string symbolName,int symbolIdx)
      {
       int yMult = (int)fmod(symbolIdx, ColumnHeight);
       int xMult = (symbolIdx/ColumnHeight);
       int x= (GUIXOffset+GUIHeaderXOffset) + (NumVisibleColumns()*GUIColOffset)*xMult;
       int y= GUIYOffset+ListYOffset + ListYMultiplier * yMult;
       int colOffset=GUIColOffset;

       DrawSymbolColumn(symbolName,x,y,symbolName,FontSize,FontName);

       if(ShowPrice)
          DrawPriceColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
       if(ShowSpread)
          DrawSpreadColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
       if(ShowATR)
          DrawRangeColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
       if(ShowVolume)
          DrawVolumeColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
       if(ShowRsi)
          DrawRsiColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
       if(ShowStoch)
          DrawStochColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
       if(ShowAdx)
          DrawAdxColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
       if(ShowPivots)
          DrawPivotsColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
       if(ShowMA)
          DrawMAColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+

    double getPoint(string symbol)
      {
       return MarketInfo(symbol,MODE_POINT);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    double getModifier(string symbol)
      {
       int digits=(int)MarketInfo(symbol,MODE_DIGITS);
       double modifier=1;
       if(digits==3 || digits==5)
          modifier=10.0;
       return modifier;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawRsiColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
      {
       double rsi=NormalizeDouble(iRSI(symbolName,RsiTimeframe,RsiPeriod,PRICE_CLOSE,0),0);
       string tooltip=symbolName+"\n.: "+GetPeriodStr(RsiTimeframe)+" RSI ("+IntegerToString(RsiPeriod)+"):.\nCurrent  ("+DoubleToStr(rsi,1)+")";
       DrawLabel("rsi_"+symbolName,x,y,DoubleToStr(rsi,1),fontSize,fontName,GetRsiColor(rsi),tooltip);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawStochColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
      {
       double stoch=iStochastic(symbolName,StochTimeframe,StochK,StochD,StochSlow,StochMethod,StochPrice,MODE_MAIN,0);
       string tooltip=symbolName+"\n.: "+GetPeriodStr(StochTimeframe)+" Stoch :.\nCurrent  ("+DoubleToStr(stoch,1)+")";
       DrawLabel("stoch_"+symbolName,x,y,DoubleToStr(stoch,1),fontSize,fontName,GetStochColor(stoch),tooltip);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawAdxColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
      {
       double adx=iADX(symbolName,AdxTimeframe,AdxPeriod,AdxAppliedPrice,MODE_MAIN,0);
       string tooltip=symbolName+"\n.: "+GetPeriodStr(AdxTimeframe)+" ADX ("+IntegerToString(AdxPeriod)+"):.\nCurrent  ("+DoubleToStr(adx,1)+")";
       DrawLabel("adx_"+symbolName,x,y,GetAdxStr(adx),fontSize,fontName,GetAdxColor(adx),tooltip);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    string GetAdxStr(double adx)
      {
       if(adx<=25)
          return "No Trend";
       if(adx<=50)
          return "Weak Trend";
       if(adx<=75)
          return "Strong Trend";
       return "Very Strong Trend";
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    color GetAdxColor(double adx)
      {
       if(adx<=25)
          return clrWhite;
       if(adx<=50)
          return clrGreen;
       if(adx<=75)
          return clrYellow;
       return clrRed;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawPriceColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
      {
       int digits=(int)MarketInfo(symbolName,MODE_DIGITS);
       double vAsk=NormalizeDouble(MarketInfo(symbolName,MODE_ASK),digits);
       double vBid=NormalizeDouble(MarketInfo(symbolName,MODE_BID),digits);
       double vSpread=NormalizeDouble(MarketInfo(symbolName,MODE_SPREAD),digits);
       string tooltip=symbolName+"\n.: Price :.\nAsk: "+(string)vAsk+"\nBid: "+(string)vBid+"\nSpread: "+(string)vSpread;
       DrawLabel("price_"+symbolName,x,y,(string)vBid+":"+ IntegerToString(x),fontSize,fontName,clrWhite,tooltip);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawSpreadColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
      {
       int digits=(int)MarketInfo(symbolName,MODE_DIGITS);
       double vAsk=NormalizeDouble(MarketInfo(symbolName,MODE_ASK),digits);
       double vBid=NormalizeDouble(MarketInfo(symbolName,MODE_ASK),digits);
       double vSpread=NormalizeDouble(MarketInfo(symbolName,MODE_SPREAD),digits);
       string tooltip=symbolName+"\n.: SPREAD :.\nAsk: "+(string)vAsk+"\nBid: "+(string)vBid+"\nSpread: "+(string)vSpread;
       DrawLabel("spread_"+symbolName,x,y,(string)vSpread,fontSize,fontName,clrWhite,tooltip);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawPivotsColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
      {
       double pivots[7];
       int digits=(int)MarketInfo(symbolName,MODE_DIGITS);
       double vAsk=MarketInfo(symbolName,MODE_BID);
       double pivot=NormalizeDouble((GetPivotValue(symbolName,PERIOD_D1)),digits);

       pivots[0]=pivot;

       pivots[1]=NormalizeDouble((GetPivotResistance(symbolName,PERIOD_D1,pivot,1)),digits);
       pivots[2]=NormalizeDouble((GetPivotResistance(symbolName,PERIOD_D1,pivot,2)),digits);
       pivots[3]=NormalizeDouble((GetPivotResistance(symbolName,PERIOD_D1,pivot,3)),digits);

       pivots[4]=NormalizeDouble((GetPivotSupport(symbolName,PERIOD_D1,pivot,1)),digits);
       pivots[5]=NormalizeDouble((GetPivotSupport(symbolName,PERIOD_D1,pivot,2)),digits);
       pivots[6]=NormalizeDouble((GetPivotSupport(symbolName,PERIOD_D1,pivot,3)),digits);

       int closestIdx=GetClosestPivot(vAsk,pivots);
       double pips=vAsk-pivots[closestIdx];

       string tooltip=symbolName+"\n.: Daily Pivots :.\nPP: "+DoubleToStr(pivots[0])+"\nR1: "+DoubleToStr(pivots[1]);
       string pivotText=GetPivotDirection(pips)+" "+GetPivotStr(closestIdx);

       DrawLabel("pivots_"+symbolName,x,y,pivotText,fontSize,fontName,GetPivotColor(closestIdx),tooltip);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawMAColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
      {
       double ma=iMA(symbolName,MATimeframe,MAPeriod,0,MAMethod,MAAppliedPrice,0);
       string tooltip=symbolName+"\n.: "+GetPeriodStr(MATimeframe)+" MA ("+IntegerToString(MAPeriod)+"):.\nCurrent  ("+DoubleToStr(ma,1)+")";
       DrawLabel("ma_"+symbolName,x,y,GetMAStr(ma),fontSize,fontName,GetMAColor(ma),tooltip);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    color GetPivotColor(int pivotIdx)
      {
       if(pivotIdx==0)
          return clrWhite;
       if(pivotIdx<=3)
          return clrGreen;
       return clrRed;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int GetClosestPivot(double ask,double &pivots[])
      {
       int idx=0;
       double minDistance=1.7976931348623158e+308;
       for(int i=0;i<ArraySize(pivots);i++)
         {
          double dist=MathAbs(ask-pivots[i]);
          if(dist<minDistance)
            {
             minDistance=dist;
             idx=i;
            }
         }
       return idx;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    string GetPivotDirection(double value)
      {
       if(value>0)
          return "Above";
       return "Bellow";
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    double GetPivotValue(string symbolName,int timeframe)
      {
    //Pivot point (PP) = (High + Low + Close) / 3
       return (iHigh(symbolName,timeframe,1)+iLow(symbolName,timeframe,1)+iClose(symbolName,timeframe,1))/3;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    double GetPivotResistance(string symbolName,int timeframe,double pivotValue,int resistanceIdx=1)
      {
       switch(resistanceIdx)
         {
          case 3:
             //Third resistance (R3) = High + 2(PP – Low)
             return iHigh(symbolName,timeframe,1) + 2*(pivotValue - iLow(symbolName,timeframe,1));
          case 2:
             //Second resistance (R2) = PP + (High – Low)
             return pivotValue + (iHigh(symbolName,timeframe,1)-iLow(symbolName,timeframe,1));
          default:
             //First resistance (R1) = (2 x PP) – Low
             return (2*pivotValue) - iLow(symbolName,timeframe,1);
         }
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    double GetPivotSupport(string symbolName,int timeframe,double pivotValue,int supportIdx=1)
      {
       switch(supportIdx)
         {
          case 3:
             //Third support (S3) = Low – 2(High – PP)
             return iLow(symbolName,timeframe,1) - 2*(iHigh(symbolName,timeframe,1)-pivotValue);
          case 2:
             //Second support (S2) = PP – (High – Low)
             return pivotValue - (iHigh(symbolName,timeframe,1) - iLow(symbolName,timeframe,1));
          default:
             //First support (S1) = (2 x PP) – High
             return (2*pivotValue) - iHigh(symbolName,timeframe,1);
         }
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawVolumeColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
      {
       long volume=iVolume(symbolName,VolumeTimeframe,0);
       double volAvg=(double)getAvgVolume(symbolName,VolumePeriod);
       if(volAvg==0) volAvg=1;
       double volPercent=(volume/volAvg)*100;
       string tooltip=symbolName+"\n.: "+GetPeriodStr(VolumeTimeframe)+" Volume ("+IntegerToString(VolumePeriod)+"):.\nCurrent  ("+DoubleToStr(volume,0)+")\nAverage ("+DoubleToStr(volAvg,0)+")";

       DrawLabel("vol"+symbolName,x,y,DoubleToStr(volPercent,2)+"%",fontSize,fontName,GetPercentColor(volPercent),tooltip);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawRangeColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
      {
       double atr=0;
       double point=getPoint(symbolName);
       double modifier=getModifier(symbolName);

       if(point>0) atr=(NormalizeDouble(iATR(symbolName,AtrTimeframe,AtrPeriod,0)/point,0))/modifier;
       if(atr==0) atr=1;
       double range=getRange(symbolName,AtrTimeframe)/modifier;
       double rangePercent=(range/atr)*100;
       string tooltip=symbolName+"\n.: "+GetPeriodStr(AtrTimeframe)+" ATR ("+IntegerToString(AtrPeriod)+"):.\nCurrent  ("+DoubleToStr(range,1)+")\nAverage ("+DoubleToStr(atr,1)+")";

       DrawLabel("atr_"+symbolName,x,y,DoubleToStr(rangePercent,1)+"%",fontSize,fontName,GetPercentColor(rangePercent),tooltip);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    color GetRsiColor(double value)
      {
       if(value>=RsiUpperLevel)
          return clrGreen;
       if(value<=RsiLowerLevel)
          return clrRed;
       return clrWhite;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    color GetMAColor(double value)
      {
       if(Ask<=value)
          return clrGreen;
       else
          return clrRed;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    string GetMAStr(double value)
      {
       if(Ask<=value)
          return "down";
       else
          return "up";
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    color GetStochColor(double value)
      {
       if(value>=StochUpperLevel)
          return clrGreen;
       if(value<=StochLowerLevel)
          return clrRed;
       return clrWhite;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    color GetPercentColor(double value)
      {
       if(value<=25)
          return clrWhite;
       if(value<=50)
          return clrGreen;
       if(value<=75)
          return clrYellow;
       if(value<=100)
          return clrRed;
       return clrPurple;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawSymbolColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
      {
       DrawLabel("lbl_"+symbolName,x,y,text,fontSize,fontName,clrWhite,symbolName);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawHeader()
      {
       string objName="Header";
       int numColumns=(SymbolsTotal(true)/ColumnHeight)+1;
       int i=0;
       do
         {
          int x=(GUIXOffset+GUIHeaderXOffset)+(NumVisibleColumns()*GUIColOffset)*i;
          int y=GUIYOffset+GUIHeaderYOffset;
          string n=IntegerToString(i);

          DrawLabel(objName+"name"+n,x,y,"Name",FontSize,FontName,clrWhite,"Name");
          DrawHorizontalLine(objName+"namehline"+n,x,y,15);

          if(ShowPrice)
            {
             DrawLabel(objName+"price"+n,x+=GUIColOffset,y,"Price",FontSize,FontName,clrWhite,"Price");
             DrawHorizontalLine(objName+"pricehline"+n,x,y,15);
            }
          if(ShowSpread)
            {
             DrawLabel(objName+"spread"+n,x+=GUIColOffset,y,"Spread",FontSize,FontName,clrWhite,"Spread");
             DrawHorizontalLine(objName+"spreadhline"+n,x,y,15);
            }
          if(ShowATR)
            {
             DrawLabel(objName+"range"+n,x+=GUIColOffset,y,"ATR ("+GetPeriodStr(AtrTimeframe)+")",FontSize,FontName,clrWhite,"Range");
             DrawHorizontalLine(objName+"rangehline"+n,x,y,15);
            }
          if(ShowVolume)
            {
             DrawLabel(objName+"curvolume"+n,x+=GUIColOffset,y,"Vol ("+GetPeriodStr(VolumeTimeframe)+")",FontSize,FontName,clrWhite,"Volume");
             DrawHorizontalLine(objName+"volhline"+n,x,y,15);
            }
          if(ShowRsi)
            {
             DrawLabel(objName+"rsi"+n,x+=GUIColOffset,y,"RSI ("+GetPeriodStr(RsiTimeframe)+")",FontSize,FontName,clrWhite,"Pivots");
             DrawHorizontalLine(objName+"rsihline"+n,x,y,15);
            }
          if(ShowStoch)
            {
             DrawLabel(objName+"stoch"+n,x+=GUIColOffset,y,"Stoch ("+GetPeriodStr(StochTimeframe)+")",FontSize,FontName,clrWhite,"Stochastic");
             DrawHorizontalLine(objName+"stochhline"+n,x,y,15);
            }
          if(ShowAdx)
            {
             DrawLabel(objName+",adx"+n,x+=GUIColOffset,y,"ADX ("+GetPeriodStr(AdxTimeframe)+")",FontSize,FontName,clrWhite,"ADX");
             DrawHorizontalLine(objName+"adxhline"+n,x,y,15);
            }

          if(ShowPivots)
            {
             DrawLabel(objName+"pivots"+n,x+=GUIColOffset,y,"Pivots",FontSize,FontName,clrWhite,"Pivots");
             DrawHorizontalLine(objName+"pvotshline"+n,x,y,15);
            }

          if(ShowMA)
            {
             DrawLabel(objName+"ma"+n,x+=GUIColOffset,y,"MA",FontSize,FontName,clrWhite,"MA");
             DrawHorizontalLine(objName+"maline"+n,x,y,15);
            }
          i++;
         }
       while(i<numColumns);
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int NumVisibleColumns()
      {
       int x=1;
       if(ShowPrice)
         {
          x++;
         }
       if(ShowSpread)
         {
          x++;
         }
       if(ShowATR)
         {
          x++;
         }
       if(ShowVolume)
         {
          x++;
         }
       if(ShowRsi)
         {
          x++;
         }
       if(ShowStoch)
         {
          x++;
         }
       if(ShowAdx)
         {
          x++;
         }
       if(ShowPivots)
         {
          x++;
         }
       if(ShowMA)
         {
          x++;
         }
       return x;
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void DrawHorizontalLine(string objName,int x,int y,int length=250)
      {
       string line;
       for(int i=0;i<length;i++)
          line += "_";

       DrawLabel(objName+"1",x,y,line,FontSize,FontName,clrWhite,"");
    //DrawLabel(objName+"2",x+380,y,line,FontSize,FontName,clrWhite,"");
      }
    //+------------------------------------------------------------------+
    int periodToMinutes(int period)
      {
       int i;
       static int _per[]={1,2,3,4,5,6,10,12,15,20,30,60,120,180,240,360,480,720,1440,10080,43200,0x4001,0x4002,0x4003,0x4004,0x4006,0x4008,0x400c,0x4018,0x8001,0xc001};
       static int _min[]={1,2,3,4,5,6,10,12,15,20,30,60,120,180,240,360,480,720,1440,10080,43200};
    //---
       if(period==PERIOD_CURRENT)
          period=Period();
       for(i=0;i<20;i++) if(period==_per[i]) break;
       return(_min[i]);
      }
    //+------------------------------------------------------------------+
    datetime iTime(int period)
      {
       datetime times[];
       if(CopyTime(Symbol(),period,0,1,times)<=0)
          return(TimeLocal());
       return(times[0]);
      }
    //+------------------------------------------------------------------+
    string getTime(int times,color &theColor)
      {
       string stime="";
       int    seconds;
       int    minutes;
       int    hours;

       if(times<0)
         {
          theColor=clrRed;
          times=(int)fabs(times);
         }
       else if(times>0)
         {
          theColor=clrYellow;
         }

       seconds = (times%60);
       hours   = (times-times%3600)/3600;
       minutes = (times-seconds)/60-hours*60;
    //---
       if(hours>0)
          if(minutes<10)
             stime = stime+(string)hours+":0";
       else  stime = stime+(string)hours+":";
       stime=stime+(string)minutes;
       if(seconds<10)
          stime=stime+":0"+(string)seconds;
       else  stime=stime+":"+(string)seconds;
       return(stime);
      }
    //+------------------------------------------------------------------+
    string GetPivotStr(int pivotIdx)
      {
       switch(pivotIdx)
         {
          case 1:
             return "R1";
          case 2:
             return "R2";
          case 3:
             return "R3";
          case 4:
             return "S1";
          case 5:
             return "S2";
          case 6:
             return "S3";
          default:
             return "PP";
         }
      }
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    string GetPeriodStr(int period)
      {
       string TMz="";
       switch(period)
         {
          case 1:     TMz = "M1";  break;
          case 2:     TMz = "M2";  break;
          case 3:     TMz = "M3";  break;
          case 4:     TMz = "M4";  break;
          case 5:     TMz = "M5";  break;
          case 6:     TMz = "M6";  break;
          case 7:     TMz = "M7";  break;
          case 8:     TMz = "M8";  break;
          case 9:     TMz = "M9";  break;
          case 10:    TMz = "M10"; break;
          case 11:    TMz = "M11"; break;
          case 12:    TMz = "M12"; break;
          case 13:    TMz = "M13"; break;
          case 14:    TMz = "M14"; break;
          case 15:    TMz = "M15"; break;
          case 20:    TMz = "M20"; break;
          case 25:    TMz = "M25"; break;
          case 30:    TMz = "M30"; break;
          case 40:    TMz = "M40"; break;
          case 45:    TMz = "M45"; break;
          case 50:    TMz = "M50"; break;
          case 60:    TMz = "H1";  break;
          case 120:   TMz = "H2";  break;
          case 180:   TMz = "H3";  break;
          case 240:   TMz = "H4";  break;
          case 300:   TMz = "H5";  break;
          case 360:   TMz = "H6";  break;
          case 420:   TMz = "H7";  break;
          case 480:   TMz = "H8";  break;
          case 540:   TMz = "H9";  break;
          case 600:   TMz = "H10"; break;
          case 660:   TMz = "H11"; break;
          case 720:   TMz = "H12"; break;
          case 1440:  TMz = "D1";  break;
          case 10080: TMz = "W1";  break;
          case 43200: TMz = "M1";  break;
         }
       return TMz;
      }
    //+------------------------------------------------------------------+
    //+------------------------------------------------------------------+
    //| Create a trend line by the given coordinates                     |
    //+------------------------------------------------------------------+
    bool TrendCreate(const long            chart_ID=0,        // chart's ID
                     const string          name="TrendLine",  // line name
                     const int             sub_window=0,      // subwindow index
                     datetime              time1=0,           // first point time
                     double                price1=0,          // first point price
                     datetime              time2=0,           // second point time
                     double                price2=0,          // second point price
                     const color           clr=clrRed,        // line color
                     const ENUM_LINE_STYLE style=STYLE_SOLID, // line style
                     const int             width=1,           // line width
                     const bool            back=false,        // in the background
                     const bool            selection=true,    // highlight to move
                     const bool            ray_right=false,   // line's continuation to the right
                     const bool            hidden=true,       // hidden in the object list
                     const long            z_order=0)         // priority for mouse click
      {
    //--- set anchor points' coordinates if they are not set
       ChangeTrendEmptyPoints(time1,price1,time2,price2);
    //--- reset the error value
       ResetLastError();
    //--- create a trend line by the given coordinates
       if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,time1,price1,time2,price2))
         {
          Print(__FUNCTION__,
                ": failed to create a trend line! Error code = ",GetLastError());
          return(false);
         }
    //--- set line color
       ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
    //--- set line display style
       ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
    //--- set line width
       ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
    //--- display in the foreground (false) or background (true)
       ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
    //--- enable (true) or disable (false) the mode of moving the line by mouse
    //--- when creating a graphical object using ObjectCreate function, the object cannot be
    //--- highlighted and moved by default. Inside this method, selection parameter
    //--- is true by default making it possible to highlight and move the object
       ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
       ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
    //--- enable (true) or disable (false) the mode of continuation of the line's display to the right
       ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
    //--- hide (true) or display (false) graphical object name in the object list
       ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
    //--- set the priority for receiving the event of a mouse click in the chart
       ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
    //--- successful execution
       return(true);
      }
    //+------------------------------------------------------------------+
    //| Check the values of trend line's anchor points and set default   |
    //| values for empty ones                                            |
    //+------------------------------------------------------------------+
    void ChangeTrendEmptyPoints(datetime &time1,double &price1,
                                datetime &time2,double &price2)
      {
    //--- if the first point's time is not set, it will be on the current bar
       if(!time1)
          time1=TimeCurrent();
    //--- if the first point's price is not set, it will have Bid value
       if(!price1)
          price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
    //--- if the second point's time is not set, it is located 9 bars left from the second one
       if(!time2)
         {
          //--- array for receiving the open time of the last 10 bars
          datetime temp[10];
          CopyTime(Symbol(),Period(),time1,10,temp);
          //--- set the second point 9 bars left from the first one
          time2=temp[0];
         }
    //--- if the second point's price is not set, it is equal to the first point's one
       if(!price2)
          price2=price1;
      }
    //+------------------------------------------------------------------+

    艾云淺談

      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 人人妻人人澡人人爽欧美二区 | 国产真实乱子伦精品视频| 真人无码作爱免费视频| 国产亚洲AV电影院之毛片| 国产成人精品无码免费看| 毛片免费观看天天干天天爽| 亚洲色最新高清AV网站| 久久婷婷综合色丁香五月| 97成人碰碰久久人人超级碰oo| 国产精品VA尤物在线观看| 亚洲更新最快无码视频| 韩国精品久久久久久无码| 亚洲AV综合色区在线观看| 久久精品人妻无码专区| 日韩深夜免费在线观看| 任你躁国产自任一区二区三区| caoporn成人免费公开| 樱花草在线社区WWW韩国| 午夜毛片不卡免费观看视频| 亚洲国产一区二区三区亚瑟| 精选国产av精选一区二区三区| 国产高跟黑色丝袜在线| 国产精品二区中文字幕| 人妻少妇偷人精品无码| 国产成AV人片久青草影院| 337P日本欧洲亚洲大胆精品| 国产L精品国产亚洲区在线观看| 久爱www人成免费网站| 久久精品国产99精品国产2021| 亚洲AVAV天堂AV在线网阿V| 亚洲AV永久纯肉无码精品动漫 | 久久6久久66热这里只是精品| 草裙社区精品视频播放| 精品国产成人A区在线观看| 另类国产精品一区二区| 亚洲色大成网站WWW永久麻豆| 亚欧乱色熟女一区二区三区| 99RE6在线观看国产精品| 亚洲最大成人免费av| 性一交一乱一伦一| 天天夜碰日日摸日日澡性色AV |