datetime New_Time[];//буффер для проверки нового бараvoidOnStart()
{
uint start=GetTickCount();
for(int i=0;i<1000000;i++)
{
staticdatetime t;//записываем старое время ArraySetAsSeries(New_Time,true);//направление индексацииCopyTime(_Symbol,_Period,0,1,New_Time);//копируем время нового бара
t=New_Time[0];
}
uint time=GetTickCount()-start;
Print("New_Time = ",time," ms");
}
voidOnStart()
{
int t;
int s;
uint start=GetTickCount();
for(int i=0;i<1000000;i++)
{
MqlDateTime m;
TimeCurrent(m);
t=m.min;
s=m.sec;
}
uint time=GetTickCount()-start;
Print("time = ",time," ms");
}
在专家顾问中做了以下代码的优化。
staticdouble ind1;//записываю значенияstaticdouble ind2;// значенияstaticdouble indsmall;//индикаторовMqlDateTime m;
TimeCurrent(m);
int MIN=m.min;
int SEC=m.sec;
if (MIN==0 && SEC==0)//проверка только в начале часа
{
Здесь копирую значения индикатора из буфферов
}
在不检查新条形图的情况下,单次运行的结果是:817,196毫秒。
检查一个新棒:735 904 ms
差异不是特别大,有一些改进,但还不够。
我得到的指标如下。
int TSIHandle; // хэндл индикатора TSIdouble TSI[]; // динамические массивы для хранения численных значений TSIintOnInit()
{
TSIHandle=iCustom(NULL,0,"Blau_TSI",q,r,s,u,PRICE_CLOSE);
if(TSIHandle<0){Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");return(-1);}
ArraySetAsSeries(TSI,true);
return(0);
}
voidOnDeinit(constint reason)
{
//--- освобождаем хэндлы индикаторовIndicatorRelease(TSIHandle);
ArrayFree(TSI);
}
voidOnTick()
{
MqlDateTime m;
TimeCurrent(m);
int MIN=m.min;
int SEC=m.sec;
staticdouble tsismall;
if (MIN==0 && SEC==0)
{
//--- копируем значения индикаторов из индикаторных буферовif(CopyBuffer(TSIHandle,0,0,3,TSI)<0)
{
Alert("Ошибка копирования буферов индикатора Moving Average - номер ошибки:",GetLastError(),"!!");
return;
}
tsismall=TSI[1];
}
}
我试着在检查新条形图的区块中放置带有手柄调用的代码,但如果我在这里做,就会出现错误。
if(TSIHandle<0){Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");return(-1);}
在脚本中,我是这样做的。
时间=0
周一的SymbolInfoTick。
你可以用这个代码来检查它。
但你需要每个符号 的刻度。
你可以用这个代码来检查它。
但你需要每个符号的刻度。
是的,"SymbolInfoTick",今天没有检查。
试过了,在虱子来之前,它不会起作用。
iask=0是的,SymbolInfoTick,今天没有检查。
试过了,直到嘀嗒声响起,什么都不能用了。
iask=0这个函数的速度太快了。
为了测量性能,你需要在一个有大量迭代的循环中应用多个调用,并测量总执行时间。
更有趣的是,有一个示例代码。我们正在等待结果。
为了检查EA中的新条,我使用了基于 "CopyTime "和 "CopyRates "的函数,这是我在论坛上发现的。我得出的结论是,他们的计算需要大量的时间。
下面是检查数据(有趣的是,指标调用 需要171毫秒)。
在这里我有一个想法,如果我尝试其他的东西。例如,"TimeCurrent"。
做了以下代码的优化。
在专家顾问中做了以下代码的优化。
在不检查新条形图的情况下,单次运行的结果是:817,196毫秒。
检查一个新棒:735 904 ms
差异不是特别大,有一些改进,但还不够。
我得到的指标如下。
我试着在检查新条形图的区块中放置带有手柄调用的代码,但如果我在这里做,就会出现错误。
我把 返回 ,什么也没返回,没有错误,但EA却不工作。
我想hendle调用,如果可能的话,一般来说,除了静态变量外,所有的主代码都应该放在条件运算符内,以检查新酒吧。
如果我没记错的话,我在某处读到,即使我们调用一个句柄,但不要求缓冲区内的指标,它仍然被计算出来。
谁能建议如何制作一个显示单一公式结果的指标 buffer[i] = (1.3747-(MarketInfo("EURUSD", MODE_BID))+0.8835-(MarketInfo("USDCHF", MODE_BID))*10000。
你需要写一个自定义指标。为了使这一过程更容易--采取最简单的指标之一--iMa 并改写一下。这里是另一个主题,其中谈到了MarketInfo。编写代码,如果有什么不成功的地方就问。
静态变量 怎么了?今天更新了终端的旧版本,现在编译时出现了错误。
现在,类的静态成员-数据必须被放置。