double PointValuePerLot(string pair="") {
/* Value in acnSum currency of a Point of Symbol.
* In tester I had a sale: open=1.35883 close=1.35736 (0.00147)
* gain$=97.32/6.62 lots/147 points=$0.10/point or $1.00/pip.
* IBFX demo/mini EURUSD TICKVALUE=0.1 MAXLOT=50 LOTSIZE=10,000
* IBFX demo/standard EURUSD TICKVALUE=1.0 MAXLOT=50 LOTSIZE=100,000
* $1.00/point or $10.00/pip.
*
* https://www.mql5.com/en/forum/127584 CB: MODE_TICKSIZE will usually return the
* same value as MODE_POINT (or Point for the current symbol), however, an
* example of where to use MODE_TICKSIZE would be as part of a ratio with
* MODE_TICKVALUE when performing money management calculations which need
* to take acnSum of the pair and the acnSum currency. The reason I use
* this ratio is that although TV and TS may constantly be returned as
* something like 7.00 and 0.00001 respectively, I've seen this
* (intermittently) change to 14.00 and 0.00002 respectively (just example
* tick values to illustrate). */if (pair == "") pair = Symbol();
return( MarketInfo(pair, MODE_TICKVALUE)
/ MarketInfo(pair, MODE_TICKSIZE) ); // Not Point.
}
double PipValuePerLot(string pair=""){ return(DeltaValuePerLot() * pips2dbl); }
double DeltaValuePerLot(string pair=""){
/* Value in account currency of a Point of Symbol.
* In tester I had a sale: open=1.35883 close=1.35736 (0.0147)
* gain$=97.32/6.62 lots/147 points=$0.10/point or $1.00/pip.
* IBFX demo/mini EURUSD TICKVALUE=0.1 MAXLOT=50 LOTSIZE=10,000
* IBFX demo/standard EURUSD TICKVALUE=1.0 MAXLOT=50 LOTSIZE=100,000
* $1.00/point or $10.0/pip.
*
* https://www.mql5.com/en/forum/127584 CB: MODE_TICKSIZE will usually return the
* same value as MODE_POINT (or Point for the current symbol), however, an
* example of where to use MODE_TICKSIZE would be as part of a ratio with
* MODE_TICKVALUE when performing money management calculations which need
* to take account of the pair and the account currency. The reason I use
* this ratio is that although TV and TS may constantly be returned as
* something like 7.00 and 0.0001 respectively, I've seen this
* (intermittently) change to 14.00 and 0.0002 respectively (just example
* tick values to illustrate).
* https://www.mql5.com/en/forum/135345 zzuegg reports for non-currency DE30:
* MarketInfo(Symbol(),MODE_TICKSIZE) returns 0.5
* MarketInfo(Symbol(),MODE_DIGITS) return 1
* Point = 0.1
* Prices to open must be a multiple of ticksize */if (pair == "") pair = Symbol();
return( MarketInfo(pair, MODE_TICKVALUE)
/ MarketInfo(pair, MODE_TICKSIZE) ); // Not Point.
}
// Otherwise first or second Sunday of MonBegin or first Sunday of MonEnd// for (int firstSun = dom + 7-dow; firstSun > 7; firstSun--){}for (int firstSun = dom + 7-dow; firstSun > 7; firstSun -= 7){}
这是我的,去掉了实际的交易逻辑。
而我对RaptorUK的 评论 进行了修正。
我修改了Polyline代码,以允许叠加,...
TLne向后兼容。
要在子图表上绘图,只需使用iWin = WindowFind("indicatorName")。
从一个关于在主图和子图上绘制指标的帖子中可以看出,TLine可以在修改后用于两者。
要在子图表上绘图,只需使用iWin = WindowFind("indicatorName")。
谢谢
市场关闭时间。
我想在周末前关闭所有的订单(周五收市),以防止市场在周末出现缺口时,通过SL来防止损失。(这一点在测试器中没有被模拟出来。)
所以问题是市场何时收盘(或开盘)。网上所有 的帖子和搜索都是 错误的。 从外汇教育--外汇简介--IBFX 外汇市场每天24小时,每周5.5天(美国东部时间周日下午6:00至美国东部时间周五下午4:00)运作,这是美国东部时间--纽约当地时间。
这意味着所有的 发布都取决于他们的时间,因为夏令时的边界每年都不一样。
这意味着有必要计算出纽约夏令时的开始和结束时间,对于有关的酒吧。(问题是Windows没有提供转换程序,除了当前的TZ和UTC之间的转换,而且只针对当前的年份。如果电脑不在ET上,就无法直接完成。此外,在Windows8问世之前,你无法获得ET和以前年份的转换。而且在Win7上看注册表,数值只包括2005年的(如果我没看错的话,那些数值是错的。)所以我不打赌Win8会更好。
这意味着有必要自己计算DST。我已经更新了我的代码。TimeGmt()和LocalTimeGMT()的默认参数,一些额外的文档和检查,并写了代码来计算市场收盘时间。请欣赏。
这些都是很好的观点,还有很多东西是猜测的,即使是MT4的功能,也不一定能返回正确的值。例如,服务器上的经纪人和服务器信息以及交易参数,如可变点差,ECN与否,是否需要SL等,都只能从错误处理、符号信息等方面得出。
其中许多是简单的基本内容,不能(也应该)轻易检查。例如,打开的图表 和历史数据的信息,时间信息(如GMT、时区、DST),市场开盘、收盘信息。
灾难恢复将是非常好的,从MT4不关闭和重新启动开始(更新),还有终端.exe的正确关闭,甚至在终端关闭后的几个小时内仍冻结在任务管理器中(被认为是用关闭按钮正确关闭,没有任何错误信息)。
某种本地数据中心的支持也很好,这将使工作更容易,而不是有限的全局变量和打开的文件。更不用说储存卖出价、买入价、(价差)tick的数据了,这些数据都没有。
有许多简单的缺失的东西使生活变得更加困难,如果可能的话,要正确处理它们是一个非常大的工作量。 许多外部技巧和窍门,甚至黑客都需要广泛的正确操作。 我不怪任何人在代码库上发布策略而不处理MT4或服务器上所有可能的(其中许多是经纪人特有的)问题--特别是当重点放在策略上而不是错误处理时。
即使是非常简单的东西也没有,我们不能处理日志文件,当事情真的出错时,日志文件可以很容易地增长到几百兆甚至更大。它们一直增长到磁盘满了,而我们却无能为力,甚至不能在终端设置中选择对日志文件的处理。