#property copyright "pr" #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red extern int nm = 24; //---- buffers double Mass_low[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE,EMPTY,1); SetIndexBuffer(0,Mass_low); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(), limit; if (counted_bars > 0) { counted_bars--; } limit = Bars - counted_bars; //---- for(int i=0;i<limit;i++) { double el_0 = ep_L(i,nm); Mass_low[i] = el_0; } return(0); } double ep_L(int num, int per) { double sum = 0; int i = num; while(i<num+per) { sum += (Low[i] - Close[i]); i++; } return((sum/Point)/i); }Надо рассчитывать с прошлого в будущее, у вас - наоборот.
Надо рассчитывать с прошлого в будущее, у вас - наоборот.
return(0);
так?
Тоже не работает((
И в тестере и при переключении периодов картинка одинаковая.
#property copyright "pr" #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red input int nm=24; //---- buffers double Mass_low[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE,EMPTY,1); SetIndexBuffer(0,Mass_low); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(), limit; if(counted_bars>0) { counted_bars--; } limit=Bars-counted_bars; //---- //for(int i=0;i<limit;i++) for(int i=limit;i>=0;i--) { double el_0 = ep_L(i,nm); Mass_low[i] = el_0; } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double ep_L(int num,int per) { double sum=0; int i=num; while(i<num+per) { sum+=(Low[i]-Close[i]); i++; } return((sum/Point)/i); } //+------------------------------------------------------------------+
И в тестере и при переключении периодов картинка одинаковая.
вопрос на самом деле в том, почему в реальном времени он рисует одни данные, а при обновлении индикатора, перерисовывает его с другими значениями, сами графики похожи, но значения отличаются. Спасибо за помощь!
Что в Вашем понятии "обновление индикатора"?
Перерисовка его по истории.
Или если вызвать настройки и нажать ок, он меняется. Т.е. индикатор перерисовывает исходя уже из исторических данных.
Или после его работы в реальном времени, добавляем в это же окно тот же индикатор с теми же параметрами и он отличается, пока не обновить ранее работающий. Пример отличия на скриншоте приведен.
Перерисовка его по истории.
Или если вызвать настройки и нажать ок, он меняется. Т.е. индикатор перерисовывает исходя уже из исторических данных.
Или после его работы в реальном времени, добавляем в это же окно тот же индикатор с теми же параметрами и он отличается, пока не обновить ранее работающий. Пример отличия на скриншоте приведен.
- Сравнил индикатор с графика и с тестера - индикаторы и их значения одинаковые.
- Присоединил к графику ещё один индикатор с теми-же настройками - оба индикатора идентичны.
- Сравнил индикатор с графика и с тестера - индикаторы и их значения одинаковые.
- Присоединил к графику ещё один индикатор с теми-же настройками - оба индикатора идентичны.
https://youtu.be/7Pe5hh4Hsmc
Записал видео, может так понятнее будет. Но проблема осталась(
https://youtu.be/7Pe5hh4Hsmc
Записал видео, может так понятнее будет. Но проблема осталась(
Похоже проблема в последнем блоке вычислений - вместо деления на период "nm" было деление на весь промежуток баров.
#property copyright "pr" #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red #property strict input int nm=4; //---- buffers double Mass_low[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE,EMPTY,1); SetIndexBuffer(0,Mass_low); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, // размер входных таймсерий const int prev_calculated, // обработано баров на предыдущем вызове const datetime& time[], // Time const double& open[], // Open const double& high[], // High const double& low[], // Low const double& close[], // Close const long& tick_volume[], // Tick Volume const long& volume[], // Real Volume const int &spread[] // Spread ) { int i,limit; double el_0; //--- первый расчёт или количество баров изменилось if(prev_calculated==0) { for(i=rates_total-1-nm;i>0;i--) { el_0=ep_L(low,close,i); Mass_low[i]=el_0; } return(rates_total); } else limit=rates_total-prev_calculated; //--- main loop for(i=limit;i>0;i--) { el_0=ep_L(low,close,i); Mass_low[i]=el_0; } //--- return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double ep_L(const double& L[],const double& C[],int num) { double sum=0; int n=num+nm; while(n>num) { sum+=(L[n]-C[n]); n--; } return((sum/Point)/nm); } //+------------------------------------------------------------------+
Похоже проблема в последнем блоке вычислений - вместо деления на период "nm" было деление на весь промежуток баров.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
пожалуйста помогите!!
Простейший индикатор на минутках в реальном времени рисует одно, при обновлении картинка отличается.
Что делать не знаю:(
#property copyright "pr"
#property link "http://www.metaquotes.net"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
extern int nm = 24;
//---- buffers
double Mass_low[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE,EMPTY,1);
SetIndexBuffer(0,Mass_low);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),
limit;
if (counted_bars > 0)
{
counted_bars--;
}
limit = Bars - counted_bars;
//----
for(int i=0;i<limit;i++)
{
double el_0 = ep_L(i,nm);
Mass_low[i] = el_0;
}
return(0);
}
double ep_L(int num, int per)
{
double sum = 0;
int i = num;
while(i<num+per)
{
sum += (Low[i] - Close[i]);
i++;
}
return((sum/Point)/i);
}