PDA

View Full Version : StrToTime函数



贝纳尔多伯尼
05-11-2009 21:08, 09:08 PM
当我使用时,Metatrader似乎使用本地(电脑)时间,而不是经纪人的时间。

任何人都可以确认吗?

CHohanna
12-07-2021 05:46, 05:46 AM
当我使用StrToTime函数时,Metatrader似乎正在使用本地(计算机)时间而不是经纪人的时间。任何人都可以确认吗?
这是正确的。如果你的字符串只提供时间,但没有日期,它将填写计算机系统时钟中设置的日期。

贝纳尔多伯尼
12-07-2021 07:06, 07:06 AM
那么我怎样才能获得经纪人的时间?

CHohanna
12-07-2021 08:27, 08:27 AM
那么我怎样才能获得经纪人的时间?
使用时间当前()日期时间时间当前()返回最后已知的服务器时间(最新引用的时间)

贝纳尔多伯尼
12-07-2021 09:48, 09:48 AM
不完全是我的意思。你知道我的一些TradingTime代码使用该字符串函数。我试图弄清楚如何最好地设置交易时间。

安达贝南西奥
12-07-2021 11:09, 11:09 AM
不完全是我的意思。你知道我的一些TradingTime代码使用该字符串函数。我试图弄清楚如何最好地设置交易时间。
模糊。最好的是,如果你可以发布你想要做的一些代码。几年前我遇到过这个字符串到时间转换的问题。

贝纳尔多伯尼
12-07-2021 12:30, 12:30 PM
插入的代码字符串TradingTimes =外部交易时间;如果(TimeCurrent()gt; StrToTime(10:00)TimeCurrent()lt; StoToTime(20:00))TradingTimes =内部交易时间;看来StrToTime函数使用本地计算机时间而不是代理时间,所以有时这种交易时间问题无法正常工作。我怎样才能继续深入交易区间呢?

安达贝南西奥
12-07-2021 13:50, 01:50 PM
啊..所以你想要的是EA只在特定时间范围内交易的简单方法。但要回答你的问题。我会做这样的事情:int TimeShift = TimeCurrent() - TimeLocal();如果(TimeCurrent() - TimeShift gt; StrToTime(10:00)TimeCurrent() - TimeShift lt; StrToTime(20:00))TradingTimes =交易时间内;为了提供我的方法,我将简单地使用TimeLocal()而不是TimeCurrent(); (TimeLocal()GT; StrToTime(10:00)TimeLocal()LT; StrToTime(20:00))TradingTimes =内部交易时间;

安达贝南西奥
12-07-2021 15:11, 03:11 PM
但是如果你真的坚持使用TimeCurrent(),我建议这个更合适:if(TimeCurrent()GT; StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) 10:00)TimeCurrent()lt; StrToTime(TimeToStr(TimeCurrent (),TIME_DATE) 20:00))TradingTimes =交易时间内;这将确保StrToTime包含有效日期以将时间转换为。

CHohanna
12-07-2021 16:32, 04:32 PM
这个怎么样?插入的代码// --------------------------------------------- --------------------- /| test.mq4 |/|版权所有©2009,MetaQuotes Software Corp. |/| http://www.metaquotes.net |/ ----------------------------------------------- ------------------- #property copyright版权所有©2009,MetaQuotes Software Corp. #property link http://www.metaquotes.net/注意输入的更改类型extern int StartHour = 0; extern int StartMinute = 30; extern int EndHour = 3; extern int EndMinute = 30; int init(){start();/在你的代码中实现snipplet时,将其移开。返回(0); }/ ---------------------------------------------- -------------------- /|自定义指标迭代函数|/ ----------------------------------------------- ------------------- int start(){//查找结束时间Shift int EndTimeShift = 0; bool EndTimeFound = false; while(!EndTimeFound){//检查分段允许你附加这个EA来降低时间帧if(TimeHour(Time#91; EndTimeShift#93;)== EndHour TimeMinute(Time#91; EndTimeShift#93;)== EndMinute){EndTimeFound = true; } else {EndTimeShift ; }}/在结束时间之前查找最近的开始时间int StartTimeShift = EndTimeShift; bool StartTimeFound = False; (!StartTimeFound){if(TimeHour(Time#91; StartTimeShift#93;)== StartHour TimeMinute(Time#91; StartTimeShift#93;)== StartMinute){StartTimeFound = true; } else {StartTimeShift ; }}评论(StartTimeShift: StartTimeShift nEndTimeShift: EndTimeShift); }但是为了使用它,分钟值必须是时间表可以提供的。意思是,如果你将分钟设置为30,但你将其附加在小时图上。你将陷入无限循环,因为小时图上的所有蜡烛的分钟值都只有0。也许你可以想出一种方法来解决这个限制。祝你好运。问候,禅宗

安达贝南西奥
12-07-2021 17:53, 05:53 PM
那些使用经过午夜的范围的人们呢?
插入的代码stringTimeStart = 22:00;/10PM stringTimeEnd = 10:00;/第二天的10AM stringBrokerDate; int_TimeStart,_TimeEnd;/这些应该在start()之内从不在init if(TimeCurrent()gt; _TimeEnd){//第一次这将始终为真确保BrokerDate有效//为什么我们要这样做?以确保BrokerDate和_TimeEnd不会以mouse比赛结束BrokerDate = TimeToStr(TimeCurrent(),TIME_DATE); } _TimeStart = StrToTime(BrokerDate TimeStart); _TimeEnd = StrToTime(BrokerDate TimeEnd); if(_TimeStart gt; _TimeEnd){_TimeEnd = _TimeEnd 86400;/添加1天}/现在可以自由使用_TimeStart和_TimeEnd与TimeCurrent()进行比较此代码是为EAScript编写的。根据你想使用的位置,它可能会有不同的效果。

Evapelestasta
12-07-2021 19:13, 07:13 PM
下面是几个月前为客户端写的一个盒子突破EA的代码片段:插入的代码::::::::extern string StartTime = 07:00;/开始建立价格窗口的时间extern string EndTime = 08:00;/时间结束价格建立窗口extern字符串ExpiryTime = 06:00;/挂单的到期时间,以及任何仍然打开的订单关闭extern int Clearance = 5;/入口价格'安全'容差高于窗口高度,低于窗口低位extern double MinWinHgt = 0;/如果价格窗口(包括清除)lt;这个值,今天不允许下单。extern double MaxWinHgt = 9999;/如果价格窗口(包括清仓)GT;这个值,今天不允许下单:::::::int start(){double dt0 = StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) 00:00:00); double dt1 = StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) StartTime :00); double dt2 = StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) EndTime :00); double dt3 = StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) ExpiryTime :00);如果(dt3 lt; dt2)dt3 = 86400; int ib1 = iBarShift(NULL,0,dt1); int ib2 = iBarShift(NULL,0,dt2); if(TimeCurrent())= dt2 TimeCurrent()lt; = dt3){double vHigh = 0,vLow = 999; for(int j = ib1; jgt; ib2; j--){vHigh = MathMax(vHigh,High#91; j#93; Clearance * pnt); vLow = MathMin(vLow,Low#91; j#93; -Clearance * pnt); }如果(vHigh-vLow <= MaxWinHgt * pnt vHigh-vLow gt; = MinWinHgt * pnt){:::::::dt0是当天的午夜(MT4时间)dt1是开始时间(MT4时间)dt2是接线盒的结束时间(MT4时间)dt3是到期时间(MT4时间)订单只能放置在dt2(接线盒的末端)和dt3(指定的到期时间)之间, 。因此,如果需要,我会在dt3中添加86400(24小时制中的秒数),以确保它始终大于dt2(就像Ragnakore一样)。然后,如果TimeCurrent()位于dt2和dt3之间,则EA仅发出订单。 (vHigh和vLow是突破框中获得的最高和最低价格,以及指定的用户提供的清仓)。希望这可以帮助。

贝纳尔多伯尼
12-07-2021 20:34, 08:34 PM
哇汉诺威!非常感谢你的代码块。不过,我想知道,除了初始化之外,我没有看到变量dt0。那么,你如何通过午夜工作?假设我希望范围的开始时间为昨天23:00,范围的结束时间为今天的3:00。这块代码如何做到这一点?我大胆添加了一个片段,试图完成我正在尝试做的事情。插入的代码::::::::extern string StartTime = 07:00;/开始建立价格窗口的时间extern string EndTime = 08:00;/时间结束价格建立窗口extern字符串ExpiryTime = 06:00;/挂单的到期时间,以及任何仍然打开的订单关闭extern int Clearance = 5;/入口价格'安全'容差高于窗口高度,低于窗口低位extern double MinWinHgt = 0;/如果价格窗口(包括清除)lt;这个值,今天不允许下单。extern double MaxWinHgt = 9999;/如果价格窗口(包括清仓)GT;这个值,今天不允许下单:::::::int start(){double dt0 = StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) 00:00:00); double dt1 = StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) StartTime :00); double dt2 = StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) EndTime :00); double dt3 = StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) ExpiryTime :00);如果(dt3 lt; dt2)dt3 = 86400; #91; b#93; if(dt1> dt2)dt1 = StrToTime(TimeToStr(TimeCurrent() - 86400,TIME_DATE) StartTime :00);#91;b#93;/如果StartTime在同一天大于EndTime,则代码假定预期的开始时间为86400秒。 int ib1 = iBarShift(NULL,0,dt1); int ib2 = iBarShift(NULL,0,dt2); if(TimeCurrent())= dt2 TimeCurrent()lt; = dt3){double vHigh = 0,vLow = 999; for(int j = ib1; jgt; ib2; j--){vHigh = MathMax(vHigh,High#91; j#93; Clearance * pnt); vLow = MathMin(vLow,Low#91; j#93; -Clearance * pnt); } if(vHigh-vLow lt; = MaxWinHgt * pnt vHigh-vLow gt; = MinWinHgt * pnt){:::::::