楼主: EA源码
164 0

独家非农理论大解密带指标[独家][源码]+实现EA源码 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
20 个
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
40 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2019-4-15
最后登录
2019-4-15

EA源码 在职认证  发表于 2019-4-15 16:39:32 |显示全部楼层
                             非农指标介绍 042652n7r0gi70fr3m4b07.png

非农数据是期货汇市交易员每月必关注大事件。从事交易生涯5年有余,从前期懵懂的小白到逐渐形成自己的一套理论,非农曾经是小白时期的噩梦之一,波动剧烈,数据值的飘忽不定,订单被频繁扫损,相信非农来临的那一晚很多人都选择熬夜,非农数据即将发布的前10几分钟那种激动的心情,金十数据独特的滴声音像赛场上裁判员的信号枪枪声!废话不多了,进入正题:


非农指标是基于mt4的一个数据分析指标,基本构成:

   小非农区间,大非农区间,日期显示,星期显示,适用周期是天图周期,针对黄金币种,适合中线,不适合短线和长线。

如图所示,第一个灰色区间是小非农发布时间和影响时间,图形显示为3天,第二个图形区间是大非农影响时间和结束时间。每个天图的柱子上面都显示了时间和周几,方便专业交易员一直沉寂在K线时间不用关注电脑日期。

042645avgivxe4r6y44asv.png

使用方法:

两个灰色区间的结束点都有可能是中线行情的反转点,从历史统计来看,小非农的反转概率不是很高,主要行情反转周期发生在大非农结束后,有图有真相,请看下图:


这是一种中线思路的波段交易思路,如果行情给力,我们可以抓到100个整数点的大行情,时间周期是当前非农结束到下次非农结束或者开始。

042652a5mhm959dlcrd9js.png

理论解析:

   根据量价时空的原则,非农数据发布的时刻,市场上面是有50%的概率做多,50%的概率做多,没有市场阴谋论,所谓的主力也是不知道方向的,顶多,他们知道数据,因为金融方面的数据泄露事件发生并非一次两次,但是,数据真的能决定行情吗?非也,无论数据是利空还是利多,它连发生时小时图,天图的阴阳柱子都不能决定,我当时的思路是,不要把思路重心放在非农数据上面,而是把重心放在数据发生后的走势,于是,建模,统计,写指标,墨迹半年左右,指标完成!光有指标不过瘾,我又花费3个月时间来补充程序化的构建,授之以鱼不如授之以渔,自由的东西很可贵,免费奉献的精神够高!指标在附件里面,独家发布,禁止用于商业用途,侵权必究!



文章来源:EA源码 http://www.fxeasource.com

源码如下:


  • //|                                                         非农指标.mq4 |
  • //|                    Copyright 2019, MetaQuotes Software Corp.EA源码 |
  • //|                                       https://www.fxeasource.com |
  • //+------------------------------------------------------------------+
  • #property copyright "Copyright 2019, MetaQuotes Software Corp.EA源码"
  • #property link      "https://www.fxeasource.com"
  • #property version   "1.00"
  • #property strict
  • #property indicator_chart_window
  • //保存所有周五的数组索引
  • int WeekFriDays[];
  • //保存第一个周五的数组索引
  • int WeekFirstDays[];
  • //错误的时间是
  • //2017.03.10
  • //2016.07.08
  • //2015.05.08
  • //2015.04.03
  • //要修复的时间值参数开始
  • datetime repairtime1=D'2017.03.10';
  • datetime repairtime2=D'2016.07.08';
  • datetime repairtime3=D'2015.05.08';
  • datetime repairtime4=D'2015.04.03';
  • //要修复的时间值参数结束
  • //保存object对象的数组
  • string AllDrawrectangle[10000];
  • int OnInit()
  •   {
  •    return(INIT_SUCCEEDED);
  •   }
  • int deinit(){
  • for(int f=0;f<ArraySize(AllDrawrectangle);f++){
  • ObjectDelete(0,AllDrawrectangle[f]);
  • }
  • //删除所有文字和rectangle开始
  • ObjectsDeleteAll(0,0,OBJ_TEXT);
  • ObjectsDeleteAll(0,0,OBJ_RECTANGLE);
  • ObjectsDeleteAll(0,0,OBJ_TREND);
  • ObjectsDeleteAll(0,0,OBJ_TRENDBYANGLE);
  • //删除所有文字和rectrangle结束
  • return (0);
  • }
  • int OnCalculate(const int rates_total,
  •                 const int prev_calculated,
  •                 const datetime &time[],
  •                 const double &open[],
  •                 const double &high[],
  •                 const double &low[],
  •                 const double &close[],
  •                 const long &tick_volume[],
  •                 const long &volume[],
  •                 const int &spread[])
  •   {
  • int limit=Bars-IndicatorCounted();
  • datetime testtime=D'2014.01.01 00:00';
  • int b=0;
  • for(int i=0;i<limit;i++){
  • RefreshRates();   //刷新速率
  • if(TimeYear(Time)<TimeYear(testtime)){
  • break;
  • }
  • if(TimeDayOfWeek(Time)==5){
  • b++;
  • //初始化数组
  • ArrayResize(WeekFriDays,b);
  • WeekFriDays[b-1]=i;
  • }
  • //写入周一到周五开始
  •    //double windowPriceMax = WindowPriceMax() +0.01 * Point;  //当前窗口中最小价格+20*小数点精度
  •    double WindowPrice;
  •    if(Close>=Open){
  •    WindowPrice=High+8;
  •    }else{
  •    WindowPrice=Low-3;
  •    }
  •    //如果当前图表周期为天图
  •      if (ChartPeriod(0)==PERIOD_D1)
  •      {
  •       drawt(TimeToStr(Time, TIME_DATE), IntegerToString(week(Time)) , Time, WindowPrice);
  •    }
  • //写入周一到周五结束
  • }
  • //输出数组的大小
  • //Print(IntegerToString(ArraySize(WeekFriDays)));
  • //Print(WeekFriDays[0]);
  • //输出WeekFriDays来进行测试
  • int c=0;
  • for(int i=0;i<ArraySize(WeekFriDays)-1;i++){
  • //Print(IntegerToString(WeekFriDays));
  • //Print(TimeToString(Time[(WeekFriDays)]));
  • //取第一个周五
  • if( TimeMonth(Time[(WeekFriDays)])!=TimeMonth(Time[(WeekFriDays[i+1])])){
  • //Print(IntegerToString(i));
  • //输出第一个周五
  • //Print(TimeToString(Time[(WeekFriDays)]));
  • c++;
  • ArrayResize(WeekFirstDays,c);
  • WeekFirstDays[c-1]=WeekFriDays;
  • }
  • }
  • //运行修复时间函数进行时间值修复
  • RepairTimes(repairtime1,repairtime2,repairtime3,repairtime4);
  • RefreshRates();//刷新数组
  • //表现层开始
  • for(int i=0;i<ArraySize(WeekFirstDays);i++){
  • //开始画第一个矩形通道
  • drawx(IntegerToString(WeekFirstDays)+"open",Time[(WeekFirstDays)],Time[(WeekFirstDays)+2],DarkGray,i);
  • //开始画第二个矩形通道
  • drawx(IntegerToString(WeekFirstDays)+"close",Time[(WeekFirstDays)+3],Time[(WeekFirstDays)+5],DarkSlateGray,i);
  • //画日期
  • drawt(TimeToString(Time[WeekFirstDays])+"high",GetYearMonthByIndex(WeekFirstDays),Time[WeekFirstDays+3],WindowPriceMax(),clrYellow);
  • //画趋势线
  • //drawl(TimeToString(Time[WeekFirstDays])+"low",Time[WeekFirstDays],Open[WeekFirstDays],Time[WeekFirstDays[i+1]],Open[WeekFirstDays[i+1]],clrAliceBlue);
  • }
  • //表现层结束
  •    return(rates_total);
  •   }
  •     //开始画矩形通道
  • void drawx(string drawrectangle, datetime startTime, datetime endTime, color rectangeColor,int AllDrawrectangleSize) {
  •    RefreshRates();
  •    if (ObjectFind(drawrectangle) == -1) {
  •   // Print(" 起始时间:"+TimeToString(startTime)+"结束时间是:"+TimeToString(endTime));
  •       ObjectCreate(drawrectangle, OBJ_RECTANGLE, 0, startTime, 0, endTime, 3000); //画矩形
  •       ObjectSet(drawrectangle, OBJPROP_COLOR, rectangeColor);
  •       ObjectSet(drawrectangle, OBJPROP_STYLE, STYLE_SOLID);
  •       ObjectSet(drawrectangle, OBJPROP_BACK, TRUE);
  •       ObjectSet(drawrectangle, OBJPROP_RAY, FALSE);
  •       ObjectSet(drawrectangle, OBJPROP_WIDTH, 2);
  •      // Print("画图成功");
  •       return;
  •    }
  •    //Print("画图不成功");
  •    AllDrawrectangle[AllDrawrectangleSize]=drawrectangle;
  •    ObjectMove(drawrectangle, 0, startTime, 0);
  •    ObjectMove(drawrectangle, 1, endTime, 3000);
  • }
  • //结束画矩形通道
  • //得到最高价最低价
  • //写入周一到周五时间开始
  • void drawt(string drawrectangleText, string weekDay, int TimeOne, double priceOne, color colorDay = clrDeepPink
  • ) {
  • RefreshRates();
  •    if (ObjectFind(drawrectangleText) == -1) {
  •    //bool ObjectCreate( string name, int type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0)
  •       ObjectCreate(drawrectangleText, OBJ_TEXT, 0, TimeOne, priceOne, TimeOne, priceOne);
  •       ObjectSetText(drawrectangleText, weekDay, 9, "Arial", colorDay);
  •       ObjectSet(drawrectangleText, OBJPROP_WIDTH, 1);
  •       return;
  •    }
  •    ObjectMove(drawrectangleText, 0, TimeOne, priceOne);
  • //   AllDrawrectangleText[AllDrawrectangleSizeText]=drawrectangleText;
  • }
  • //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  • //画趋势线函数开始
  • void drawl(string drawrectangleText,int time1,double price1,int time2,double price2,color mycolor){
  • RefreshRates();
  • if(ObjectFind(drawrectangleText)==-1){
  • ObjectCreate(0,drawrectangleText,OBJ_TREND,0,time1,price1,time2,price2,mycolor);
  • ObjectSetInteger(0,drawrectangleText,OBJPROP_STYLE,STYLE_DOT);//设置成实线样式
  • ObjectSetInteger(0,drawrectangleText,OBJPROP_WIDTH,1);
  • return ;
  • }
  • ObjectMove(drawrectangleText,0,time2,price2);
  • }
  • //画趋势线函数结束
  • //返回周string
  • string week(int i) {
  •    if (TimeDayOfWeek(i) == 1) return ("1");
  •    if (TimeDayOfWeek(i) == 2) return ("2");
  •    if (TimeDayOfWeek(i) == 3) return ("3");
  •    if (TimeDayOfWeek(i) == 4) return ("4");
  •    if (TimeDayOfWeek(i) == 5) return ("5");
  •    //if (TimeDayOfWeek(i) == 6) return ("6");
  •    //if (TimeDayOfWeek(i) == 7) return ("7");
  •    return ("");
  • }
  • //+------------------------------------------------------------------+
  • //修正错误的时间值函数开始
  • //参数列表,要修复的数组,对应的时间值1,对应的时间值2............
  • void RepairTimes(datetime time1,datetime time2,datetime time3,datetime time4){
  • //Print("test");
  • int TempYear;
  • int TempMonth;
  • for(int i=0;i<ArraySize(WeekFirstDays);i++){
  • //比较年和月,如果相等,就把索引值重新赋值
  • TempYear=TimeYear(Time[(WeekFirstDays)]);
  • TempMonth=TimeMonth(Time[(WeekFirstDays)]);
  • //Print("TempYear:"+TempYear);
  • if(TempYear==TimeYear(time1) && TempMonth==TimeMonth(time1)){
  • if(iBarShift(Symbol(),NULL,time1,True)!=-1){
  • WeekFirstDays=iBarShift(Symbol(),NULL,time1,True);
  • //Print("修复成功的日期是:"+TimeToString(time1));
  • }
  • }
  • if(TempYear==TimeYear(time2) && TempMonth==TimeMonth(time2)){
  • if(iBarShift(Symbol(),NULL,time2,True)!=-1){
  • WeekFirstDays=iBarShift(Symbol(),NULL,time2,True);
  • //Print("修复成功的日期是:"+TimeToString(time2));
  • }
  • }
  • if(TempYear==TimeYear(time3) && TempMonth==TimeMonth(time3)){
  • if(iBarShift(Symbol(),NULL,time3,True)!=-1){
  • WeekFirstDays=iBarShift(Symbol(),NULL,time3,True);
  • //Print("修复成功的日期是:"+TimeToString(time3));
  • }
  • }
  • if(TempYear==TimeYear(time4) && TempMonth==TimeMonth(time4)){
  • //Print("test");
  • if(iBarShift(Symbol(),NULL,time4,True)!=-1){
  • WeekFirstDays=iBarShift(Symbol(),NULL,time4,True);
  • //Print("修复成功的日期是:"+TimeToString(time4));
  • }
  • }
  • }
  • }
  • //修正错误的时间值函数结束
  • //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  • //根据索引得到年月日开始
  • string GetYearMonthByIndex(int i){
  • int year=TimeYear(Time);
  • int month=TimeMonth(Time);
  • int day=TimeDay(Time);
  • string syear=IntegerToString(year);
  • string smonth=IntegerToString(month);
  • string sday=IntegerToString(day);
  • if(i>=0){
  • return syear+"."+smonth+"."+sday;
  • }else{
  • return "";
  • }
  • }
  • //根据索引值得到年月日结束


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

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2019-4-20 19:01