找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 10|回复: 0

【双EMA+RSI】均线金叉(死叉)+RSI过滤提示,有些瑕疵,欢迎交流。

[复制链接]

4万

主题

54

回帖

4万

积分

管理员

积分
45954
发表于 2026-8-20 13:24:00 | 显示全部楼层 |阅读模式
#property copyright "Copyright 2021, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict

#include <MovingAverages.mqh>


#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 DodgerBlue

#property indicator_color2 Yellow

#property indicator_color3 Magenta

#property indicator_color4 Lime


#include <WinUser32.mqh>

//---- input parameters

extern int       FastEMA=20;

extern int       SlowEMA=30;

extern int       RSIPeriod=5;

extern bool      Alerts=false;

extern int       TimerSeconds=60;

//extern string    File_Template;

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double ExtMapBuffer3[];

double ExtMapBuffer4[];

//double rsi_sig[];

//---- variables

int sigCurrent=0;

int sigPrevious=0;

double pipdiffCurrent=0;

double pipdiffPrevious=0;

bool Apply_Template=false;

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int init()

  {

//---- indicators

   SetIndexStyle(0,DRAW_LINE);

   SetIndexBuffer(0,ExtMapBuffer1);

   SetIndexStyle(1,DRAW_LINE,1,3);

   SetIndexBuffer(1,ExtMapBuffer2);

   SetIndexStyle(2,DRAW_ARROW,1,3);

   SetIndexArrow(2,233);

   SetIndexBuffer(2,ExtMapBuffer3);

   SetIndexEmptyValue(2,0.0);

   SetIndexStyle(3,DRAW_ARROW,1,3);

   SetIndexArrow(3,234);

   SetIndexBuffer(3,ExtMapBuffer4);

   SetIndexEmptyValue(3,0.0);

//--- create timer

   EventSetTimer(TimerSeconds);


//----

   return(0);

  }

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function                       |

//+------------------------------------------------------------------+

int deinit()

  {

//--- destroy timer

   EventKillTimer();


//----

   return(0);

  }


//+------------------------------------------------------------------+

//| Timer function                                                   |

//+------------------------------------------------------------------+

void OnTimer()

  {

//---图表重绘

   //ChartRedraw(0);


//---当前图表周期切换一次,目的是重新加载一次指标

/*

   int Period_Current=ChartPeriod(0);

   int Period_Previous;

   bool Chart_Period=false;


   if(Period_Current!=1 && Period_Current!=5)

   {

      Chart_Period=ChartSetSymbolPeriod(0,NULL,1);

      Period_Current=ChartPeriod(0);

   }


   Period_Previous=Period_Current;

   Print("初始周期为:",Period_Previous);

   for(int j=0;j<1;j++)

   {

      if(Period_Current==1)

      {

         Chart_Period=ChartSetSymbolPeriod(0,NULL,5);

         break;

      }

      else if(Period_Current==5)

      {

         Chart_Period=ChartSetSymbolPeriod(0,NULL,1);

         break;

      }


      //int  Period_Current=PeriodSeconds();      // chart period

   }


   Chart_Period=ChartSetSymbolPeriod(0,NULL,Period_Previous);

   Print("当前周期为:",Period_Current);

*/   


//---加载模板文件


   Apply_Template=ChartApplyTemplate(0,"9999.tpl");

   Print("模板加载结果:",Apply_Template);


  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int start()

  {

   int limit;

   int counted_bars=IndicatorCounted();

   double rsi_sig=0;

   bool entry=false;

   double entry_point=0;


   //---- check for possible errors

   if(counted_bars<0) return(-1);

   //---- last counted bar will be recounted

   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;


   //---- main loop

   for(int i=0; i<limit; i++)

   {

     //---- ma_shift set to 0 because SetIndexShift called abowe

     ExtMapBuffer1=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i);

     ExtMapBuffer2=iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

     rsi_sig = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);


     pipdiffCurrent=(ExtMapBuffer1-ExtMapBuffer2);


     Comment("pipdiffCurrent = "+DoubleToString(pipdiffCurrent)+" ");

     if (pipdiffCurrent>0 && rsi_sig>50)

     {

       sigCurrent = 1;  //Up

     }

     else if (pipdiffCurrent<0 && rsi_sig<50)

     {

       sigCurrent = 2;  //Down

     }

/*

     if (pipdiffCurrent>0)

     {

       sigCurrent = 1;  //Up

     }

     else if (pipdiffCurrent<0)

     {

       sigCurrent = 2;  //Down

     }

*/     


     if (sigCurrent==1 && sigPrevious==2)

     {

        ExtMapBuffer4[i-1] = High[i-1]+10*Point;

        //ExtMapBuffer3 = Ask;

        entry=true;

        entry_point=Ask;

     }

     else if (sigCurrent==2 && sigPrevious==1)

     {

        ExtMapBuffer3[i-1] = Low[i-1]-10*Point;

        //ExtMapBuffer4 = Bid;

        entry=true;

        entry_point=Bid;

     }


     sigPrevious=sigCurrent;

     pipdiffPrevious=pipdiffCurrent;

   }


   //----


   if(Alerts && entry)

   {

     PlaySound("alert.wav");

     if (sigPrevious==1)

     {

        MessageBox("Entry point: buy at "+DoubleToString(entry_point)+"!!", "Entry Point", MB_OK);

     }

     else if (sigPrevious==2)

     {

        MessageBox("Entry point: sell at "+DoubleToString(entry_point)+"!!", "Entry Point", MB_OK);

     }


     entry=false;

   }


   RefreshRates();


//----

   return(0);

  }

//+------------------------------------------------------------------+
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-10-11 12:26 , Processed in 0.103949 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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