设为首页 收藏本站 切换语言

抛物线翻转  

| 发表于 2020-8-7 09:18:56 | 显示全部楼层 |复制链接
  1. #property strict
  2. //--- indicator settings
  3. #property indicator_chart_window
  4. #property indicator_buffers 1
  5. #property indicator_color1  Lime
  6. //--- input parameters
  7. input double InpSARStep=0.02;    // Step
  8. input double InpSARMaximum=0.2;  // Maximum
  9. //---- buffers
  10. double       ExtSARBuffer[];
  11. //--- global variables
  12. double       ExtSarStep;
  13. double       ExtSarMaximum;
  14. int          ExtLastReverse;
  15. bool         ExtDirectionLong;
  16. double       ExtLastStep,ExtLastEP,ExtLastSAR;
  17. double       ExtLastHigh,ExtLastLow;
  18. //+------------------------------------------------------------------+
  19. //| Custom indicator initialization function                         |
  20. //+------------------------------------------------------------------+
  21. void OnInit()
  22.   {
  23. //--- checking input data
  24.    if(InpSARStep<0.0)
  25.      {
  26.       ExtSarStep=0.02;
  27.       Print("Input parametr InpSARStep has incorrect value. Indicator will use value ",
  28.             ExtSarStep," for calculations.");
  29.      }
  30.    else
  31.       ExtSarStep=InpSARStep;
  32.    if(InpSARMaximum<0.0)
  33.      {
  34.       ExtSarMaximum=0.2;
  35.       Print("Input parametr InpSARMaximum has incorrect value. Indicator will use value ",
  36.             ExtSarMaximum," for calculations.");
  37.      }
  38.    else
  39.       ExtSarMaximum=InpSARMaximum;
  40. //--- drawing settings
  41.    IndicatorDigits(Digits);
  42.    SetIndexStyle(0,DRAW_ARROW);
  43.    SetIndexArrow(0,159);
  44. //---- indicator buffers
  45.    SetIndexBuffer(0,ExtSARBuffer);
  46. //--- set short name
  47.    IndicatorShortName("SAR("+DoubleToString(ExtSarStep,2)+","+DoubleToString(ExtSarMaximum,2)+")");
  48. //--- set global variables
  49.    ExtLastReverse=0;
  50.    ExtDirectionLong=false;
  51.    ExtLastStep=ExtLastEP=ExtLastSAR=0.0;
  52.    ExtLastHigh=ExtLastLow=0.0;
  53. //----
  54.   }
  55. //+------------------------------------------------------------------+
  56. //| Parabolic SAR                                                    |
  57. //+------------------------------------------------------------------+
  58. int OnCalculate(const int rates_total,
  59.                 const int prev_calculated,
  60.                 const datetime &time[],
  61.                 const double &open[],
  62.                 const double &high[],
  63.                 const double &low[],
  64.                 const double &close[],
  65.                 const long &tick_volume[],
  66.                 const long &volume[],
  67.                 const int &spread[])
  68.   {
  69.    bool   dir_long;
  70.    double last_high,last_low,ep,sar,step;
  71.    int    i;
  72. //--- check for minimum rates count
  73.    if(rates_total<3)
  74.       return(0);
  75. //--- counting from 0 to rates_total
  76.    ArraySetAsSeries(ExtSARBuffer,false);
  77.    ArraySetAsSeries(high,false);
  78.    ArraySetAsSeries(low,false);
  79. //--- detect current position for calculations
  80.    i=prev_calculated-1;
  81. //--- calculations from start?
  82.    if(i<1)
  83.      {
  84.       ExtLastReverse=0;
  85.       dir_long=true;
  86.       step=ExtSarStep;
  87.       last_high=-10000000.0;
  88.       last_low=10000000.0;
  89.       sar=0;
  90.       i=1;
  91.       while(i<rates_total-1)
  92.         {
  93.          ExtLastReverse=i;
  94.          if(last_low>low[i])
  95.             last_low=low[i];
  96.          if(last_high<high[i])
  97.             last_high=high[i];
  98.          if(high[i]>high[i-1] && low[i]>low[i-1])
  99.             break;
  100.          if(high[i]<high[i-1] && low[i]<low[i-1])
  101.            {
  102.             dir_long=false;
  103.             break;
  104.            }
  105.          i++;
  106.         }
  107.       //--- initialize with zero
  108.       ArrayInitialize(ExtSARBuffer,0.0);
  109.       //--- go check
  110.       if(dir_long)
  111.         {
  112.          ExtSARBuffer[i]=low[i-1];
  113.          ep=high[i];
  114.         }
  115.       else
  116.         {
  117.          ExtSARBuffer[i]=high[i-1];
  118.          ep=low[i];
  119.         }
  120.       i++;
  121.      }
  122.    else
  123.      {
  124.       //--- calculations to be continued. restore last values
  125.       i=ExtLastReverse;
  126.       step=ExtLastStep;
  127.       dir_long=ExtDirectionLong;
  128.       last_high=ExtLastHigh;
  129.       last_low=ExtLastLow;
  130.       ep=ExtLastEP;
  131.       sar=ExtLastSAR;
  132.      }
  133. //---main cycle
  134.    while(i<rates_total)
  135.      {
  136.       //--- check for reverse
  137.       if(dir_long && low[i]<ExtSARBuffer[i-1])
  138.         {
  139.          SaveLastReverse(i,true,step,low[i],last_high,ep,sar);
  140.          step=ExtSarStep;
  141.          dir_long=false;
  142.          ep=low[i];
  143.          last_low=low[i];
  144.          ExtSARBuffer[i++]=last_high;
  145.          continue;
  146.         }
  147.       if(!dir_long && high[i]>ExtSARBuffer[i-1])
  148.         {
  149.          SaveLastReverse(i,false,step,last_low,high[i],ep,sar);
  150.          step=ExtSarStep;
  151.          dir_long=true;
  152.          ep=high[i];
  153.          last_high=high[i];
  154.          ExtSARBuffer[i++]=last_low;
  155.          continue;
  156.         }
  157.       //---
  158.       sar=ExtSARBuffer[i-1]+step*(ep-ExtSARBuffer[i-1]);
  159.       //--- LONG?
  160.       if(dir_long)
  161.         {
  162.          if(ep<high[i])
  163.            {
  164.             if((step+ExtSarStep)<=ExtSarMaximum)
  165.                step+=ExtSarStep;
  166.            }
  167.          if(high[i]<high[i-1] && i==2)
  168.             sar=ExtSARBuffer[i-1];
  169.          if(sar>low[i-1])
  170.             sar=low[i-1];
  171.          if(sar>low[i-2])
  172.             sar=low[i-2];
  173.          if(sar>low[i])
  174.            {
  175.             SaveLastReverse(i,true,step,low[i],last_high,ep,sar);
  176.             step=ExtSarStep; dir_long=false; ep=low[i];
  177.             last_low=low[i];
  178.             ExtSARBuffer[i++]=last_high;
  179.             continue;
  180.            }
  181.          if(ep<high[i])
  182.             ep=last_high=high[i];
  183.         }
  184.       else // SHORT
  185.         {
  186.          if(ep>low[i])
  187.            {
  188.             if((step+ExtSarStep)<=ExtSarMaximum)
  189.                step+=ExtSarStep;
  190.            }
  191.          if(low[i]<low[i-1] && i==2)
  192.             sar=ExtSARBuffer[i-1];
  193.          if(sar<high[i-1])
  194.             sar=high[i-1];
  195.          if(sar<high[i-2])
  196.             sar=high[i-2];
  197.          if(sar<high[i])
  198.            {
  199.             SaveLastReverse(i,false,step,last_low,high[i],ep,sar);
  200.             step=ExtSarStep;
  201.             dir_long=true;
  202.             ep=high[i];
  203.             last_high=high[i];
  204.             ExtSARBuffer[i++]=last_low;
  205.             continue;
  206.            }
  207.          if(ep>low[i])
  208.             ep=last_low=low[i];
  209.         }
  210.       ExtSARBuffer[i++]=sar;
  211.      }
  212. //---- OnCalculate done. Return new prev_calculated.
  213.    return(rates_total);
  214.   }
  215. //+------------------------------------------------------------------+
  216. //| Save last values to continue further calculations                |
  217. //+------------------------------------------------------------------+
  218. void SaveLastReverse(int reverse,bool dir,double step,double last_low,double last_high,double ep,double sar)
  219.   {
  220.    ExtLastReverse=reverse;
  221.    if(ExtLastReverse<2)
  222.       ExtLastReverse=2;
  223.    ExtDirectionLong=dir;
  224.    ExtLastStep=step;
  225.    ExtLastLow=last_low;
  226.    ExtLastHigh=last_high;
  227.    ExtLastEP=ep;
  228.    ExtLastSAR=sar;
  229.   }
复制代码
举报

评论 使用道具

精彩评论40

鸿运当归
DD
 楼主 | 发表于 2020-8-7 09:20:04 | 显示全部楼层
抛物线反转
举报

点赞 评论 使用道具

addat
DD
| 发表于 2021-5-16 13:58:55 | 显示全部楼层
thanks for your sharing.....
举报

点赞 评论 使用道具

升龙
DD
| 发表于 2021-5-16 14:14:50 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

jongjongyoshen
D
| 发表于 2021-5-16 14:40:43 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

qwe11
CCC
| 发表于 2021-5-16 15:36:04 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

JOKEEBOSS
DD
| 发表于 2021-5-16 18:03:29 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

lxh122
DD
| 发表于 2021-5-17 01:34:45 | 显示全部楼层
thanks for your sharing.....
举报

点赞 评论 使用道具

升龙
DD
| 发表于 2021-5-25 00:24:21 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

tokio147
D
| 发表于 2021-5-26 22:31:32 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

jongjongyoshen
D
| 发表于 2021-5-27 08:38:27 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

naowei
CCC
| 发表于 2021-11-6 07:21:55 | 显示全部楼层
谢谢分享抛物线翻转指标源码!
举报

点赞 评论 使用道具

秒秒007
DDD
| 发表于 2021-11-6 08:49:58 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

alphaSeven
D
| 发表于 2021-11-6 17:08:31 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

cdebjihong
DDD
| 发表于 2021-11-29 00:18:46 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

mydiis
DDD
| 发表于 2021-11-29 00:37:43 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

wangyang
DD
| 发表于 2021-11-29 02:28:21 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

yimu77
DDD
| 发表于 2021-11-29 07:50:32 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

秒秒007
DDD
| 发表于 2021-11-29 08:04:22 | 显示全部楼层
抛物线翻转
举报

点赞 评论 使用道具

jongjongyoshen
D
| 发表于 2021-11-29 08:17:45 | 显示全部楼层
感謝分享
举报

点赞 评论 使用道具

123下一页
发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)