C-4: Кто-нибудь знает, есть ли ключ у компилятора, позволяющий получать сообщения о неиспользуемых функциях и переменных, как это сделано в MQL4?
А как это сделано в mql4 ?
Спрашивал насчёт не вывода предупреждений о неиспользуемых функциях, Ренат ответил, что не будет. В связи с использованием подключаемых библиотек. Раньше было в старом билде. Теперь - нету. Очень неудобно искать те функции в теле советника, которые не используются. О неиспользуемых переменных он говорит только, если находит их в теле какой-либо функции, а не start() или OnTick()
Спрашивал насчёт не вывода предупреждений о неиспользуемых функциях, Ренат ответил, что не будет. В связи с использованием подключаемых библиотек. Раньше было в старом билде. Теперь - нету. Очень неудобно искать те функции в теле советника, которые не используются. О неиспользуемых переменных он говорит только, если находит их в теле какой-либо функции, а не start() или OnTick()
Потому что в ООП не функции, а методы. В каждой библиотеке может быть куча классов с множеством методов, часть из которых не используется. Дополнительно классы также обращаются к другим библиотекам, часть методов которых тоже не используются. В результате чего может получиться огромная портянка неиспользуемых методов.
Судя по объёму скомпилированного кода, компилятор автоматом исключает неиспользуемые методы. Т.е. нет никакого смысла искать их самостоятельно, т.к. эту работу выполняет компилятор.
Потому что в ООП не функции, а методы. В каждой библиотеке может быть куча классов с множеством методов, часть из которых не используется. Дополнительно классы также обращаются к другим библиотекам, часть методов которых тоже не используются. В результате чего может получиться огромная портянка неиспользуемых методов.
Судя по объёму скомпилированного кода, компилятор автоматом исключает неиспользуемые методы. Т.е. нет никакого смысла искать их самостоятельно, т.к. эту работу выполняет компилятор.
Это-то как раз не проблема. Проблема именно поиск неиспользуемых методов в своих классах. У меня только своих методов больше пятисот. Взаимосвязи очень сложные. Рудиментарный код неизбежен. Быстро посмотреть что уже неиспользуется бывает очень полезно.
Потому что в ООП не функции, а методы. В каждой библиотеке может быть куча классов с множеством методов, часть из которых не используется. Дополнительно классы также обращаются к другим библиотекам, часть методов которых тоже не используются. В результате чего может получиться огромная портянка неиспользуемых методов.
Судя по объёму скомпилированного кода, компилятор автоматом исключает неиспользуемые методы. Т.е. нет никакого смысла искать их самостоятельно, т.к. эту работу выполняет компилятор.
Юрий, это-то естественно. Но вот когда отдаёшь исходник заказчику - хочется там подмести. И начинается хождение по мукам. Шаблонов-то не много - по нескольку для определённых классов ТС. Приходится подчищать не задействованные в данном случае функции. Хотелось бы иметь "волшебную кнопку", указующую на неиспользуемые функции и переменные только в теле советника.
Надеюсь обсуждение предыдущего вопроса завершено. Трудно понять когда тема закрыта и уместно задать свой вопрос. Подскажите. Не могу понять как заполнить один двухмерный массив результатами вычислений St_handle и MA_handle, получается передавать только в одномерный.
/+------------------------------------------------------------------+
//| 11.mq5 |//| Copyright 2014, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2014, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"#property indicator_separate_window#property indicator_minimum0#property indicator_maximum100#property indicator_buffers1#property indicator_plots1//--- plot Label1#property indicator_label1 "Label1"#property indicator_type1 DRAW_LINE#property indicator_color1 clrRed#property indicator_style1 STYLE_SOLID#property indicator_width1 1//--- input parametersinputint Input1=0;
inputint Input2=0;
//--- indicator buffersdouble Label1Buffer[];
double MA[10000][400];
int St_handle;
int MA_handle;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingSetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---int Kp =51; // с Kp начанается К% на Kp_end заканчиваетсяint Kp_end =400;// с Kp начанается К% на Kp_end заканчиваетсяint MAp =2; // с MAp начанается D% на MAp_end заканчиваетсяint MAp_end=31; // с MAp начанается D% на MA_end заканчиваетсяENUM_STO_PRICE price_field=1; // цена расчета стохастика 0 Low/High 1 Close/Close
St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field);
for(MAp=2;MAp<MAp_end;MAp++)
{
MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle);
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
C-4: Это-то как раз не проблема. Проблема именно поиск неиспользуемых методов в своих классах.
Что значит: неиспользуемые методы в своих классах? В ООП такое не практикуется. Нормальный программист в ООП, в отличие от алгоритмического программирования, создаёт классы со всеми необходимыми полями и методами, что называется на все случаи жизни, поскольку этот же класс может впоследствии пригодиться и в других приложениях или войти в библиотеку классов. Я уже не говорю про то, что даже в рамках одного проекта лучше сразу создавать полноценные классы, а не урезанные, чтобы потом не пришлось лазить по исходникам и добавлять необходимые поля и методы.
В ООП всякая экономия, к которой многие привыкают в алгоритмическом программировании, только боком вылазит впоследствии. Все, что не используется, должен исключать из кода компилятор, а не программист.
Конечно же в ООП исходники получаются большего объёма по сравнению с алгоритмическим программированием. Но это не недостаток, а преимущество, т.к. значительная часть "лишнего" кода в данном проекте, может быть многократно применена в других проектах.
C-4:
У меня только своих методов больше пятисот. Взаимосвязи очень сложные. Рудиментарный код неизбежен. Быстро посмотреть что уже неиспользуется бывает очень полезно.
Не надо пытаться лепить горбатого, т.е. засовывать всё в один класс. Нужно создавать библиотеки классов, т.е. разбивать функционал по отдельным классам и не забывать вставлять комментарии к этому хозяйству и тогда всё упорядочивается. Я тоже первоначально, когда начал изучать Java после Pascal пытался по старой привычке всё делать одним куском, т.е. практически вместо того, чтобы использовать ООП, создавал один класс, в который запихивал всё необходимое для конкретной задачи, т.е. как в алгоритмическом программировании. Получалась неуниверсальная каша, которую в дальнейшем уже невозможно никуда применить, не говоря уже про то, что ногу сломишь разбираться в таком коде.
Подскажите. Не могу понять как заполнить один двухмерный массив результатами вычислений St_handle и MA_handle, получается передавать только в одномерный.
А смысл? Т.е. зачем лепить горбатого, вместо того, чтобы применять бритву Оккама? Т.е. в чём преимущество двумерного массива перед двумя одномерными? Ведь вам сначала нужно в двумерный что-то запихать из двух одномерных, созданных по умолчанию индикаторами, а потом что-то оттуда вытаскивать. Лишнюю работу делаете и других пытаетесь в неё втянуть.
Если бы была проблема с одномерными массивами, тогда овчинка стоила бы выделки.
Полазив по форуму наткнулся на то сколько это памяти займёт, много! Решил заполнять одномерный массив, искать в нем сигнал, перезаписывать и опять искать сигнал. пока хочется 10К циклов. Вроде этого. Один-два поиска в час мне хватит.
St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field); // создание хэндла стохастика for(MAp=1;MAp<MAp_end;MAp++) //перебор сглаживаний
{
MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle); // создание хэндла сглаженного стохастикаCopyBuffer(MA_handle,0,0,400,MA); // заполнение одномерного массива значениями стохастикаif(MA[1]>6) Alert(MA[1]); // начинается поиск сигнала
}
Здраствуйте!
Не могу разобратся какой интегер нужно для отображения графического объекта
на всех тайм фреймах.
Спасибо.
OBJ_ALL_PERIODS=2097151
Кто-нибудь знает, есть ли ключ у компилятора, позволяющий получать сообщения о неиспользуемых функциях и переменных, как это сделано в MQL4?
А как это сделано в mql4 ?
Спрашивал насчёт не вывода предупреждений о неиспользуемых функциях, Ренат ответил, что не будет. В связи с использованием подключаемых библиотек. Раньше было в старом билде. Теперь - нету. Очень неудобно искать те функции в теле советника, которые не используются. О неиспользуемых переменных он говорит только, если находит их в теле какой-либо функции, а не start() или OnTick()
А как это сделано в mql4 ?
Спрашивал насчёт не вывода предупреждений о неиспользуемых функциях, Ренат ответил, что не будет. В связи с использованием подключаемых библиотек. Раньше было в старом билде. Теперь - нету. Очень неудобно искать те функции в теле советника, которые не используются. О неиспользуемых переменных он говорит только, если находит их в теле какой-либо функции, а не start() или OnTick()
Потому что в ООП не функции, а методы. В каждой библиотеке может быть куча классов с множеством методов, часть из которых не используется. Дополнительно классы также обращаются к другим библиотекам, часть методов которых тоже не используются. В результате чего может получиться огромная портянка неиспользуемых методов.
Судя по объёму скомпилированного кода, компилятор автоматом исключает неиспользуемые методы. Т.е. нет никакого смысла искать их самостоятельно, т.к. эту работу выполняет компилятор.
Потому что в ООП не функции, а методы. В каждой библиотеке может быть куча классов с множеством методов, часть из которых не используется. Дополнительно классы также обращаются к другим библиотекам, часть методов которых тоже не используются. В результате чего может получиться огромная портянка неиспользуемых методов.
Судя по объёму скомпилированного кода, компилятор автоматом исключает неиспользуемые методы. Т.е. нет никакого смысла искать их самостоятельно, т.к. эту работу выполняет компилятор.
Потому что в ООП не функции, а методы. В каждой библиотеке может быть куча классов с множеством методов, часть из которых не используется. Дополнительно классы также обращаются к другим библиотекам, часть методов которых тоже не используются. В результате чего может получиться огромная портянка неиспользуемых методов.
Судя по объёму скомпилированного кода, компилятор автоматом исключает неиспользуемые методы. Т.е. нет никакого смысла искать их самостоятельно, т.к. эту работу выполняет компилятор.
Надеюсь обсуждение предыдущего вопроса завершено. Трудно понять когда тема закрыта и уместно задать свой вопрос. Подскажите. Не могу понять как заполнить один двухмерный массив результатами вычислений St_handle и MA_handle, получается передавать только в одномерный.
Это-то как раз не проблема. Проблема именно поиск неиспользуемых методов в своих классах.
Что значит: неиспользуемые методы в своих классах? В ООП такое не практикуется. Нормальный программист в ООП, в отличие от алгоритмического программирования, создаёт классы со всеми необходимыми полями и методами, что называется на все случаи жизни, поскольку этот же класс может впоследствии пригодиться и в других приложениях или войти в библиотеку классов. Я уже не говорю про то, что даже в рамках одного проекта лучше сразу создавать полноценные классы, а не урезанные, чтобы потом не пришлось лазить по исходникам и добавлять необходимые поля и методы.
В ООП всякая экономия, к которой многие привыкают в алгоритмическом программировании, только боком вылазит впоследствии. Все, что не используется, должен исключать из кода компилятор, а не программист.
Конечно же в ООП исходники получаются большего объёма по сравнению с алгоритмическим программированием. Но это не недостаток, а преимущество, т.к. значительная часть "лишнего" кода в данном проекте, может быть многократно применена в других проектах.
У меня только своих методов больше пятисот. Взаимосвязи очень сложные. Рудиментарный код неизбежен. Быстро посмотреть что уже неиспользуется бывает очень полезно.
Подскажите. Не могу понять как заполнить один двухмерный массив результатами вычислений St_handle и MA_handle, получается передавать только в одномерный.
А смысл? Т.е. зачем лепить горбатого, вместо того, чтобы применять бритву Оккама? Т.е. в чём преимущество двумерного массива перед двумя одномерными? Ведь вам сначала нужно в двумерный что-то запихать из двух одномерных, созданных по умолчанию индикаторами, а потом что-то оттуда вытаскивать. Лишнюю работу делаете и других пытаетесь в неё втянуть.
Если бы была проблема с одномерными массивами, тогда овчинка стоила бы выделки.
простите если не в тему ..
помогите кто может ..
в delphi 7 dll процедура..
procedure test1(var data: array of Double); stdcall;
begin
ShowMessage('Вошли ');
end;
в mt4 :
#import "gayss.dll"
void test1( double &data[] );
#import
ArrayResize(data, 6);
data[0]= 2;
data[1]= 4;
data[2]= 8;
data[3]= 16;
data[4]= 21;
data[5]= 3;
test1(data);
и ошибка вылазит.. 2014.02.06 17:39:04.241 stack damaged, check DLL function call in 'SOG_2014.mq4' (80,7)
может кто знает как надо по правильному..