Доброго времени суток. Не совсем по теме здесь речь пойдет о 4-ом мукуле.
Столкнулся с нежеланием платформы использовать старый добрый индикатор после компиляции, хотя до компиляции исправно работал.
Вот собственно и сам код.
Обратите внимание на сообщения компилятора об ошибках (если не понятно то воспользуйтесь переводчиком).
Например сообщение об ошибке: ...arrays are passed by reference only, означает, что массивы должны передаваться только по ссылке.
Правильный вариант функции fractal:
void fractal(double &arUp[],double &arDown[],int index,int bars,double &hFractal,double &lFractal)
Привет всем. я тоже сталкивался с такой проблемой на мт4 , после обновления некоторые индюки не работали. Я случайно нашел стары мт4 без апдейта и сохранил , могу скинуть если че .
Гы, я тоже такое встретил, например, recycle с базы кодов mql4 нормально компилируется в старых билдах, а в новых уже появляются запятые лишние внутри оператора for.
Устранить то проще репки, но так не очень хорошо... Доведите до сервисдеска
Доброго времени суток. Не совсем по теме здесь речь пойдет о 4-ом мукуле.
Столкнулся с нежеланием платформы использовать старый добрый индикатор после компиляции, хотя до компиляции исправно работал.
Вот собственно и сам код.
Функцию start нужно скорректировать следующим образом (чтобы избежать ошибок компиляции и выполнения, см. 1.5 и 2.1):
int start() { //--- массив для хранения значений цен High/Low double HighPrices[],LowPrices[]; double hFractal=0,lFractal=0,hBand=0,mBand=0,lBand=0; int limit; int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //--- если counted_bars=0, то число limit нужно уменьшить на 1+макс. индекс переменной цикла if(counted_bars==0) limit-=1+MathMax(bbPeriod,fBars+1); for(int i=0; i<limit; i++) { allblue[i]=iMA(NULL,0,JawsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i); allred[i]=iMA(NULL,0,TeethPeriod,0,MODE_SMMA,PRICE_MEDIAN,i); allgren[i]=iMA(NULL,0,LipsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i); ////////* расчет линий болинджера */ bband(bbPeriod,bbShift,bbDev,i,hBand,mBand,lBand); hbb[i]=hBand; mbb[i]=mBand; lbb[i]=lBand; //--- копируем значения цен в массивы ArrayCopy(HighPrices,High,0,0,WHOLE_ARRAY); ArrayCopy(LowPrices,Low,0,0,WHOLE_ARRAY); ///////* расчет фракталов */ fractal(HighPrices,LowPrices,i,fBars,hFractal,lFractal); if(hFractal > 0) frup[i+fBars+1] = hFractal; if(lFractal > 0) frdn[i+fBars+1] = lFractal; } //---- done return(0); }
- www.mql5.com
Благодарю за разъяснение.
С удовольствием посмотрел бы на советник и индикатор реализованный в новом коде. С моим опытом программирования это просто необходимо.
Так и скачайте прикрепленный файл...
Что изменилось в четверке с графическим управлением?
И как теперь поменять wile на for , подсмотрел в Haken Ashi но так и не понял сути. Хотелось бы разъяснений.
Что изменилось в четверке с графическим управлением?
И как теперь поменять wile на for , подсмотрел в Haken Ashi но так и не понял сути. Хотелось бы разъяснений.
wile нужно заменить на while...
зы. оно работало в четвёрке? )))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток. Не совсем по теме здесь речь пойдет о 4-ом мукуле.
Столкнулся с нежеланием платформы использовать старый добрый индикатор после компиляции, хотя до компиляции исправно работал.
Вот собственно и сам код.
//+------------------------------------------------------------------+
//| AlligatorBollingerBandsFraktal.mq4 |
//| Mojo_Head © 2012 |
//| mojohead@bk.ru |
//+------------------------------------------------------------------+
#property copyright "Mojo_Head © 2012"
#property link "mojohead@bk.ru"
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Lime
#property indicator_color4 Gold
#property indicator_color5 Black//C'250,250,250'
#property indicator_color6 Gold
#property indicator_color7 Peru
#property indicator_color8 MediumOrchid
#property indicator_width7 1
#property indicator_width8 1
/*
Metod
MODE_SMA 0 Простое скользящее среднее
MODE_EMA 1 Экспоненциальное скользящее среднее
MODE_SMMA 2 Сглаженное скользящее среднее
MODE_LWMA 3 Линейно-взвешенное скользящее среднее
Price
PRICE_CLOSE 0 Цена закрытия
PRICE_OPEN 1 Цена открытия
PRICE_HIGH 2 Максимальная цена
PRICE_LOW 3 Минимальная цена
PRICE_MEDIAN 4 Средняя цена, (high+low)/2
PRICE_TYPICAL 5 Типичная цена, (high+low+close)/3
PRICE_WEIGHTED 6 Взвешенная цена закрытия, (high+low+close+close)/4
*/
//---- input parameters
extern int JawsPeriod=13;
extern int JawsShift=8;
extern int TeethPeriod=8;
extern int TeethShift=5;
extern int LipsPeriod=5;
extern int LipsShift=3;
extern int bbPeriod=20;
extern int Metod=0;
extern int Price=0;
extern int bbShift=0;
extern double bbDev=2.0;
extern int fBars = 2;
int AveragePeriod=5;
//---- indicator buffers
double allblue[];
double allred[];
double allgren[];
double hbb[];
double mbb[];
double lbb[];
double frup[];
double frdn[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,allblue);
SetIndexBuffer(1,allred);
SetIndexBuffer(2,allgren);
SetIndexBuffer(3,hbb);
SetIndexBuffer(4,mbb);
SetIndexBuffer(5,lbb);
SetIndexBuffer(6,frup);
SetIndexBuffer(7,frdn);
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
SetIndexStyle(3,DRAW_LINE);
SetIndexStyle(4,DRAW_LINE);
SetIndexStyle(5,DRAW_LINE);
SetIndexStyle(6,DRAW_ARROW);
SetIndexStyle(7,DRAW_ARROW);
SetIndexLabel(0, "All jaws");
SetIndexLabel(1, "All teeth");
SetIndexLabel(2, "All lips");
SetIndexLabel(3, "BB upp (" + bbPeriod + ")");
SetIndexLabel(4, "BB med (" + bbPeriod + ")");
SetIndexLabel(5, "BB dwn (" + bbPeriod + ")");
SetIndexLabel(6, "Fr upp (" + fBars + ")");
SetIndexLabel(7, "Fr dwn (" + fBars + ")");
SetIndexArrow(6,217);
SetIndexEmptyValue(6,0.0);
SetIndexArrow(7,218);
SetIndexEmptyValue(7,0.0);
return(0);
}
//+------------------------------------------------------------------+
int deinit() { return(0); }
//+------------------------------------------------------------------+
int start()
{
double hFractal = 0, lFractal = 0, hBand = 0, mBand = 0, lBand = 0;
int limit; int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; for(int i=0; i<limit; i++)
{
allblue[i]=iMA(NULL,0,JawsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
allred[i]=iMA(NULL,0,TeethPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
allgren[i]=iMA(NULL,0,LipsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
////////* расчет линий болинджера */
bband(bbPeriod, bbShift, bbDev, i, hBand, mBand, lBand);
hbb[i] = hBand; mbb[i] = mBand; lbb[i] = lBand;
///////* расчет фракталов */
fractal(High, Low, i, fBars, hFractal, lFractal);
if (hFractal > 0) frup[i+fBars+1] = hFractal;
if (lFractal > 0) frdn[i+fBars+1] = lFractal;
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
// --->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>
void bband(int bbPeriod, int bbShift, double bbDev, int index, double& hBand, double& mBand, double& lBand)
{
double sum = 0, ave = 0, sko = 0;
int j = 0;
mBand = iMA(NULL,0,bbPeriod,bbShift,Metod,Price,index);
sum = 0;
for (j = 0; j < bbPeriod; j++) sum += Close[index+j]; ave = sum / bbPeriod;
sum = 0;
for (j = 0; j < bbPeriod; j++) sum += (Close[index+j] - ave) * (Close[index+j] - ave);sko = MathSqrt(sum / bbPeriod);
hBand = mBand + bbDev * sko;lBand = mBand - bbDev * sko;
}
// --->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>
// --->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>
void fractal(double arUp[], double arDown[], int index, int bars, double& hFractal, double& lFractal)
{
int pos = 0, i = 0;
hFractal = 0; lFractal = 0;
pos = index + bars + 1;
/* фрактал верх */
for(i = 1; i <= bars; i++)
{
if(N(arUp[pos] - arUp[pos - i]) <= 0) { break; } /* правая сторона */
if(N(arUp[pos] - arUp[pos + i]) <= 0) { break; } /* левая сторона */
}
/* запоминаем значение на баре, где верхний фрактал */
if (i == bars + 1) hFractal = arUp[pos];
/* фрактал низ */
for(i = 1; i <= bars; i++)
{
if(N(arDown[pos] - arDown[pos - i]) >= 0) { break; } /* правая сторона */
if(N(arDown[pos] - arDown[pos + i]) >= 0) { break; } /* левая сторона */
}
/* запоминаем значение на баре, где нижний фрактал */
if (i == bars + 1) lFractal = arDown[pos];
}
// --->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>
double N(double source, string symb="0")
{
int digits = Digits;
if (symb == "0")
{
digits = MarketInfo(Symbol(), MODE_DIGITS);
}
return(NormalizeDouble(source,digits));
}
// --->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>--->>