[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 133
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
win_idx - то правильный получается?
win_ind получается правильным.
ObjectCreate("max",OBJ_HLINE,win_idx,0,top); рисует в нужном окне,
ObjectSet("max",OBJPROP_COLOR,Yellow); рисует правильным цветом,
ObjectSet("max",OBJPROP_WIDTH,0); рисует правильную линию,
но не определяет параметр top в
double top=WindowPriceMax(win_idx);
и topBuffer[] пуст.
Код
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Red
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double topBuffer[];
bool initFinished=false; // добавляем переменную, которая будет запоминать состояние инициализации.
// false - инициализации еще не было
// true - была
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);
IndicatorDigits(5);
//----
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++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
if(initFinished==false)
{
IndicatorShortName("MACD_max-min");
int win_idx=WindowFind("MACD_max-min");
// находим номер подокна нашего индикатора
if(win_idx<0)
{
// если номер подокна равен -1, то возникла ошибка
Print("Окно не найдено");
return(0);
}
double top=WindowPriceMax(win_idx);
//находим максимальное значение вертикальной шкалы указанного подокна текущего графика
ObjectCreate("max",OBJ_HLINE,win_idx,0,top);
// рисуем горизонтальную линию в подокне нашего индикатора
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
WindowRedraw();
// перерисовываем окно, чтобы увидить линиию
initFinished=true;
// рисование закончено
}
topBuffer[i]=top;
}
//----
return(0);
}
//+------------------------------------------------------------------+
win_ind получается правильным.
ObjectCreate("max",OBJ_HLINE,win_idx,0,top); рисует в нужном окне,
ObjectSet("max",OBJPROP_COLOR,Yellow); рисует правильным цветом,
ObjectSet("max",OBJPROP_WIDTH,0); рисует правильную линию,
но не определяет параметр top в
double top=WindowPriceMax(win_idx);
и topBuffer[] пуст.
Код
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Red
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double topBuffer[];
bool initFinished=false; // добавляем переменную, которая будет запоминать состояние инициализации.
// false - инициализации еще не было
// true - была
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);
IndicatorDigits(5);
//----
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++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
if(initFinished==false)
{
IndicatorShortName("MACD_max-min");
int win_idx=WindowFind("MACD_max-min");
// находим номер подокна нашего индикатора
if(win_idx<0)
{
// если номер подокна равен -1, то возникла ошибка
Print("Окно не найдено");
return(0);
}
double top=WindowPriceMax(win_idx);
//находим максимальное значение вертикальной шкалы указанного подокна текущего графика
ObjectCreate("max",OBJ_HLINE,win_idx,0,top);
// рисуем горизонтальную линию в подокне нашего индикатора
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
WindowRedraw();
// перерисовываем окно, чтобы увидить линиию
initFinished=true;
// рисование закончено
}
topBuffer[i]=top;
}
//----
return(0);
}
//+------------------------------------------------------------------+
Извините что что вмешиваюсь
topBuffer[i] за циклом и рисование, попробуйте так:
Здравствуйте !
Натолкните пжл на верный путь:
Задано N внешних переменных одного типа. Как из них выбрать максимальное значение не загромождая код, - MathMax возвращает максимум из двух значений, а если их, предположим, 20 ?
Или, как из этих данных создать массив, что потом применить ArrayMaximum ?
extern int A = 10;
extern int .......;
extern int N = 1253;
заранее благодарен !
https://docs.mql4.com/ru/array/ArrayMaximum
int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)Поиск элемента с максимальным значением. Функция возвращает позицию максимального элемента в массиве.
Параметры:
array[] - Числовой массив, в котором производится поиск.
count - Количество элементов для поиска.
start - Начальный индекс для поиска.
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int maxValueIdx=ArrayMaximum(num_array);
Print("Max value = ", num_array[maxValueIdx]);
Но, в виде
int Max [N] = {A,.....,N};
массив не создается.
Где: A,......N - заданные однотипные переменные. Количество переменных = N
Пример создания строкового массива из внешних переменных (скрипт):
Пример создания строкового массива из внешних переменных (скрипт):
Спасибо !
Получилось, но с поправкой: вместо
int init(){sym[1]=sym1;............
делаем так
int init(){sym[0]=sym1;.......
и тогда все элементы считаются.
Извините что что вмешиваюсь
topBuffer[i] за циклом и рисование, попробуйте так: