任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 905

 

请告诉我这是什么信息,以及如何修复它。

2015.06.18 04:04:12.156 内存处理器:无法分配33150字节的内存

 
yosuf:

请告诉我这是什么信息,以及如何修复它。

2015.06.18 04:04:12.156 内存处理器:无法分配33150字节的内存

没有足够的内存
 
yosuf:

请告诉我这是什么信息,以及如何修复它。

2015.06.18 04:04:12.156 内存处理器:无法分配33150字节的内存

终端中的某些专家或指标消耗了大量的内存,试着一个一个地删除,就会找到原因。这通常发生在代码没有被优化的情况下,或者在每一个tick 上有大量的重新计算,而不是在一个新的bar上。
 
Vinin:
没有足够的内存。
谢谢你。
 
MVS:
终端中的某些专家顾问或指标消耗了大量的内存,试着逐一删除,你会找到原因。大多数情况下,它发生在代码没有被优化的情况下,或者在每一个tick上有大量的重新计算,而不是在一个新的bar上。
谢谢,我会试一试的。
 

你好。

谁能告诉我是否可以在一个Bin文件中同时写几个数组。

这有可能吗?

例1:

空白WriteData(constint n)。

{
//----打开文件
ResetLastError()。
int handle=FileOpen(path,FILE_WRITE|FILE_BIN)。
如果(handle!=INVALID_HANDLE)
{

FileWriteArray(handle,arr1,0,n)。

FileWriteArray(handle,arr2,0,n)。
//---关闭文件
FileClose(handle)。
}

}

还是应该像这样?

例2:

空白WriteData(constint n)。

{
//----打开文件
ResetLastError()。
int handle=FileOpen(path,FILE_WRITE|FILE_BIN)。
如果(handle!=INVALID_HANDLE)
{
FileWriteArray(handle,arr1,0,n)。

FileSeek(handle,0,SEEK_END)。

FileWriteArray(handle,arr2,0,n)
//---关闭文件
FileClose(handle)。
}

}

 

朋友们,你们能不能帮我优化一下这个指标,在我的电脑上可以,但在我的旧笔记本上就太慢了。

PS.在图表上不需要它,它是由专家顾问调用的。

预先感谢

#property copyright "*"
#property link      "*"

#property indicator_separate_window
#property indicator_buffers 5
#property  indicator_color1 DodgerBlue
#property  indicator_color2 Orange
#property  indicator_color3 White
#property  indicator_color4 Yellow
#property  indicator_color5 Lime

#property indicator_maximum 1
#property indicator_minimum -1

#property  indicator_level1 0.7
#property  indicator_level2 -0.7

extern bool      ShowComment=false;  
extern int       Per=14;
extern bool      GBPUSD_v_EURUSD=true;
extern bool      AUDUSD_v_EURUSD=true;
extern bool      USDCHF_v_EURUSD=true;
extern bool      USDJPY_v_EURUSD=true;
extern bool      USDCAD_v_EURUSD=true;

 
 
double CloseEURUSD,CloseGBPUSD,CloseAUDUSD;
double CloseUSDCHF,CloseUSDJPY,CloseUSDCAD;
double summaEURUSD=0,summaGBPUSD=0,summaAUDUSD=0;
double summaUSDCHF=0,summaUSDJPY=0,summaUSDCAD=0;
double summaPow_EURUSD=0,summaPow_GBPUSD=0,summaPow_AUDUSD=0;
double summaPow_USDCHF=0,summaPow_USDJPY=0,summaPow_USDCAD=0;
double summa_eur_gbp=0,summa_eur_aud=0,summa_eur_chf=0,summa_eur_jpy=0,summa_eur_cad=0;
double sredneeEURUSD=0,sredneeGBPUSD=0,sredneeAUDUSD=0;
double sredneeUSDCHF=0,sredneeUSDJPY=0,sredneeUSDCAD=0;
double Q_eur_usd=0,Q_gbp_usd=0,Q_aud_usd=0,Q_usd_chf=0,Q_usd_jpy=0,Q_usd_cad=0;
double Correl_eur_gbp=0,Correl_eur_aud=0,Correl_eur_chf=0,Correl_eur_jpy=0,Correl_eur_cad=0;


double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);   
   
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);    
   
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);    
   
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,ExtMapBuffer4);    
   
   SetIndexStyle(4,DRAW_LINE);
   SetIndexBuffer(4,ExtMapBuffer5);    
   
   SetIndexLabel(0,"GBPUSD v EURUSD");
   SetIndexLabel(1,"AUDUSD v EURUSD");
   SetIndexLabel(2,"USDCHF v EURUSD");
   SetIndexLabel(3,"USDJPY v EURUSD");
   SetIndexLabel(4,"USDCAD v EURUSD");
   
   IndicatorDigits(2);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   if(ShowComment)Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start(){

   int limit=Bars-IndicatorCounted()-1;
   
      for(int j=limit;j>=0;j--){
         sredneeEURUSD=0;
         sredneeGBPUSD=0;
         sredneeAUDUSD=0;
         sredneeUSDCHF=0;
         sredneeUSDJPY=0;
         sredneeUSDCAD=0;
         summaEURUSD=0;
         summaGBPUSD=0;
         summaAUDUSD=0;
         summaUSDCHF=0;
         summaUSDJPY=0;
         summaUSDCAD=0;
         summaPow_EURUSD=0;
         summaPow_GBPUSD=0;
         summaPow_AUDUSD=0;
         summaPow_USDCHF=0;
         summaPow_USDJPY=0;
         summaPow_USDCAD=0;
         summa_eur_gbp=0;
         summa_eur_aud=0;
         summa_eur_chf=0;
         summa_eur_jpy=0;
         summa_eur_cad=0;
         Q_eur_usd=0;
         Q_gbp_usd=0;
         Q_aud_usd=0;
         Q_usd_chf=0;
         Q_usd_jpy=0;
         Q_usd_cad=0;
         Correl_eur_gbp=0;
         Correl_eur_aud=0;
         Correl_eur_chf=0;
         Correl_eur_jpy=0;
         Correl_eur_cad=0;
            for (int i=0; i<Per; i++){
               CloseEURUSD=iClose("EURUSD",0,iBarShift("EURUSD",0,Time[i+j],false));//X
               if(GBPUSD_v_EURUSD)CloseGBPUSD=iClose("GBPUSD",0,iBarShift("GBPUSD",0,Time[i+j],false));//Y
               if(AUDUSD_v_EURUSD)CloseAUDUSD=iClose("AUDUSD",0,iBarShift("AUDUSD",0,Time[i+j],false));//Y
               if(USDCHF_v_EURUSD)CloseUSDCHF=iClose("USDCHF",0,iBarShift("USDCHF",0,Time[i+j],false));//Y
               if(USDJPY_v_EURUSD)CloseUSDJPY=iClose("USDJPY",0,iBarShift("USDJPY",0,Time[i+j],false));//Y
               if(USDCAD_v_EURUSD)CloseUSDCAD=iClose("USDCAD",0,iBarShift("USDCAD",0,Time[i+j],false));//Y
     
               summaEURUSD=summaEURUSD+CloseEURUSD;//Xi
               if(GBPUSD_v_EURUSD)summaGBPUSD=summaGBPUSD+CloseGBPUSD;//Yi
               if(AUDUSD_v_EURUSD)summaAUDUSD=summaAUDUSD+CloseAUDUSD;//Yi
               if(USDCHF_v_EURUSD)summaUSDCHF=summaUSDCHF+CloseUSDCHF;//Yi
               if(USDJPY_v_EURUSD)summaUSDJPY=summaUSDJPY+CloseUSDJPY;//Yi
               if(USDCAD_v_EURUSD)summaUSDCAD=summaUSDCAD+CloseUSDCAD;//Yi
     
               summaPow_EURUSD=summaPow_EURUSD+MathPow(CloseEURUSD,2);//Xi2
               if(GBPUSD_v_EURUSD)summaPow_GBPUSD=summaPow_GBPUSD+MathPow(CloseGBPUSD,2);//Yi2
               if(AUDUSD_v_EURUSD)summaPow_AUDUSD=summaPow_AUDUSD+MathPow(CloseAUDUSD,2);//Yi2
               if(USDCHF_v_EURUSD)summaPow_USDCHF=summaPow_USDCHF+MathPow(CloseUSDCHF,2);//Yi2
               if(USDJPY_v_EURUSD)summaPow_USDJPY=summaPow_USDJPY+MathPow(CloseUSDJPY,2);//Yi2
               if(USDCAD_v_EURUSD)summaPow_USDCAD=summaPow_USDCAD+MathPow(CloseUSDCAD,2);//Yi2
     
               if(GBPUSD_v_EURUSD)summa_eur_gbp=summa_eur_gbp+(CloseEURUSD*CloseGBPUSD);//XiYi
               if(AUDUSD_v_EURUSD)summa_eur_aud=summa_eur_aud+(CloseEURUSD*CloseAUDUSD);//XiYi
               if(USDCHF_v_EURUSD)summa_eur_chf=summa_eur_chf+(CloseEURUSD*CloseUSDCHF);//XiYi
               if(USDJPY_v_EURUSD)summa_eur_jpy=summa_eur_jpy+(CloseEURUSD*CloseUSDJPY);//XiYi
               if(USDCAD_v_EURUSD)summa_eur_cad=summa_eur_cad+(CloseEURUSD*CloseUSDCAD);//XiYi
            }
         sredneeEURUSD=summaEURUSD/Per;//X
         if(GBPUSD_v_EURUSD)sredneeGBPUSD=summaGBPUSD/Per;//Y
         if(AUDUSD_v_EURUSD)sredneeAUDUSD=summaAUDUSD/Per;//Y
         if(USDCHF_v_EURUSD)sredneeUSDCHF=summaUSDCHF/Per;//Y
         if(USDJPY_v_EURUSD)sredneeUSDJPY=summaUSDJPY/Per;//Y 
         if(USDCAD_v_EURUSD)sredneeUSDCAD=summaUSDCAD/Per;//Y

         Q_eur_usd=MathSqrt(summaPow_EURUSD/Per-MathPow(sredneeEURUSD,2));//Qx
         if(GBPUSD_v_EURUSD)Q_gbp_usd=MathSqrt(summaPow_GBPUSD/Per-MathPow(sredneeGBPUSD,2));//Qy
         if(AUDUSD_v_EURUSD)Q_aud_usd=MathSqrt(summaPow_AUDUSD/Per-MathPow(sredneeAUDUSD,2));//Qy
         if(USDCHF_v_EURUSD)Q_usd_chf=MathSqrt(summaPow_USDCHF/Per-MathPow(sredneeUSDCHF,2));//Qy
         if(USDJPY_v_EURUSD)Q_usd_jpy=MathSqrt(summaPow_USDJPY/Per-MathPow(sredneeUSDJPY,2));//Qy
         if(USDCAD_v_EURUSD)Q_usd_cad=MathSqrt(summaPow_USDCAD/Per-MathPow(sredneeUSDCAD,2));//Qy

         if(GBPUSD_v_EURUSD)if(Q_eur_usd*Q_gbp_usd!=0)Correl_eur_gbp=NormalizeDouble((summa_eur_gbp/Per-sredneeEURUSD*sredneeGBPUSD)/(Q_eur_usd*Q_gbp_usd),2);
         if(AUDUSD_v_EURUSD)if(Q_eur_usd*Q_aud_usd!=0)Correl_eur_aud=NormalizeDouble((summa_eur_aud/Per-sredneeEURUSD*sredneeAUDUSD)/(Q_eur_usd*Q_aud_usd),2);
         if(USDCHF_v_EURUSD)if(Q_eur_usd*Q_usd_chf!=0)Correl_eur_chf=NormalizeDouble((summa_eur_chf/Per-sredneeEURUSD*sredneeUSDCHF)/(Q_eur_usd*Q_usd_chf),2);
         if(USDJPY_v_EURUSD)if(Q_eur_usd*Q_usd_jpy!=0)Correl_eur_jpy=NormalizeDouble((summa_eur_jpy/Per-sredneeEURUSD*sredneeUSDJPY)/(Q_eur_usd*Q_usd_jpy),2);
         if(USDCAD_v_EURUSD)if(Q_eur_usd*Q_usd_cad!=0)Correl_eur_cad=NormalizeDouble((summa_eur_cad/Per-sredneeEURUSD*sredneeUSDCAD)/(Q_eur_usd*Q_usd_cad),2);

         if(GBPUSD_v_EURUSD)ExtMapBuffer1[j]=Correl_eur_gbp;
         if(AUDUSD_v_EURUSD)ExtMapBuffer2[j]=Correl_eur_aud;         
         if(USDCHF_v_EURUSD)ExtMapBuffer3[j]=Correl_eur_chf;         
         if(USDJPY_v_EURUSD)ExtMapBuffer4[j]=Correl_eur_jpy;         
         if(USDCAD_v_EURUSD)ExtMapBuffer5[j]=Correl_eur_cad;      
         
      } 
      if(ShowComment){ 
        string cs="\nEURUSD = 1";
        cs=cs+"\n----------------------------------------------------------------------------------";
        if(GBPUSD_v_EURUSD)cs=cs+"\nКорреляция GBPUSD относительно EURUSD = "+DoubleToStr(Correl_eur_gbp,2);
        if(AUDUSD_v_EURUSD)cs=cs+"\nКорреляция AUDUSD относительно EURUSD = "+DoubleToStr(Correl_eur_aud,2);
        if(USDCHF_v_EURUSD)cs=cs+"\nКорреляция USDCHF относительно EURUSD = "+DoubleToStr(Correl_eur_chf,2);
        if(USDJPY_v_EURUSD)cs=cs+"\nКорреляция USDJPY относительно EURUSD = "+DoubleToStr(Correl_eur_jpy,2);
        if(USDCAD_v_EURUSD)cs=cs+"\nКорреляция USDCAD относительно EURUSD = "+DoubleToStr(Correl_eur_cad,2);
        Comment(cs);
     }
}
 
k005:

朋友们,你们能不能帮我优化一下这个指标,它在PC上很好,但在我的旧笔记本上却很滞后。

PS.在图表上不需要它,它是由专家顾问调用的。

预先感谢

我没有什么要优化的,只是有很多的计算。如果你把它放在图表上--删除它,猫头鹰就会从文件夹中拿走它,如果它不在图表上,那么就没有其他事情可做。
[删除]  

我有一个专家顾问,在不同的货币对上进行平行交易,而且货币对越多越好。对于每一个货币对,都有一个单独的图表,并且有一个EA附加在上面。但我已经达到了一定的限度,我现在有35个运行的图表,如果我启动更多的图表,我的内存就会出现问题--终端需要1.1g的管理器内存。问题是:这是Windows中程序的限制还是硬件的限制,也就是说,如果我在电脑中再放2GB的操作空间,问题就会消失,或者Windows无论如何不会让更多的操作空间给终端?



终端的CPU负载平均为25%,但这似乎与它没有关系。

 
pycha:

我有一个专家顾问,在不同的货币对上进行平行交易,而且货币对越多越好。对于每一个货币对,都有一个单独的图表,并且有一个EA附加在上面。但我已经达到了一定的限度,我现在有35个运行的图表,如果我启动更多的图表,我的内存就会出现问题--终端需要1.1g的管理器内存。问题是:这是Windows中程序的限制还是硬件的限制,也就是说,如果我在电脑中再放2GB的操作空间,问题就会消失,或者Windows无论如何不会让更多的操作空间给终端?



终端的CPU负载平均为25%,但它不应该与之有任何关系。


这有点太少了,因为Windows本身需要大约一千兆(XP),而不是让系统滞后。 另外,每一个打开的图表/终端 都需要额外的内存,另外不要忘记缓冲,它也会使用内存资源。

它可以工作,然后缓冲区被一些数据填满,由于内存不足,交易所开始滞后,并停止专家顾问。

如果硬件允许,你可以通过增加内存来解决这个问题。

P.S. 如今,即使是2GB的浏览器也很难使用(紧张地)。