[返回首页][复制网址]
 

由于复盘的时间,交给用户自己控制,所以在获取当前时间函数中,跟实盘行情是不同的,复盘时候必须对指标中做个调整:

修改前MT4原始用法
修改后复盘专用的
MT4原始函数的使用方法:   
int now_play_time = TimeCurrent();


复盘中使用函数:修改为使用如下方法,使用前记得包含库文件
**********************************************
#include <MTDinc.mqh>
int now_play_time=MTDTimeCurrent();

**********************************************

在MT4中,有这类型的指标,都需要做个替换.另外在配置时区时候,记得复盘软件中的默认时区是东1区.

具体例子
请看指标文件"MTD-Time.mq4",这个指标就是修改替换过,专门用于复盘的时候,功能为划分不同的时间段.


一个完整例子MT4源码如下:(修改的是黄色背景的地方)

//+------------------------------------------------------------------+
//|                              显示北京时间,或者显示其他时区的时间 |
//+------------------------------------------------------------------+
#property copyright "复盘专用"
#include <MTDinc.mqh>
#property indicator_chart_window

//默认显示北京时间,即东8区
extern int display_timezone=8;//东8区为北京时间.可选择的只从 -12到12,共25个
extern int myFontSize=20;
extern color myFontColor=Lime;
extern int myXDISTANCE=6;
extern int myYDISTANCE=15;
extern int myCORNER=2;

string objname="MTDRealTIME";
bool isForex=true;//时候是外汇品种,影响到显示的时间,不是外汇就显示北京时间
int iTimezone_Forex=2;//外汇时区


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
  {  
   isForex=isForex(Symbol());//是否是外汇
   iTimezone_Forex=MTDTimezone();
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
      int now_play_time=MTDTimeCurrent();//当前的播放时间,MTDTimeCurrent()函数来自包含文件MTDlib.mqh,用来获得当前最新时间
     
      //Alert(theText);
      if(isForex){
        
         now_play_time=now_play_time+(display_timezone-iTimezone_Forex)*60*60;
         string theText=TimeToStr(now_play_time,TIME_DATE|TIME_MINUTES); 
         if(display_timezone==8){
            //由于复盘软件数据有采用夏令时,大概在每年4月初到10月底,时间快1小时.而北京时间不采用夏令时,所以在夏令时,要转换为北京时间需要-1小时
            //注意此算法在冬令时和夏令时交接的那几天时间可能不准,因为每年的夏令时开始时间不是固定的日期,所以此算法为估算算法,可以让大部分时间准确
            int m=TimeMonth(now_play_time);
            if(m>=4 && m<=10){
               theText=TimeToStr(now_play_time-1*60*60,TIME_DATE|TIME_MINUTES); 
            }           
            theText=theText+" (beijing)";//北京时间
         }else{
            if(display_timezone>=0){
               theText=theText+" (UTC +"+display_timezone+")";//
            }else{
               theText=theText+" (UTC "+display_timezone+")";//
            }
         }
        
      }else{
         theText=theText+" (beijing)";//北京时间,期货股票等直接显示北京时间
      }
  


      string id=objname;
      ObjectDelete(id);
      ObjectCreate( id, OBJ_LABEL, 0, 0, 0 );
      ObjectSetText(id,theText,myFontSize,"Arial",myFontColor);
      ObjectSet( id, OBJPROP_XDISTANCE, myXDISTANCE );
      ObjectSet( id, OBJPROP_YDISTANCE, myYDISTANCE );
      ObjectSet( id, OBJPROP_BACK, true );
      ObjectSet( id, OBJPROP_CORNER, myCORNER);
  
   return(0);
  }

 

 


//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete(objname);
//----
   return(0);
  }


 


[返回首页] [复制网址]