MT4测试器不提供其他时间段的信息 - 页 4

 
重做炮塔,例如动量,用一点不同的方式称呼它,增加外部变量TF=15,例如用M1数据读取。在Init中定义所需的乘数coef = 15。在每个柱子上,我们看这个柱子是否是开始,对于15分钟的TF,在它的指标中读取这个柱子的动量值一次,在进一步的14个柱子上返回相同的值。也许重要的是,分钟条形图没有间隙,或者有点不同地阅读指标,检查每个条形图的时间。计算所需条形的数值:
    
      j=coef*i;
      MomBuffer[j]=Close[j]*100/Close[j+MomPeriod*coef];
只剩下一件事需要实施。
 

Sych писал(а) >>

尝试使用ArrayCopyRates函数。


分别是iClose(Symbol(),tf,0),你应该写arr1[0][4],而不是iClose(Symbol(),tf,0),--这样做很好,最重要的是速度更快,因为没有复制,只有重定向。

不幸的是,这个数字对ArrayCopyRates()不起作用,只有测试运行的那个TF。
相邻的人都不说话!
我们必须建立9个类似 "ArrayCopyRates() "的数组,并从9个文件中加载所有数据。
我需要把你的建议和受人尊敬的 "avatara "结合起来,就会有办法了。
现在我将检查它如何从文件中读取。

 
yuripk >>:
Переделать индюк например моментум, обозвав его чуть иначе, добавить внешнюю переменную TF = 15, считаем на данных M1 для примера. В Init определяем нужный множитель coef = 15. На каждом баре смотрим, является ли этот бар началом и для пятнадцатиминтного ТФ, на нём в индикаторе считаем значение моментума один раз для этого бара и при 14 последующих барах возвращаем это же значение. Важно наверное, чтобы минутки не имели пропусков, или несколько иначе считать показания индикатора, проверяя время каждого бара. Подсчёт значения на нужном баре:
Осталось реализовать.

另一个正常的选择是在数据进来的时候自己制作条形图,这里有一些东西,但我得抓紧时间!"。
谢谢你。

 
vladv002 >>:
В процессе познания MQL4, выяснил что, как минимум мой тесер не отдает информацию
с других ТФ. Вот код проверки, его можна на любой эксперт подвесить, у моего тестера
меняются показания только того ТФ на котором тестирую, а другие стоят на месте.

你是在可视化测试模式下测试这段代码吗?阅读文章MetaTrader 4测试仪:必须知道的信息
 
vladv002 >>:

Еще нормальный вариант - делать свои бары по ходу поступления данных, тут чтото есть, но надо репу почесать!
Спасибо.


正是如此。我称其为建模;)

而且你将始终保证他们是正确的。

另外,你将能够实现非标准的TFs。例如M3...或H8。H6很有意思。

------

只是你必须在几分钟内运行测试器。

 
vladv002 писал(а)>>

另一个正常的选择是在数据进来的时候自己制作条形图,这里有一些东西,但我得抓紧时间!"。
>> 谢谢你。



一个正常的工作实例https://www.mql5.com/ru/code/9603
 
Vinin >>:


Нормальный пример работы https://www.mql5.com/ru/code/9603

在测试器中?

 
avatara писал(а)>>

>> 在测试器中?


一个正常的指示器在测试器中也能正常工作。既有多货币又有多时间框架。

 
Rosh >>:
Вы что, проверяете этот код в режиме визуального тестирования? Почитайте статью Тестер в терминале MetaTrader 4: Это необходимо знать

我还可以怎样快速检查指标在历史上的行为?

在我的例子中,分钟数据是不正确的。

在非视觉测试中,他们会更正确吗?

我可能是个哑巴...

 
Vinin >>:


Нормальный индикатор корректно работает и в тестере тоже. И Мультивалютный, и мультитаймфреймный.

你能不能好心地纠正一下代码。只要从M1输出正确的数据就可以了。

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_style1 0
#property indicator_color1 Orange
#property indicator_width1 2
#property indicator_style2 0
#property indicator_color2 BlueViolet
#property indicator_width2 2
extern bool Test=true;
//03/04/10
//SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);

//---- buffers
double DMA[];string PARA;int hFile,j=0,shift,dayshift;
double Mtimes[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()

{PARA=Symbol();
if (Test) hFile=FileOpen("Dt"+Symbol()+Period()+".csv",FILE_CSV |FILE_WRITE,";");
ArrayCopySeries(Mtimes,MODE_CLOSE,Symbol(),PERIOD_M1);
int error=GetLastError();
if(error==4066)
{
//---- делаем еще 2 попытки чтения
for(int i=0;i<2; i++)
{
Sleep(5000);
ArrayCopySeries(Mtimes,MODE_CLOSE,Symbol(),PERIOD_M1);
}
}
if (Test) FileWrite(hFile,"-Begin--",Mtimes[0]);

//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,DMA);
SetIndexShift(0,0);
SetIndexLabel(0,"inv");

return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
if (Test) FileClose(hFile);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{

//----
int counted_bars=IndicatorCounted();
int i,N;double Value;
N=Bars-counted_bars;

if(counted_bars<0) return(-1);
//---- last counted bar will be recounted

if (N==0) return(0);
j++;
if (Test){ FileWrite(hFile,j,"--1M15 ",StrTime(iTime(Symbol(),Period(),1)),iClose(PARA,0,1));
FileWrite(hFile,j,"--0M15 ",StrTime(iTime(Symbol(),Period(),0)),iClose(PARA,0,0));
FileWrite(hFile,j,"--0M1 ",StrTime(iTime(Symbol(),Period(),0)),iClose(PARA,1,0));
FileWrite(hFile,j,"--1001M15 ",StrTime(iTime(Symbol(),Period(),1000)),iClose(PARA,0,1001));
}
for (i=N-1; i>=0; i--)
{
Value=iClose(PARA,0,i);

// Print (i,"=",Value);
DMA[i]=Value;
}

return(0);
}
//+------------------------------------------------------------------+
string StrTime(datetime IT){
return(StringConcatenate(TimeYear(IT),".",TimeMonth(IT),".",TimeDay(IT)
, "-",TimeHour(IT),"^",TimeMinute(IT),"^",TimeSeconds(IT)));
}

我们正在M15上进行测试。
提前感谢!