Почему тормозит МТ4? - страница 2

 
А какова глубина истории в барах в первом и втором случаях? Это можно выяснить через History Center (F2).
 
Текст Кода :


//+------------------------------------------------------------------+//+------------------------------------------------------------------+
//| |
//| DigMA.mq4 |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006 Харитонов А.В."
#property link "HaritonovAB@rumbler.ru"

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Blue
#property indicator_color4 Blue
#property indicator_color5 Chocolate
#property indicator_color6 Black
#property indicator_color7 Red
#property indicator_color8 Green

double MA3Speed[];
double MA2Rel[];
double MA1Rel[];

#include <3MAandBB.mq4>
extern double BBmin=8; //Минимальная допустимая граница отклонений MA1-MA2 и FD
extern double AddOut=0;
extern double MALine=5;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{

//---- indicators

if(IsDllsAllowed()!=false)
{
//---- indicator line

FS1=MA_FilterSize(MA1_period,FB1);
FS2=MA_FilterSize(MA2_period,FB2);
FS3=MA_FilterSize(MA3_period,FB3);
FS4=MA_FilterSize(Band_period,FB4);
FS5=MA_FilterSize(MA3S_period,FB5);

IndicatorBuffers(8);
SetIndexStyle(0,DRAW_LINE,EMPTY,2,Red);
SetIndexBuffer(0,MA1);
SetIndexStyle(1,DRAW_LINE,EMPTY,2,Blue);
SetIndexBuffer(1,MA2);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,UMA2);
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,LMA2);
SetIndexStyle(4,DRAW_LINE,EMPTY,2,Chocolate);
SetIndexBuffer(4,MA3);
SetIndexStyle(5,DRAW_NONE);
SetIndexBuffer(5,MA3Speed);
SetIndexStyle(6,DRAW_NONE);
SetIndexBuffer(6,MA1Rel);
SetIndexStyle(7,DRAW_NONE);
SetIndexBuffer(7,MA2Rel);

SetIndexDrawBegin(0,FS1+1);
SetIndexDrawBegin(1,FS2+1);
SetIndexDrawBegin(2,FS2+1);
SetIndexDrawBegin(3,FS2+1);
SetIndexDrawBegin(4,FS3+1);
SetIndexDrawBegin(5,FS3+1);
SetIndexDrawBegin(6,FS3+1);
SetIndexDrawBegin(7,FS3+1);

}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectsDeleteAll(0, OBJ_ARROW);

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i, j,k,rB=0,rSl=0,rSt=0,counted_bars=IndicatorCounted();
int isSell=0, isBuy=0, StopBuy=1,StopSell=1;
int isMA1Relmax=0,isMA1Relmin=0;
int isMA2Relmax=0,isMA2Relmin=0;
int isMA3Speedmax=0,isMA3Speedmin=0;
int isFDmax=0,isFDmin=0;
int isBBUpCross=0,isBBDnCross=0;
string ArrowName;
double haOpen, haHigh, haLow, haClose;
if(IsDllsAllowed()!=false)
{
if (FS1>0&&FS2>0&&FS3>0) {

//----
if(Bars<=2*MathMax(FS1,MathMax(FS2,FS3))) return(0);
//---- initial zero
if(counted_bars<2*MathMax(FS1,MathMax(FS2,FS3)))
for(i=1;i<=0;i++) {MA1[Bars-i]=0.0;MA2[Bars-i]=0.0;MA3[Bars-i]=0. 0;}
//----
i=Bars-2*MathMax(FS1,MathMax(FS2,FS3))-1;
if(counted_bars>=2*MathMax(FS1,MathMax(FS2,FS3))) i=Bars-counted_bars-1;
//ObjectsDeleteAll(0, OBJ_ARROW);
haClose=Close[i];haOpen=Open[i];
while(i>=0)
{
MA1[i]=FMA1(i);
MA2[i]=FMA2(i);
MA3[i]=FMA3(i);
UMA2[i]=MA2[i]+FD(i);
LMA2[i]=MA2[i]-FD(i);
MA3Speed[i]=NormalizeDouble(FMA3Speed(i)*20/Point,1) ;
MA1Rel[i]=NormalizeDouble((MA1[i]-MA3[i])/Point,1);
MA2Rel[i]=NormalizeDouble((MA2[i]-MA3[i])/Point,1);
haOpen=(haOpen+haClose)/2;
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haHigh=MathMax(High[i], MathMax(haOpen, haClose));
haLow=MathMin(Low[i], MathMin(haOpen, haClose));

//----------------------- Флажки --------------------------------+
/*
if(!isMA1Relmax&&MA1Relmax(i)){isMA1Relmax=1;isMA1Relmin=0;}
if(!isMA1Relmin&&MA1Relmin(i)){isMA1Relmax=0;isMA1Relmin=1;}

if(!isMA3Speedmax&&MA3Speedmax(i)){isMA3Speedmax=1;isMA3Speedmin=0;}
if(!isMA3Speedmin&&MA3Speedmin(i)){isMA3Speedmax=0;isMA3Speedmin=1;}

if(!isFDmax&&FDmax(i)){isFDmax=1;isFDmin=0;}
if(!isFDmin&&FDmin(i)){isFDmax=0;isFDmin=1;}

if(BBUpCross(i)){isBBUpCross=1;isBBDnCross=0;}
if(BBDnCross(i)){isBBUpCross=0;isBBDnCross=1;}
*/
//------------------// if(!isSell)-----Блок Анализа ---------------------------+
/*
if(BBok(i)&&MathAbs(MA2Rel[i])>MALine){ // Проверка на допустимость ширины ВВ
//-------------------------------------------------------------------------------
// if(MA3Up){ // Проверка основного направления движения (тренда)
// if(!MA1Up){ // Проверка текущего движения Chart'a
// if(MA1Rel

if(StopSell&&StopBuy)
if(RelMax(i))

{
rSl++;ArrowName="isSell"+rSl;
ObjectCreate(ArrowName,OBJ_ARROW,0,Time[i],High[i]+10*Point);
ObjectSet(ArrowName,OBJPROP_COLOR,Green);
ObjectSet(ArrowName,OBJPROP_ARROWCODE,242); isSell=1;StopSell=0;
}

if(isSell)
if(RelMin(i))
{
rSt++; ArrowName="StopSell"+rSt;
ObjectCreate(ArrowName,OBJ_ARROW,0,Time[i],Low[i]-10*Point);
ObjectSet(ArrowName,OBJPROP_COLOR,Green);
ObjectSet(ArrowName,OBJPROP_ARROWCODE,251);isSell=0;StopSell=1;
}
}
*/

i--;
}

} else Print("Incorrect input parameters. Indicator cannot run.");
} else Print("Library call is not allowed. Indicator cannot run.");

//----
return(0);
}
 
Renat:
А какова глубина истории в барах в первом и втором случаях? Это можно выяснить через History Center (F2).
В первом случае 70 тысяч во втором 33 тыс с копейками.
 
Renat:
Mak:
У меня часто терминал виснет, и после принудительного снятия долго висит в тасках (обычно пока руками не сниму).
Иногда виснет наглухо, иногда интерфейс работает (реагирует на мои действия), но котировки стоят.

Возникает это иногда (не всегда) при запуске второй/третьей копии терминала на разных счетах.
В каждом терминале открыто 20-30 чартов и на них по одному эксперту, индикаторов нет.
В экспертах никаких расчетов нет, есть только простой цикл по ордерам на каждом тике и вызов на новом баре iATR и iWPR.
А какая конфигурация компьютера?
Интересует общий объем памяти и сколько свободной памяти остается после запуска всех терминалов?

Если памяти не хватает, то могут быть проблемы.
Памяти 350 мег (сборная солянка из разных модулей, комп старенький).
Терминалы занимают памяти немного, примерно 6-15 мег оперативки, пик 15-30 мег, ВМ столько же.
Свопинг тоже по минимуму работает на компе, проц не загружен.
Общий объем занятой сейчас памяти 420Мб, т.е. своп небольшой.
Операционка XP Pro SP2 со всеми апдейтами.
Канал ADSL на 8Мбит.

Глубина истории небольшая - 3 - 10 тыс. баров
Кстати, большую часть процессорного времени съедает графический интерфейс.
Если запускать терминал как сервис, то процессорного времени съедается в разы меньше.

Мне кажется что тут дело не в ресурсах самого компа, а может быть в связи, или сервер как то блокирует работу из-за большого числа конектов или открытых ордеров (их бывает несколько десятков на одном терминале). Эксперты много запросов на сервер не делают, изредка открытие ордера, изредка на новом часовом баре или при открытии/закрытии позиции модификация тейк-профитов. Между соседними ордерами делается таймаут в несколько секунд.
 
Кстати именно так - без коннекта с сервером никаких проблем на любой истории. Особенно неприятно зависание при повторном коннекте после разрыва связи с сервером!
 
//+------------------------------------------------------------------+//+------------------------------------------------------------------+ //| | //| DigMA.mq4 | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006 Харитонов А.В." #property link "HaritonovAB@rumbler.ru" #property indicator_chart_window #property indicator_buffers 8 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 Blue #property indicator_color4 Blue #property indicator_color5 Chocolate #property indicator_color6 Black #property indicator_color7 Red #property indicator_color8 Green double MA3Speed[]; double MA2Rel[]; double MA1Rel[]; #include <3MAandBB.mq4> extern double BBmin=8; //Минимальная допустимая граница отклонений MA1-MA2 и FD extern double AddOut=0; extern double MALine=5; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators if(IsDllsAllowed()!=false) { //---- indicator line FS1=MA_FilterSize(MA1_period,FB1); FS2=MA_FilterSize(MA2_period,FB2); FS3=MA_FilterSize(MA3_period,FB3); FS4=MA_FilterSize(Band_period,FB4); FS5=MA_FilterSize(MA3S_period,FB5); IndicatorBuffers(8); SetIndexStyle(0,DRAW_LINE,EMPTY,2,Red); SetIndexBuffer(0,MA1); SetIndexStyle(1,DRAW_LINE,EMPTY,2,Blue); SetIndexBuffer(1,MA2); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,UMA2); SetIndexStyle(3,DRAW_LINE); SetIndexBuffer(3,LMA2); SetIndexStyle(4,DRAW_LINE,EMPTY,2,Chocolate); SetIndexBuffer(4,MA3); SetIndexStyle(5,DRAW_NONE); SetIndexBuffer(5,MA3Speed); SetIndexStyle(6,DRAW_NONE); SetIndexBuffer(6,MA1Rel); SetIndexStyle(7,DRAW_NONE); SetIndexBuffer(7,MA2Rel); SetIndexDrawBegin(0,FS1+1); SetIndexDrawBegin(1,FS2+1); SetIndexDrawBegin(2,FS2+1); SetIndexDrawBegin(3,FS2+1); SetIndexDrawBegin(4,FS3+1); SetIndexDrawBegin(5,FS3+1); SetIndexDrawBegin(6,FS3+1); SetIndexDrawBegin(7,FS3+1); } //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ObjectsDeleteAll(0, OBJ_ARROW); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i, j,k,rB=0,rSl=0,rSt=0,counted_bars=IndicatorCounted(); int isSell=0, isBuy=0, StopBuy=1,StopSell=1; int isMA1Relmax=0,isMA1Relmin=0; int isMA2Relmax=0,isMA2Relmin=0; int isMA3Speedmax=0,isMA3Speedmin=0; int isFDmax=0,isFDmin=0; int isBBUpCross=0,isBBDnCross=0; string ArrowName; double haOpen, haHigh, haLow, haClose; if(IsDllsAllowed()!=false) { if (FS1>0&&FS2>0&&FS3>0) { //---- if(Bars<=2*MathMax(FS1,MathMax(FS2,FS3))) return(0); //---- initial zero if(counted_bars<2*MathMax(FS1,MathMax(FS2,FS3))) for(i=1;i<=0;i++) {MA1[Bars-i]=0.0;MA2[Bars-i]=0.0;MA3[Bars-i]=0.0;} //---- i=Bars-2*MathMax(FS1,MathMax(FS2,FS3))-1; if(counted_bars>=2*MathMax(FS1,MathMax(FS2,FS3))) i=Bars-counted_bars-1; //ObjectsDeleteAll(0, OBJ_ARROW); haClose=Close[i];haOpen=Open[i]; while(i>=0) { MA1[i]=FMA1(i); MA2[i]=FMA2(i); MA3[i]=FMA3(i); UMA2[i]=MA2[i]+FD(i); LMA2[i]=MA2[i]-FD(i); MA3Speed[i]=NormalizeDouble(FMA3Speed(i)*20/Point,1) ; MA1Rel[i]=NormalizeDouble((MA1[i]-MA3[i])/Point,1); MA2Rel[i]=NormalizeDouble((MA2[i]-MA3[i])/Point,1); haOpen=(haOpen+haClose)/2; haClose=(Open[i]+High[i]+Low[i]+Close[i])/4; haHigh=MathMax(High[i], MathMax(haOpen, haClose)); haLow=MathMin(Low[i], MathMin(haOpen, haClose)); //----------------------- Флажки --------------------------------+ /* if(!isMA1Relmax&&MA1Relmax(i)){isMA1Relmax=1;isMA1Relmin=0;} if(!isMA1Relmin&&MA1Relmin(i)){isMA1Relmax=0;isMA1Relmin=1;} if(!isMA3Speedmax&&MA3Speedmax(i)){isMA3Speedmax=1;isMA3Speedmin=0;} if(!isMA3Speedmin&&MA3Speedmin(i)){isMA3Speedmax=0;isMA3Speedmin=1;} if(!isFDmax&&FDmax(i)){isFDmax=1;isFDmin=0;} if(!isFDmin&&FDmin(i)){isFDmax=0;isFDmin=1;} if(BBUpCross(i)){isBBUpCross=1;isBBDnCross=0;} if(BBDnCross(i)){isBBUpCross=0;isBBDnCross=1;} */ //------------------// if(!isSell)-----Блок Анализа ---------------------------+ /* if(BBok(i)&&MathAbs(MA2Rel[i])>MALine){ // Проверка на допустимость ширины ВВ //------------------------------------------------------------------------------- // if(MA3Up){ // Проверка основного направления движения (тренда) // if(!MA1Up){ // Проверка текущего движения Chart'a // if(MA1Rel if(StopSell&&StopBuy) if(RelMax(i)) { rSl++;ArrowName="isSell"+rSl; ObjectCreate(ArrowName,OBJ_ARROW,0,Time[i],High[i]+10*Point); ObjectSet(ArrowName,OBJPROP_COLOR,Green); ObjectSet(ArrowName,OBJPROP_ARROWCODE,242); isSell=1;StopSell=0; } if(isSell) if(RelMin(i)) { rSt++; ArrowName="StopSell"+rSt; ObjectCreate(ArrowName,OBJ_ARROW,0,Time[i],Low[i]-10*Point); ObjectSet(ArrowName,OBJPROP_COLOR,Green); ObjectSet(ArrowName,OBJPROP_ARROWCODE,251);isSell=0;StopSell=1; } } */ i--; } } else Print("Incorrect input parameters. Indicator cannot run."); } else Print("Library call is not allowed. Indicator cannot run."); //---- return(0); }
 
Можно было и не выкладывать, хрень какя-то а не код.
Лучше ничего не выкладывать, чем обрезки.
Это вообще непонятно что такое:
FS1=MA_FilterSize(MA1_period,FB1); FS2=MA_FilterSize(MA2_period,FB2); FS3=MA_FilterSize(MA3_period,FB3); FS4=MA_FilterSize(Band_period,FB4); FS5=MA_FilterSize(MA3S_period,FB5);

что оно делает в init() и че за функция _FilterSize() ?

Какие то кучи массивов ... Нафих...
 
Смотри "Генератор цифровых методов"
Связь с автором программного пакета
Сергей Ильюхин aka UA9OTY
Email sergey@tibet.ru, ua9oty@qrz.ru
ICQ 7426815
Распространяется бесплатно в соответствии с принципами "AS-IS".
Причина обращения: