например вот эти индикаторы вешают терминал напрочь, хотя вроде рабочие :-\
#property copyright "ANG3110@latchess.com" //----------------at_DItpm3------------------------- #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 SkyBlue #property indicator_color2 Silver //---------------------------------- extern double hr=4; extern int s=10; extern int Days=11; //---------------------------------- double ci[],bi[],at[],a0[]; int pt,cb; //================================================ int init(){ IndicatorBuffers(4); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,at); SetIndexBuffer(1,a0); SetIndexBuffer(2,ci); SetIndexBuffer(3,bi); pt=hr*60/Period(); cb=MathFloor(Days*1440/Period()/pt)*pt; return(0);} //================================================ int start() { int cbi,aa,bb,cc; //---------------------------- cbi=Bars-IndicatorCounted()-2; if (cbi>=0) { //------------------------ for (int m=0; m<=s; m++) { for (int i=0; i<=cb; i=i+pt) { if (m==0) { ci[i+pt]=(Close[i]+Close[i+pt]+Close[i+2*pt])/3; ci[0]=Close[0]; ci[cb+2*pt]=Close[cb+2*pt]; } if (m>0 && m<s) { bi[i+pt]=(ci[i]+ci[i+pt]+ci[i+2*pt])/3; bi[0]=(ci[0]+ci[pt])/2; bi[cb+2*pt]=ci[cb+2*pt]; if (i==cb) ArrayCopy(ci,bi,0,0,cb+2*pt);} if (m==s) { aa=i; bb=i+pt; cc=i+2*pt; for (int n=i; n<=cc; n++) { ci[n]=ci[aa]*((n-bb)*(n-cc))/((aa-bb)*(aa-cc)) +ci[bb]*((n-aa)*(n-cc))/((bb-aa)*(bb-cc)) +ci[cc]*((n-aa)*(n-bb))/((cc-aa)*(cc-bb));} }}} for (i=cb; i>=0; i--) { at[i]=ci[i]-ci[i+pt]; a0[i]=0.00000001;} } //----------------------- return(0); } //+------------------------------------------------------------------+
и второй
#property copyright "ANG3110@latchess.com" //----------------at_Itpm3------------------------- #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Aqua //---------------------------------- extern double hours=2; extern int s=10; extern int Days=11; //---------------------------------- double ci[],bi[]; int pt,cb,bar; //================================================ int init(){ IndicatorBuffers(2); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ci); SetIndexBuffer(1,bi); pt=hours*60/Period(); cb=MathFloor(Days*1440/Period()/pt)*pt; return(0);} //================================================ int start() { int cbi,aa,bb,cc; //---------------------------- cbi=Bars-IndicatorCounted()-2; if (cbi>=0) { //------------------------ for (int m=0; m<=s; m++) { for (int i=0; i<=cb; i=i+pt) { if (m==0) { ci[i+pt]=(Close[i]+Close[i+pt]+Close[i+2*pt])/3; ci[0]=Close[0]; ci[cb+2*pt]=Close[cb+2*pt]; } if (m>0 && m<s) { bi[i+pt]=(ci[i]+ci[i+pt]+ci[i+2*pt])/3; bi[0]=(ci[0]+ci[pt])/2; bi[cb+2*pt]=ci[cb+2*pt]; if (i==cb) ArrayCopy(ci,bi,0,0,cb+2*pt);} if (m==s) { aa=i; bb=i+pt; cc=i+2*pt; for (int n=i; n<=cc; n++) { ci[n]=ci[aa]*((n-bb)*(n-cc))/((aa-bb)*(aa-cc)) +ci[bb]*((n-aa)*(n-cc))/((bb-aa)*(bb-cc)) +ci[cc]*((n-aa)*(n-bb))/((cc-aa)*(cc-bb));} }}} } //----------------------- return(0);} //+------------------------------------------------------------------+
А Вы не задумываетесь над стоимостью тройного вложенного цикла, да еще и с массовым копированием массивов внутри?
Всегда есть возможность реализовать алгоритм в 10-100-1000 раз быстрее. Особенно в данном случае. При подходе "массовые расчеты проводим в лоб" никакого процессора не хватит.
Общий совет: проведите алгоритмическую оптимизацию и получите огромный выигрыш в скорости. Этот совет не означает автоматического вопроса "покажите как".
Всегда есть возможность реализовать алгоритм в 10-100-1000 раз быстрее. Особенно в данном случае. При подходе "массовые расчеты проводим в лоб" никакого процессора не хватит.
Общий совет: проведите алгоритмическую оптимизацию и получите огромный выигрыш в скорости. Этот совет не означает автоматического вопроса "покажите как".
А Вы не задумываетесь над стоимостью тройного вложенного цикла, да еще и с массовым копированием массивов внутри?
Всегда есть возможность реализовать алгоритм в 10-100-1000 раз быстрее. Особенно в данном случае. При подходе "массовые расчеты проводим в лоб" никакого процессора не хватит.
Общий совет: проведите алгоритмическую оптимизацию и получите огромный выигрыш в скорости. Этот совет не означает автоматического вопроса "покажите как".
Всегда есть возможность реализовать алгоритм в 10-100-1000 раз быстрее. Особенно в данном случае. При подходе "массовые расчеты проводим в лоб" никакого процессора не хватит.
Общий совет: проведите алгоритмическую оптимизацию и получите огромный выигрыш в скорости. Этот совет не означает автоматического вопроса "покажите как".
Ренат индюки компилируются, и вцелом нормально отображаются на графике, я их не писал я ими пользуюсь, проблема мне кажется в том что терминал тупо виснет когда пересчитывает индикаторы или запускается, вы же специалисты высокого уровня, вы же понимаете что я пытаюсь вам предложить, организовать такие расчеты в фоновом режиме, чтобы терминал не зависал.
у меня открыто более 30 графиков, на каждом с общего шаблона по 9 польз. индикаторов при запуске МТ4 с этим хозяйством зависает на 1-2мин. а при смене ТФ на одном из графиков на 20-30 сек. иногда такие зависания приводят к тому что терминал так и не заканчивает свои расчеты и виснет окончательно. приходится завершать процесс принудительно, ну разве сложно сделать чтобы он не вис а постепенно выводил индикаторы на графики по мере расчета чтобы окно терминала можно было в это время или свернуть или закрыть а то умирает просто и все.
у меня тоже терминал виснет при запуске, и я тоже подумал уже о предложении ShadowTrader
Тогда надо задать вопрос автору кода. А так как не Вы его автор, то я выскажу свое мнение более конкретно - это очень и очень плохой код, который нужно полностью переписать.
Терминал тут не виноват. Такой код кого угодно убъет.
Терминал тут не виноват. Такой код кого угодно убъет.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
раздражает в основном что терминал умирает во время пересчета индикаторов вместо того чтобы делать это в фоновом режиме, а если еще и загрузить индикаторы расчет которых займет несколько минут, то МТ4 вообще может повесить всю систему (на WinXP у меня такое случалось.) мне кажется это очень неудобно гораздо лучше было-бы сделать пересчет большого числа индикаторов в фоновом режиме чтобы при этом не умирал терминал, а если расчет загруженного на график индикатора может занять оч. много времени пользователю выводилось бы сообщение что мол расчет индикатора может занять от года до двух и мол ждать бесполезно, и т.п. очень неприятно постоянно мочить процесс "teminal.exe" в диспетчере задач после нескольких минут ожидания пока МТ4 вернется к жизни, а вдруг такие манипуляции приведут к потере сохраненных ранее данных. :((