//+------------------------------------------------------------------+//|Получение информации о ценах OHLC текущего бара |//+------------------------------------------------------------------+void Get_OHLC(string symbol,ENUM_TIMEFRAMES TF, double &arr_OHLC[])
{
ArrayResize(arr_OHLC,4);
arr_OHLC[0]=iOpen(symbol,TF,0);
arr_OHLC[3]=iOpen(symbol,PERIOD_M1,0);
datetime s=iTime(symbol,TF,0);
datetime f=iTime(symbol,PERIOD_M1,1);
datetime Time_1=iTime(Symbol(),PERIOD_M1,1);
if(TF!=PERIOD_M1)
{
double arr_High[];
double arr_Low[];
int copied=0;
if(Symbol()!=symbol)//Если берем данные с другого символа, то проверяем синхронизацию - нужно, так как при открытии новой свечи на текущем символе данных можнт небыть на опрашиваемом символе
{
if(Time_1>f)//На текущем символе открылись раньше появления нового бара на запрашиваемом
{
f=iTime(symbol,PERIOD_M1,0);
arr_OHLC[3]=iClose(symbol,PERIOD_M1,0);
}
else
{
arr_OHLC[3]=iClose(symbol,PERIOD_M1,1);
}
if(s>f)//Если текущий бар ТФ открылся раньше, чем минутный бар до которого включительно берем информацию OHLC
{
s=iTime(symbol,TF,1);
arr_OHLC[0]=iOpen(symbol,TF,1);
}
copied=CopyHigh(symbol,PERIOD_M1,s,f,arr_High);
if (copied>0)
{
arr_OHLC[1]=arr_High[ArrayMaximum(arr_High,0,WHOLE_ARRAY)];
}
else
{
Print("Ошибка копирования в массив arr_High");
}
copied=CopyLow(symbol,PERIOD_M1,s,f,arr_Low);
if (copied>0)
{
arr_OHLC[2]=arr_Low[ArrayMinimum(arr_Low,0,WHOLE_ARRAY)];
}
else
{
Print("Ошибка копирования в массив arr_Low");
}
}
else
{
if(s<f)
{
copied=CopyHigh(symbol,PERIOD_M1,s,f,arr_High);
if (copied>0)
{
arr_OHLC[1]=arr_High[ArrayMaximum(arr_High,0,WHOLE_ARRAY)];
}
else
{
Print("Ошибка копирования в массив arr_High");
}
copied=CopyLow(symbol,PERIOD_M1,s,f,arr_Low);
if (copied>0)
{
arr_OHLC[2]=arr_Low[ArrayMinimum(arr_Low,0,WHOLE_ARRAY)];
}
else
{
Print("Ошибка копирования в массив arr_Low");
}
}
else
{
if(s==f)//Если ТФ открылся на прошлом минутном баре
{
arr_OHLC[1]=iHigh(symbol,PERIOD_M1,1);
arr_OHLC[2]=iLow(symbol,PERIOD_M1,1);
}
if(s>f)//Если ТФ открылся на текущем минутном баре
{
arr_OHLC[1]=iOpen(symbol,PERIOD_M1,0);
arr_OHLC[2]=iOpen(symbol,PERIOD_M1,0);
}
}
}
}
else
{
arr_OHLC[0]=iOpen(symbol,PERIOD_M1,0);
arr_OHLC[1]=iOpen(symbol,PERIOD_M1,0);
arr_OHLC[2]=iOpen(symbol,PERIOD_M1,0);
arr_OHLC[3]=iOpen(symbol,PERIOD_M1,0);
if(Symbol()!=symbol)
{
if(Time_1>iTime(symbol,PERIOD_M1,1))//Если не появился новый бар
{
arr_OHLC[0]=iOpen(symbol,PERIOD_M1,0);
arr_OHLC[1]=iHigh(symbol,PERIOD_M1,0);
arr_OHLC[2]=iLow(symbol,PERIOD_M1,0);
arr_OHLC[3]=iClose(symbol,PERIOD_M1,0);
}
else//Если появился новый бар
{
arr_OHLC[0]=iOpen(symbol,PERIOD_M1,1);
arr_OHLC[1]=iHigh(symbol,PERIOD_M1,1);
arr_OHLC[2]=iLow(symbol,PERIOD_M1,1);
arr_OHLC[3]=iClose(symbol,PERIOD_M1,1);
}
}
}
}
是的。同义词是fic、input、predictor。
谢谢你,我一直有一个 "东西",虽然这个词是歪的。
甚至讨厌....
在我看来,最正确的词是" 功能",但有很多同义词,而且不是最好的。
是的。同义词是fic、input、predictor。
谢谢,我一直有 "fiches",虽然这个词是歪的。
特别是当你不熟悉音译的时候。
在仪器上发生嘀嗒声之前,条形图将不会打开。可能在很长一段时间内都不会有虱子;-)
而这个问题,不幸的是,在代码中并没有得到完全解决。你有办法解决这个问题吗?在OHLC建模模式 和 "每个tick都基于真实ticks "模式下,有可能从一个EA不在的符号上接收相同的数据?总的来说,你有什么办法解决OHLC的同步问题,即如果另一个符号上还没有柱状物,那么我们就使用前一个柱状物的数据,没有延迟?如果我们检查所有的刻度,我们可以(虽然我没有试过)接收条形图中第一个刻度的数据,并确保同步,即知道在打开新图表的时刻,当前图表上是否有一个条形图。
而这个问题,不幸的是,并没有被代码完全解决。有什么办法可以解决这个问题,以便在OHLC模拟模式 和 "基于真实刻度的每一个刻度 "模式下,都能从EA不在的符号中接收相同的数据?总的来说,你有什么办法解决OHLC的同步问题,即如果另一个符号上还没有柱状物,那么我们就使用前一个柱状物的数据,没有延迟?如果我们用所有的ticks来检查,那么就有可能(虽然我没有试过)接收条形图中第一个tick的数据,并确定使用它来进行同步,即知道在新图表打开的时刻,当前图表中是否有一个条形。
甚至可能错过几个分钟的小节。在前一个交易日的收盘价形成一个条形。对于几个仪器的联合行为的分析,它可以做到。对于一种货币来说,这可能并不重要。
这样就会出现不同步的情况,因为根据OHLC,前一个条形将是前一个,但在实际交易中,可能是前一个。
对于那些不知道OHLC模式是不同步的符号时间序列的人来说,它对MO来说是至关重要的。
关于交易、自动交易系统和策略测试的论坛
新版MetaTrader 5 build 2615:策略测试仪中的基本面分析和复杂标准
Aleksey Vyazmikin, 2020.09.26 13:26
建立2622,1分钟的时间框架,工具Si-12.20经纪人 "Otkrytie"。
在" 基于真实刻度的每一个刻度"和 "M1上的OHLC "模式下,在新条形的开口处打印。:
上面的结果是列表,我对它们有疑问。
1.我预计延迟可能是如果当前符号有一个新的条形图,而我们要求提供信息的符号还没有--这种情况确实发生了,但只有在新的一天开幕时--它以绿色突出显示。
2)情况与第一点相同,没有标记,但如果在potik测试中是预期的,那么为什么这种情况发生在"OHLC on M1 " 中--为什么会出现不同步--就 不清楚了。
3.当同时收到两个刻度线或所要求的符号的刻度线比调用信息的符号的刻度线快时,会用黄色突出显示;但如果在 "OHLC on M1 " 模式下已经收到了刻度线, 为什么在该条杠上没有刻度线?
我请开发者澄清,这是否是本意,那么逻辑是什么,还是说这是一个将被修复的错误?
响应。
关于交易、自动交易系统和测试交易策略的论坛
新版MetaTrader 5 build 2615:策略测试仪中的基本面分析和复杂标准
Renat Fatkhullin, 2020.09.26 13:33
你的问题只是关于OHLC模式的测试,因为在poticky模式下一切都正确?
答案很简单,在OHLC测试中,你无法保证外国字符的准确同步。OHLC是专门用于肮脏的测试。
似乎已经解决了不同步的问题,当从另一个符号请求数据时--在某些情况下不得不牺牲一个分钟条,但在所有点和OHLC上建模时,结果是稳定的,这意味着在实际交易中也会有同样的预期。
对于一个正常的稳健的算法来说,一点滞后并不影响什么。这些都是牵强附会的问题)。
在哪里可以得到这些 "正常 "的?它影响与否--在这里是随机的,如果在量化过程中,一个人在量级之间的边界上,那么在训练过程中,可能会出现仅仅一个量级的差异就会导致输入跳过真实。一般来说,我不喜欢在测试器中无法重现一个封闭日的交易,所以我找出了原因并开始修复它。