外汇指标
demarker indicator
回复:0  浏览:611
  • 楼主admin 圈主
  • 2019-05-05 05:06
XAUUSDH1.png

  1. //+------------------------------------------------------------------+
  2. //|                                                     DeMarker.mq4 |
  3. //|                      Copyright ?2005, metaQuotes Software Corp. |
  4. //|                                        http://www.metaquotes.net |
  5. //+------------------------------------------------------------------+
  6. #property copyright "Copyright ?2005, metaQuotes Software Corp."
  7. #property link      "http://www.metaquotes.net"

  8. #property indicator_separate_window
  9. #property indicator_minimum 0
  10. #property indicator_maximum 1
  11. #property indicator_buffers 1
  12. #property indicator_color1 DodgerBlue
  13. #property indicator_level1 0.3
  14. #property indicator_level2 0.7
  15. //---- input parameters
  16. extern int DeMarkerPeriod=14;
  17. //---- buffers
  18. double DeMarkerBuffer[];
  19. double ExtMaxBuffer[];
  20. double ExtMinBuffer[];
  21. //+------------------------------------------------------------------+
  22. //| Custom indicator initialization function                         |
  23. //+------------------------------------------------------------------+
  24. int init()
  25.   {
  26.    string short_name;
  27. //---- 2 additional buffers are used for counting.
  28.    IndicatorBuffers(3);
  29.    SetIndexBuffer(0,DeMarkerBuffer);
  30.    SetIndexBuffer(1,ExtMaxBuffer);
  31.    SetIndexBuffer(2,ExtMinBuffer);
  32. //---- indicator line
  33.    SetIndexStyle(0,DRAW_LINE);
  34. //---- name for DataWindow and indicator subwindow label
  35.    short_name="DeM("+DeMarkerPeriod+")";
  36.    IndicatorShortName(short_name);
  37.    SetIndexLabel(0,short_name);
  38. //---- first values aren't drawn
  39.    SetIndexDrawBegin(0,DeMarkerPeriod);
  40. //----
  41.    return(0);
  42.   }
  43. //+------------------------------------------------------------------+
  44. //| DeMarker                                                         |
  45. //+------------------------------------------------------------------+
  46. int start()
  47.   {
  48.    double dNum;
  49.    int    i,nCountedBars;
  50. //---- insufficient data
  51.    if(Bars<=DeMarkerPeriod) return(0);
  52. //---- bars count that does not changed after last indicator launch.
  53.    nCountedBars=IndicatorCounted();
  54. //----
  55.    ExtMaxBuffer[Bars-1]=0.0;
  56.    ExtMinBuffer[Bars-1]=0.0;
  57.    if(nCountedBars>2) i=Bars-nCountedBars-1;
  58.    else               i=Bars-2;
  59.    while(i>=0)
  60.      {
  61.       dNum=High[i]-High[i+1];
  62.       if(dNum<0.0) dNum=0.0;
  63.       ExtMaxBuffer[i]=dNum;
  64.       
  65.       dNum=Low[i+1]-Low[i];
  66.       if(dNum<0.0) dNum=0.0;
  67.       ExtMinBuffer[i]=dNum;

  68.       i--;
  69.      }   
  70. //---- initial zero
  71.    if(nCountedBars<1)
  72.       for(i=1; i<=DeMarkerPeriod; i++)
  73.          DeMarkerBuffer[Bars-i]=0.0;   
  74. //----
  75.    i=Bars-DeMarkerPeriod-1;
  76.    if(nCountedBars>=DeMarkerPeriod) i=Bars-nCountedBars-1;
  77.    while(i>=0)
  78.      {
  79.       dNum=iMAonArray(ExtMaxBuffer,0,DeMarkerPeriod,0,MODE_SMA,i)+
  80.            iMAonArray(ExtMinBuffer,0,DeMarkerPeriod,0,MODE_SMA,i);
  81.       if(dNum!=0.0)
  82.          DeMarkerBuffer[i]=iMAonArray(ExtMaxBuffer,0,DeMarkerPeriod,0,MODE_SMA,i)/dNum;
  83.       else
  84.          DeMarkerBuffer[i]=0.0;
  85.       
  86.       i--;
  87.      }
  88.    return(0);
  89.   }
  90. //+------------------------------------------------------------------+