bool bIsFirstTick;// It is used to catch the Bar Opening.datetime dtCurrentBarOpeningTime;int init(){
bIsFirstTick =false;
dtCurrentBarOpeningTime =Time[0];return(0);}int start(){// Is this the first tick for the bar
bIsFirstTick =( dtCurrentBarOpeningTime !=Time[0]);if( bIsFirstTick){
dtCurrentBarOpeningTime =Time[0];}......////// Exit at a Bar Closing price (almost).////// MetaTrader does not provide an onBarClose event so we are not able to close a position/// exactly at Bar Closing. We workaround the problem by closing the position within a time span/// near to the bar closing time. In the cases when there is no any ticks within this period,/// we close the position att he next bar opening price.///int ClosePositionsAtBarClosing(bool bCloseLong,bool bCloseShort,datetime dtClosingTimeSpan){int iOrders =OrdersTotal();bool bIsOpen =false;for(int iOrder =0; iOrder < iOrders; iOrder++){OrderSelect( iOrder, SELECT_BY_POS, MODE_TRADES);if((OrderType()==OP_BUY||OrderType()==OP_SELL)&&OrderSymbol()==Symbol()){// There is an open position for this symbol.datetime dtOpeningTime =Time[0]-TimeSeconds(Time[0]);// The opening time of current bardatetime dtClosingTime = dtOpeningTime +Period()*60;// The closing time of current barsdatetime dtCurrentTickTime =TimeCurrent();// The time of current tickif( dtCurrentTickTime > dtClosingTime - dtClosingTimeSpan || bIsFirstTick){// The current tick is within the closing time span or this is the first tick of the bar.// Code}}}}
Частично, видимо, заодно к вопросу получаемых значений (для заполнения оперируемых буферов при расчете индикатора) из искомой функции protected staticfloat[] Price(BasePrice price)
原始价值和 "随后部署的 "是否有差异? 仍然是双倍......)
尚未....所有的问题都来自于马虎 :)
被迫劝阻!关键的细微差别--"EA的一次迭代的极限"。那么,在这些限制范围内,该指标只计算一次(在其第一次调用时)!我以100%的信心宣布这一点。所有后续的调用根本不启动()它,而只是从必要的缓冲区获取必要的值。如果输入参数保持不变(除了缓冲区和偏移量),该条件为100%。该规则对一个工具范围内的计算有效。但我认为,即使iCustom指的是其他TF和工具,这个原则也是成立的。
一个人必须 "被迫".....,一下子就能做到。谢谢你提供的另一个未记录的功能 :)
FSB__Bar_Opening_Bar_Closing.mql4 v0 .0.2 Beta
酒吧开业时的市场进入。
在酒吧收盘时退出(10秒,直到收盘或在下一次开盘时)。
** 这只是用于测试入口/出口点 的演示。**
代码碎片。
1.关于业绩。
大多数情况下,我们不需要为每一个刻度 重新计算一个指标。(参考 - "使用前一栏值"。)一个指标必须在 "开栏 "或 "收栏 "时计算。
2. fMicron。
在为交易决策比较价格时,我使用fMicron = Point/2。但这并不适用于指标。鸡蛋。对于 USDJPY 点 = 0.01; fMicron = 0.005.
0.000075是多年来多次测试的结果。我在2001年开始从事FSB的工作 :) 当然,这并不意味着什么。我曾多次改变对它的看法。
**编辑:MT把这个交给了用户的手中。也许EA大师们可以说说他们在EA中使用了什么。
**编辑2。我会把这个参数放在配置文件中进行实验。
3.我将开始提供每个FSB版本的原始源代码供下载。在这种情况下,我不需要为每一个小的变化更新网站。
。
我开始将漂浮物改为双倍。我很快会在今晚或明天发布这个版本。之后,我们必须彻底测试它。我们必须通过每一个指标来修复一些问题/功能,然后再把它们写入MQL中。
1.是的,在大多数情况下(鉴于FSB对开仓/平仓的一般做法(在酒吧开盘/在酒吧收盘时))。- 这是没有必要的。但是,让我们说 - 良好的礼仪规则 - 是强制性的。每次 "从零开始 "计算指标(甚至在Bar时计算一次)--一般来说(我同意)在大周期的限制下不是关键...但如果这段时间是几分钟呢?如果该指标仍然需要(或希望)在每个柱子上进行计算呢?(一些复杂的头寸点,不能(或不能,由于开盘价低于止损水平)被订单抓住?)
事实上,这种转换并不复杂--是的,有一些代码 "在包装中",而且条形行走的原理是相反的。实际上,大体上就是这样。最主要的是保留算法(以便在源代码中可以很容易地阅读和识别)并保持与FSB的参数兼容。建立一个方便的信号提取机制。并使其对纯视觉设计师(不关心EA的人)可用。在我看来。
2.好吧,我并不建议使用Point/2变体来比较(同样的)指标值:)。- 我只是在建议一个常数。问题在于它的价值和尺寸(0.000075--不错,我没说--我不明白为什么正好是75而不是 "通常 "的50:)?自2001年以来 "的经验相当具有启示性(争论!),我很愿意接受这个价值。但作为最后一句话--对于尺寸为0.12345的报价,这将是不够的(我的意思是--很多:))。这个数字应该至少向右移一格(0.0000075)。例如,在我的经纪公司,这样的报价已经是常见的做法......我建议针对仪器进行调整,使用 "10",而不是 "75":)。
fMicron = Point * 0.1f
简而言之,是的--我提议让它参数化--设置(我想在一些友好的实验之后,一切都会落到实处(虽然......如果观点已经改变了许多次;)......)。并等待更多人的意见......
3.我设法下载了发布的源码 :-P。因此,将有 "可比较的东西"(就结果代码而言)。尽管我不想再打扰你--祝你在浮动转换为双倍的过程中好运!
(有RSI的测试如何?;),如果你设法做到了?)
我发现,最好的是100>Micron>50。这就是为什么我拿了75分。这是对我的经纪人而言:点=0.0001。
但你是对的,经纪人开始在0.00001报价。
让我们来做:Micron = Math.Min(Point * 0.75, 0.000075)
我希望我在3个小时后完成转换。我把程序放在这里进行测试。
我也会上传转换后的指标源代码。
所有指标和参数都是双数 。
微米=0.000075
把exe和最后的FSB v2.8.3.3 Beta一起放在文件夹里。两个项目将共享相同的数据和战略。这对比较来说很方便。要注意指标值的问题。实际上,所有的指标和其他文件的一半都被改变了。
要看到完整的精度,在图表中按F12或使用命令控制台(ind ####)。
请报告任何问题。现在是要求改变指标的时刻。我们必须在继续进行MT整合的工作之前把它们修好。
早晨好!
米罗斯拉夫,现在时间非常有限......所以它是快速的。
1.谢谢你的及时翻译(浮动到双倍)!很好!
2.到目前为止,一切似乎都在工作(就我设法检查的情况而言),你可以看到差异(在飞行中),无论是指标值还是策略结果:)
3.但是--差异并不是我们之前所预期的那样!(我昨晚做了一个内部实验,我的 "担心 "得到了证实--转换会提高计算的准确性--但不会灾难性地改变结果!)从第四至第五位数字的差异领域来看,有些东西...但我们早在第二位数就出现了分歧!(例如相同的RSI))
我设法检查了什么。
1.起初我想的是是否有任何关于数字主题的硬链接(我有5位数的仪器,注意)...强制在工具属性 中指定4位数字--没有帮助(顺便说一下--但它可以工作!)。
2.指标本身的代码...嗯.........好吧,没有什么可抱怨的!现在到处都是双倍的,代码本身(在我看来)没有改变......代码足够简单(经常只用加减法操作)--这样的错误可能不会在那里积累!!!。(我不太确定......但是......;))
3.我最后的想法(我将无法检查)--这是什么:)!:
酒吧关闭/开放值(???)(和其他,有可能?)
这些数字是怎么来的?:)))(它们是什么样的 "添加剂":D?)
我从这里的某个地方(Bar Closing.cs)。
因此,我的第一个工作假设是,(也许)它是关于这个?("错误的"(或 "正确的",但为什么恰恰是这样?)在函数中给出引号值?)
部分,显然,从所寻求的函数中获得的值(在计算指标时填充操作的缓冲区)的问题受保护的 静态 float[] Price(BasePrice price )
总的来说,米罗斯拉夫--"球在你的球场上":)。现在我已经注意到你的指标的新代码,它与MT指标完全兼容(我很坚持:D,我将完成RSI的课题)。
同样的条形图,第一个指标--转换,第二个指标--来自MT的本地。
有什么想法、建议吗?(我将在6小时内到达那里)
Частично, видимо, заодно к вопросу получаемых значений (для заполнения оперируемых буферов при расчете индикатора) из искомой функции protected static float[] Price(BasePrice price)
现在所有的基类、方法和属性都返回双倍 值,所有的交易函数 也是如此(我在6个月前就改变了)。
看来在RSI的公式中存在着差异。它不可能出现在第二个标志中,"但我们在第二个标志中已经有了差异!"。:)我将尝试采用FSB中现有的MT RSI公式。
**编辑。
已经修好了。
默认参数:RSI(close, 14, smoothed) == MT RSI
即将下载的程序。
米罗斯拉夫--在配方上没有差异。正如我在讨论RSI时所说的那样--你只是有一个其他的平均循环(它强行从正确工作的MovingAverage函数的任何结果中产生Smoothed):),除了第一个值(这是从MovingAverage执行中留下的)。
总之,从最后引用的代码来看--一切都已经 到位(而且RSI现在可以正常读取其他平均模式):)!雅虎!
(我之前保存的指标代码已经包含了这一变化;) - 只要用以下参数调用fsbRSI就可以确定了。
indLogic = 不重要
maMethod =2(!在MT术语中重要的MODE_SMMA)。
basePrice = 0(在MT术语中为PRICE_CLOSE)。
iPeriod = 14
fLevel = 不重要
iPrvs = 不重要
并通过原生的相对强度指数(MT自带)获得精确的 匹配结果。
除了fsbRSI和iRSI与FSB不 一样以外:(
因此,让我们回到主要问题 上来。
"所有基类、方法和属性现在都返回双倍 值,所有交易函数也是如此(我在6个月前就改了)"。
嗯,这很好!我只是不明白这篇论文应该如何影响
酒吧的开盘价 和酒吧的收盘价?在上述例子中。
重复这个问题:为什么寻求的价格与报价不一样?(我指的是6,7,8,......位数)
双重 与此完全无关!引号中的值是规范化的,在变量之间简单复制时,应该保留(完全相同)。
如果类似的值开始出现在指标的计算中(当用于计算的缓冲区在报价值的基础上被填充时,受保护的 静态 float[] Price(BasePrice price)),那么我们就更好了(虽然看起来很奇怪),即它就像另一个来源(除了以前的float)的 "轻微 "去规范化的数据:)。
我稍微改变了一些指标,使其看起来像MT的标准指标。
改变了FSB指标。
RSI
RSI的振荡器
RSI MA震荡器
布林线
标准偏差
随机指数
在以下指标上存在着差异。
势头
市场便利化指数
其他。
MT移动平均振荡器 == FSB MACD直方图
MT动量 == FSB变化率
相对活力指数 - 不包括在FSB中
现在FSB和MT指标应该大致相等。
TODO:
Stochastics - 修订的信号。
市场便利化指数--公式修订。
一个像MT的一个将被纳入FSB的动量--被命名为 "动量MT"
包括FSB中的 "相对活力指数"。