[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 645

 
artmedia70:

Там и логики то практически никакой - простейший вывод строк в порядке следования друг за дружкой...




Я бы для удобства восприятия использовал бы функции

//--------------------------------------------------------------- 1 --
// Функция вывода на экран графических сообщений.
//--------------------------------------------------------------- 2 --
  int Informations()
  {
   int   Win_ind;                     // Номер окна индикатора
   int   x,y;
   
   trH4     =Trend_PSAR(NULL,240);  // Четырёхчасовой тренд
   trH1     =Trend_PSAR(NULL,60);   // Часовой тренд
   trM30    =Trend_PSAR(NULL,30);   // Получасовой тренд
   trM15    =Trend_PSAR(NULL,15);   // 15-ти минутный тренд

//--------------------------------------------------------------- 3 --
   Win_ind= WindowFind("Info");        // Ищем номер окна индикатора
   if (Win_ind<0)return;               // Если такого окна нет, уходим
//--------------------------------------------------------------- 4 --
   x =10; y =17;
   MyObject("Equ",         x,    y,   "Свободные средства",                   9, "Tahoma", Gold);
   MyObject("EquVal",      x*23, y,   DoubleToStr(Equ_NEW,2),                 9, "Tahoma", Yellow);

//.................................
   WindowRedraw();                      // Перерисовываем все объекты
   return;
  }


void MyObject(string Name, int X, int Y, string Text, int Size, string Srift, color CL){
   if (ObjectFind(Name)==-1)
      ObjectCreate(Name,OBJ_LABEL,1,0,0,0,0);
   ObjectSet(Name,OBJPROP_XDISTANCE,X);
   ObjectSet(Name,OBJPROP_YDISTANCE,Y);
   ObjectSetText(Name, Text, Size, Srift, CL);
}
 
ToLik_SRGV:

Тоже задавался подобным вопросом, и ничего путного не нашел. По поводу оптимизации, про великий тормоз iCustom вы уже знаете :), в индикаторах ограничение по количеству считаемых баров (через IndicatorCounted() либо жестоко по количеству баров.). В коде запариваться с количеством и сложностью различных конструкция типа if, while и. т. д. смысла особого нет, много не выиграете, со временим и с опытом код станет «красивее» сам. Ну а в режиме визуализации когда моделируется каждый «дрыг», медленно будет практически в любом случае (от сложности самой системы зависит конечно). Где то читал, что если сложные расчеты сунуть в dll, то по быстрее будет, хотя сам не проверял. С dll, тоже нюансов хватает.

Помнится, команды типа TimeCurrent() сильно тормозили работу (когда их несколько в коде)

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

 
Vinin:


Я бы для удобства восприятия использовал бы функции

Да, естественно, Виктор, так гораздо читабельней. Но я уже стараюсь, где это возможно, писать "в лоб" - оч сильно всё тормозит и, где возможно, пытаюсь выгадать милисекунды...
 
chief2000:

Помнится, команды типа TimeCurrent() сильно тормозили работу (когда их несколько в коде)

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

Замечательно! Стоит поискать в коде, да переделать...
 
chief2000:

Помнится, команды типа TimeCurrent() сильно тормозили работу (когда их несколько в коде)

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

Как правильно задать такую переменную, чтобы к ней потом обращаться?

Я сначала в глобальных переменных объявляю её

datetime CurTime;

А далее уже в start()

присваиваю ей значение:

CurTime=TimeCurrent();

и получаю ошибку: 'CurTime' - variable expected

Как сделать правильно?

И ещё вопрос: если присваивать некоторым переменным их значения не в start(), а в init(), будут ли они потом корректно отрабатывать?

Ну, я имею ввиду, что некоторые функции, да та же TimeCurrent(), всё равно будут вызываться на каждом тике, если переменной присваивать значение этой функции в начале start()

 
Бардак! CurTime даёт ошибку, а CurrTime - нет... В чём соль?
 
artmedia70:
Бардак! CurTime даёт ошибку, а CurrTime - нет... В чём соль?
дело в том, что CurTime это устевшее название функции TimeCurrent, соответственно, при совпадении имени переменной с именем функции компилятор всегда ругается..
 
keekkenen:
дело в том, что CurTime это устевшее название функции TimeCurrent, соответственно, при совпадении имени переменной с именем функции компилятор всегда ругается..
Во как! Спасибо, бум знать на будущее.
 

Друзья! Что-то мой личный блок логики подзахромал малость. Не могу определиться как быть в такой ситуации:

Работаем в две стороны, т.е. Бай и Селл имеют свои раздельные управляющие блоки. Позиции могут открываться встречно, всё зависит от того, в какую сторону на каждом ТФ движется рынок.

Предположим ситуацию, когда открыты и Селл (по ТФ М5 и М15) и Бай по старшим ТФ и тут вдруг рынок резко разворачивается в сторону, противоположную открытым Селл на М5 и М15 (ну, мало-ли какая ситуация в мире произошла...). В данном случае все открытые Селл начинают сильно увеличивать просадку, а так как мы имеем и открытые Бай, то можно некоторые позиции и Бай и Селл закрыть, чтобы за счёт закрытых Баев с минимальными потерями закрыть убыточные селлы.

Так вот, никак не могу определиться с логикой в данной ситуации. Какова она должна быть?

На всякий случай пример ситуации:


 

Люди добрые, возвращаясь к вчерашней теме:

   double c1b[];
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   }
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   }
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);

if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
//if (c1s_1>c1s_2&&c1s_2<c1s_3)
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
//if (c1b_1<c1b_2&&c1b_2>c1b_3)
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

подскажите, что означает сообщение из журнала:

2010.06.24 17:28:26 TestGenerator: unmatched data error (volume limit 5357 at 2010.01.06 08:00 exceeded)
 

Причина обращения: