1. вкладка "Эксперты" как раз для того, чтобы собирать вывод из экспертов.
2. int ArrayResize( object& array[], int new_size)
все совершенно прозрачно - изменение размера массива.
3. А чем не устраивают текущие варианты масштаба?
2. int ArrayResize( object& array[], int new_size)
все совершенно прозрачно - изменение размера массива.
Sets new size to the first dimension. If success returns count of all elements contained in the array after resizing, otherwise, returns zero and array is not resized.
Parameters
array[] - Array to resize.
new_size - New size for the first dimension.
Sample
double array1[][4];
int element_count=ArrayResize(array, 20);
// element count is 80 elements
Parameters
array[] - Array to resize.
new_size - New size for the first dimension.
Sample
double array1[][4];
int element_count=ArrayResize(array, 20);
// element count is 80 elements
3. А чем не устраивают текущие варианты масштаба?
Renat
Вам не стоило приводить пример из словаря. Я в нем это давно прочел. Просто несколько раз когда я писал сюда о тех или иных ошибках, одним из самых первых ответов, который вы мне давали - "где ArrayResize???".
Размер массива менять функцией ArrayResize надо на лету при формировании массива (в цикле) или же после того, как мкассив сформирован?
Я догадался. Но но на мой вопрос вы так и не ответили: почему сразу как изменяю код, компилирую, перехожу в терминал - в логах уже 2 копии результата команды Print?
Тем, что при резком скачке рынка, низ/верх подробно, хорошо увеличенными не рассмотришь, так чарт сразу сжимается при большом скачке. Нужно большее увеличение. Почему бы не сделать как в Investor's Dream, например, - сколько надо столько и увеличиваешь/уменьшаешь.
Вам не стоило приводить пример из словаря. Я в нем это давно прочел. Просто несколько раз когда я писал сюда о тех или иных ошибках, одним из самых первых ответов, который вы мне давали - "где ArrayResize???".
Размер массива менять функцией ArrayResize надо на лету при формировании массива (в цикле) или же после того, как мкассив сформирован?
1. вкладка "Эксперты" как раз для того, чтобы собирать вывод из экспертов.
Я догадался. Но но на мой вопрос вы так и не ответили: почему сразу как изменяю код, компилирую, перехожу в терминал - в логах уже 2 копии результата команды Print?
3. А чем не устраивают текущие варианты масштаба?
Тем, что при резком скачке рынка, низ/верх подробно, хорошо увеличенными не рассмотришь, так чарт сразу сжимается при большом скачке. Нужно большее увеличение. Почему бы не сделать как в Investor's Dream, например, - сколько надо столько и увеличиваешь/уменьшаешь.
Размер массива менять функцией ArrayResize надо на лету при формировании массива (в цикле) или же после того, как мкассив сформирован?
Пользуясь логикой, можно легко догадаться, что менять массив надо до его использования, а не во время или после, не так ли?
Тем, что при резком скачке рынка, низ/верх подробно, хорошо увеличенными не рассмотришь
К сожалению, этого не будет. Кстати, видно все замечательно.
Пользуясь логикой, можно легко догадаться, что менять массив надо до его использования, а не во время или после, не так ли?
Да, я думал так же, но видимо что НЕ ТАК!.
Привожу вам 2 кода. В первом ArrayResize делается во время формирования цикла, во втором - после.
Попробуйте оба. Второй, тот что должен по логике работать - не работает!
//+------------------------------------------------------------------+ //| Super.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" //---- indicator settings #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Green #property indicator_color2 Red //---- indicator buffers double plus[]; double minus[]; double indima[]; double ind[]; extern int fast=3; extern int slow=17; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- 1 additional buffer used for counting. IndicatorBuffers(3); //---- drawing settings SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3); SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3); SetIndexBuffer(0,plus); SetIndexBuffer(1,minus); SetIndexDrawBegin(0,20); SetIndexDrawBegin(1,20); SetIndexArrow(0,241); SetIndexArrow(1,242); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); //---- name for DataWindow and indicator subwindow label IndicatorShortName("Test"); SetIndexLabel(0,"Test"); SetIndexLabel(1,"Test"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Awesome Oscillator | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); double current,prev; //---- check for possible errors if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; for(int i=0; i<limit-17; i++) { if (Open[i] < Close[i]) ind[i] = Close[i]-Open[i]; if (Open[i] > Close[i]) ind[i] = Open[i]-Close[i]; if (Open[i] == Close[i]) ind[i] = 0.0; ArrayResize(ind,8000); } for(i=0; i<limit-17; i++) { indima[i] = iMAOnArray(ind,0,fast,0,MODE_SMA,i)-iMAOnArray(ind,0,slow,0,MODE_SMA,i); ArrayResize(indima,8000); } for(i=0; i<limit-17; i++) { current = indima[i]; prev = indima[i+1]; if (current > prev) { plus[i] = current; minus[i] = 0.0; } if (prev > current) { minus[i] = current; plus[i] = 0.0; } if (prev == current && Close[i]<Open[i]) { minus[i] = current; plus[i] = 0.0; } if (prev == current && Close[i]>Open[i]) { plus[i] = current; minus[i] = 0.0; } if (prev == current && Close[i]==Open[i]) { plus[i] = current; minus[i] = 0.0; } } //---- done return(0); }
А вот и второй - ресайз делается после того, как цикл сформирован, - непосредственно перед употреблением!:
//+------------------------------------------------------------------+ //| Super.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" //---- indicator settings #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Green #property indicator_color2 Red //---- indicator buffers double plus[]; double minus[]; double indima[]; double ind[]; extern int fast=3; extern int slow=17; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- 1 additional buffer used for counting. IndicatorBuffers(3); //---- drawing settings SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3); SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3); SetIndexBuffer(0,plus); SetIndexBuffer(1,minus); SetIndexDrawBegin(0,20); SetIndexDrawBegin(1,20); SetIndexArrow(0,241); SetIndexArrow(1,242); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); //---- name for DataWindow and indicator subwindow label IndicatorShortName("Test"); SetIndexLabel(0,"Test"); SetIndexLabel(1,"Test"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Awesome Oscillator | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); double current,prev; //---- check for possible errors if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; for(int i=0; i<limit-17; i++) { if (Open[i] < Close[i]) ind[i] = Close[i]-Open[i]; if (Open[i] > Close[i]) ind[i] = Open[i]-Close[i]; if (Open[i] == Close[i]) ind[i] = 0.0; } ArrayResize(ind,8000); for(i=0; i<limit-17; i++) { indima[i] = iMAOnArray(ind,0,fast,0,MODE_SMA,i)-iMAOnArray(ind,0,slow,0,MODE_SMA,i); } ArrayResize(indima,8000); for(i=0; i<limit-17; i++) { current = indima[i]; prev = indima[i+1]; if (current > prev) { plus[i] = current; minus[i] = 0.0; } if (prev > current) { minus[i] = current; plus[i] = 0.0; } if (prev == current && Close[i]<Open[i]) { minus[i] = current; plus[i] = 0.0; } if (prev == current && Close[i]>Open[i]) { plus[i] = current; minus[i] = 0.0; } if (prev == current && Close[i]==Open[i]) { plus[i] = current; minus[i] = 0.0; } } //---- done return(0); }
Что скажете?
Виталий, в обоих случаях неверное использование ArrayResize.
Да и к тому же - откуда взялся фиксированный размер в 8000?
"До" - означает, что подготовить(заресайзить) размер буфера индикатора надо до момента любого обращения к нему. Похоже, что Вам необходимо некоторое время потратить на изучение основ програмирования.
Да и к тому же - откуда взялся фиксированный размер в 8000?
"До" - означает, что подготовить(заресайзить) размер буфера индикатора надо до момента любого обращения к нему. Похоже, что Вам необходимо некоторое время потратить на изучение основ програмирования.
Виталий, все неверные варианты вы уже попробовали.
Осталось еще перед циклом ArrayResize поставить :)).
Функция ArrayResize устанавливает размер массива, поэтому ее нужно вызвать ДО использования самого массива.
Кстати, Ренат,
если вызвать ArrayResize для уже существующего и заполненного массива, что будет?
1. Данные в нем сохранятся?
2. При уменьшении размера отбросятся с меньшими или большими индексами для обычных и тех что типа Close массивов?
3. При увеличении массива заполнятся нулями?
4. В начала или конце для обычных и тех что типа Close массивов?
5. ArrayResize работает только для динамических массивов?
(т.е. описанных как int a[])
6. Что будет если в ArrayResize подставить статический массив?
Понимаю что можно и самому проверить с помощью Print,
но представте сколько на это времени уйдет ...
Осталось еще перед циклом ArrayResize поставить :)).
Функция ArrayResize устанавливает размер массива, поэтому ее нужно вызвать ДО использования самого массива.
Кстати, Ренат,
если вызвать ArrayResize для уже существующего и заполненного массива, что будет?
1. Данные в нем сохранятся?
2. При уменьшении размера отбросятся с меньшими или большими индексами для обычных и тех что типа Close массивов?
3. При увеличении массива заполнятся нулями?
4. В начала или конце для обычных и тех что типа Close массивов?
5. ArrayResize работает только для динамических массивов?
(т.е. описанных как int a[])
6. Что будет если в ArrayResize подставить статический массив?
Понимаю что можно и самому проверить с помощью Print,
но представте сколько на это времени уйдет ...
если вызвать ArrayResize для уже существующего и заполненного массива, что будет?
Если новый размер больше старого, то все старые данные сохранятся(скопируются из старого буфера), а новое место заполнится нулями. Если новый размер меньше существующего, то массив урежется, но данные сохранятся.
Изменение размера для серийных(Open, High, Low, Close, Volume) и индикаторных массивов не работает.
Статический массив вроде можно менять.
Renat
Большое вам спасибо! Ошибку понял и исправил.
Я программировал на Perl. Там ресайз делать до первичного обращения к массиву делать было не нужно.
Perl вообще один из самых простых и интуитивно понятных языков.
Mak
Ну кто через это не проходил??? :)
Большое вам спасибо! Теперь я на один вопрос умнее ! :))
Большое вам спасибо! Ошибку понял и исправил.
Похоже, что Вам необходимо некоторое время потратить на изучение основ програмирования.
Я программировал на Perl. Там ресайз делать до первичного обращения к массиву делать было не нужно.
Perl вообще один из самых простых и интуитивно понятных языков.
Mak
Ну кто через это не проходил??? :)
Большое вам спасибо! Теперь я на один вопрос умнее ! :))
Perl вообще один из самых простых и интуитивно понятных языков.
Да уж .... :))
Одни регэкспы и умолчания чего стоят :)
Уж если вы с Перлом освоились,
MQL вам совсем элементарным покажется.
Только немного руку набить ...
Mak
Не кто и не говорил что MQL сложный. Просто инфы по языку пока не много. Так вроде в общем сейчас все ок, но вот появляются моменты типа этого.
Не кто и не говорил что MQL сложный. Просто инфы по языку пока не много. Так вроде в общем сейчас все ок, но вот появляются моменты типа этого.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1. В коде пишу
В терминале, в логах (вкладка "Эксперты") результат Print всегда дублируется. Почему?
2. Функция
- как и где ей пользоваться? Я имею ввиду в момент формировния массива (в цикле) или же она прменяется к уже сформированному массиву (за циклом)???
3. Просьба: сделайте, пожалуйста, возможность ПОЛНОГО выбора масштаба графика пользователем (на сколько нужно пользователю, на столько он и увеличивает/уменьшает).