谁想要一个战略?很多,而且是免费的) - 页 59

 
Stellarator >> :

原始价值和 "随后部署的 "是否有差异? 仍然是双倍......)

尚未....所有的问题都来自于马虎 :)

被迫劝阻!关键的细微差别--"EA的一次迭代的极限"。那么,在这些限制范围内,该指标只计算一次(在其第一次调用时)!我以100%的信心宣布这一点。所有后续的调用根本不启动()它,而只是从必要的缓冲区获取必要的值。如果输入参数保持不变(除了缓冲区和偏移量),该条件为100%。该规则对一个工具范围内的计算有效。但我认为,即使iCustom指的是其他TF和工具,这个原则也是成立的。

一个人必须 "被迫".....,一下子就能做到。谢谢你提供的另一个未记录的功能 :)


 

FSB__Bar_Opening_Bar_Closing.mql4 v0 .0.2 Beta


酒吧开业时的市场进入。

在酒吧收盘时退出(10秒,直到收盘或在下一次开盘时)。


** 这只是用于测试入口/出口 的演示。**


代码碎片。


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 bar
         datetime dtClosingTime     = dtOpeningTime + Period() * 60;  // The closing time of current bars
         datetime dtCurrentTickTime = TimeCurrent() ;                 // The time of current tick
         
         if( dtCurrentTickTime > dtClosingTime - dtClosingTimeSpan ||  bIsFirstTick)
         {  // The current tick is within the closing time span or this is the first tick of the bar.

            // Code

         }
       }
    }
}
附加的文件:
 

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)。

            // Saving the components
            component = new IndicatorComp[1];

            component[0] = new IndicatorComp();
            component[0]. CompName  = "Closing price of the bar";
            component[0]. DataType  = ( parameters. SlotType == SlotTypes.Open) ? IndComponentType. OpenPrice : IndComponentType. ClosePrice;
            component[0]. ChartType = IndChartType. NoChart;
            component[0]. FirstBar  = 2;
            component[0].Value     = Data.Close;

因此,我的第一个工作假设是,(也许)它是关于这个?("错误的"(或 "正确的",但为什么恰恰是这样?)在函数中给出引号值?)

部分,显然,从所寻求的函数中获得的值(在计算指标时填充操作的缓冲区)的问题受保护的 静态 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

            for (int iBar = 1; iBar < Bars; iBar++)
            {
                if ( adBasePrice[ iBar] > adBasePrice[ iBar - 1]) adPos[ iBar] = adBasePrice[ iBar] - adBasePrice[ iBar - 1];
                if ( adBasePrice[ iBar] < adBasePrice[ iBar - 1]) adNeg[ iBar] = adBasePrice[ iBar - 1] - adBasePrice[ iBar];
            }

            double[] adPosMA = MovingAverage( iPeriod, 0, maMethod, adPos);
            double[] adNegMA = MovingAverage( iPeriod, 0, maMethod, adNeg);

            for (int iBar = iFirstBar; iBar < Bars; iBar++)
            {
                if ( adNegMA[ iBar] == 0)
                    adRSI[ iBar] = 100;
                else
                    adRSI[ iBar] = 100 - (100 / (1 + adPosMA[ iBar] / adNegMA[ iBar]));
            }


即将下载的程序。


 

米罗斯拉夫--在配方上没有差异。正如我在讨论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中的 "相对活力指数"。