外汇指标
TDI Red Green
回复:0  浏览:950
  • 楼主admin 圈主
  • 2019-05-05 05:02
EURGBPH1.png

  1. //+------------------------------------------------------------------+
  2. //|                                    Traders Dynamic Index.mq4     |
  3. //|                                    Copyright ?2006, Dean Malone |
  4. //|                                    www.compassfx.com             |
  5. //+------------------------------------------------------------------+


  6. #property indicator_buffers 6
  7. #property indicator_color1 Black
  8. #property indicator_color2 0xFFFFFFFF  // MediumBlue
  9. #property indicator_color3 0xFFFFFFFF  // Yellow
  10. #property indicator_color4 0xFFFFFFFF  // MediumBlue
  11. #property indicator_color5 Green
  12. #property indicator_color6 Red
  13. #property indicator_separate_window

  14. extern int RSI_Period = 13;         //8-25
  15. extern int RSI_Price = 0;           //0-6
  16. extern int Volatility_Band = 34;    //20-40
  17. extern int RSI_Price_Line = 2;      
  18. extern int RSI_Price_Type = 0;      //0-3
  19. extern int Trade_Signal_Line = 7;   
  20. extern int Trade_Signal_Type = 0;   //0-3

  21. double RSIBuf[],UpZone[],MdZone[],DnZone[],MaBuf[],MbBuf[];

  22. int init()
  23.   {
  24.    IndicatorShortName("TDI");
  25.    SetIndexBuffer(0,RSIBuf);
  26.    SetIndexBuffer(1,UpZone);
  27.    SetIndexBuffer(2,MdZone);
  28.    SetIndexBuffer(3,DnZone);
  29.    SetIndexBuffer(4,MaBuf);
  30.    SetIndexBuffer(5,MbBuf);
  31.    
  32.    SetIndexStyle(0,DRAW_NONE);
  33.    SetIndexStyle(1,DRAW_LINE);
  34.    SetIndexStyle(2,DRAW_LINE);   //,0,2
  35.    SetIndexStyle(3,DRAW_LINE);
  36.    SetIndexStyle(4,DRAW_LINE);   //,0,2
  37.    SetIndexStyle(5,DRAW_LINE);   //,0,2
  38.    
  39.    SetIndexLabel(0,NULL);
  40.    SetIndexLabel(1,"VB High");
  41.    SetIndexLabel(2,"Market base Line");
  42.    SetIndexLabel(3,"VB Low");
  43.    SetIndexLabel(4,"RSI Price Line");
  44.    SetIndexLabel(5,"Trade Signal Line");

  45.    SetLevelValue(0,50);
  46.    SetLevelValue(1,68);
  47.    SetLevelValue(2,32);
  48.    SetLevelStyle(STYLE_DOT,1,DimGray);
  49.    
  50.    return(0);
  51.   }

  52. int start()
  53.   {
  54.    double MA,RSI[];
  55.    ArrayResize(RSI,Volatility_Band);
  56.    int counted_bars=IndicatorCounted();
  57.    int limit = Bars-counted_bars-1;
  58.    for(int i=limit; i>=0; i--)
  59.    {
  60.       RSIBuf[i] = (iRSI(NULL,0,RSI_Period,RSI_Price,i));
  61.       MA = 0;
  62.       for(int x=i; x<i+Volatility_Band; x++) {
  63.          RSI[x-i] = RSIBuf[x];
  64.          MA += RSIBuf[x]/Volatility_Band;
  65.       }
  66.       UpZone[i] = (MA + (1.6185 * StDev(RSI,Volatility_Band)));
  67.       DnZone[i] = (MA - (1.6185 * StDev(RSI,Volatility_Band)));  
  68.       MdZone[i] = ((UpZone[i] + DnZone[i])/2);
  69.       }
  70.    for (i=limit-1;i>=0;i--)  
  71.       {
  72.        MaBuf[i] = (iMAonArray(RSIBuf,0,RSI_Price_Line,0,RSI_Price_Type,i));
  73.        MbBuf[i] = (iMAonArray(RSIBuf,0,Trade_Signal_Line,0,Trade_Signal_Type,i));   
  74.       }
  75. //----
  76.    return(0);
  77.   }
  78.   
  79. double StDev(double& Data[], int Per)
  80. {return(MathSqrt(Variance(Data,Per)));
  81. }
  82. double Variance(double& Data[], int Per)
  83. {double sum, ssum;
  84.   for (int i=0; i<Per; i++)
  85.   {sum += Data[i];
  86.    ssum += MathPow(Data[i],2);
  87.   }
  88.   return((ssum*Per - sum*sum)/(Per*(Per-1)));
  89. }
  90. //+------------------------------------------------------------------+