交易危机

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

QQ登录

只需一步,快速开始

搜索
查看: 410|回复: 10

[指标] 大神帮我看下,哪里错了?

[复制链接]

120

主题

1万

积分

0

精华

操盘专家

金钱
17877 美元
权重
0
发表于 2019-6-8 23:23 | 显示全部楼层 |阅读模式
  1. int OnStart()
  2.   {
  3.   
  4.    int counted_bars=IndicatorCounted();   
  5.    if(counted_bars<0) return(-1);
  6.    if(counted_bars>0) counted_bars--;
  7.    int limit=Bars-counted_bars;
  8.    int trend = 0;
  9.    for(int i=0;i<limit-4;i++)
  10.      {
  11.         MABuffer[i]=iMA(Symbol(),0,60,0,MODE_EMA,PRICE_CLOSE,i);
  12.         
  13.         if(Close[i+1] > MABuffer[i+1] && Open[i+1]<Close[i+1] && Open[i+2]<Close[i+2] && Close[i+2] > MABuffer[i+2] && Close[i+3]>MABuffer[i+3] && Open[i+3]<MABuffer[i+3]){
  14.             trend = 1;
  15.             upArrowBuffer[i] = Low[i]-100*Point;

  16.         }
  17.         if(Close[i+1] < MABuffer[i+1] && Open[i+1]>Close[i+1]&&Open[i+2]>Close[i+2]&&Close[i+2] < MABuffer[i+2] && Close[i+3]<MABuffer[i+3] && Open[i+3]>MABuffer[i+3]){
  18.             trend = -1;
  19.             downArrowBuffer[i] = High[i] + 100*Point;
  20.         }
  21.         
  22.       }

  23.    return(0);


  24.   }
复制代码



基本思想就是
上破60均线,连续3根阳线,做多(上破的那根算第一根)
下破60均线,连续3根阴线,做空(下破的那根算第一根)


上面的代码哪里错了,箭头不起作用。

@frlin2003    @过去了
装死

26

主题

1万

积分

0

精华

操盘专家

金钱
10004 美元
权重
1
发表于 2019-6-9 07:38 | 显示全部楼层
本帖最后由 过去了 于 2019-6-9 08:24 编辑

别大神,只是爱好写写画画,个人理解:MA出错了
均线没有循环起来。
因为你只要要求3个值,直接取值;
QQ浏览器截图20190609075939.png

26

主题

1万

积分

0

精华

操盘专家

金钱
10004 美元
权重
1
发表于 2019-6-9 08:03 | 显示全部楼层
本帖最后由 过去了 于 2019-6-9 08:28 编辑


        double aa1=iMA(Symbol(),0,60,0,MODE_EMA,PRICE_CLOSE,i);
        double aa2=iMA(Symbol(),0,60,0,MODE_EMA,PRICE_CLOSE,i+1);
        double aa3=iMA(Symbol(),0,60,0,MODE_EMA,PRICE_CLOSE,i+2);
        double aa4=iMA(Symbol(),0,60,0,MODE_EMA,PRICE_CLOSE,i+3);

120

主题

1万

积分

0

精华

操盘专家

金钱
17877 美元
权重
0
 楼主| 发表于 2019-6-9 08:08 | 显示全部楼层
过去了 发表于 2019-6-9 08:03
1、        for(int y=i;y

好像是的,我2了
ima自带i的参数


那么
int counted_bars=IndicatorCounted();   
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
这段代码是什么情况下才用到呢?
装死

120

主题

1万

积分

0

精华

操盘专家

金钱
17877 美元
权重
0
 楼主| 发表于 2019-6-9 08:14 | 显示全部楼层
过去了 发表于 2019-6-9 08:03
1、        for(int y=i;y

还是没搞懂,具体怎么写的,能发下吗?
装死

26

主题

1万

积分

0

精华

操盘专家

金钱
10004 美元
权重
1
发表于 2019-6-9 08:27 | 显示全部楼层
sanbuxiaozhu 发表于 2019-6-9 08:14
还是没搞懂,具体怎么写的,能发下吗?

2简单……所以我一般也用。数组限制多些,先解决问题。

int counted_bars=IndicatorCounted();   
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;这段代码就是个防止重复计算的东西。知道他作用以后就完全照抄。
比如出现新的K线时所有指标都要再算一遍,占用系统资源。这段代码就是算过的不算了,只算新的K。

120

主题

1万

积分

0

精华

操盘专家

金钱
17877 美元
权重
0
 楼主| 发表于 2019-6-9 09:35 | 显示全部楼层
过去了 发表于 2019-6-9 08:27
2简单……所以我一般也用。数组限制多些,先解决问题。

int counted_bars=IndicatorCounted();   


什么情况啊,还是不对,哪里的问题?

  1. int OnStart()
  2.   {
  3.   double aa1,aa2,aa3,aa4,open,close,open1,open2,open3,close1,close2,close3;
  4.    for(int i=0;i<5000;i++)
  5.      {
  6.         MABuffer[i]=iMA(Symbol(),0,MA,0,method,PRICE_CLOSE,i);
  7.         
  8.         aa1=iMA(Symbol(),0,MA,0,method,PRICE_CLOSE,i);
  9.         aa2=iMA(Symbol(),0,MA,0,method,PRICE_CLOSE,i+1);
  10.         aa3=iMA(Symbol(),0,MA,0,method,PRICE_CLOSE,i+2);
  11.         aa4=iMA(Symbol(),0,MA,0,method,PRICE_CLOSE,i+3);
  12.         
  13.         open1 = iOpen(Symbol(),0,i);
  14.         close2 = iClose(Symbol(),0,i);
  15.         open2 = iOpen(Symbol(),0,i+1);
  16.         close2 = iClose(Symbol(),0,i+1);
  17.         open3 = iOpen(Symbol(),0,i+2);
  18.         close3 = iClose(Symbol(),0,i+2);
  19.         open4 = iOpen(Symbol(),0,i+3);
  20.         close4 = iClose(Symbol(),0,i+3);
  21.         
  22.         if(open2<close2 && open2>aa2 && open3<close3 && open3> aa3 && open4<close4 && close4>(aa4+5*Point) && open4<(aa4-5*Point)){
  23.          UPBuffer[i] = Low[i]-100*Point;
  24.         }
  25.         
  26.         if(open2>close2 && open2<aa2 && open3>close3 && open3< aa3 && open4>close4 && close4<(aa4-5*Point) && open4>(aa4+5*Point)){
  27.          DOWNBuffer[i] = High[i]+100*Point;
  28.         }

  29.         
  30.      }
  31.      
  32.       
  33.         


  34.    return(0);


  35.   }
复制代码
装死

120

主题

1万

积分

0

精华

操盘专家

金钱
17877 美元
权重
0
 楼主| 发表于 2019-6-9 10:31 | 显示全部楼层
我知道咋回事了,是我的问题,前面写错了
装死

11

主题

8064

积分

0

精华

操盘专家

金钱
8064 美元
权重
0
发表于 2019-6-9 11:08 来自手机 | 显示全部楼层
完全看不懂。。。

26

主题

1万

积分

0

精华

操盘专家

金钱
10004 美元
权重
1
发表于 2019-6-9 15:05 | 显示全部楼层
MABuffer[i]=iMA(Symbol(),0,MA,0,method,PRICE_CLOSE,i);
这句可以注释掉。减少系统运算。
还有别用aa之类不明显的函数。ima_1……等等。你过段时间你就会发现你真想不起当初是什么相法。所以最好加个注释,或说明在主要代码前面。

26

主题

1万

积分

0

精华

操盘专家

金钱
10004 美元
权重
1
发表于 2019-6-9 15:08 | 显示全部楼层
楼主慢慢来,看好你噢……
EA或指标是帮你找你思路中的信号是否如愿,比你一个一个用眼找来的更合理更实际。
如大爷说的,用眼常常只会看到想看的。而EA或指标会全部不落的给你标示出来以供你参考。
您需要登录后才可以回帖 登录 | 快捷注册(禁q号)

本版积分规则

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

版权所有: ©2014-2019 fx3q.com Powered by Discuz! X3
浙ICP备: ICP14039028

浙公网安备 33011802001420号

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

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