外汇指标
PSAR
回复:0  浏览:90
  • 楼主admin 圈主
  • 2019-05-05 05:06
GBPUSDH1.png


  1. #property copyright "Copyright ?2010, basisforex@gmail.com"
  2. #property link      "basisforex@gmail.com"
  3. //-----
  4. #property indicator_chart_window
  5. #property indicator_buffers 6
  6. #property indicator_color1 Yellow
  7. #property indicator_color2 RoyalBlue
  8. #property indicator_color3 Blue
  9. #property indicator_color4 Black
  10. #property indicator_color5 Lime
  11. #property indicator_color6 Red
  12. //-----
  13. extern bool       alertsEnabled  = true;
  14. extern bool       TF4            = false;
  15. extern bool       TF3            = false;
  16. extern bool       TF2            = true;
  17. //-----
  18. extern double     Step           = 0.02;
  19. extern double     Maximum        = 0.2;
  20. //-----
  21. double s1[];
  22. double s2[];
  23. double s3[];
  24. double s4[];
  25. double bullish[];
  26. double bearish[];
  27. double sarUp[];
  28. double sarDn[];
  29. double alertBar;
  30. bool sar4, sar3, sar2;
  31. //+------------------------------------------------------------------+
  32. int init()
  33. {
  34.    SetIndexBuffer(0, s1);
  35.    SetIndexBuffer(1, s2);
  36.    SetIndexBuffer(2, s3);
  37.    SetIndexBuffer(3, s4);
  38.    //-----
  39.    SetIndexStyle(0, DRAW_ARROW);
  40.    SetIndexArrow(0, 159);
  41.    SetIndexStyle(1, DRAW_ARROW);
  42.    SetIndexArrow(1, 159);
  43.    SetIndexStyle(2, DRAW_ARROW);
  44.    SetIndexArrow(2, 159);
  45.    SetIndexStyle(3, DRAW_ARROW);
  46.    SetIndexArrow(3, 159);
  47.    //------
  48.    SetIndexStyle(4, DRAW_ARROW,OBJPROP_WIDTH,2);// UP___UP___UP
  49.    SetIndexArrow(4, 233);
  50.    SetIndexBuffer(4, bullish);
  51.    //-----
  52.    SetIndexStyle(5, DRAW_ARROW,OBJPROP_WIDTH,2);// DOWN____DOWN
  53.    SetIndexArrow(5, 234);      
  54.    SetIndexBuffer(5, bearish);
  55.    //-----
  56.    return(0);
  57. }
  58. //+------------------------------------------------------------------+
  59. void GetBool()
  60. {
  61.    if(TF4 == true)
  62.     {
  63.       sar4 = true; sar3 = true; sar2 = true;
  64.     }
  65.    else if(TF3 == true && TF4 == false)
  66.     {
  67.       sar4 = false; sar3 = true; sar2 = true;
  68.     }
  69.    else if(TF2 == true && TF4 == false && TF3 == false)
  70.     {
  71.       sar4 = false; sar3 = false; sar2 = true;
  72.     }
  73.    else if(TF2 == false && TF4 == false && TF3 == false)
  74.     {
  75.       sar4 = false; sar3 = false; sar2 = false;
  76.     }
  77. }
  78. //+------------------------------------------------------------------+
  79. string GetNextTF(int curTF)
  80. {
  81.    switch(curTF)
  82.     {
  83.       case 1:
  84.         return("5=15#30");
  85.         break;
  86.       case 5:
  87.         return("15=30#60");
  88.         break;
  89.       case 15:
  90.         return("30=60#240");
  91.         break;
  92.       case 30:
  93.         return("60=240#1440");
  94.         break;
  95.       case 60:
  96.         return("240=1440#10080");
  97.         break;
  98.       case 240:
  99.         return("1440=10080#43200");
  100.         break;        
  101.     }
  102. }
  103. //+------------------------------------------------------------------+
  104. void alertDn(double sar)
  105. {
  106.    int limit;
  107.    int counted_bars=IndicatorCounted();
  108.    if(counted_bars < 0) counted_bars = 0;
  109.    if(counted_bars > 0) counted_bars--;
  110.    limit = Bars - counted_bars;
  111.    //----
  112.    for(int i = 0; i < limit ;i++)
  113.     {
  114.       if(sar >= iHigh(Symbol(),0,i))
  115.        {
  116.          if(alertsEnabled == true && sarUp[i] == 0 && Bars > alertBar)
  117.           {
  118.             alert("PSAR Going Down on ", Symbol(), " - ", Period(), " min");
  119.             alertBar = Bars;
  120.           }
  121.          sarUp[i] = sar;  
  122.          sarDn[i] = 0;
  123.        }
  124.     }
  125. }
  126. //+------------------------------------------------------------------+
  127. void alertUp(double sar)
  128. {
  129.    int limit;
  130.    int counted_bars = IndicatorCounted();
  131.    if(counted_bars < 0) counted_bars = 0;
  132.    if(counted_bars > 0) counted_bars--;
  133.    limit = Bars - counted_bars;
  134.    //----
  135.    for(int i = 0; i<limit ;i++)
  136.     {
  137.       if(sar <= iLow(Symbol(), 0, i))
  138.        {
  139.          if(alertsEnabled == true && sarDn[i] == 0 && Bars > alertBar)
  140.           {
  141.             alert("PSAR Going Up on ",Symbol(), " - ", Period(), " min");
  142.             alertBar = Bars;
  143.           }
  144.          sarUp[i] = 0;
  145.          sarDn[i] = sar;
  146.        }
  147.     }
  148. }
  149. //+------------------------------------------------------------------+
  150. int start()
  151. {
  152.    int limit;
  153.    int counted_bars = IndicatorCounted();
  154.    if(counted_bars < 0) return(-1);
  155.    if(counted_bars > 0) counted_bars--;
  156.    limit = Bars - counted_bars;
  157.    //-----
  158.    string T = GetNextTF(Period());
  159.    int tf1 = StrToDouble(StringSubstr(T, 0, StringFind(T, "=", 0)));
  160.    int tf2 = StrToDouble(StringSubstr(T, StringFind(T, "=", 0) + 1, StringFind(T, "#", 0)));
  161.    int tf3 = StrToDouble(StringSubstr(T, StringFind(T, "#", 0) + 1, StringLen(T)));
  162.    //-----
  163.    GetBool();
  164.    //-----
  165.    for(int i = limit - 1; i >= 0; i--)
  166.     {
  167.          //===============================================         __________________________________________________   sar1  &  sar2  &  sar3  & sar4
  168.          if(sar2 == true && sar3 == true && sar4 == true)
  169.           {
  170.             Comment(Period(), " White", "n", tf1, " Yellow", "n", tf2, " Blue", "n", tf3, " Black");
  171.             s1[i]  = iSAR(NULL, Period(), Step, Maximum, i);
  172.             s2[i]  = iSAR(NULL, tf1, Step, Maximum, i / (tf1 / Period()));
  173.             s3[i]  = iSAR(NULL, tf2, Step, Maximum, i / (tf2 / Period()));
  174.             s4[i]  = iSAR(NULL, tf3, Step, Maximum, i / (tf3 / Period()));
  175.             //============================================================
  176.             if((s1[i] > High[i] && s2[i] > High[i] && s3[i] > High[i] && s4[i + 1] < Low[i + 1] && s4[i] > High[i]) ||
  177.                (s1[i] > High[i] && s2[i] > High[i] && s3[i + 1] < Low[i + 1] && s3[i] > High[i] && s4[i] > High[i]) ||
  178.                (s1[i] > High[i] && s2[i + 1] < Low[i + 1] && s2[i] > High[i] && s3[i] > High[i] && s4[i] > High[i]) ||
  179.                (s1[i + 1] < Low[i + 1] && s1[i] > High[i] && s2[i] > High[i] && s3[i] > High[i] && s4[i] > High[i]))
  180.              {
  181.                 bearish[i] = s1[i] + 5 * Point;//       SELL__SELL__SELL
  182.                 alertDn(s1[i]);
  183.              }
  184.             //-----
  185.             if((s1[i] < Low[i] && s2[i] < Low[i] && s3[i] < Low[i] && s4[i + 1] > High[i + 1] && s4[i] < Low[i]) ||
  186.                (s1[i] < Low[i] && s2[i] < Low[i] && s3[i + 1] > High[i + 1] && s3[i] < Low[i] && s4[i] < Low[i]) ||
  187.                (s1[i] < Low[i] && s2[i + 1] > High[i + 1] && s2[i] < Low[i] && s3[i] < Low[i] && s4[i] < Low[i]) ||
  188.                (s1[i + 1] > High[i + 1] && s1[i] < Low[i] && s2[i] < Low[i] && s3[i] < Low[i] && s4[i] < Low[i]))
  189.              {
  190.                bullish[i] =  s1[i] - 5 * Point;//      BUY___BUY___BUY
  191.                alertUp(s1[i]);
  192.              }
  193.           }
  194.           //===============================================         __________________________________________________   sar1  &  sar2  &  sar3
  195.          else if(sar2 == true && sar3 == true && sar4 == false)
  196.           {     
  197.             Comment(Period(), " White", "n", tf1, " Yellow  ", "n", tf2, " Blue");
  198.             s1[i]  = iSAR(NULL, Period(), Step, Maximum, i);
  199.             s2[i]  = iSAR(NULL, tf1, Step, Maximum, i / (tf1 / Period()));
  200.             s3[i]  = iSAR(NULL, tf2, Step, Maximum, i / (tf2 / Period()));
  201.             //============================================================
  202.             if((s1[i] > High[i] && s2[i] > High[i] && s3[i + 1] < Low[i + 1] && s3[i] > High[i]) ||
  203.                (s1[i] > High[i] && s2[i + 1] < Low[i + 1] && s2[i] > High[i] && s3[i] > High[i]) ||
  204.                (s1[i + 1] < Low[i + 1] && s1[i] > High[i] && s2[i] > High[i] && s3[i] > High[i]))
  205.              {
  206.                bearish[i] = s1[i] + 5 * Point;//       SELL__SELL__SELL
  207.                alertDn(s1[i]);
  208.              }
  209.             //-----
  210.             if((s1[i] < Low[i] && s2[i] < Low[i] && s3[i + 1] > High[i + 1] && s3[i] < Low[i]) ||
  211.                (s1[i] < Low[i] && s2[i + 1] > High[i + 1] && s2[i] < Low[i] && s3[i] < Low[i]) ||
  212.                (s1[i + 1] > High[i + 1] && s1[i] < Low[i] && s2[i] < Low[i] && s3[i] < Low[i]))
  213.              {
  214.                bullish[i] =  s1[i] - 5 * Point;//      BUY___BUY___BUY
  215.                alertUp(s1[i]);
  216.              }
  217.           }
  218.          //===============================================          __________________________________________________   sar1  &  sar2
  219.          else if(sar2 == true && sar3 == false && sar4 == false)
  220.           {     
  221.             Comment(Period(), " White", "n", tf1, " Yellow");
  222.             s1[i]  = iSAR(NULL, Period(), Step, Maximum, i);
  223.             s2[i]  = iSAR(NULL, tf1, Step, Maximum, i / (tf1 / Period()));
  224.             //============================================================
  225.             if((s1[i] > High[i] && s2[i + 1] < Low[i + 1] && s2[i] > High[i]) ||
  226.                (s1[i + 1] < Low[i + 1] && s1[i] > High[i] && s2[i] > High[i]))
  227.              {
  228.                bearish[i] = s1[i] + 5 * Point;//       SELL__SELL__SELL
  229.                alertDn(s1[i]);
  230.              }
  231.             //-----
  232.             if((s1[i] < Low[i] && s2[i + 1] > High[i + 1] && s2[i] < Low[i]) ||
  233.                (s1[i + 1] > High[i + 1] && s1[i] < Low[i] && s2[i] < Low[i]))
  234.              {
  235.                bullish[i] =  s1[i] - 5 * Point;//      BUY___BUY___BUY
  236.                alertUp(s1[i]);
  237.              }
  238.           }
  239.          //===============================================          __________________________________________________   sar1
  240.          else if(sar2 == false && sar3 == false && sar4 == false)
  241.           {
  242.             Comment(Period(), " White");
  243.             s1[i]  = iSAR(NULL, Period(), Step, Maximum, i);
  244.             //============================================================
  245.             if(s1[i + 1] < Low[i + 1] && s1[i] > High[i])
  246.              {
  247.                bearish[i] = s1[i] + 5 * Point;//       SELL__SELL__SELL
  248.                alertDn(s1[i]);
  249.              }
  250.             //-----
  251.             if(s1[i + 1] > High[i + 1] && s1[i] < Low[i])
  252.              {
  253.                bullish[i] =  s1[i] - 5 * Point;//      BUY___BUY___BUY
  254.                alertUp(s1[i]);
  255.              }
  256.           }        
  257.     }  
  258.    //==============================================================================================================================================
  259.    return(0);
  260. }