如何保护自己,防止从测试者那里复制多头交易 - 页 3

 
George Merts:
是的,我明白。但同样,在策略测试器中--你按顺序得到刻度,你不知道什么时候会有最后一个刻度。
你可以知道第一根柱子的时间(开始),以及该符号历史上的柱子数量,这就足够了。
 

不需要dll

你可以做一些事情,按字符(任何)拉出第一条和条数。但这是针对旧的建设。我不知道它是否能在测试器中工作。但我可以在MT4中访问历史记录,而不需要dll

int init()
{
        int    _GetLastError = 0, cnt_ticks = 0, cnt_bars = 0, temp[13];
        // запоминаем символ графика, обнуляем хэндл окна off-line графика
        _Symbol = Symbol();
   hwnd = 0;

        // открываем файл, в который будем записывать историю
        string file_name = StringConcatenate( "!Eqv", _Symbol, TicksInBar, ".hst" );
        int sd_=iBars("!Eqv"+ _Symbol,TicksInBar)-1;
   double Open_[],
          Close_[],
          High_[],
          Low_[];
   int Time_[];
   ArrayResize(Open_,sd_+1);
   ArrayResize(High_,sd_+1);
   ArrayResize(Low_,sd_+1);
   ArrayResize(Close_,sd_+1);
   ArrayResize(Time_,sd_+1);
        for(int sd=iBars("!Eqv"+ _Symbol,TicksInBar)-1;sd>=0;sd--)
        {
           Time_[sd]=iTime("!Eqv"+ _Symbol,TicksInBar,sd);
           Open_[sd]=iOpen("!Eqv"+ _Symbol,TicksInBar,sd);
           Close_[sd]=iClose("!Eqv"+ _Symbol,TicksInBar,sd);
           High_[sd]=iHigh("!Eqv"+ _Symbol,TicksInBar,sd);
           Low_[sd]=iLow("!Eqv"+ _Symbol,TicksInBar,sd);
           //Print(sd," ",GetLastError()," ",Time_[sd]," ",Low_[sd]," ",High_[sd]," ",Close_[sd]," ",Open_[sd]);
        }

        return(0);
}
 
Alexandr Bryzgalov:
你可以找出第一条杠的时间(开始),以及符号历史中的条数,这就足够了。

策略测试器中,第一个条形图的时间是传入tick的时间。而且会随着策略测试器中刻度线的到来不断增加。

一个具体的例子。

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

目前的日期是2015年5月1日,我们开始了过去一年的策略测试。在策略测试器的第一个刻度上,我们将得到1.1.2015年的零条时间。虽然,电脑上的真实时间是1.5.2015。随着策略测试器中的刻度线的出现--日期会发生变化,零条也会发生变化。

使用文件操作,我们可以得到,即使我们的最后一个(零条)的日期是1.1.2015,但实际时间是1.05.2015。因此,我们在测试器中只处理到2015年4月1日的蜱虫。

随着新的真实日期的到来--在测试器中,我们将得到越来越多的后期日期,并且,相应地,过程中的滴答声越来越远,但不会超过一个月的真实日期。

现在--用户决定欺骗我们,将电脑上的日期提前六个月。现在,在测试器中,连同日期1.05.2015,我们将得到日期1.11.2015,并且刻度线将被处理到1.10.2015,尽管事实上真正的日期 - 仍然是1.05.2015,并且在终端真正的数据只到这个日期。然而,我们没有办法在测试开始时从测试者那里得到这个值。

这就是问题所在。

也就是说,如果我们能从测试器中获得测试器中记录的时间序列的真正最后日期--问题就解决了。但问题是不清楚如何做到这一点。

 
Alexandr Bryzgalov:

不需要dll

你可以做一些事情,按字符(任何)拉出第一条和条数。但这是针对旧的建设。我不知道它是否能在测试器中工作。但我可以在MT4中访问历史记录,而不需要dll

因此,该日期将是2015年1月1日,相应地,所有酒吧将只从这一天开始拉动。虽然,真正的日期是2015年5月1日。
 
George Merts:

策略测试器中,第一个条形图的时间是传入tick的时间。而且会随着策略测试器中刻度线的到来不断增加。

一个具体的例子。

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

目前的日期是2015年5月1日,我们开始了过去一年的策略测试。在策略测试器的第一个刻度上,我们将得到1.1.2015年的零条时间。虽然,电脑上的真实时间是1.5.2015。在策略测试器中,随着刻度的出现,日期将被移位,零条也将被移位。

使用文件操作,我们可以得到,即使我们的最后一个(零条)的日期是1.1.2015,但实际时间是1.05.2015。因此,我们在测试器中只处理到2015年4月1日的蜱虫。

随着新的真实日期的到来--在测试器中,我们将得到越来越多的后期日期,并且,相应地,过程中的滴答声越来越远,但不会接近真实日期的一个月。

现在--用户决定欺骗我们,将电脑上的日期提前六个月。现在,在测试器中,连同日期1.05.2015,我们将得到日期1.11.2015,并且刻度线将被处理到1.10.2015,尽管事实上真正的日期 - 仍然是1.05.2015,并且在终端真正的数据只到这个日期。然而,我们没有办法在测试开始时从测试者那里得到这个值。

这就是问题所在。

也就是说,如果我们能从测试器中获得测试器中记录的时间序列的真正最后日期--问题就解决了。但问题是不清楚如何做到这一点。

有一个历史文件,我们应该打开它(FileOpenHistory),读取它,找到第一个(历史上最后一个小节),读取它的时间并计算小节总数。

这将足以在测试器中操纵在正确的时刻停止专家顾问。

 
不要获得最后的日期,通过从init中读取历史文件中的第一个日期和历史文件中的总条数 来获得
 
Alexandr Bryzgalov:

有一个历史文件,你需要打开它,读取它,找到第一个(历史上最左边的BAR),读取它的时间,计算总的条数。

这将足以在测试器中操纵在正确的时刻停止EA。

好吧,但我们如何从策略测试器中 访问它?上面建议的变体使用标准函数获得条形图,在Inite的策略测试器中会返回1.01.2015(如果我们从该日期开始运行测试)。
 
Alexandr Bryzgalov:
你不需要得到最后的日期,你需要得到历史文件中的第一个日期和历史文件中的总条数,通过从init中读取

А !现在这很有趣。

我必须要试一试。

 
George Merts:
这是正确的,但你如何从策略测试器 中访问它?

那么,这是一个正常的文件操作,还是测试人员不允许访问历史记录?

我自己没有试过,但在帮助中没有禁止它。

 
我可能脱离了这个循环,但是在OnTesterInit()中,如果你检查TimeLocal 和TimeGMT,找到天数的差异,它将显示什么时间,真实时间还是测试者时间?