查看: 5026|回复: 26

[MT4指标] 圆周率之顶底预测

[复制链接]
发表于 2014-3-3 12:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
附图指标,

mt4指标类型:趋势指标
是否能用在mt4手机版上:否

是否含有未来函数:无



CycleIdentifier2.jpg
  1. //+------------------------------------------------------------------+
  2. //|                                              CycleIdentifier.mq4 |
  3. //  |  
  4. //+------------------------------------------------------------------+
  5. #property copyright ""
  6. #property link      ""

  7. #property indicator_separate_window
  8. #property indicator_buffers 6
  9. #property indicator_color1 DarkGray

  10. #property indicator_color2 Lime
  11. #property indicator_color3 Red
  12. #property indicator_color4 DarkGreen
  13. #property indicator_color5 Brown

  14. #property indicator_minimum -1.2
  15. #property indicator_maximum 1.2

  16. extern int       PriceActionFilter=1;
  17. extern int       Length=3;
  18. extern int       MajorCycleStrength=4;
  19. extern bool      UseCycleFilter=false;
  20. extern int       UseFilterSMAorRSI=1;
  21. extern int       FilterStrengthSMA=12;
  22. extern int       FilterStrengthRSI=21;

  23. double LineBuffer[];
  24. double MajorCycleBuy[];
  25. double MajorCycleSell[];
  26. double MinorCycleBuy[];
  27. double MinorCycleSell[];
  28. double ZL1[];

  29. double CyclePrice = 0.0, Strength =0.0, SweepA = 0.0, SweepB = 0.0;
  30. int Switch = 0, Switch2 = 0,        SwitchA = 0, SwitchB = 0, SwitchC = 0, SwitchD = 0, SwitchE = 0, SwitchAA = 0, SwitchBB = 0;
  31. double Price1BuyA = 0.0, Price2BuyA = 0.0;
  32. int Price1BuyB = 1.0, Price2BuyB = 1.0;
  33. double Price1SellA = 0.0, Price2SellA = 0.0;
  34. int Price1SellB = 0.0, Price2SellB = 0.0;
  35. bool ActiveSwitch = True, BuySwitchA = FALSE, BuySwitchB = FALSE, SellSwitchA = FALSE, SellSwitchB = FALSE;
  36. int BuySellFac = 01;
  37. bool Condition1, Condition2, Condition3, Condition6;

  38. int init()  {
  39.    SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
  40.    SetIndexBuffer(0,LineBuffer);
  41.    
  42.    SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3);
  43.    SetIndexBuffer(1,MajorCycleBuy);
  44.    
  45.    SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,3);
  46.    SetIndexBuffer(2,MajorCycleSell);
  47.    
  48.    SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1);
  49.    SetIndexBuffer(3,MinorCycleBuy);
  50.    
  51.    SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,1);
  52.    SetIndexBuffer(4,MinorCycleSell);
  53.    
  54.    SetIndexStyle(5,DRAW_NONE);
  55.    SetIndexBuffer(5,ZL1);
  56.    
  57.    SetIndexEmptyValue(1,0.0);
  58.    SetIndexEmptyValue(2,0.0);
  59.    SetIndexEmptyValue(3,0.0);
  60.    SetIndexEmptyValue(4,0.0);
  61.    SetIndexEmptyValue(5,0.0);  
  62.    return(0);
  63. }

  64. int deinit() {return(0);}

  65. int start() {
  66.    int counted_bars=IndicatorCounted();
  67.    if(counted_bars<0) return(-1);
  68.   // if(counted_bars>0) counted_bars--;
  69.   // int position=Bars-1;
  70.    int position=Bars-counted_bars;
  71.    if (position<0) position=0;

  72.    int rnglength = 250;
  73.    double range = 0.0, srange = 0.0;
  74.    for (int pos = position; pos >=0; pos--)
  75.    {
  76.       srange = 0.0;
  77.       int j = 0;
  78.       for (int i=0;i<rnglength;i++)
  79.       {
  80.          j++;
  81.          int posr = pos + i;
  82.          if (posr >= Bars)
  83.             break;
  84.             
  85.          srange = srange + (High[posr] - Low[posr]);
  86.       }
  87.       range = srange / j * Length;
  88.       int BarNumber = Bars-pos; //??????????
  89.       if (BarNumber < 0)
  90.             BarNumber = 0;

  91.       CyclePrice = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos);
  92.       
  93.       if (UseFilterSMAorRSI == 1)
  94.             ZL1[pos] = ZeroLag(CyclePrice,FilterStrengthSMA, pos);
  95.       if (UseFilterSMAorRSI == 2)
  96.             ZL1[pos] = ZeroLag( iRSI(NULL, 0, 14, CyclePrice, FilterStrengthRSI ), FilterStrengthRSI, pos);

  97.       if (ZL1[pos] > ZL1[pos+1])
  98.           SwitchC = 1;
  99.       if (ZL1[pos] < ZL1[pos+1])
  100.           SwitchC = 2;
  101.          
  102.       if (BarNumber <= 1)
  103.       {
  104.          if (Strength == 0)
  105.                        SweepA  = range;
  106.                      else
  107.                        SweepA = Strength;
  108.          Price1BuyA  = CyclePrice;
  109.          Price1SellA  = CyclePrice;
  110.       }
  111.       
  112.       /* ***************************************************************** */
  113.       
  114.       if (BarNumber > 1)
  115.       {
  116.          if (Switch > -1)
  117.          {
  118.             if (CyclePrice < Price1BuyA)
  119.             {
  120.                
  121.                   if (UseCycleFilter && (SwitchC == 2) && BuySwitchA )
  122.                   {
  123.                                    MinorCycleBuy[pos + BarNumber - Price1BuyB] = 0; //MinorBuySell
  124.                                    LineBuffer[pos + BarNumber - Price1BuyB ] = 0; //line
  125.                             }
  126.                      
  127.                             if (!UseCycleFilter && BuySwitchA)
  128.                             {
  129.                                    MinorCycleBuy[pos +BarNumber - Price1BuyB] = 0;
  130.                                    LineBuffer[pos +BarNumber - Price1BuyB] = 0;
  131.                             }
  132.                             Price1BuyA = CyclePrice;
  133.                   Price1BuyB = BarNumber;
  134.                   BuySwitchA = TRUE;
  135.             }
  136.             else if (CyclePrice > Price1BuyA)
  137.             {
  138.   
  139.                                  SwitchA = BarNumber - Price1BuyB;
  140.          
  141.                             if (!UseCycleFilter)
  142.                             {
  143.                                    MinorCycleBuy[pos +SwitchA] = -1;//MinorBuySell - DarkGreen
  144.                                    LineBuffer[pos +SwitchA] = -1;//line
  145.                             }
  146.                      
  147.                             if (UseCycleFilter && SwitchC  == 1)
  148.                             {
  149.                                    MinorCycleBuy[pos +SwitchA] = -1;  //MinorBuySell
  150.                                    LineBuffer[pos +SwitchA] = -1; //line
  151.                                    SwitchD = 1;
  152.                             }
  153.                             else
  154.                             {
  155.                                    SwitchD = 0;
  156.                                  }
  157.                           
  158.                   BuySwitchA = TRUE;
  159.                
  160.                             double cyclePrice1 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);
  161.                   if (ActiveSwitch)
  162.                   {  
  163.                         Condition1 = CyclePrice - cyclePrice1 >= SweepA;
  164.                   }
  165.                   else
  166.                   {
  167.                         Condition1 = CyclePrice >= cyclePrice1 * (1 + SweepA / 1000);
  168.                   }
  169.                   if (Condition1 && SwitchA >= BuySellFac)
  170.                   {
  171.                         Switch =  - 1;
  172.                         Price1SellA = CyclePrice;
  173.                         Price1SellB = BarNumber;
  174.                         SellSwitchA = FALSE;
  175.                         BuySwitchA = FALSE;
  176.                   }            
  177.             }
  178.          }
  179.          if(Switch < 1)
  180.          {
  181.             if (CyclePrice > Price1SellA)
  182.             {
  183.                if (UseCycleFilter && SwitchC == 1 && SellSwitchA )
  184.                {
  185.                                      MinorCycleSell[pos +BarNumber - Price1SellB] = 0; //MinorBuySell
  186.                                      LineBuffer[pos +BarNumber - Price1SellB ] = 0; //line
  187.                               }
  188.                               if (!UseCycleFilter && SellSwitchA )
  189.                               {
  190.                    MinorCycleSell[pos +BarNumber - Price1SellB] = 0;//MinorBuySell
  191.                    LineBuffer[pos +BarNumber - Price1SellB] = 0;//line
  192.                }
  193.                Price1SellA = CyclePrice;
  194.                Price1SellB = BarNumber;
  195.                SellSwitchA = TRUE;   
  196.                        }
  197.                        else if (CyclePrice < Price1SellA)
  198.                        {
  199.                               SwitchA = BarNumber - Price1SellB;
  200.                if (!UseCycleFilter)
  201.                {
  202.                   MinorCycleSell[pos +SwitchA] = 1; // MinorBuySell darkRed
  203.                   LineBuffer[pos +SwitchA] = 1; //"CycleLine"
  204.                               }
  205.                               if (UseCycleFilter && (SwitchC == 2))
  206.                               {
  207.                                      MinorCycleSell[pos +SwitchA] = 1;//MinorBuySell darkRed
  208.                                      LineBuffer[pos +SwitchA] = 1;//CycleLine
  209.                                      SwitchD  = 2;
  210.                               }
  211.                               else
  212.                                  SwitchD  = 0;

  213.                SellSwitchA = TRUE;
  214.                               double cyclePrice2 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchA);
  215.                
  216.                               if (ActiveSwitch)
  217.                                      Condition1 = (cyclePrice2 - CyclePrice) >= SweepA;
  218.                               else
  219.                                      Condition1 = CyclePrice <= (cyclePrice2 * (1 - SweepA / 1000));

  220.                               if (Condition1 && SwitchA >= BuySellFac)
  221.                               {
  222.                                       Switch = 1;
  223.                   Price1BuyA = CyclePrice;
  224.                   Price1BuyB = BarNumber;
  225.                   SellSwitchA = FALSE;
  226.                   BuySwitchA = FALSE;
  227.                }
  228.             }
  229.          }
  230.       }
  231.       
  232.       LineBuffer[pos] = 0;
  233.       MinorCycleBuy[pos] = 0;
  234.       MinorCycleSell[pos] = 0;

  235.       if (BarNumber == 1)
  236.       {
  237.          if (Strength == 0)
  238.             SweepB  = range *  MajorCycleStrength;
  239.          else
  240.             SweepB = Strength * MajorCycleStrength;
  241.             
  242.          Price2BuyA = CyclePrice;
  243.          Price2SellA = CyclePrice;
  244.       }     
  245.             
  246.       if (BarNumber > 1)
  247.       {
  248.          if (Switch2  >  - 1)
  249.          {
  250.             if (CyclePrice < Price2BuyA)
  251.             {
  252.                if (UseCycleFilter && SwitchC == 2 && BuySwitchB )
  253.                                    {
  254.                                       MajorCycleBuy [pos +BarNumber - Price2BuyB] = 0; //MajorBuySell,green
  255.                 //                      LineBuffer[pos + BarNumber - Price2BuyB ] = 0; //line -----
  256.                }
  257.                if (!UseCycleFilter && BuySwitchB )
  258.                {
  259.                   MajorCycleBuy [pos +BarNumber - Price2BuyB] = 0;//MajorBuySell,green
  260.           //                              LineBuffer[pos + BarNumber - Price2BuyB ] = 0; //line-----------
  261.                }
  262.                               Price2BuyA = CyclePrice;
  263.                Price2BuyB = BarNumber;
  264.                BuySwitchB = TRUE;
  265.             }
  266.             else if (CyclePrice > Price2BuyA)
  267.             {
  268.                               SwitchB = BarNumber - Price2BuyB;

  269.                if (!UseCycleFilter)
  270.                {  
  271.                      MajorCycleBuy [pos +SwitchB] = -1; //MajorBuySell green
  272.       //               LineBuffer[pos + SwitchB] = -1; //line--------------
  273.                }
  274.                if (UseCycleFilter && SwitchC  == 1)
  275.                {
  276.                   MajorCycleBuy [pos +SwitchB] = -1; //MajorBuySell green
  277.      //             LineBuffer[pos + SwitchB] = -1; //line-----------------
  278.                   SwitchE  = 1;
  279.                }
  280.                else
  281.                                      SwitchE  = 0;

  282.                BuySwitchB = TRUE;
  283.                               double cyclePrice3 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
  284.                if (ActiveSwitch)
  285.                   Condition6 = CyclePrice - cyclePrice3 >= SweepB;
  286.                else
  287.                   Condition6 = CyclePrice >= cyclePrice3 * (1 + SweepB / 1000);

  288.                               if (Condition6 && SwitchB >= BuySellFac)
  289.                               {
  290.                      Switch2 =  - 1;
  291.                      Price2SellA = CyclePrice;
  292.                      Price2SellB = BarNumber;
  293.                      SellSwitchB = FALSE;
  294.                      BuySwitchB = FALSE;
  295.                }
  296.             }
  297.          }

  298.          if (Switch2  < 1)
  299.          {
  300.             if (CyclePrice  > Price2SellA )
  301.             {
  302.                               if (UseCycleFilter && SwitchC  == 1 && SellSwitchB )
  303.                                    {
  304.                                          MajorCycleSell [pos +BarNumber - Price2SellB] = 0; //"MajorBuySell",red
  305.                 //                              LineBuffer[pos + BarNumber - Price2SellB ] = 0; //line -----
  306.                              }
  307.                               if (!UseCycleFilter && SellSwitchB )
  308.                                    {
  309.                                        MajorCycleSell [pos +BarNumber - Price2SellB] = 0;//"MajorBuySell",red
  310.      //              LineBuffer[pos + BarNumber - Price2SellB ] = 0; //line -----
  311.                }
  312.                               Price2SellA = CyclePrice;
  313.                Price2SellB = BarNumber;
  314.                SellSwitchB = TRUE;
  315.                        }
  316.                        else if (CyclePrice < Price2SellA)
  317.                        {
  318.                SwitchB = BarNumber - Price2SellB ;

  319.                               if (!UseCycleFilter)
  320.                               {
  321.                                  MajorCycleSell[pos + SwitchB] = 1; //"MajorBuySell",red
  322.      //                       LineBuffer[pos + SwitchB ] = 1; //line -----
  323.                               }
  324.                          if (UseCycleFilter && SwitchC  == 2)
  325.                          {
  326.                                       MajorCycleSell [pos + SwitchB] = 1; //"MajorBuySell",red
  327.       //                      LineBuffer[pos + SwitchB ] = 1; //line -----
  328.                                        SwitchE  = 2;
  329.                               }
  330.                               else
  331.                                      SwitchE  = 0;

  332.                SellSwitchB = TRUE;
  333.                     double cyclePrice4 = iMA(NULL, 0, PriceActionFilter, 0, MODE_SMMA, PRICE_CLOSE, pos + SwitchB);
  334.                               if (ActiveSwitch)
  335.                   Condition6 = cyclePrice4 - CyclePrice >= SweepB;
  336.                               else
  337.                   Condition6 = CyclePrice <= cyclePrice4 * (1.0 - SweepB / 1000.0);

  338.                               if (Condition6 && SwitchB >= BuySellFac)
  339.                               {
  340.                                         Switch2 = 1;
  341.                      Price2BuyA = CyclePrice;
  342.                      Price2BuyB = BarNumber;
  343.                      SellSwitchB = FALSE;
  344.                      BuySwitchB = FALSE;
  345.                }
  346.             }
  347.          }
  348.       }
  349.       LineBuffer[pos] = 0;
  350.       MajorCycleSell[pos] = 0;
  351.       MajorCycleBuy[pos] = 0;
  352.    }
  353.    return(0);
  354. }

  355. double ZeroLag(double price, int length, int pos)
  356. {   
  357.    if (length < 3)
  358.    {
  359.       return(price);
  360.    }
  361.    double aa = MathExp(-1.414*3.14159 / length);
  362.    double bb = 2*aa*MathCos(1.414*180 / length);
  363.    double CB = bb;
  364.    double CC = -aa*aa;
  365.    double CA = 1 - CB - CC;
  366.    double CD = CA*price + CB*ZL1[pos+1] + CC*ZL1[pos+2];
  367.    return(CD);
  368. }
复制代码
韬客外汇社区www.talkfx.co
回复

使用道具 举报

发表于 2014-3-30 03:15 | 显示全部楼层
回复一下看看,辛苦了
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2015-4-20 19:59 | 显示全部楼层
缺钱,灌水赚通宝,谢谢分享!!
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2015-8-10 12:18 | 显示全部楼层
这个有强烈的未来函数,请楼主不要误导不明正相的群众!!可以用最新版的MT4的测试指标的工具运行一下。
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2015-8-10 12:46 | 显示全部楼层
挖槽  看不懂
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2015-8-15 19:49 | 显示全部楼层
楼上的楼上说的好有道理啊!
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2015-8-16 06:42 | 显示全部楼层
明显的未来函数啊
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2015-10-25 22:18 | 显示全部楼层
这个是有未来函数的,会自动重绘。楼主要负责啊。。不能害了其它网友
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2015-10-27 19:44 | 显示全部楼层
预测,尖点,但一直不明白这种方式,我们如何去判断他到底是圆点的方法呢
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2015-10-29 16:38 | 显示全部楼层
有没有人试过,到底好用不好用
韬客外汇社区www.talkfx.co
论坛谏言--外汇交易不应是你投资的全部,交易外汇也不应是你生活的全部
回复 支持 反对

使用道具 举报

发表于 2015-11-10 15:16 | 显示全部楼层
这个真不错呀呀呀呀月
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2016-4-5 21:47 | 显示全部楼层
有没有源代码啊
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2016-4-6 15:43 | 显示全部楼层
未来函数
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2016-6-8 20:18 | 显示全部楼层
很明显的未来
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2016-6-9 02:02 | 显示全部楼层
这类的指标网上都有很多,叫心跳指标,肯定有未来函数的
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2016-7-17 07:35 | 显示全部楼层
多谢分享
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2016-7-18 16:15 | 显示全部楼层
多谢分享
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2016-9-1 14:40 | 显示全部楼层
觉得有未来函数啊
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2016-12-15 19:11 | 显示全部楼层

谢谢分享
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

发表于 2016-12-27 11:33 | 显示全部楼层
缺钱,灌水赚通宝,谢谢分享!!
韬客外汇社区www.talkfx.co
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

【论坛栏目】   外汇论坛    交易社区    汇市讨论    汇商动态    外汇行情    分析大咖    外汇中长线     交易大神      【友情链接】 
返回顶部快速回复上一主题下一主题返回列表手机访问

论坛导航|手机版|小黑屋|反馈|

GMT+8, 2020-4-7 12:38 , Processed in 0.084694 second(s), 23 queries , Gzip On.

本站免责声明:

1、本站所有广告及宣传信息均与韬客无关,如需投资请依法自行决定是否投资、斟酌资金安全及交易亏损风险;
2、韬客是独立的、仅为投资者提供交流的平台,网友发布信息不代表韬客的观点与意思表示,所有因网友发布的信息而造成的任何法律后果、风险与责任,均与韬客无关;
3、金融交易存在极高法律风险,未必适合所有投资者,请不要轻信任何高额投资收益的诱导而贸然投资;投资保证金交易导致的损失可能超过您投入的资金和预期。请您考虑自身的投资经验及风险承担能力,进行合法、理性投资;
4、所有投资者的交易帐户应仅限本人使用,不应交由第三方操作,对于任何接受第三方喊单、操盘、理财等操作的投资和交易,由此导致的任何风险、亏损及责任由投资者个人自行承担;
5、韬客不隶属于任何券商平台,亦不受任何第三方控制,韬客不邀约客户投资任何保证金交易,不接触亦不涉及投资者的任何资金及账户信息,不代理任何交易操盘行为,不向客户推荐任何券商平台,亦不存在其他任何推荐行为。投资者应自行选择券商平台,券商平台的任何行为均与韬客无关。
投资者注册及使用韬客即表示其接受和认可上述声明,并自行承担法律风险。

版权所有:YH INTERNATIONAL LIMITED . Auckland, New Zealand