交易危机

 找回密码
 快捷注册(禁q号)

QQ登录

只需一步,快速开始

搜索
广告位
查看: 14601|回复: 65
打印 上一主题 下一主题

[其他] DiNapoli MACD - mtf & alerts Indicator

[复制链接]

321

主题

3万

积分

6

精华

百变霹雳小小招财猫!

大型投行

金钱
36815 美元
权重
437
跳转到指定楼层
楼主
发表于 2014-4-2 12:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DiNapoli MACD - mtf & alerts Indicator

“DiNapoli is using smoothing factors of 0.213, 0.108, and 0.199, which when translated to periods we are used to, becomes 8.3896, 17.5185 and 9.0503. Here is one that can work with fractional periods and is set by default to calculate DiNapoliMACD”.

译文如下:
老帝用了三个参数来对MACD进行平滑,这三个参数分别是0.213, 0.108, and 0.199。如果把这三个参数换算成我们平时用的参数,就是8.3896, 17.5185 and 9.0503。这个指标做成了老帝的效果,它最大的特色就是将默认参数调整成了非整数,这样就能够与老帝接轨了。

这是一个多周期指标,同时可以对信号报警。

关于指标的用法,可以问度娘,也可以参阅以下链接
http://my.fx3q.com/thread-832-1-2.html

强烈建议使用这个指标之前,先去搞明白帝纳波利点位交易法的具体内容。否则对您来说,这就是一个有点别扭的MACD而已。



MQ4源代码
DiNapoli MACD - mtf & alerts.mq4 (11.4 KB, 下载次数: 41, 售价: 5 金钱)
编译好的EX4
DiNapoli MACD - mtf & alerts.ex4 (14.21 KB, 下载次数: 54, 售价: 5 金钱)


代码:


  1. //+------------------------------------------------------------------+
  2. //|                                                    DiNapoli MACD |
  3. //+------------------------------------------------------------------+
  4. #property indicator_separate_window
  5. #property indicator_buffers 6
  6. #property indicator_color1  MediumVioletRed
  7. #property indicator_color2  MediumVioletRed
  8. #property indicator_color3  DeepSkyBlue
  9. #property indicator_color4  DeepSkyBlue
  10. #property indicator_color5  DimGray
  11. #property indicator_color6  Gold
  12. #property indicator_width2  2
  13. #property indicator_width4  2
  14. #property indicator_width5  1
  15. #property indicator_width6  2

  16. //
  17. //
  18. //
  19. //
  20. //

  21. extern string TimeFrame       = "Current time frame";
  22. extern double FastPeriod      =  8.3896;
  23. extern double SlowPeriod      = 17.5185;
  24. extern double SignalPeriod    =  9.0503;
  25. extern int    Price           = PRICE_CLOSE;

  26. extern bool   Interpolate       = true;
  27. extern bool   alertsOn          = False;
  28. extern bool   alertsOnZeroCross = true;
  29. extern bool   alertsOnCurrent   = true;
  30. extern bool   alertsMessage     = true;
  31. extern bool   alertsSound       = false;
  32. extern bool   alertsEmail       = false;

  33. //
  34. //
  35. //
  36. //
  37. //

  38. double buffer1[];
  39. double buffer2[];
  40. double buffer3[];
  41. double buffer4[];
  42. double buffer5[];
  43. double buffer6[];
  44. double trend[];
  45. double trenda[];

  46. //
  47. //
  48. //
  49. //
  50. //

  51. string indicatorFileName;
  52. bool   returnBars;
  53. bool   calculateValue;
  54. int    timeFrame;

  55. //+------------------------------------------------------------------+
  56. //|                                                                  |
  57. //+------------------------------------------------------------------+
  58. //
  59. //
  60. //
  61. //
  62. //

  63. int init()
  64. {
  65.    IndicatorDigits(6);
  66.    IndicatorBuffers(8);
  67.    SetIndexBuffer(0,buffer1); SetIndexStyle(0,DRAW_HISTOGRAM);
  68.    SetIndexBuffer(1,buffer2); SetIndexStyle(1,DRAW_HISTOGRAM);
  69.    SetIndexBuffer(2,buffer3); SetIndexStyle(2,DRAW_HISTOGRAM);
  70.    SetIndexBuffer(3,buffer4); SetIndexStyle(3,DRAW_HISTOGRAM);
  71.    SetIndexBuffer(4,buffer5);
  72.    SetIndexBuffer(5,buffer6);
  73.    SetIndexBuffer(6,trend);
  74.    SetIndexBuffer(7,trenda);
  75.       FastPeriod   = MathMax(FastPeriod,1);
  76.       SlowPeriod   = MathMax(SlowPeriod,1);
  77.       SignalPeriod = MathMax(SignalPeriod,1);
  78.    
  79.       //
  80.       //
  81.       //
  82.       //
  83.       //
  84.       
  85.          indicatorFileName = WindowExpertName();
  86.          calculateValue    = TimeFrame=="calculateValue";   if (calculateValue) { return(0); }
  87.          returnBars        = TimeFrame=="returnBars";       if (returnBars)     { return(0); }
  88.          timeFrame         = stringToTimeFrame(TimeFrame);
  89.       
  90.       //
  91.       //
  92.       //
  93.       //
  94.       //
  95.                
  96.    IndicatorShortName(timeFrameToString(timeFrame)+" DiNapoli MACD ("+DoubleToStr(FastPeriod,4)+","+DoubleToStr(SlowPeriod,4)+","+DoubleToStr(SignalPeriod,4)+","+")");
  97. }

  98. //
  99. //
  100. //
  101. //
  102. //

  103. int deinit()
  104. {
  105.    return(0);
  106. }

  107. //+------------------------------------------------------------------+
  108. //|                                                                  |
  109. //+------------------------------------------------------------------+
  110. //
  111. //
  112. //
  113. //
  114. //

  115. double work[][3];

  116. #define _ema1 0
  117. #define _ema2 1

  118. int start()
  119. {
  120.    int counted_bars=IndicatorCounted();
  121.    int i,r,limit;

  122.    if(counted_bars<0) return(-1);
  123.    if(counted_bars>0) counted_bars--;
  124.            limit=MathMin(Bars-counted_bars,Bars-1);
  125.            if (returnBars) { buffer1[0] = MathMin(limit+1,Bars-1); return(0); }

  126.    //
  127.    //
  128.    //
  129.    //
  130.    //

  131.    if (calculateValue || timeFrame == Period())
  132.    {
  133.       if (ArrayRange(work,0)!= Bars) ArrayResize(work,Bars);
  134.             double alpha1 = 2.0/(1.0+FastPeriod);
  135.             double alpha2 = 2.0/(1.0+SlowPeriod);
  136.             double alpha3 = 2.0/(1.0+SignalPeriod);
  137.       for(i=limit,r=Bars-i-1; i>=0; i--,r++)
  138.       {
  139.          double price = iMA(NULL,0,1,0,MODE_SMA,Price,i);
  140.             if (r==0)
  141.             {
  142.                work[r][_ema1] = price;
  143.                work[r][_ema2] = price;
  144.                buffer6[i]     = 0;
  145.                continue;
  146.             }               
  147.          
  148.          //
  149.          //
  150.          //
  151.          //
  152.          //
  153.          
  154.          work[r][_ema1] = work[r-1][_ema1]+alpha1*(price-work[r-1][_ema1]);
  155.          work[r][_ema2] = work[r-1][_ema2]+alpha2*(price-work[r-1][_ema2]);
  156.          
  157.          buffer5[i] = work[r][_ema1]-work[r][_ema2];
  158.          buffer6[i] = buffer6[i+1]+alpha3*(buffer5[i]-buffer6[i+1]);
  159.          buffer1[i] = EMPTY_VALUE;
  160.          buffer2[i] = EMPTY_VALUE;
  161.          buffer3[i] = EMPTY_VALUE;
  162.          buffer4[i] = EMPTY_VALUE;
  163.          trend[i]   = trend[i+1];
  164.          trenda[i]  = trenda[i+1];
  165.          
  166.             //
  167.             //
  168.             //
  169.             //
  170.             //
  171.             
  172.             if (buffer5[i]>0) trend[i] =  1;
  173.             if (buffer5[i]<0) trend[i] = -1;
  174.             if (trend[i] == 1)
  175.             {
  176.                if (buffer5[i] >  buffer5[i+1]) { buffer4[i] = buffer5[i]; }
  177.                if (buffer5[i] <  buffer5[i+1]) { buffer3[i] = buffer5[i]; }
  178.                if (buffer5[i] == buffer5[i+1])
  179.                {
  180.                   if (buffer3[i+1] != EMPTY_VALUE) buffer3[i] = buffer5[i];
  181.                   if (buffer4[i+1] != EMPTY_VALUE) buffer4[i] = buffer5[i];
  182.                }
  183.             }
  184.             if (trend[i] == -1)
  185.             {
  186.                if (buffer5[i] >  buffer5[i+1]) { buffer1[i] = buffer5[i]; }
  187.                if (buffer5[i] <  buffer5[i+1]) { buffer2[i] = buffer5[i]; }
  188.                if (buffer5[i] == buffer5[i+1])
  189.                {
  190.                   if (buffer1[i+1] != EMPTY_VALUE) buffer1[i] = buffer5[i];
  191.                   if (buffer2[i+1] != EMPTY_VALUE) buffer2[i] = buffer5[i];
  192.                }
  193.             }
  194.       
  195.             if (alertsOnZeroCross)
  196.             {
  197.                if (buffer5[i]>0) trenda[i] =  1;
  198.                if (buffer5[i]<0) trenda[i] = -1;
  199.             }
  200.             else
  201.             {
  202.                if (buffer5[i]>buffer6[i]) trenda[i] =  1;
  203.                if (buffer5[i]<buffer6[i]) trenda[i] = -1;
  204.             }               
  205.       }            
  206.       manageAlerts();
  207.       return(0);
  208.    }      

  209.    //
  210.    //
  211.    //
  212.    //
  213.    //

  214.    limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
  215.    for (i=limit; i>=0; i--)
  216.    {
  217.       int y = iBarShift(NULL,timeFrame,Time[i]);
  218.          buffer1[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FastPeriod,SlowPeriod,SignalPeriod,Price,0,y);
  219.          buffer2[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FastPeriod,SlowPeriod,SignalPeriod,Price,1,y);
  220.          buffer3[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FastPeriod,SlowPeriod,SignalPeriod,Price,2,y);
  221.          buffer4[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FastPeriod,SlowPeriod,SignalPeriod,Price,3,y);
  222.          buffer5[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FastPeriod,SlowPeriod,SignalPeriod,Price,4,y);
  223.          buffer6[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FastPeriod,SlowPeriod,SignalPeriod,Price,5,y);
  224.          trend[i]   = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",FastPeriod,SlowPeriod,SignalPeriod,Price,6,y);
  225.          trenda[i]  = trenda[i+1];


  226.          //
  227.          //
  228.          //
  229.          //
  230.          //
  231.          
  232.             if (alertsOnZeroCross)
  233.             {
  234.                if (buffer5[i]>0) trenda[i] =  1;
  235.                if (buffer5[i]<0) trenda[i] = -1;
  236.             }
  237.             else
  238.             {
  239.                if (buffer5[i]>buffer6[i]) trenda[i] =  1;
  240.                if (buffer5[i]<buffer6[i]) trenda[i] = -1;
  241.             }               

  242.          //
  243.          //
  244.          //
  245.          //
  246.          //
  247.       
  248.          if (!Interpolate || y==iBarShift(NULL,timeFrame,Time[i-1])) continue;

  249.          //
  250.          //
  251.          //
  252.          //
  253.          //

  254.             datetime time = iTime(NULL,timeFrame,y);
  255.                for(int n = 1; i+n < Bars && Time[i+n] >= time; n++) continue;       
  256.                for(int k = 1; k < n; k++)
  257.                {
  258.                   buffer5[i+k] = buffer5[i] + (buffer5[i+n] - buffer5[i])*k/n;
  259.                   buffer6[i+k] = buffer6[i] + (buffer6[i+n] - buffer6[i])*k/n;
  260.                   if (buffer1[i+k] != EMPTY_VALUE) buffer1[i+k] = buffer5[i+k];
  261.                   if (buffer2[i+k] != EMPTY_VALUE) buffer2[i+k] = buffer5[i+k];
  262.                   if (buffer3[i+k] != EMPTY_VALUE) buffer3[i+k] = buffer5[i+k];
  263.                   if (buffer4[i+k] != EMPTY_VALUE) buffer4[i+k] = buffer5[i+k];
  264.                }                  
  265.    }
  266.    manageAlerts();
  267.    
  268.    //
  269.    //
  270.    //
  271.    //
  272.    //

  273.    return(0);
  274. }



  275. //+-------------------------------------------------------------------
  276. //|                                                                  
  277. //+-------------------------------------------------------------------
  278. //
  279. //
  280. //
  281. //
  282. //

  283. void manageAlerts()
  284. {
  285.    if (!calculateValue && alertsOn)
  286.    {
  287.       if (alertsOnCurrent)
  288.            int whichBar = 0;
  289.       else     whichBar = 1; whichBar = iBarShift(NULL,0,iTime(NULL,timeFrame,whichBar));
  290.       if (trenda[whichBar] != trenda[whichBar+1])
  291.       {
  292.          if (trenda[whichBar] ==  1) doAlert(whichBar,"up");
  293.          if (trenda[whichBar] == -1) doAlert(whichBar,"down");
  294.       }
  295.    }
  296. }

  297. //
  298. //
  299. //
  300. //
  301. //

  302. void doAlert(int forBar, string doWhat)
  303. {
  304.    static string   previousAlert="nothing";
  305.    static datetime previousTime;
  306.    string message;
  307.    
  308.    if (previousAlert != doWhat || previousTime != Time[forBar]) {
  309.        previousAlert  = doWhat;
  310.        previousTime   = Time[forBar];

  311.        //
  312.        //
  313.        //
  314.        //
  315.        //

  316.        message =  StringConcatenate(Symbol()," ",timeFrameToString(timeFrame)," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," DiNapoli MACD trend changed to ",doWhat);
  317.           if (alertsMessage) Alert(message);
  318.           if (alertsEmail)   SendMail(StringConcatenate(Symbol()," DiNapoli MACD "),message);
  319.           if (alertsSound)   PlaySound("alert2.wav");
  320.    }
  321. }


  322. //+-------------------------------------------------------------------
  323. //|                                                                  
  324. //+-------------------------------------------------------------------
  325. //
  326. //
  327. //
  328. //
  329. //

  330. string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
  331. int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

  332. //
  333. //
  334. //
  335. //
  336. //

  337. int stringToTimeFrame(string tfs)
  338. {
  339.    tfs = stringUpperCase(tfs);
  340.    for (int i=ArraySize(iTfTable)-1; i>=0; i--)
  341.          if (tfs==sTfTable[i] || tfs==""+iTfTable[i]) return(MathMax(iTfTable[i],Period()));
  342.                                                       return(Period());
  343. }
  344. string timeFrameToString(int tf)
  345. {
  346.    for (int i=ArraySize(iTfTable)-1; i>=0; i--)
  347.          if (tf==iTfTable[i]) return(sTfTable[i]);
  348.                               return("");
  349. }

  350. //
  351. //
  352. //
  353. //
  354. //

  355. string stringUpperCase(string str)
  356. {
  357.    string   s = str;

  358.    for (int length=StringLen(str)-1; length>=0; length--)
  359.    {
  360.       int char = StringGetChar(s, length);
  361.          if((char > 96 && char < 123) || (char > 223 && char < 256))
  362.                      s = StringSetChar(s, length, char - 32);
  363.          else if(char > -33 && char < 0)
  364.                      s = StringSetChar(s, length, char + 224);
  365.    }
  366.    return(s);
  367. }
复制代码

点评

指标无法加载  发表于 2014-4-2 13:39
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 转播转播 分享分享 分享淘帖 支持支持 保留保留

6

主题

2064

积分

0

精华

中级操盘手

金钱
2064 美元
权重
4
沙发
发表于 2014-4-2 13:29 | 只看该作者
本帖最后由 等机会 于 2014-4-2 13:42 编辑

抢沙发,谢谢
指标无法加载

321

主题

3万

积分

6

精华

百变霹雳小小招财猫!

大型投行

金钱
36815 美元
权重
437
板凳
 楼主| 发表于 2014-4-2 13:53 | 只看该作者
等机会 发表于 2014-4-2 13:29
抢沙发,谢谢
指标无法加载

旧版MQ4,你可以用旧版的METAEDITOR编译出一个EX4就可以用了。我已经替你弄好了,再下吧。

6

主题

2064

积分

0

精华

中级操盘手

金钱
2064 美元
权重
4
地板
发表于 2014-4-2 16:20 | 只看该作者
wccmcd 发表于 2014-4-2 13:53
旧版MQ4,你可以用旧版的METAEDITOR编译出一个EX4就可以用了。我已经替你弄好了,再下吧。

指标可以使用了。真心谢谢你

14

主题

829

积分

1

精华

初级操盘手

金钱
829 美元
权重
36
5
发表于 2014-4-2 22:24 | 只看该作者
看看这个指标

352

主题

7816

积分

3

精华

高级操盘手

金钱
7816 美元
权重
224
6
发表于 2014-4-4 13:50 | 只看该作者
感谢W姐分享,这个太高端,就不用了

52

主题

4209

积分

0

精华

高级操盘手

金钱
4209 美元
权重
108
7
发表于 2014-4-4 17:17 | 只看该作者
看看看。。。
当你刻意地追求时,它就像蝴蝶一样振翅飞远;当你专心致志之时,意外的收获已悄悄来到你的身边!
回复

使用道具 举报

0

主题

78

积分

0

精华

外汇入门

金钱
78 美元
权重
0
8
发表于 2014-4-6 05:51 | 只看该作者
看看怎么样

0

主题

28

积分

0

精华

外汇入门

金钱
28 美元
权重
0
9
发表于 2014-4-7 16:36 | 只看该作者

谢谢分享!
回复

使用道具 举报

0

主题

28

积分

0

精华

外汇入门

金钱
28 美元
权重
0
10
发表于 2014-4-7 16:36 | 只看该作者

谢谢分享!
回复

使用道具 举报

147

主题

5751

积分

12

精华

高级操盘手

金钱
5751 美元
权重
10
11
发表于 2014-4-7 16:44 | 只看该作者

悠着点,别再这样刷分了,当心被管理员处罚。哈哈。

0

主题

28

积分

0

精华

外汇入门

金钱
28 美元
权重
0
12
发表于 2014-4-7 17:04 | 只看该作者

谢谢分享!
回复

使用道具 举报

0

主题

28

积分

0

精华

外汇入门

金钱
28 美元
权重
0
13
发表于 2014-4-7 17:05 | 只看该作者

谢谢分享!
回复

使用道具 举报

0

主题

28

积分

0

精华

外汇入门

金钱
28 美元
权重
0
14
发表于 2014-4-7 17:06 | 只看该作者

谢谢分享!
回复

使用道具 举报

0

主题

516

积分

0

精华

初级操盘手

金钱
516 美元
权重
0
15
发表于 2014-4-9 22:57 | 只看该作者
老弟的东西?看看有什么不一样。

0

主题

12

积分

0

精华

见习期-审核

金钱
12 美元
权重
0
16
发表于 2014-4-12 15:13 | 只看该作者
看看!!!!!!!!
回复

使用道具 举报

0

主题

12

积分

0

精华

见习期-审核

金钱
12 美元
权重
0
17
发表于 2014-4-12 15:14 | 只看该作者
老大,以后要加图啊!!!!!!

0

主题

12

积分

0

精华

见习期-审核

金钱
12 美元
权重
0
18
发表于 2014-4-12 15:35 | 只看该作者
上张图:

DiNapoli MACD - mtf &amp;amp;amp; alerts.PNG (8.74 KB, 下载次数: 11)

DiNapoli MACD - mtf &amp;amp;amp; alerts.PNG

6

主题

660

积分

0

精华

初级操盘手

金钱
660 美元
权重
5
19
发表于 2014-4-24 13:55 | 只看该作者
{:soso_e179:}

0

主题

32

积分

0

精华

外汇入门

金钱
32 美元
权重
0
20
发表于 2014-9-24 20:29 | 只看该作者
{:soso_e116:} 好好
您需要登录后才可以回帖 登录 | 快捷注册(禁q号)

本版积分规则

QQ|黄金吧|黄金论坛|手机版|指标下载|非农|目录|交易危机

版权所有: ©2014-2021 fx3q.com Powered by Discuz! X3
皖ICP备: 2024050410号-2

风险提示:杠杆风险高,交易要谨慎 声明:坛友发言和回复均为个人观点,不代表论坛立场。
若有侵权请联系fx3q@qq.com删除

快速回复 返回顶部 返回列表