将时间作为一个数据时间变量,并与iBarshift()一起使用,以获得条数,当你获得条数后,与Open[]或iOpen()一起使用。
将时间作为一个数据时间变量,用iBarshift()来获取小节数,当你得到小节数后,用Open[]或iOpen()来获取。
是的,不错的主意 :)
谢谢你,我将使用它!
而且有可能做到这一点。
int Bar; double OpenPrice; int B(k); { switch(HeureSH[k]) { case 0: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("23:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("09:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("15:00")); break; case 3: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("19:00")); break; } } OpenPrice= iOpen(Symbol(), PERIOD_H1, B);
HeureSH是有四个小时的数组大小。
因为如果是一个特定的小时,条形图必须是不同的,尽管创建一个开关,只有一行,而不是四行不同。
代码写得对吗?
而且有可能做到这一点。
HeureSH是有四个小时的数组大小。
因为如果是一个特定的小时,条形图必须是不同的,尽管创建一个开关,只有一行,而不是四行不同。
代码写得对吗?
我认为你有一个复制/粘贴错误,因为你有两次案例1......所以我认为第二个案例1应该是案例2
为了让它工作,存储在HeureSH[]数组中的值是1、2、3或4,对吗? 它们只能是int类型的值,没有字符串或双数。. .
在你的iOpen()调用中,我认为B 应该是Bar?还是你的意思是B(int)? 如果你想在该调用中使用该函数,你必须使该函数返回正确的值。
如果你使用有意义的变量和函数名称,你会给自己和其他人带来很大的帮助 ...... B、k和Bar都不是很有描述性。
哦,这是我的一个错误,我复制了我的代码,但我不知道我写了什么.......。我是这样解决的。
在我的iopen中,我写了B,这是 "Bar",因为时间不同,所以Bar也不同。
啊,是的,字符串值会造成一些问题,我想这是问题所在,所以我将尝试改变。
int B(k); { switch(HeureSH[k]) { case 0: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("23:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("09:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("15:00")); break; case 3: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("19:00")); break; } } OpenPrice= iOpen(Symbol(), PERIOD_H1, B);这将不会起作用。1) iBarShift分配给Bar ,但iOpen使用B。2) StrToTime("23:00")将返回今天23:00的日期,这将总是在未来(或当前H1栏。)
#define HR2400 86400 // 24 * 3600 datetime TimeOfDay(datetime when){ return( when % HR2400 ); } datetime DateOfDay(datetime when){ return( when - TimeOfDay(when) ); } int B(k); { #define HR0900 23400 // 9*3600 #define HR1500 54000 #define HR1900 68400 #define HR2300 59800 int times[]={ HR2300, HR0900, HR1500, HR1900 }; datetime now = TimeCurrent(), Bod = DateOfDay(now), want= Bod + times[HeureSH[k]]; if (want > now){ // Yesterdays? datetime prevTradingDate = iTime(Symbol(), PERIOD_D1, 1); want = prevTradingDate + times[HeureSH[k]]; } int iBar= iBarShift(Symbol(), PERIOD_H1, want); OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar); }
你好,WHRoeder。
我认为你的代码比我的更有效,可以得到时间值是昨天还是今天。我同意:23:00,用我的代码,总是未来或当前,当它太晚了......
非常感谢您!这正是我所寻找的。这正是我所寻找的。
是的,我忘了说,HeureSH[]是一个由四个不同的小时组成的字符串大小的数组。
当我看到EA像我想要的那样执行时,我笑了!!。
非常感谢,非常感谢 ......
这是在回测 中,因为市场已经关闭......
但是有一个问题。
Ea正确开仓,但买入时没有关闭,卖出时立即关闭。
我的策略是。
在同一时间,如果参数是真的,EA必须打开卖出或买入。没有SL或TP。
同时,如果下一个功能为真,它必须循环并关闭所有交易。
if(OrdersTotal()>0) { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber() == MagicSH && OrderOpenTime() > iTime(Symbol(), PERIOD_H1, 1)) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE);我必须添加一个利润过滤器,但我将努力解决这个问题。如果没有这个功能,它必须关闭买入,但从未关闭,而且它必须让卖出运行,但卖出立即关闭。最后的代码有什么问题吗?
嗨,伙计们。
我有一个新问题,我想很简单。
例如,当15:00时,我想知道9:00时那支蜡烛的开盘价。
那么,如何编写代码来获得预定时间内的蜡烛的开盘价?