Понятно что пустой массив до его заполнения , (то есть только объявленный, но не заполненный массив), лежит в теле ( в коде) Советника. Потом в теле этого же Советника этот массив инициализируется, то есть ,заполняется значениями. ВОПРОС. А получится у меня только объявить этот же массив но не в теле Советника , а в файле mqh . А заполнить объявленный в файле mqh массив значениями (инициализировать) в теле Советника?
Обращаю Ваше внимание на то, что я говорю не об изменении значений уже заполненного массива в файле mqh , а о первоначальном заполнении пустого массива в файле mqh первоначальными значениями.
В предыдущих постах однозначно говорилось , что изменять уже заполненные значения массива в файле mqh при помощи кода mql4 невозможно. Я же в своем вопросе спрашиваю не об изменении а о первоначальном заполнении значениями.
Спасибо
Андрей, у меня к вам какое-то странное отношение. Сам не могу понять какое…
То мне надоедает такой, простите тупизм, то почитав какие вам дают советы и что вы понимаете в этих советах становится жалко вашу психику. Боюсь что вы можете сойти с ума.
Извините, это сказано не для того чтобы обидеть вас.
Теперь по существу. Попытаюсь вам объяснить, на мой взгляд подоходчивей.
Если заполнять массив в теле советника, то файл .mqh тут совсем не при делах. Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ. Чем-бы вы не заполнили массив, не зависимо от того где он объявлен, вы не сможете этот массив сохранить в этом .mqh файле. Самый лучший вариант вам работать с файлом .bin который можно и писать на диск, и читать, и после первоначального заполнения или внесения изменений перезаписывать. После прочтения массива из файла .bin вы просто работаете с этим массивом, а после изменений перезаписываете файл .bin и тогда другой советник прочтёт этот массив уже с внесёнными изменениями.
И если я правильно помню, вы хотите чтобы с этим массивом могли работать несколько советников. Отсюда и был мой первый совет сохранять промежуточные изменения массива в файл .bin и находиться он должен в общей папке терминалов.
Забудьте про .mqh как страшный сон и долго о нём не вспоминайте.
Андрей, у меня к вам какое-то странное отношение. Сам не могу понять какое…
То мне надоедает такой, простите тупизм, то почитав какие вам дают советы и что вы понимаете в этих советах становится жалко вашу психику. Боюсь что вы можете сойти с ума.
Извините, это сказано не для того чтобы обидеть вас.
Теперь по существу. Попытаюсь вам объяснить, на мой взгляд подоходчивей.
Если заполнять массив в теле советника, то файл .mqh тут совсем не при делах. Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ. Чем-бы вы не заполнили массив, не зависимо от того где он объявлен, вы не сможете этот массив сохранить в этом .mqh файле. Самый лучший вариант вам работать с файлом .bin который можно и писать на диск, и читать, и после первоначального заполнения или внесения изменений перезаписывать. После прочтения массива из файла .bin вы просто работаете с этим массивом, а после изменений перезаписываете файл .bin и тогда другой советник прочтёт этот массив уже с внесёнными изменениями.
И если я правильно помню, вы хотите чтобы с этим массивом могли работать несколько советников. Отсюда и был мой первый совет сохранять промежуточные изменения массива в файл .bin и находиться он должен в общей папке терминалов.
Забудьте про .mqh как страшный сон и долго о нём не вспоминайте.
Спасибо Забыть про .mqh я почему то не хочу. Наверное потому что я слегка дотошный человек и раз начал изучать тему .mqh , то хочу изучить ее до определенного конца и по возможности со всех доступных моему пониманию сторон. Поэтому я хочу получить ответ свой вопрос о том можно ли объявить массив в в файле .mqh , а заполнить этот массив( то есть , инициализировать) в Советнике(из Советника) на mql4. Из моего желания получить ответ на этот вопрос вовсе не вытекает того что я буду пользоваться файлом .mqh. Просто я должен знать на будущее ответ на свой вопрос.
ВАШИ СЛОВА, которые вероятно по Вашему мнению являются ответом на мой вопрос " Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ."Я это уже давно понял. И поэтому задаю вопрос не об изменении значений массива который лежит в в файле .mqh , а о заполнении (инициализации) массива который объявлен в файле .mqh , а точнее о заполнении этого массива значениями из Советника на mql 4.
Если это возможно, то в дальнейшем я УЖЕ не планирую изменять данные этого инициализированного массивав файле.mqh( как я пытался делать первоначально). Только инициализация и ничего больше. И свое желание использовать один массив из файла .mqh в разных Советниках я уже так же давно аннулировал после общения здесь на эту тему.
Для меня ответ на этот вопрос содержит определенную интригу потому что пользователь Алексей Федотов и Алексей Степаненко уверенно и однозначно утверждают что инициализировать объявленный в mqh массив из Советника на mql4 можно, а Вы почему то не даете прямого и однозначного ответа на этот вопрос, не смотря на то что я его формулировал неоднократно. К тому же Вы еще и критикуете какие то ответы других участников моей беседы .
Возможно мы с вами не очень быстро понимаем друг друга по причине нашей недостаточной внимательности , которая случается у нас иногда :):):)
Спасибо Забыть про .mqh я почему то не хочу. Наверное потому что я слегка дотошный человек и раз начал изучать тему .mqh , то хочу изучить ее до определенного конца и по возможности со всех доступных моему пониманию сторон. Поэтому я хочу получить ответ свой вопрос о том можно ли объявить массив в в файле .mqh , а заполнить этот массив( то есть , инициализировать) в Советнике(из Советника) на mql4. Из моего желания получить ответ на этот вопрос вовсе не вытекает того что я буду пользоваться файлом .mqh. Просто я должен знать на будущее ответ на свой вопрос.
ВАШИ СЛОВА, которые вероятно по Вашему мнению являются ответом на мой вопрос " Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ."Я это уже давно понял. И поэтому задаю вопрос не об изменении значений массива который лежит в в файле .mqh , а о заполнении (инициализации) массива который объявлен в файле .mqh , а точнее о заполнении этого массива значениями из Советника на mql 4.
Если это возможно, то в дальнейшем я УЖЕ не планирую изменять данные этого инициализированного массивав файле.mqh( как я пытался делать первоначально). Только инициализация и ничего больше. И свое желание использовать один массив из файла .mqh в разных Советниках я уже так же давно аннулировал после общения здесь на эту тему.
Для меня ответ на этот вопрос содержит определенную интригу потому что пользователь Алексей Федотов и Алексей Степаненко уверенно и однозначно утверждают что инициализировать объявленный в mqh массив из Советника на mql4 можно, а Вы почему то не даете прямого и однозначного ответа на этот вопрос, не смотря на то что я его формулировал неоднократно. К тому же Вы еще и критикуете какие то ответы других участников моей беседы .
Возможно мы с вами не очень быстро понимаем друг друга по причине нашей недостаточной внимательности , которая случается у нас иногда :):):)
код во включаемом файле ничем не отличается от кода советника. Компилятор вставляет код мкх файла в место где написано инклуд и компилирует код советника с этой вставкой. Можете по экспериментировать, даже если в коде мкх файла не будет всех переменных и он компилируется с ошибками, его можно вставить в любом месте кода советника. мкх файл при компиляции остается кодом, в отличие от исполняемых файлов советников индикаторов скриптов, которые превращаются в исполняемый файл ex4.
Поэтому без разницы где вы объявите массив или другие переменные. Все так же как и в основном коде.
Спасибо Забыть про .mqh я почему то не хочу. Наверное потому что я слегка дотошный человек и раз начал изучать тему .mqh , то хочу изучить ее до определенного конца и по возможности со всех доступных моему пониманию сторон. Поэтому я хочу получить ответ свой вопрос о том можно ли объявить массив в в файле .mqh , а заполнить этот массив( то есть , инициализировать) в Советнике(из Советника) на mql4. Из моего желания получить ответ на этот вопрос вовсе не вытекает того что я буду пользоваться файлом .mqh. Просто я должен знать на будущее ответ на свой вопрос.
ВАШИ СЛОВА, которые вероятно по Вашему мнению являются ответом на мой вопрос " Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ."Я это уже давно понял. И поэтому задаю вопрос не об изменении значений массива который лежит в в файле .mqh , а о заполнении (инициализации) массива который объявлен в файле .mqh , а точнее о заполнении этого массива значениями из Советника на mql 4.
Если это возможно, то в дальнейшем я УЖЕ не планирую изменять данные этого инициализированного массивав файле.mqh( как я пытался делать первоначально). Только инициализация и ничего больше. И свое желание использовать один массив из файла .mqh в разных Советниках я уже так же давно аннулировал после общения здесь на эту тему.
Для меня ответ на этот вопрос содержит определенную интригу потому что пользователь Алексей Федотов и Алексей Степаненко уверенно и однозначно утверждают что инициализировать объявленный в mqh массив из Советника на mql4 можно, а Вы почему то не даете прямого и однозначного ответа на этот вопрос, не смотря на то что я его формулировал неоднократно. К тому же Вы еще и критикуете какие то ответы других участников моей беседы .
Возможно мы с вами не очень быстро понимаем друг друга по причине нашей недостаточной внимательности , которая случается у нас иногда :):):)
Андрей, вот так выглядит файл .mqh
//+------------------------------------------------------------------+//| MovingAverages.mqh |//| Copyright 2009-2013, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"2009, MetaQuotes Software Corp."#property link"http://www.mql5.com"//+------------------------------------------------------------------+//| Simple Moving Average |//+------------------------------------------------------------------+double SimpleMA(constint position,constint period,constdouble &price[])
{
//---double result=0.0;
//--- check positionif(position>=period-1 && period>0)
{
//--- calculate valuefor(int i=0;i<period;i++) result+=price[position-i];
result/=period;
}
//---return(result);
}
//+------------------------------------------------------------------+//| Exponential Moving Average |//+------------------------------------------------------------------+double ExponentialMA(constint position,constint period,constdouble prev_value,constdouble &price[])
{
//---double result=0.0;
//--- calculate valueif(period>0)
{
double pr=2.0/(period+1.0);
result=price[position]*pr+prev_value*(1-pr);
}
//---return(result);
}
//+------------------------------------------------------------------+//| Smoothed Moving Average |//+------------------------------------------------------------------+double SmoothedMA(constint position,constint period,constdouble prev_value,constdouble &price[])
{
//---double result=0.0;
//--- check positionif(period>0)
{
if(position==period-1)
{
for(int i=0;i<period;i++) result+=price[position-i];
result/=period;
}
if(position>=period)
result=(prev_value*(period-1)+price[position])/period;
}
//---return(result);
}
//+------------------------------------------------------------------+//| Linear Weighted Moving Average |//+------------------------------------------------------------------+double LinearWeightedMA(constint position,constint period,constdouble &price[])
{
//---double result=0.0,sum=0.0;
int i,wsum=0;
//--- calculate valueif(position>=period-1 && period>0)
{
for(i=period;i>0;i--)
{
wsum+=i;
sum+=price[position-i+1]*(period-i+1);
}
result=sum/wsum;
}
//---return(result);
}
//+------------------------------------------------------------------+//| Simple moving average on price array |//+------------------------------------------------------------------+int SimpleMAOnBuffer(constint rates_total,constint prev_calculated,constint begin,
constint period,constdouble& price[],double& buffer[])
{
int i,limit;
//--- check for dataif(period<=1 || rates_total-begin<period) return(0);
//--- save as_series flagsbool as_series_price=ArrayGetAsSeries(price);
bool as_series_buffer=ArrayGetAsSeries(buffer);
if(as_series_price) ArraySetAsSeries(price,false);
if(as_series_buffer) ArraySetAsSeries(buffer,false);
//--- first calculation or number of bars was changedif(prev_calculated==0) // first calculation
{
limit=period+begin;
//--- set empty value for first barsfor(i=0;i<limit-1;i++) buffer[i]=0.0;
//--- calculate first visible valuedouble firstValue=0;
for(i=begin;i<limit;i++)
firstValue+=price[i];
firstValue/=period;
buffer[limit-1]=firstValue;
}
else limit=prev_calculated-1;
//--- main loopfor(i=limit;i<rates_total;i++)
buffer[i]=buffer[i-1]+(price[i]-price[i-period])/period;
//--- restore as_series flagsif(as_series_price) ArraySetAsSeries(price,true);
if(as_series_buffer) ArraySetAsSeries(buffer,true);
//---return(rates_total);
}
//+------------------------------------------------------------------+//| Exponential moving average on price array |//+------------------------------------------------------------------+int ExponentialMAOnBuffer(constint rates_total,constint prev_calculated,constint begin,
constint period,constdouble& price[],double& buffer[])
{
int i,limit;
//--- check for dataif(period<=1 || rates_total-begin<period) return(0);
double dSmoothFactor=2.0/(1.0+period);
//--- save as_series flagsbool as_series_price=ArrayGetAsSeries(price);
bool as_series_buffer=ArrayGetAsSeries(buffer);
if(as_series_price) ArraySetAsSeries(price,false);
if(as_series_buffer) ArraySetAsSeries(buffer,false);
//--- first calculation or number of bars was changedif(prev_calculated==0)
{
limit=period+begin;
//--- set empty value for first barsfor(i=0;i<begin;i++) buffer[i]=0.0;
//--- calculate first visible value
buffer[begin]=price[begin];
for(i=begin+1;i<limit;i++)
buffer[i]=price[i]*dSmoothFactor+buffer[i-1]*(1.0-dSmoothFactor);
}
else limit=prev_calculated-1;
//--- main loopfor(i=limit;i<rates_total;i++)
buffer[i]=price[i]*dSmoothFactor+buffer[i-1]*(1.0-dSmoothFactor);
//--- restore as_series flagsif(as_series_price) ArraySetAsSeries(price,true);
if(as_series_buffer) ArraySetAsSeries(buffer,true);
//---return(rates_total);
}
//+------------------------------------------------------------------+//| Linear weighted moving average on price array |//+------------------------------------------------------------------+int LinearWeightedMAOnBuffer(constint rates_total,constint prev_calculated,constint begin,
constint period,constdouble& price[],double& buffer[],int &weightsum)
{
int i,limit;
double sum;
//--- check for dataif(period<=1 || rates_total-begin<period) return(0);
//--- save as_series flagsbool as_series_price=ArrayGetAsSeries(price);
bool as_series_buffer=ArrayGetAsSeries(buffer);
if(as_series_price) ArraySetAsSeries(price,false);
if(as_series_buffer) ArraySetAsSeries(buffer,false);
//--- first calculation or number of bars was changedif(prev_calculated==0)
{
weightsum=0;
limit=period+begin;
//--- set empty value for first barsfor(i=0;i<limit;i++) buffer[i]=0.0;
//--- calculate first visible valuedouble firstValue=0;
for(i=begin;i<limit;i++)
{
int k=i-begin+1;
weightsum+=k;
firstValue+=k*price[i];
}
firstValue/=(double)weightsum;
buffer[limit-1]=firstValue;
}
else limit=prev_calculated-1;
//--- main loopfor(i=limit;i<rates_total;i++)
{
sum=0;
for(int j=0;j<period;j++) sum+=(period-j)*price[i-j];
buffer[i]=sum/weightsum;
}
//--- restore as_series flagsif(as_series_price) ArraySetAsSeries(price,true);
if(as_series_buffer) ArraySetAsSeries(buffer,true);
//---return(rates_total);
}
//+------------------------------------------------------------------+//| Smoothed moving average on price array |//+------------------------------------------------------------------+int SmoothedMAOnBuffer(constint rates_total,constint prev_calculated,constint begin,
constint period,constdouble& price[],double& buffer[])
{
int i,limit;
//--- check for dataif(period<=1 || rates_total-begin<period) return(0);
//--- save as_series flagsbool as_series_price=ArrayGetAsSeries(price);
bool as_series_buffer=ArrayGetAsSeries(buffer);
if(as_series_price) ArraySetAsSeries(price,false);
if(as_series_buffer) ArraySetAsSeries(buffer,false);
//--- first calculation or number of bars was changedif(prev_calculated==0)
{
limit=period+begin;
//--- set empty value for first barsfor(i=0;i<limit-1;i++) buffer[i]=0.0;
//--- calculate first visible valuedouble firstValue=0;
for(i=begin;i<limit;i++)
firstValue+=price[i];
firstValue/=period;
buffer[limit-1]=firstValue;
}
else limit=prev_calculated-1;
//--- main loopfor(i=limit;i<rates_total;i++)
buffer[i]=(buffer[i-1]*(period-1)+price[i])/period;
//--- restore as_series flagsif(as_series_price) ArraySetAsSeries(price,true);
if(as_series_buffer) ArraySetAsSeries(buffer,true);
//---return(rates_total);
}
//+------------------------------------------------------------------+
Находится он тут
И любая из этих функций может быть добавлена в советник при компиляции. Те функции к которым советник не обращается в советник включены не будут. Но ведь можно взять любую из этих функций и скопировать в код советника. Ведь ничего не изменится.
Точно так-же и с массивом. Его можно объявить в .mqh и можно объявить в коде советника. Ничего не изменится. Можно объявить динамическим, можно статическим. Можно заполнять в коде советника, можно написать функцию заполнения в .mqh или как вы показали где-то раньше уже заполненный массив.
Что осталось непонятным? Ведь я долго вообще не встревал. Вам говорили «можно» вы опять задавали вопрос. Опять «можно» опять вопрос. Вот я и подумал, что вопрос в другом.
Спасибо Забыть про .mqh я почему то не хочу. Наверное потому что я слегка дотошный человек и раз начал изучать тему .mqh , то хочу изучить ее до определенного конца и по возможности со всех доступных моему пониманию сторон. Поэтому я хочу получить ответ свой вопрос о том можно ли объявить массив в в файле .mqh , а заполнить этот массив( то есть , инициализировать) в Советнике(из Советника) на mql4. Из моего желания получить ответ на этот вопрос вовсе не вытекает того что я буду пользоваться файлом .mqh. Просто я должен знать на будущее ответ на свой вопрос.
ВАШИ СЛОВА, которые вероятно по Вашему мнению являются ответом на мой вопрос " Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ."Я это уже давно понял. И поэтому задаю вопрос не об изменении значений массива который лежит в в файле .mqh , а о заполнении (инициализации) массива который объявлен в файле .mqh , а точнее о заполнении этого массива значениями из Советника на mql 4.
Если это возможно, то в дальнейшем я УЖЕ не планирую изменять данные этого инициализированного массивав файле.mqh( как я пытался делать первоначально). Только инициализация и ничего больше. И свое желание использовать один массив из файла .mqh в разных Советниках я уже так же давно аннулировал после общения здесь на эту тему.
Для меня ответ на этот вопрос содержит определенную интригу потому что пользователь Алексей Федотов и Алексей Степаненко уверенно и однозначно утверждают что инициализировать объявленный в mqh массив из Советника на mql4 можно, а Вы почему то не даете прямого и однозначного ответа на этот вопрос, не смотря на то что я его формулировал неоднократно. К тому же Вы еще и критикуете какие то ответы других участников моей беседы .
Возможно мы с вами не очень быстро понимаем друг друга по причине нашей недостаточной внимательности , которая случается у нас иногда :):):)
"Чтобы правильно задать вопрос, надо знать 80% ответа."
Файл .mqh именно что "включается" в исходный текст программы, т.е., "становится его частью", поэтому абсолютно без разницы, где объявлять и где (после объявления) инициализировать массив.
И даже писать в файл .mqh тоже, в принципе, можно, но на вашем текущем уровне понимания лучше считать, что нет.
"Чтобы правильно задать вопрос, надо знать 80% ответа."
Файл .mqh именно что "включается" в исходный текст программы, т.е., "становится его частью", поэтому абсолютно без разницы, где объявлять и где (после объявления) инициализировать массив.
И даже писать в файл .mqh тоже, в принципе, можно, но на вашем текущем уровне понимания лучше считать, что нет.
Ок. всем спасибо за участие в беседе со мной . Она была для меня очень познавательной. Задавать больше вопросов по этой теме пока больше не планирую. Считаю нужным сначала осмыслить как следует полученную информацию.
JRandomTrader #: И даже писать в файл .mqh тоже, в принципе, можно, но на вашем текущем уровне понимания лучше считать, что нет.
Именно это(писать в файл . mqh)я и хотел понять. Как записать данные в массив (инициализировать его) в файл mqh из Советника на mql4.
Понимаю что Советнику без разницы где будет инициализирован массив. Если в теле советника , то он сразу обратится к этому массиву. Если в файле mqh, то Советник сначала возьмет массив из файла mqh и после этого вставит массив в свой код , а потом так же обратится к этому же массиву.
Я у всех спрашиваю о том как инициализировать массив объявленный в файле mqh, а мне вместо ответа на этот вопрос все говорят что это не имеет смысла и что это нецелесообразно . И я с этим согласен. Код массива один и тот же , просто может находится в разных местах. В теле и в файле. Но вопрос то я задавал не о целесообразности инициализации массива в файле mqh, а о том как проинициализировать , или как вы сказали писать данные в массив который объявлен в mqh.
Просто я не знал и даже не догадывался , что процесс инициализации массива объявленного в файле mqh недоступен моему пониманию. Вероятно участники беседы со мной намного лучше проинформированы об уровне моего понимания и о моей способности что то понять , чем я сам. Забавный парадокс.....
Если бы мне прислали код с комментариями при помощи которого можно инициализировать массив объявленный во включаемом файле из Советника на mql4, я был бы очень признателен , и на этом успокоился бы...
Если в теле советника , то он сразу обратится к этому массиву. Если в файле mqh, то Советник сначала возьмет массив из файла mqh и после этого вставит массив в свой код , а потом так же обратится к этому же массиву.
Вот в этом ваше ключевое заблуждение, как мне видится.
Файл .mqh - это не "советник возьмёт из файла", а "компилятор возьмёт этот файл и вставит в тело советника".
Писать в файл .mqh, в принципе, возможно, но, вероятно, это совсем не то, чего вы хотите добиться. Любые изменения в этом файле повлияют только на последующие компиляции советников, использующих этот файл.
Вот в этом ваше ключевое заблуждение, как мне видится.
Файл .mqh - это не "советник возьмёт из файла", а "компилятор возьмёт этот файл и вставит в тело советника".
Спасибо. Но мне кажется , что это не заблуждение и тем более не ключевое. А просто моя не достаточно точная формулировка . Ведь если я не ошибаюсь, результат компиляции будет одинаковым как в случае если инициализированный массив будет лежать в теле Советника , так и в случае если он будет лежать во включаемом файле. И поэтому , до некоторой степени я согласен что инициализировать массив во включаемом файле , до некоторой степени, не имеет смысла. Но тем не менее , я хочу научиться инициализировать массив который объявлен в во вкл. файле, а не в теле советника.
Спасибо. Но мне кажется , что это не заблуждение и тем более не ключевое. А просто моя не достаточно точная формулировка . Ведь если я не ошибаюсь, результат компиляции будет одинаковым как в случае если инициализированный массив будет лежать в теле Советника , так и в случае если он будет лежать во включаемом файле.
Результат компиляции будет одинаковым, в обоих случаях в результате инициализированный массив, вместе с телом советника, будет лежать в файле .ex4
Понятно что пустой массив до его заполнения , (то есть только объявленный, но не заполненный массив), лежит в теле ( в коде) Советника. Потом в теле этого же Советника этот массив инициализируется, то есть ,заполняется значениями.
ВОПРОС. А получится у меня только объявить этот же массив но не в теле Советника , а в файле mqh . А заполнить объявленный в файле mqh массив значениями (инициализировать) в теле Советника?
Обращаю Ваше внимание на то, что я говорю не об изменении значений уже заполненного массива в файле mqh , а о первоначальном заполнении пустого массива в файле mqh первоначальными значениями.
В предыдущих постах однозначно говорилось , что изменять уже заполненные значения массива в файле mqh при помощи кода mql4 невозможно.
Я же в своем вопросе спрашиваю не об изменении а о первоначальном заполнении значениями.
Спасибо
Андрей, у меня к вам какое-то странное отношение. Сам не могу понять какое…
То мне надоедает такой, простите тупизм, то почитав какие вам дают советы и что вы понимаете в этих советах становится жалко вашу психику. Боюсь что вы можете сойти с ума.
Извините, это сказано не для того чтобы обидеть вас.
Теперь по существу. Попытаюсь вам объяснить, на мой взгляд подоходчивей.
Если заполнять массив в теле советника, то файл .mqh тут совсем не при делах. Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ. Чем-бы вы не заполнили массив, не зависимо от того где он объявлен, вы не сможете этот массив сохранить в этом .mqh файле. Самый лучший вариант вам работать с файлом .bin который можно и писать на диск, и читать, и после первоначального заполнения или внесения изменений перезаписывать. После прочтения массива из файла .bin вы просто работаете с этим массивом, а после изменений перезаписываете файл .bin и тогда другой советник прочтёт этот массив уже с внесёнными изменениями.
И если я правильно помню, вы хотите чтобы с этим массивом могли работать несколько советников. Отсюда и был мой первый совет сохранять промежуточные изменения массива в файл .bin и находиться он должен в общей папке терминалов.
Забудьте про .mqh как страшный сон и долго о нём не вспоминайте.
Андрей, у меня к вам какое-то странное отношение. Сам не могу понять какое…
То мне надоедает такой, простите тупизм, то почитав какие вам дают советы и что вы понимаете в этих советах становится жалко вашу психику. Боюсь что вы можете сойти с ума.
Извините, это сказано не для того чтобы обидеть вас.
Теперь по существу. Попытаюсь вам объяснить, на мой взгляд подоходчивей.
Если заполнять массив в теле советника, то файл .mqh тут совсем не при делах. Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ. Чем-бы вы не заполнили массив, не зависимо от того где он объявлен, вы не сможете этот массив сохранить в этом .mqh файле. Самый лучший вариант вам работать с файлом .bin который можно и писать на диск, и читать, и после первоначального заполнения или внесения изменений перезаписывать. После прочтения массива из файла .bin вы просто работаете с этим массивом, а после изменений перезаписываете файл .bin и тогда другой советник прочтёт этот массив уже с внесёнными изменениями.
И если я правильно помню, вы хотите чтобы с этим массивом могли работать несколько советников. Отсюда и был мой первый совет сохранять промежуточные изменения массива в файл .bin и находиться он должен в общей папке терминалов.
Забудьте про .mqh как страшный сон и долго о нём не вспоминайте.
Спасибо Забыть про .mqh я почему то не хочу. Наверное потому что я слегка дотошный человек и раз начал изучать тему .mqh , то хочу изучить ее до определенного конца и по возможности со всех доступных моему пониманию сторон. Поэтому я хочу получить ответ свой вопрос о том можно ли объявить массив в в файле .mqh , а заполнить этот массив( то есть , инициализировать) в Советнике(из Советника) на mql4. Из моего желания получить ответ на этот вопрос вовсе не вытекает того что я буду пользоваться файлом .mqh. Просто я должен знать на будущее ответ на свой вопрос.
ВАШИ СЛОВА, которые вероятно по Вашему мнению являются ответом на мой вопрос " Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ." Я это уже давно понял. И поэтому задаю вопрос не об изменении значений массива который лежит в в файле .mqh , а о заполнении (инициализации) массива который объявлен в файле .mqh , а точнее о заполнении этого массива значениями из Советника на mql 4.
Если это возможно, то в дальнейшем я УЖЕ не планирую изменять данные этого инициализированного массива в файле.mqh( как я пытался делать первоначально). Только инициализация и ничего больше. И свое желание использовать один массив из файла .mqh в разных Советниках я уже так же давно аннулировал после общения здесь на эту тему.
Для меня ответ на этот вопрос содержит определенную интригу потому что пользователь Алексей Федотов и Алексей Степаненко уверенно и однозначно утверждают что инициализировать объявленный в mqh массив из Советника на mql4 можно, а Вы почему то не даете прямого и однозначного ответа на этот вопрос, не смотря на то что я его формулировал неоднократно. К тому же Вы еще и критикуете какие то ответы других участников моей беседы .
Возможно мы с вами не очень быстро понимаем друг друга по причине нашей недостаточной внимательности , которая случается у нас иногда :):):)
Спасибо Забыть про .mqh я почему то не хочу. Наверное потому что я слегка дотошный человек и раз начал изучать тему .mqh , то хочу изучить ее до определенного конца и по возможности со всех доступных моему пониманию сторон. Поэтому я хочу получить ответ свой вопрос о том можно ли объявить массив в в файле .mqh , а заполнить этот массив( то есть , инициализировать) в Советнике(из Советника) на mql4. Из моего желания получить ответ на этот вопрос вовсе не вытекает того что я буду пользоваться файлом .mqh. Просто я должен знать на будущее ответ на свой вопрос.
ВАШИ СЛОВА, которые вероятно по Вашему мнению являются ответом на мой вопрос " Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ." Я это уже давно понял. И поэтому задаю вопрос не об изменении значений массива который лежит в в файле .mqh , а о заполнении (инициализации) массива который объявлен в файле .mqh , а точнее о заполнении этого массива значениями из Советника на mql 4.
Если это возможно, то в дальнейшем я УЖЕ не планирую изменять данные этого инициализированного массива в файле.mqh( как я пытался делать первоначально). Только инициализация и ничего больше. И свое желание использовать один массив из файла .mqh в разных Советниках я уже так же давно аннулировал после общения здесь на эту тему.
Для меня ответ на этот вопрос содержит определенную интригу потому что пользователь Алексей Федотов и Алексей Степаненко уверенно и однозначно утверждают что инициализировать объявленный в mqh массив из Советника на mql4 можно, а Вы почему то не даете прямого и однозначного ответа на этот вопрос, не смотря на то что я его формулировал неоднократно. К тому же Вы еще и критикуете какие то ответы других участников моей беседы .
Возможно мы с вами не очень быстро понимаем друг друга по причине нашей недостаточной внимательности , которая случается у нас иногда :):):)
код во включаемом файле ничем не отличается от кода советника. Компилятор вставляет код мкх файла в место где написано инклуд и компилирует код советника с этой вставкой. Можете по экспериментировать, даже если в коде мкх файла не будет всех переменных и он компилируется с ошибками, его можно вставить в любом месте кода советника. мкх файл при компиляции остается кодом, в отличие от исполняемых файлов советников индикаторов скриптов, которые превращаются в исполняемый файл ex4.
Поэтому без разницы где вы объявите массив или другие переменные. Все так же как и в основном коде.
Спасибо Забыть про .mqh я почему то не хочу. Наверное потому что я слегка дотошный человек и раз начал изучать тему .mqh , то хочу изучить ее до определенного конца и по возможности со всех доступных моему пониманию сторон. Поэтому я хочу получить ответ свой вопрос о том можно ли объявить массив в в файле .mqh , а заполнить этот массив( то есть , инициализировать) в Советнике(из Советника) на mql4. Из моего желания получить ответ на этот вопрос вовсе не вытекает того что я буду пользоваться файлом .mqh. Просто я должен знать на будущее ответ на свой вопрос.
ВАШИ СЛОВА, которые вероятно по Вашему мнению являются ответом на мой вопрос " Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ." Я это уже давно понял. И поэтому задаю вопрос не об изменении значений массива который лежит в в файле .mqh , а о заполнении (инициализации) массива который объявлен в файле .mqh , а точнее о заполнении этого массива значениями из Советника на mql 4.
Если это возможно, то в дальнейшем я УЖЕ не планирую изменять данные этого инициализированного массива в файле.mqh( как я пытался делать первоначально). Только инициализация и ничего больше. И свое желание использовать один массив из файла .mqh в разных Советниках я уже так же давно аннулировал после общения здесь на эту тему.
Для меня ответ на этот вопрос содержит определенную интригу потому что пользователь Алексей Федотов и Алексей Степаненко уверенно и однозначно утверждают что инициализировать объявленный в mqh массив из Советника на mql4 можно, а Вы почему то не даете прямого и однозначного ответа на этот вопрос, не смотря на то что я его формулировал неоднократно. К тому же Вы еще и критикуете какие то ответы других участников моей беседы .
Возможно мы с вами не очень быстро понимаем друг друга по причине нашей недостаточной внимательности , которая случается у нас иногда :):):)
Андрей, вот так выглядит файл .mqh
Находится он тут
И любая из этих функций может быть добавлена в советник при компиляции. Те функции к которым советник не обращается в советник включены не будут. Но ведь можно взять любую из этих функций и скопировать в код советника. Ведь ничего не изменится.
Точно так-же и с массивом. Его можно объявить в .mqh и можно объявить в коде советника. Ничего не изменится. Можно объявить динамическим, можно статическим. Можно заполнять в коде советника, можно написать функцию заполнения в .mqh или как вы показали где-то раньше уже заполненный массив.
Что осталось непонятным? Ведь я долго вообще не встревал. Вам говорили «можно» вы опять задавали вопрос. Опять «можно» опять вопрос. Вот я и подумал, что вопрос в другом.
На этом я опять ныряю в тину и молчу…
Спасибо Забыть про .mqh я почему то не хочу. Наверное потому что я слегка дотошный человек и раз начал изучать тему .mqh , то хочу изучить ее до определенного конца и по возможности со всех доступных моему пониманию сторон. Поэтому я хочу получить ответ свой вопрос о том можно ли объявить массив в в файле .mqh , а заполнить этот массив( то есть , инициализировать) в Советнике(из Советника) на mql4. Из моего желания получить ответ на этот вопрос вовсе не вытекает того что я буду пользоваться файлом .mqh. Просто я должен знать на будущее ответ на свой вопрос.
ВАШИ СЛОВА, которые вероятно по Вашему мнению являются ответом на мой вопрос " Всё что пишется в файле .mqh может быть изменено ИСКЛЮЧИТЕЛЬНО ВРУЧНУЮ С КЛАВИАТУРЫ." Я это уже давно понял. И поэтому задаю вопрос не об изменении значений массива который лежит в в файле .mqh , а о заполнении (инициализации) массива который объявлен в файле .mqh , а точнее о заполнении этого массива значениями из Советника на mql 4.
Если это возможно, то в дальнейшем я УЖЕ не планирую изменять данные этого инициализированного массива в файле.mqh( как я пытался делать первоначально). Только инициализация и ничего больше. И свое желание использовать один массив из файла .mqh в разных Советниках я уже так же давно аннулировал после общения здесь на эту тему.
Для меня ответ на этот вопрос содержит определенную интригу потому что пользователь Алексей Федотов и Алексей Степаненко уверенно и однозначно утверждают что инициализировать объявленный в mqh массив из Советника на mql4 можно, а Вы почему то не даете прямого и однозначного ответа на этот вопрос, не смотря на то что я его формулировал неоднократно. К тому же Вы еще и критикуете какие то ответы других участников моей беседы .
Возможно мы с вами не очень быстро понимаем друг друга по причине нашей недостаточной внимательности , которая случается у нас иногда :):):)
"Чтобы правильно задать вопрос, надо знать 80% ответа."
Файл .mqh именно что "включается" в исходный текст программы, т.е., "становится его частью", поэтому абсолютно без разницы, где объявлять и где (после объявления) инициализировать массив.
И даже писать в файл .mqh тоже, в принципе, можно, но на вашем текущем уровне понимания лучше считать, что нет.
"Чтобы правильно задать вопрос, надо знать 80% ответа."
Файл .mqh именно что "включается" в исходный текст программы, т.е., "становится его частью", поэтому абсолютно без разницы, где объявлять и где (после объявления) инициализировать массив.
И даже писать в файл .mqh тоже, в принципе, можно, но на вашем текущем уровне понимания лучше считать, что нет.
Ок. всем спасибо за участие в беседе со мной . Она была для меня очень познавательной. Задавать больше вопросов по этой теме пока больше не планирую. Считаю нужным сначала осмыслить как следует полученную информацию.
И даже писать в файл .mqh тоже, в принципе, можно, но на вашем текущем уровне понимания лучше считать, что нет.
Именно это(писать в файл . mqh) я и хотел понять. Как записать данные в массив (инициализировать его) в файл mqh из Советника на mql4.
Понимаю что Советнику без разницы где будет инициализирован массив. Если в теле советника , то он сразу обратится к этому массиву. Если в файле mqh, то Советник сначала возьмет массив из файла mqh и после этого вставит массив в свой код , а потом так же обратится к этому же массиву.
Я у всех спрашиваю о том как инициализировать массив объявленный в файле mqh, а мне вместо ответа на этот вопрос все говорят что это не имеет смысла и что это нецелесообразно . И я с этим согласен. Код массива один и тот же , просто может находится в разных местах. В теле и в файле. Но вопрос то я задавал не о целесообразности инициализации массива в файле mqh, а о том как проинициализировать , или как вы сказали писать данные в массив который объявлен в mqh.
Просто я не знал и даже не догадывался , что процесс инициализации массива объявленного в файле mqh недоступен моему пониманию. Вероятно участники беседы со мной намного лучше проинформированы об уровне моего понимания и о моей способности что то понять , чем я сам. Забавный парадокс.....
Если бы мне прислали код с комментариями при помощи которого можно инициализировать массив объявленный во включаемом файле из Советника на mql4, я был бы очень признателен , и на этом успокоился бы...
Если в теле советника , то он сразу обратится к этому массиву. Если в файле mqh, то Советник сначала возьмет массив из файла mqh и после этого вставит массив в свой код , а потом так же обратится к этому же массиву.
Вот в этом ваше ключевое заблуждение, как мне видится.
Файл .mqh - это не "советник возьмёт из файла", а "компилятор возьмёт этот файл и вставит в тело советника".
Писать в файл .mqh, в принципе, возможно, но, вероятно, это совсем не то, чего вы хотите добиться. Любые изменения в этом файле повлияют только на последующие компиляции советников, использующих этот файл.Вот в этом ваше ключевое заблуждение, как мне видится.
Файл .mqh - это не "советник возьмёт из файла", а "компилятор возьмёт этот файл и вставит в тело советника".
Спасибо. Но мне кажется , что это не заблуждение и тем более не ключевое. А просто моя не достаточно точная формулировка . Ведь если я не ошибаюсь, результат компиляции будет одинаковым как в случае если инициализированный массив будет лежать в теле Советника , так и в случае если он будет лежать во включаемом файле. И поэтому , до некоторой степени я согласен что инициализировать массив во включаемом файле , до некоторой степени, не имеет смысла. Но тем не менее , я хочу научиться инициализировать массив который объявлен в во вкл. файле, а не в теле советника.
Спасибо. Но мне кажется , что это не заблуждение и тем более не ключевое. А просто моя не достаточно точная формулировка . Ведь если я не ошибаюсь, результат компиляции будет одинаковым как в случае если инициализированный массив будет лежать в теле Советника , так и в случае если он будет лежать во включаемом файле.
Результат компиляции будет одинаковым, в обоих случаях в результате инициализированный массив, вместе с телом советника, будет лежать в файле .ex4