juan1977:
//ZDESI pocemuto noli vsegda poetomu zaremil
//double value = GetPrice(NULL, PERIOD_M1, PriceMode, shift);
//sdesi normalino hotea stranno
double value = iClose(NULL, PERIOD_M1, from + shift);
ZedM1Buffer[shift] = (value - ma)/sigma;
- Вот именно потому, что в функцию передаёшь параметр, оно и не
работает. Можешь после строчки
double value = GetPrice(NULL, PERIOD_M1, PriceMode, shift);
написать
Print(GetLastError());
получишь ошибку 4106 - ERR_UNKNOWN_SYMBOL - неизвестный символ.
Это если в iClose напрямую NULL написать - воспримет как текущий символ. А через свою функцию не выёживайся, пиши вот так:
double value = GetPrice(Symbol(), PERIOD_M1, PriceMode, shift);
- По поводу второй ошибки - не знаю.
- Как вставлять код mql4 в пост.
dmitriy писал (а):
juan1977 писал (а):
//ZDESI pocemuto noli vsegda poetomu zaremil
//double value = GetPrice(NULL, PERIOD_M1, PriceMode, shift);
//sdesi normalino hotea stranno
double value = iClose(NULL, PERIOD_M1, from + shift);
ZedM1Buffer[shift] = (value - ma)/sigma;
- Вот именно потому, что в функцию передаёшь параметр, оно и не
работает. Можешь после строчки
double value = GetPrice(NULL, PERIOD_M1, PriceMode, shift);
написать
Print(GetLastError());
получишь ошибку 4106 - ERR_UNKNOWN_SYMBOL - неизвестный символ.
Это если в iClose напрямую NULL написать - воспримет как текущий символ. А через свою функцию не выёживайся, пиши вот так:
double value = GetPrice(Symbol(), PERIOD_M1, PriceMode, shift);
- По поводу второй ошибки - не знаю.
- Как вставлять код mql4 в пост.
Bolishoe spasibo Dmitriy! Jali 4to ti ne s Kishineva, pivka bi vipili :)
А вот функция как перевести NULL в текущий символ
а ещё как писать по русски русскими буквами.
http://ourworld.compuserve.com/homepages/paulgor/screen_e.htm
int num=myfunc(NULL,...); ... int myfunc(string symbol,...) { symbol=GetSymbol(symbol); ... } string GetSymbol(string symbol) { // function GetPeriod if(symbol==""||symbol=="0") return(Symbol()); else return(symbol); }
а ещё как писать по русски русскими буквами.
http://ourworld.compuserve.com/homepages/paulgor/screen_e.htm
if(sigma!=0)ZedM1Buffer[shift] = (value - ma)/sigma; Может равняться нулю, а но ноль делить нельзя
}
//Sdesi toje nuli poetomu ocoshko indicatora vsegda pusta. .. PLS Podskajite, natolknite na pravilinii puti
RevBuffer[i] = iRSIOnArray(ZedM1Buffer, 0, m1factor-1, 0); так будет работать, но вопрос возникает))) iMAonArray над простым массивом перворачивает его, а вот как RSI не знаю, наверно тоже, тогда надо применить к ZedM1Buffer функцию ArraySetAsSeries()
}
//Sdesi toje nuli poetomu ocoshko indicatora vsegda pusta. .. PLS Podskajite, natolknite na pravilinii puti
RevBuffer[i] = iRSIOnArray(ZedM1Buffer, 0, m1factor-1, 0); так будет работать, но вопрос возникает))) iMAonArray над простым массивом перворачивает его, а вот как RSI не знаю, наверно тоже, тогда надо применить к ZedM1Buffer функцию ArraySetAsSeries()
Integer писал (а):
if(sigma!=0)ZedM1Buffer[shift] = (value - ma)/sigma; Может равняться нулю, а но ноль делить нельзя
}
//Sdesi toje nuli poetomu ocoshko indicatora vsegda pusta. .. PLS Podskajite, natolknite na pravilinii puti
RevBuffer[i] = iRSIOnArray(ZedM1Buffer, 0, m1factor-1, 0); так будет работать, но вопрос возникает))) iMAonArray над простым массивом перворачивает его, а вот как RSI не знаю, наверно тоже, тогда надо применить к ZedM1Buffer функцию ArraySetAsSeries()
if(sigma!=0)ZedM1Buffer[shift] = (value - ma)/sigma; Может равняться нулю, а но ноль делить нельзя
}
//Sdesi toje nuli poetomu ocoshko indicatora vsegda pusta. .. PLS Podskajite, natolknite na pravilinii puti
RevBuffer[i] = iRSIOnArray(ZedM1Buffer, 0, m1factor-1, 0); так будет работать, но вопрос возникает))) iMAonArray над простым массивом перворачивает его, а вот как RSI не знаю, наверно тоже, тогда надо применить к ZedM1Buffer функцию ArraySetAsSeries()
Integer premnogo blagodaren tebe. Uspehov vo vsem. V samom dele mne o4eni pomog :)
juan1977:
Bolishoe spasibo Dmitriy! Jali 4to ti ne s Kishineva, pivka bi vipili :)
А что у вас в Кишинёве сложности с руссоязычными клавиатурами? :)
Net, v Kishineve net problem ni s kakoi klaviaturoi ni s eazicom. Scoree vsego eto moi problemi. Po pravde govorea ne udalosi esce stro4iti na kirilitzu :) Izvinite konechno no eto fact :) No u4tem kak besplatnii urok...Spasibo vsem za pomosci!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Уважаемые форумляне, я недавно стал писать индикатор на MQL4, но заметил странную особенность, функции ведут себя очень странно.
Пожалуйста подскажите где потенциальная ошибка в коде кторый ниже:
Премного благодарен.
//+----------------------------------------------------------------------+
//| Swing-Point. mq4 |
//+----------------------------------------------------------------------+
#property copyright "Copyright © 2006, Ion Coliujco"
//#property indicator_chart_window
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Navy
extern int PriceMode = PRICE_CLOSE;
extern int MAMode = MODE_SMA;
//---- buffers
double RevBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,RevBuffer);
SetIndexDrawBegin(0, 0);
return(0);
}
//+------------------------------------------------------------------+
int start()
{
double ZedM1Buffer[];
int m1factor = Period();
if (m1factor < PERIOD_M5) return (-1);
int counted_bars = IndicatorCounted();
if (counted_bars < 0) return(-1);
ArrayResize(ZedM1Buffer, m1factor);
ArraySetAsSeries(ZedM1Buffer, true);
int limit = Bars-counted_bars;
for (int i=1; i<limit; i++)
{
int from = i*m1factor;
double sigma = iStdDev(NULL,PERIOD_M1, m1factor, 0,MAMode, PriceMode, from);
double ma = iMA(NULL,PERIOD_M1,m1factor, 0, MAMode, PriceMode, from);
double mm = 0;
for (int shift=0; shift < m1factor; shift++)
{
//ZDESI pocemuto noli vsegda poetomu zaremil
//double value = GetPrice(NULL, PERIOD_M1, PriceMode, shift);
//sdesi normalino hotea stranno
double value = iClose(NULL, PERIOD_M1, from + shift);
ZedM1Buffer[shift] = (value - ma)/sigma;
}
//Sdesi toje nuli poetomu ocoshko indicatora vsegda pusta. .. PLS Podskajite, natolknite na pravilinii puti
RevBuffer[i] = iRSIOnArray(ZedM1Buffer, 0, m1factor, 0);
}
return(0);
}
//+------------------------------------------------------------------+
double GetPrice(string symbol, int timeframe, int Mode, int index)
{
double value = 0.0;
switch(Mode)
{
case PRICE_CLOSE:
value = iClose(symbol, timeframe, index);
break;
case PRICE_OPEN:
value = iOpen(symbol, timeframe, index);
break;
case PRICE_HIGH:
value = iHigh(symbol, timeframe, index);
break;
case PRICE_LOW:
value = iLow(symbol, timeframe, index);
break;
case PRICE_MEDIAN:
value =
(iHigh(symbol, timeframe, index)+iLow(symbol, timeframe, index))/2;
break;
case PRICE_TYPICAL:
value =
(iHigh(symbol, timeframe, index)+iLow(symbol, timeframe, index)+iClose(symbol, timeframe, index))/3;
break;
case PRICE_WEIGHTED:
value =
(iHigh(symbol, timeframe, index)+iLow(symbol, timeframe, index)+2*iClose(symbol, timeframe, index))/4;
break;
default:
value = iClose(symbol, timeframe, index);
}
return (value);
}