指标杂项问题 - 页 7

 

是的,但你必须为它编码。

例子。

当地时间经纪人A经纪人B
00:00
(GMT)
01:00
(GMT+1)
02:00
(GMT+2)

你不能使用PERIOD_D1,因为

  • 经纪人A的D1条在当地时间23:00开始(提前1小时)
  • 经纪人B的D1条在当地时间22:00开始(提前2小时)。

所以您必须使用H1条的iBarShift和iHighest / iLowest(或CopyHigh/CopyLow)来手动创建您想要的 "日"。

----

这里有一个快速脚本,可以说明这个问题。

把它放到图表上,你会看到它在服务器时间 23:00开始的 "一天 "周围画了一个矩形。

#define strict
#property show_inputs

#define DAY 86400
#define HOUR 3600

extern int time_shift = -1; // Hours to shift server time by

void OnStart()
  {
   time_shift*=HOUR;

   datetime oldest_bar = Time[Bars-1],
            midnight   = oldest_bar-(oldest_bar%DAY);

   while(midnight<=TimeCurrent())
     {
      datetime day_begin = midnight + time_shift,
               day_end   = day_begin + DAY - 1;
      double high[],
             low[];
      int high_cnt = CopyHigh(_Symbol, PERIOD_H1, day_begin, day_end, high),
          low_cnt  = CopyLow (_Symbol, PERIOD_H1, day_begin, day_end, low);
      if(high_cnt>0 && low_cnt>0)
        {
         double day_high = high[ArrayMaximum(high)],
                day_low  = low [ArrayMinimum(low)];
         string obj_name = TimeToString(day_begin,TIME_DATE);
         ObjectCreate(0, obj_name, OBJ_RECTANGLE, 0, day_begin, day_high, day_end, day_low);
        }
      midnight+=DAY;
     }
  }  


 
honest_knave:

是的,但你必须为它编码。

我应该研究这个例子。

非常感谢。

 

再次感谢你的伟大的例子。
经过你的评论,我很容易解决了我的问题。

---

我试着为不同的经纪商自动设置时间偏移,不幸的是,这并不奏效。

问: 我可以写一些代码,为不同的经纪商自动设置时间偏移,这可能吗?
(我还在尝试一些东西)

非常感谢。

 

我尝试了下面的代码,但它没有给我正确的值。

问: 下面的代码有什么问题?(我没有弄清楚)

datetime start=(datetime)SymbolInfoInteger(Symbol(),SYMBOL_START_TIME);

非常感谢。

 
Max Enrik:

我尝试了下面的代码,但它没有给我正确的值。

问: 下面的代码有什么问题?(我没有弄清楚)

datetime start=(datetime)SymbolInfoInteger(Symbol(),SYMBOL_START_TIME);

非常感谢。

似乎不是所有的经纪商都能正确设置。请看这里
 
honest_knave:
似乎不是所有的经纪商都能正确地设置这一点。请看这里

没有 机会了!
我只是在想专业的程序员和代码放弃了吗!?当然不是。 : /( 但我是)

非常感谢。

( 我有想法,我至少要试一试 - 以后 )
 
Max Enrik:

没有 机会了!
我只是在想专业的程序员和代码放弃了吗!当然不是。 : /( 但我是 )

非常感谢。

( 我有想法,我至少要试试 - 以后 )

总有一些变通的办法。

例如,你可以回溯H1或M30条,寻找一个大于1条时间跨度的时间缺口(即市场在这个缺口期间是关闭的)。

但是你需要注意周末和公共假期,以及不完整的历史。

 
honest_knave:

总有一些变通的办法。
例如,你可以回溯H1或M30条,寻找一个大于1条时间跨度的时间缺口(即市场在这个缺口期间关闭)。
但是你需要注意周末和公共假期,以及不完整的历史。

非常感谢你的有益评论
 

我只是需要学习日期时间,因为到目前为止,当我试图编写与日期时间有关的代码时,我总是花了很多时间在代码的那一部分。(即使我成功地完成了我的脚本,但我从来没有更清楚地了解过)
所以现在我试图获取当天的第一条数据(当前日的第一条1m、5m、15m、30m、1h等),但我不能。

(我在google chrome浏览器上有很多标签与此有关--只是胡说八道)

所以,谁能帮助我如何为一天中的第一根柱子(M1,5M等)写代码,并举例说明,谢谢。

当然,明天我将继续研究这个问题。

非常感谢你的帮助。

 

一天中的第一条应该是TimeHour()开始计数后的第一条。

当然,这将是任何M1、M5、M15等的第一条,它们都是新条的开始。