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

 
Stellarator >> :

我的朋友给我打电话,让我在汽车上作弊...

>>好吧...

他们还说危机;)

 

看来我们必须开始一个一个地进行比较,直到解决所有问题。

在这里,我将FSB加速器振荡器与MTiAC(...)进行了比较。



如何做到这一点。

1.用MT中目前使用的汇率来更新FSB的外汇汇率(在MT中按Ctrl+S键,在FSB ./Data目录中保存xxxxx.csv文件。如果你的数据在一个不同的文件夹中--使用FSB的市场->数据目录 来指向它)。

2.使脚本Indicator_Values.mq4打印出需要的指标。(脚本在前一个论坛的页面上)。

3.在FSB中设置该指标。(请确保使用相同的参数。) 通过功能导出 ->指标 导出FSB指标。

4.如果你看到任何差异,请报告。


祝你有个好运气


------------

编辑。

请使用最新的FSB v2.8.3.5测试版

 
Miroslav_Popov >> :

经典的公式是:动量(n)=收盘价-收盘价(n)。

这就是FSB使用的公式。

MT使用:Momentum(n) = 100 * Close / Close(n)

我知道,我指的是指标参数。平滑期。平滑化方法。我们不设定它。默认采取什么参数:0,0?

 

嗨,zfs。


你可以在指标参数对话窗口中看到默认参数。(按默认值)



注意,"额外平滑"周期=0。这意味着不应用平滑。


你可以看到默认值的第二个地方是在源代码中。


        /// <summary>
        /// Sets the default parameters for the designated slot type
        /// </summary>
        public Momentum( SlotTypes slotType)
        {
            sIndicatorName  = "Momentum";
            parameters      = new IndicatorParam();
            component       = new IndicatorComp[] { };
            bSeparatedChart = true;
            bIsCalculated   = false;

            // The indicator name
            parameters. IndicatorName = sIndicatorName;

            // The slot type
            parameters. SlotType = slotType;

            // The ComboBox parameters
            parameters. ListParam[0]. Caption  = "Logic";
            parameters. ListParam[0]. ItemList = new string[]
            {
                "The Momentum rises",
                "The Momentum falls",
                "The Momentum is higher than the Level line",
                "The Momentum is lower than the Level line",
                "The Momentum crosses the Level line upward",
                "The Momentum crosses the Level line downward",
                "The Momentum changes its direction upward",
                "The Momentum changes its direction downward"
            };
            parameters. ListParam[0]. Index    = 0;
            parameters. ListParam[0]. Text     = parameters. ListParam[0]. ItemList[ parameters. ListParam[0]. Index];
            parameters. ListParam[0]. Enabled  = true;
            parameters. ListParam[0]. ToolTip  = "Logic of application of the indicator.";

            parameters. ListParam[1]. Caption  = "Smoothing method";
            parameters. ListParam[1]. ItemList = Enum. GetNames( typeof( MAMethod));
            parameters. ListParam[1]. Index    = 0;
            parameters. ListParam[1]. Text     = parameters. ListParam[1]. ItemList[ parameters. ListParam[1]. Index];
            parameters. ListParam[1]. Enabled  = true;
            parameters. ListParam[1]. ToolTip  = "The Moving Average method used for smoothing the Momentum value.";

            parameters. ListParam[2]. Caption  = "Base price";
            parameters. ListParam[2]. ItemList = Enum. GetNames( typeof( BasePrice));
            parameters. ListParam[2]. Index    = 3;
            parameters. ListParam[2]. Text     = parameters. ListParam[2]. ItemList[ parameters. ListParam[2]. Index];
            parameters. ListParam[2]. Enabled  = true;
            parameters. ListParam[2]. ToolTip  = "The price the Momentum is based on.";

            // The NumericUpDown parameters
            parameters. NumParam[0]. Caption = "Period";  <----- Parameter Name
            parameters. NumParam[0]. Value   = 10;        <----- Default Value
            parameters. NumParam[0]. Min     = 1;
            parameters. NumParam[0]. Max     = 200;
            parameters. NumParam[0]. Enabled = true;
            parameters. NumParam[0]. ToolTip = "The period of Momentum.";
 
            parameters. NumParam[1]. Caption = "Additional smoothing"; <----- Parameter Name 
            parameters. NumParam[1]. Value   = 0;        <----- Default Value
            parameters. NumParam[1]. Min     = 0;
            parameters. NumParam[1]. Max     = 200;
            parameters. NumParam[1]. Enabled = true;
            parameters. NumParam[1]. ToolTip = "The period of additional smoothing.";

            parameters. NumParam[2]. Caption = "Level";  <----- Parameter Name
            parameters. NumParam[2]. Value   = 0;        <----- Default Value
            parameters. NumParam[2]. Min     = -100;
            parameters. NumParam[2]. Max     = 100;
            parameters. NumParam[2].Point   = 4;
            parameters. NumParam[2]. Enabled = true;
            parameters. NumParam[2]. ToolTip = "A critical level (for the appropriate logic).";

            // The CheckBox parameters
            parameters. CheckParam[0]. Caption = "Use previous bar value";
            parameters. CheckParam[0]. Checked = Data. Strategy. PrepareUsePrevBarValueCheckBox( slotType);
            parameters. CheckParam[0]. Enabled = true;
            parameters. CheckParam[0]. ToolTip = "Use the indicator value from the previous bar.";
        }
 
Miroslav_Popov >> :

嗨,zfs。

我并没有怀疑你在原则上的无懈可击。问题是,尽管如此,对我来说,这些指标的最终价值并不一致。或者他们没有?不幸的是,我现在没有时间去检查它。

 

Zfs。

Stellarator 的帮助下,我修复了FSB的许多问题。我还在MT中把FSB的默认参数改成了这样。我希望大部分的差异已经被修复。


请毫不犹豫地报告任何可能的错误。我们非常感谢所有的反馈和批评。

 
Stellarator >> :

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


我有兴趣写一个专家顾问,适用于指标的值在当前分钟的第0条240次。也就是说,事实证明,输出总是有第一个值?请确认一下,因为这对我来说是新闻。

 
zfs >> :

离题的问题,我刚刚参与编写了一个专家顾问,在第0条240次访问指标,以获取当前分钟内的指标值。也就是说,事实证明,输出总是第一个值?请确认一下,因为这对我来说是新闻。

>>专家顾问在每一个新的tick上重新启动,这是一个不同的迭代,因此指标值也会不同。

 
rider >> :

EA将在每一个新的tick上重新启动,这分别是一个不同的迭代,指标值也会不同。

如果你正确使用了 "使用前一栏值 "参数,你就不需要指标的当前栏值。

假设你在日线图上使用MA(simple, 12, close)。为了正确计算这个MA,你需要12个柱子的收盘价。

如果现在是下午3点,当前的 "收盘 "价格就不是该条的真正收盘价。它将被改变,直到12点。因此,对当前条形图使用MA并不包括真正的收盘价,而是一个临时的收盘价。同时,回测使用历史条形图的真实(已经固定)收盘价。这种做法将带来回测和真实交易之间的差异。


甚至更糟。

让我们来看看 "快速MA高于慢速MA "的逻辑规则,这两个MA都是基于收盘价的。

如果在白天市场快速上涨,FastMa可以越过SlowMA,这将上升一个买入信号。你将在信号出现后买入。让市场在交易后下跌,收盘价如此之低,这将使FastMA低于SlowMA。你看到问题所在了吗?你已经在收盘前买了吧。如果你稍后回测这个策略,你会发现在这个柱子内没有这样的买入信号。你会责怪回测器,但问题出在错误的策略逻辑上。


外汇策略生成器通过自动设置 "使用前一栏值 "参数来保护你免受这种逻辑错误的影响。FSB从不使用不断变化(尚未固定)的指标进行回测。按照这个逻辑,如果策略不使用指标,为什么EA要为每一个刻度计算指标呢?每条的计算量就足够了。

- 如果指标使用开盘价--计算必须在条形图开盘时进行。

- 如果指标使用收盘价、最高价、最低价或这些价格的任何组合--计算必须是在酒吧收盘时进行。






 

大家晚上好!


我这个周末没有电脑了 :(.而今天我只是因为工作而无事可做,所以......不知为何......。

有时间思考,但。并(希望)从战略上决定(在指标框架方面)。

一般来说,从现在开始,指标的内部结构将是类似的(我将在以后描述,也许明天)。向外 "伸出 "的东西(参数)--尽可能地接近FSB。即它们的数量、价值(和它们的边界)以及由它们定义的功能--嗯......几乎是一比一:)。微观的细微差别仍然存在,但我们会边走边决定。


现在非常简短(我现在要去睡觉了,明天或后天可能就不在这里了,我有很多工作上的事情要做)(以 "我们可爱的 "RSI为例:D)。

1.参数。

// -------- Indicator parameters
extern int     slotType = SLOT_TYPE_OPENFILTER; // SLOT_TYPE_LC
extern int     indLogic = INDICATOR_RISES;      // INDICATOR_RISES <= indLogic <= INDICATOR_CHANGES_DIR_DOWNWARD
extern int     maMethod = MA_METHOD_SMOOTHED;   // MA_METHOD_SIMPLE <= maMethod <= MA_METHOD_SMOOTHED
extern int     basePrice= BASE_PRICE_CLOSE;     // BASE_PRICE_OPEN <= basePrice <= BASE_PRICE_WEIGHTED
extern int     iPeriod  = 14;                   // 1 <= iPeriod <= 200
extern int     dLevel   = 30;                   // 0 <= dLevel <= 100
extern bool    iPrvs    = True;                 // True / False




我想,从图片上看,它或多或少是清楚的,因为它是。唯一可能造成困难的是:slotType,其各自的数值(也许与FSB不同,但在这种情况下,这不是一个关键点)。

// Slot Types
#define  SLOT_TYPE_OPEN                   0  // Point of the Position
#define  SLOT_TYPE_CLOSE                  1  // Point of the Position
#define  SLOT_TYPE_OPENFILTER             2  // Logic Condition
#define  SLOT_TYPE_CLOSEFILTER            3  // Logic Condition

剩下的就很简单了。数值按原样设置。ComboBoxes中的值从0开始编号(像数组)。

平滑方法和价格常数的数值与MT 不同(我想了很久,但为了FSB的兼容性,决定打破陈规:))。所有这些,实际上是为了将来专家顾问(或用户自己编写的)可以轻松地、不受约束地 "抽动 "指标 :)(他们在FSB看到的就是他们设定的("我看到的就是我唱的"))。大致如此。

double dRSI = iCustom(NULL, 0, "-FSB- RSI",2, 0, 3, 3, 3, 14, 30, 1, 0, 0);

为上述例子。


2.返回的值。

每个指标的前两个指标缓冲区是为开仓价格(分别为多头/空头),或为逻辑条件(1.0 - 是/任何其他值 - 否)保留的。此外,我们还有指标值本身(如果它们对某人有意义的话)。


前两个缓冲区的内容由指标的逻辑(slotTypeindLogic)决定(即再一次--有价格或1/0(我建议用 "1 "检查,因为其他值不仅可以是0(一般来说--由于指标没有值,可以是EMPTY_VALUE))。


所有的指标都被优化了,考虑到了IndicatorCounted()(这是原始代码的主要变化,大体上)(Miroslav是对的,在一般情况下--你应该每条街重新计算一次指标值(再次--在一般情况下...;))。但为了正确的视觉显示,以及在一般情况下(良好的音调)...一般来说,它不应该减慢很多。


对于渲染彩色的和类似的("特别有天赋的":))指标图形对象被使用(不是为了占用额外的缓冲区)。我自己测试了一下,效果很好(当视觉显示时,它比指示器缓冲区慢,但不是太关键,而且当调用iCustom时,根本不调用图形函数,所以 "过度 "不会影响速度)。


暂时就这些了,我还有几个问题要问米罗斯拉夫,但我已经筋疲力尽了:),我明天再试着问吧(但我会像我之前说的那样--匆忙地问)......


p.s. 在你从存档中移动文件之前 - 删除 Experts/Indicators/文件夹中的fsb*.mq4 文件。其余的只需要覆盖在旧的上面。从现在开始,文件的命名惯例将不会改变(所有的指标将有"-FSB- " 前缀)。

附加的文件:
experts_1.rar  148 kb