下载MetaTrader 5
要添加评论,请登录注册
在您个人资料中管理代理。非常轻松!
angelstar
73
angelstar 2011.02.25 10:16 

extern int Friday = 65;
extern int Monday = 5;


int start() {

if (Friday > 0) {
if (TimeDayOfWeek(TimeCurrent()) == 5) { ///如果是周五
if (TimeCurrent() > 86400 * (TimeCurrent() / 86400) + 86400 - 60 * Friday) {
fOrderCloseMarket();
return (0);
}
}
}
if (Monday > 0) {
if (TimeDayOfWeek(TimeCurrent()) == 1) ///如果是周一
if (TimeCurrent() < 86400 * (TimeCurrent() / 86400) + 60 * Monday) return (0);
}

return (0);
}

int fOrderCloseMarket(bool ai_0 = TRUE, bool ai_4 = TRUE) {
int l_error_16;
int li_ret_8 = 0;
for (int l_pos_12 = OrdersTotal() - 1; l_pos_12 >= 0; l_pos_12--) {
if (OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() == Symbol()) {
if (ai_0) {
if (OrderType() == OP_BUY) {
RefreshRates();
if (!IsTradeContextBusy()) {
if (!OrderClose(OrderTicket(), OrderLots(), ND(Bid), 3, CLR_NONE)) {
l_error_16 = GetLastError();
Print("Error close BUY " + OrderTicket() + " " + l_error_16);
li_ret_8 = -1;
}
} else {
if (TimeCurrent() > g_datetime_240 + 20) {
g_datetime_240 = TimeCurrent();
Print("Need close BUY " + OrderTicket() + ". Trade Context Busy");
}
return (-2);
}
}
}
if (ai_4) {
if (OrderType() == OP_SELL) {
RefreshRates();
if (!IsTradeContextBusy()) {
if (!OrderClose(OrderTicket(), OrderLots(), ND(Ask), 3, CLR_NONE)) {
l_error_16 = GetLastError();
Print("Error close SELL " + OrderTicket() + " " + l_error_16);
li_ret_8 = -1;
}
} else {
if (TimeCurrent() > g_datetime_244 + 20) {
g_datetime_244 = TimeCurrent();
Print("Need close SELL " + OrderTicket() + ". Trade Context Busy");
}
return (-2);
}
}
}
}
}
}
return (li_ret_8);
}

1、高手帮忙看看 start里面的是什么意思? 是不是限制时间交易了呢?

一天是 86400秒 TimeCurrent() 是自从 1970年1月1日期计算出来的秒。但是搞不懂什么意思。

2、TimeDayOfWeek(TimeCurrent()) == 5 早上运行的时候TimeDayOfWeek(TimeCurrent()) =4 不等于5。 但是下午4点打开时候运行就TimeDayOfWeek(TimeCurrent()) =5 就正确了。很困惑

秋风踏浪
166
秋风踏浪 2011.02.27 17:28  

TimeDayOfWeek(TimeCurrent()) == 5 是星期五,早晨的时候等于4是星期四。这里的星期五和星期四是你的平台时间,不是北京时间。下午打开的时候已经是平台时间的星期五。

angelstar
73
angelstar 2011.02.28 15:58  
dmgy:

TimeDayOfWeek(TimeCurrent()) == 5 是星期五,早晨的时候等于4是星期四。这里的星期五和星期四是你的平台时间,不是北京时间。下午打开的时候已经是平台时间的星期五。


谢谢 dmgy

这个 TimeCurrent() > 86400 * (TimeCurrent() / 86400) + 86400 - 60 * Friday是什么意思,能解释下吗?

代码我能看懂什么意思就是不理解,

秋风踏浪
166
秋风踏浪 2011.03.01 09:14  

抱歉,这个地方我也没太看懂。

如果(TimeCurrent()/86400)的结果是整数,则86400*(TimeCurrent()/86400)是从初始时刻到周五0点时的总秒数。

如果上面的分析正确,则:

TimeCurrent() > 86400 * (TimeCurrent() / 86400) + 86400 - 60 * Friday

86400 = 24*60*60 是一天的总秒数。 Friday = 65 是分钟数。

从初始时间到当时的总秒数 > 从初始时间到周五0点的总秒数 + 一天的总秒数 - 65分钟的总秒数

大概意思是:如果当前时间大于周五结束前的65分钟。

上面的是我的猜测,不知道对不对,大概是这个思路,仅供参考。

angelstar
73
angelstar 2011.03.01 15:33  
dmgy:

抱歉,这个地方我也没太看懂。

如果(TimeCurrent()/86400)的结果是整数,则86400*(TimeCurrent()/86400)是从初始时刻到周五0点时的总秒数。

如果上面的分析正确,则:

TimeCurrent() > 86400 * (TimeCurrent() / 86400) + 86400 - 60 * Friday

86400 = 24*60*60 是一天的总秒数。 Friday = 65 是分钟数。

从初始时间到当时的总秒数 > 从初始时间到周五0点的总秒数 + 一天的总秒数 - 65分钟的总秒数

大概意思是:如果当前时间大于周五结束前的65分钟。

上面的是我的猜测,不知道对不对,大概是这个思路,仅供参考。


多谢!!!!!
/
要添加评论,请登录注册