У Вас внешний цикл прописан так, что на каждом баре 550 итераций проходит, плюс еще внутренний цикл. Лучше использовать функции нового образца OnCalculate(). Я таким шаблоном пользуюсь при написании:
#property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 clrBlue // на покупку #property indicator_color2 clrRed // на продажу input int history = 1000; double arrowUp[]; double arrowDn[]; //+-------------------------------------------------------------------------------------------------------------------+ //| | //+-------------------------------------------------------------------------------------------------------------------+ void OnInit() { SetIndexBuffer(0, arrowUp); SetIndexBuffer(1, arrowDn); SetIndexStyle(0, DRAW_ARROW); SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(0, 233); // Назначение значка "стрелка вверх" SetIndexArrow(1, 234); // Назначение значка "стрелка вниз" SetIndexLabel(0,"arUp"); SetIndexLabel(1,"arDn"); } //+-------------------------------------------------------------------------------------------------------------------+ //| | //+-------------------------------------------------------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+-------------------------------------------------------------------------------------------------------------------+ //| | //+-------------------------------------------------------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int needForCount = rates_total - prev_calculated; // как правило, выдает 0-й или 1-й индекс свечи для расчета if(prev_calculated == 0 ) // кол-во баров при первом подсчете { needForCount = rates_total - 1; if(needForCount > history) needForCount = history-1; } for(int i = needForCount; i >= 0; --i) { function1(i); function2(i); } return(rates_total); } //+------------------------------------------------------------------------------------------------------------------+ //| //+------------------------------------------------------------------------------------------------------------------+ void function1(const int i) { } //+------------------------------------------------------------------------------------------------------------------+ //| //+------------------------------------------------------------------------------------------------------------------+ void function2(const int i) { }
Файлы:
i-template.mq4
4 kb
я в этом ничего не смыслю, я правильно понимаю,мне нухно куда-то скопировать эту часть которую вы написали???
нашел еще такую модификацию на выходных еще не пробовал во время торгов
нашел еще такую модификацию на выходных еще не пробовал во время торгов
int start()
{
//***** Modified by Kelvinhand ***********************
int counted_bars = IndicatorCounted();
//---- check for possible errors
if (counted_bars<0) return(-1);
//---- last counted bar will be recounted
if (counted_bars>0) counted_bars--;
//***** Modified by Kelvinhand ***********************
int counted_bars = IndicatorCounted();
//---- check for possible errors
if (counted_bars<0) return(-1);
//---- last counted bar will be recounted
if (counted_bars>0) counted_bars--;
int i,j;
double lengthvar;
double sum ;
int limit = Bars - counted_bars - Rperiod;
double lengthvar;
double sum ;
int limit = Bars - counted_bars - Rperiod;
for(i = limit; i >= 0; i--) // MAIN For Loop
{
sum = 0;
for(j = Rperiod; j >= 1 ; j--) //LSMA loop
{
lengthvar = (Rperiod + 1)/3.0; //lengthvar = 21
sum+= ( j - lengthvar)*Close[Rperiod-j+i]; //tmp = 20 - 7 * close[20-j+i]
}
wt[i] = sum*6/(Rperiod*(Rperiod+1));
lsma_ma[i] = wt[i+1] + (wt[i]-wt[i+1])* 2/(LSMA_Period+1);
ExtMapBuffer1[i] = wt[i];
ExtMapBuffer2[i] = lsma_ma[i];
ExtMapBuffer3[i] = wt[i];
ExtMapBuffer4[i] = lsma_ma[i];
if (wt[i] < lsma_ma[i])
{
ExtMapBuffer4[i] = EMPTY_VALUE;
ExtMapBuffer3[i] = EMPTY_VALUE;
}
}
}
//+------------------------------------------------------------------+
{
sum = 0;
for(j = Rperiod; j >= 1 ; j--) //LSMA loop
{
lengthvar = (Rperiod + 1)/3.0; //lengthvar = 21
sum+= ( j - lengthvar)*Close[Rperiod-j+i]; //tmp = 20 - 7 * close[20-j+i]
}
wt[i] = sum*6/(Rperiod*(Rperiod+1));
lsma_ma[i] = wt[i+1] + (wt[i]-wt[i+1])* 2/(LSMA_Period+1);
ExtMapBuffer1[i] = wt[i];
ExtMapBuffer2[i] = lsma_ma[i];
ExtMapBuffer3[i] = wt[i];
ExtMapBuffer4[i] = lsma_ma[i];
if (wt[i] < lsma_ma[i])
{
ExtMapBuffer4[i] = EMPTY_VALUE;
ExtMapBuffer3[i] = EMPTY_VALUE;
}
}
}
//+------------------------------------------------------------------+
Код из Вашего цикла
for(i = limit; i >= 0; i--) // MAIN For Loop
можно переместить в цикл
for(int i = needForCount; i >= 0; --i)
Ну глобальные переменные в соответствие привести
3аработало не тормо3ит,только при 3агру3ке шаблона терминал подвисает надолго,дахе страшно,что не включится,,,но потом нормально, такой дефект устранить реально??и не скахете куда прописать кол-во баров отобрахаемых??
Ваш,вариант, не сработал вообще индикатор пропал!
Ваш,вариант, не сработал вообще индикатор пропал!
GOLDNG:
Ваш,вариант, не сработал вообще индикатор пропал!
Что-то неправильно сделали. Посмотрите вложение, я не анализировал работу Вашего кода с циклами, просто вставил его как и предлагал вначале во внешний цикл своего шаблонаВаш,вариант, не сработал вообще индикатор пропал!
for(int i = needForCount; i >= 0; --i)
Файлы:
triggerline3.mq4
4 kb
получилось! я в свой индикатор вставил Ваши настройки, стал быстро 3агрухаться и не тормо3ит больше!!! СПАСИБО БОЛЬШОЕ!!!
Кста, а не подскахешь как в терминал вывести кнопки с нестандартным таймфреймом?
GOLDNG:
Кста, а не подскахешь как в терминал вывести кнопки с нестандартным таймфреймом?
Используйте МТ5, там больше таймфреймов. В МТ4 к кнопкам нужно будет еще и графики с нестандартным ТФ прописывать.
Кста, а не подскахешь как в терминал вывести кнопки с нестандартным таймфреймом?
а,как,для,мт5,переделать,этот,индикатор??
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
//+------------------------------------------------------------------+
//| Trigger Line |
//| Copyright © 2005 dwt5 and adoleh2000 |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005 dwt5 and adoleh2000 "
#property link "http://www.metaquotes.net/"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Green
#property indicator_color4 Green
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
extern int LSMA_Period = 5;
extern int Div = 3;
extern int Bar = 100;
int Draw4HowLong;
int shift;
int i;
int j;
int loopbegin;
int length;
int lsma_length;
double tmp ;
double tmp2 ;
double wt[];
double sum[];
double lsma_sum[];
double lsma_ma[];
double middle[];
int c;
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 7 additional buffers are used for counting.
IndicatorBuffers(7);
//---- drawing settings
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(1,DRAW_NONE);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexStyle(3,DRAW_NONE);
SetIndexBuffer(4,sum);
SetIndexBuffer(5,wt);
SetIndexBuffer(6,lsma_ma);
//---- initialization done
return(0);
}
int start()
length = Rperiod; //length now = 20
lsma_length = LSMA_Period;
loopbegin = Draw4HowLong - length - 1;
for(shift = loopbegin = 550 ; shift >=0; shift--) // MAIN For Loop
{
sum[1] = 0;
for(i = length; i >= 1 ; i--) //LSMA loop
{
lengthvar = length + 1; //lengthvar = 21
lengthvar /= Div; //lengthvar = 7
tmp = 0;
tmp = ( i - lengthvar)*Close[length-i+shift]; //tmp = 20 - 7 * close[20-i+shift]
sum[1]+=tmp;
}
wt[shift] = sum[1]*6/(length*(length+1));
j = shift;
lsma_ma[shift] = wt[j+1] + (wt[j]-wt[j+1])* 2/(lsma_length+1);
//========== COLOR CODING ===========================================
ExtMapBuffer1[shift] = (wt[shift]+lsma_ma[shift])/2;
ExtMapBuffer2[shift] = lsma_ma[shift];
ExtMapBuffer3[shift] = (wt[shift]+lsma_ma[shift])/2;
ExtMapBuffer4[shift] = lsma_ma[shift];
if (wt[shift] < lsma_ma[shift])
{
ExtMapBuffer4[shift] = EMPTY_VALUE;
ExtMapBuffer3[shift] = EMPTY_VALUE;
}
}
}
//+------------------------------------------------------------------+------+