[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 371

 
Fox_RM:

Разницы практически никакой, просто несколько иной процесс получения контрольных точек A и B будет. Я уже пробовал через массивы.

Потом  между А и В также цикл организовывать придется по перебору баров. Другого пути я не вижу, поэтому и вопрос задал.

Может кто что подскажет. Возможно логика написания кода где хромает?  


1. Оформите код, не экономя строки (лесенкой). 

2. Вместо повторных коротких условных операторов используйте конструкцию if(...) ... else...

3. Вынесите вызов функции формирования графического объекта за пределы внутреннего цикла (главный тормоз). 

 
Chiripaha:

на такую:



... а лучше - на такую: 

if (AOBuffer3[i]<=0){
   ExtMapBuffer1[i] =  nSum; Vol_Arr[i] =  Volume[i]*Point*coaf;
}
else{
   ExtMapBuffer1[i] = -nSum; Vol_Arr[i] = -Volume[i]*Point*coaf;
}
 
tara:

... а лучше - на такую: 

Да, согласен.

Я в "старом" комменте все предложения свои собираю (если что). - Может это и не совсем "правильно", зато не будут разбросаны.

Думаю, что проблема в накапливающихся текстах - Отразил в основном коменте (не знаю как ссылку на него вставить - извиняюсь).

 
tara:

3. Вынесите вызов функции формирования графического объекта за пределы внутреннего цикла (главный тормоз). 

А вот, тоже интересно - А как это сделать? (реализовать)

Хм.... Точно! - Он же суммирующийся. И промежуточные значения не важны.

      if (shift_up > shift_dn)
       {
        for (int dn_br = shift_dn; dn_br <= shift_up; dn_br++)            //-------------- Перебор значений внутри основного цикла
          {
           Vol_AO_up += Volume[dn_br]; 
          }   
         ObjectDelete ("Awesome_super_volumes"+up_koaf);        // Заодно и удалить старый текст, чтобы не копился
         SetText("Awesome_super_volumes"+up_koaf, DoubleToStr(Vol_AO_up,0), AO_time_dn, AO_dn, Blue);
       }

Тогда и не будет их плодиться целая куча...

 

У меня в функции инит есть такой вызов:

GetMarketInfo();

 Эта функция вот:

//+-------------------------------------------------------------------------------------+
//| Сбор рыночных данных                                                                |
//+-------------------------------------------------------------------------------------+
void GetMarketInfo()
{
   gd_spread = MarketInfo(Symbol(),MODE_SPREAD) * Point;
   gd_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL)  * Point;
   gd_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE);
}

 Переменные gd_spread, gd_stopLevel, gd_tickSize до этого момента я объявлял глобально. Сейчас решил написать несколько библиотек, которые данные переменные используют. Выходит, что эти переменные я перенёс в заголовочный файл. А как выходит, чтоб не было ошибок при компиляции библитеки, мне нужно функцию GetMarketInfo() перенести тоже в библиотеку, верно?

 
hoz:

У меня в функции инит есть такой вызов:

 Эта функция вот:

 Переменные gd_spread, gd_stopLevel, gd_tickSize до этого момента я объявлял глобально. Сейчас решил написать несколько библиотек, которые данные переменные используют. Выходит, что эти переменные я перенёс в заголовочный файл. А как выходит, чтоб не было ошибок при компиляции библитеки, мне нужно функцию GetMarketInfo() перенести тоже в библиотеку, верно?

Уж точно не в ините вызывать сию функцию - спред и стоплевел могут меняться во времени
 
artmedia70:
Уж точно не в ините вызывать сию функцию - спред и стоплевел могут меняться во времени


Я думаю что от инита нужно отказаться, чтоб не было косяков в реальной торговле. Ведь если связь отрубит ДЦ, а потом появится, переинициализации не будет, а это уже влечёт ошибки и косяки при работе  в реале, верно?

 

Ну а как тогда поступить? Постояннно в каждой функции вызывать какую-н. функцию, которая будет возвращать данные рыночные переменные?

 
hoz:


Я думаю что от инита нужно отказаться, чтоб не было косяков в реальной торговле. Ведь если связь отрубит ДЦ, а потом появится, переинициализации не будет, а это уже влечёт ошибки и косяки при работе  в реале, верно?

Ну а как тогда поступить? Постояннно в каждой функции вызывать какую-н. функцию, которая будет возвращать данные рыночные переменные?

Подобную информацию нужно поделить на изменяемую и неизменяемую.

Неизменяемую - можно где угодно прописывать - т.к. даже если разрыв связи будет, то данные будут актуальными. - Лучше, конечно, не в старте, чтобы не грузить лишним сову.

а вот Изменяемые - можно либо через вызов функции (если используется библиотека), либо просто в самом начале функции start их обновлять.

 

Тоже верно. Мозг постоянно думает о производительности, в то время, когда ум не совсем ещё понимает, как это лучше сделать. Ну у меня и характер.. близнец :(

 Верно, нужно сразу отделить одного от другого.

Хотя, опять же. Если переменные рыночного окружения gd_stopLevelgd_tickSize используются в разных функциях (функции модификации, посыла ордера и тд), то в библиотечной функции вызывать функцию получающую заданные значения постоянно по-моему не совсем разумно. Это как-н. можно унифицировать? Ведь в отличие от спреда, стоплевел и размер тика будет всегда постоянным..

 
hoz:

Тоже верно. Мозг постоянно думает о производительности, в то время, когда ум не совсем ещё понимает, как это лучше сделать. Ну у меня и характер.. близнец :(

 Верно, нужно сразу отделить одного от другого.

Хотя, опять же. Если переменные рыночного окружения gd_stopLevelgd_tickSize используются в разных функциях (функции модификации, посыла ордера и тд), то в библиотечной функции вызывать функцию получающую заданные значения постоянно по-моему не совсем разумно. Это как-н. можно унифицировать? Ведь в отличие от спреда, стоплевел и размер тика будет всегда постоянным..

Артем уже говорил, что Стоп-Левел может тоже плавать - это не постоянная величина! - А размер тика - да, константа.

Для унификации - опять же, поделите на 2 функции - МаркетИнфоКонст и МаркетИнфоИзм (изменяющийся). Одну разместите в Инит, другую в начале Старт(а). И в библиотеку это можно будет скомпоновать.

Вопрос для производительности (оптимизации работы совы) в другом. Я лично все эти функции не пихаю в сову. А беру лишь параметры по необходимости. Да, писать кода приходится больше, зато сова меньше "лишней" библиотечной ерунды обрабатывает, т.к. не все из МаркетИнфо может оказаться нужным в сове.
Причина обращения: