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

 
Vinin:

Естественно, а когда еще.


мм я думал, кусками дописывает, ну там 128  килобайт слили - записали. Как бы это было бы правильней на случай аварии. Хотя для истории пофиг, конечно.

Просто понять не мог, качаю качаю, а нет нигде, пока терминал не закрыл ))  

 
ToLik_SRGV
Спасибо за подсказку с Print(), буду разбираться.
 
sanyooooook:

в ините можно изменить можно изменить этот параметр, а вот в старте это под сомнением


спасибо, поскольку при изменении ТФ на окне индюк перезапускается, значит можно буфера перекрашивать

А смысл задачи - на любом ТФ цвета линий соответствующие стохастикам другичх ТФ постоянно выводить одним цветом. Т.е если часовой стохастик голубой, пусть будет голубым на всех ТФ.

Конечно, можно буфера соответствующего цвета присваивать соответствующему ТФ, но тогда усложняется обрабатывающая программа. А хочется, чтобы она считывала один и тот же буфер при любых условиях.

 
ToLik_SRGV:

Print() вам, для начала нужно поставить сюда:

что бы, убедится в том что массив c1b_1[i] пуст, поэтому сравнивая в if нули, понятное дело сделки не открываются.

А нули там от того что, период усреднения в функции iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i) (extern int AvgB=25;) больше чем сам массив c1b, ArrayResize(c1b,PeriodB) (extern int PeriodB=20;), поэтому усреднить он ничего не может.


    Да, действительно "0", а как быть, подскажите - не получается и так и эдак (и равные периоды задавал) пробовал в обоих вариантах (новом и старом) Print("NormalizeDouble(c1b_1..., ноли выдаёт (показывает значение только c1b[i], все остальные включая c1s[i] - нули), помогите довести один из вариантов до рабочего состояния или хоть подсказкой поделитесь, кто увидит недочёт?

Новый:

// Торговые критерии   
   double c1b[];
   ArrayResize(c1b,PeriodB);
   double c1b_1[];
   ArrayResize(c1b_1,AvgB);
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   {
   c1b_1[i]=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   }
   }
   
   double c1s[];
   ArrayResize(c1s,PeriodS);
   double c1s_1[];
   ArrayResize(c1s_1,AvgS);
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   {
   c1s_1[i]=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   }
   }
   
   Print("NormalizeDouble(c1b_1[i],4) - ",NormalizeDouble(c1b_1[i],4));
   Print("NormalizeDouble(c1b_1[i+2],4) - ",NormalizeDouble(c1b_1[i+2],4));
   Print("NormalizeDouble(c1b_1[i+3],4) - ",NormalizeDouble(c1b_1[i+3],4)); 

if (NormalizeDouble(c1b_1[i],4)<NormalizeDouble(c1b_1[i+2],4)&&NormalizeDouble(c1b_1[i+2],4)>NormalizeDouble(c1b_1[i+3],4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1[i],4)>NormalizeDouble(c1s_1[i+2],4)&&NormalizeDouble(c1s_1[i+2],4)<NormalizeDouble(c1s_1[i+3],4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Старый:

// Торговые критерии
   double c1b[];
   ArrayResize(c1b,PeriodB);
   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[];
   ArrayResize(c1s,PeriodS);
   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);
   
   Print("NormalizeDouble(c1b_1,4) - ",NormalizeDouble(c1b_1,4));
   Print("NormalizeDouble(c1b_2,4) - ",NormalizeDouble(c1b_2,4));
   Print("NormalizeDouble(c1b_3,4) - ",NormalizeDouble(c1b_3,4));

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

Целиком: 

Файлы:
21_1.mq4  15 kb
 

Господа, меня интересует, если я для поиска сигнала организую цикл по четырем таймфреймам, данные будут вызываться каждый раз, с большей нагрузкой для процессора, чем если бы было например, четыре окна того же индикатора с разными таймфреймами?

 
Rossi:

Господа, меня интересует, если я для поиска сигнала организую цикл по четырем таймфреймам, данные будут вызываться каждый раз, с большей нагрузкой для процессора, чем если бы было например, четыре окна того же индикатора с разными таймфреймами?


Зависит от того как реализовать.
 

int TimeMassive[15, 30, 60, 240] ;

for(int k=0; k<4; K++)

{

timeframe= TimeMassive[k] ;

for(int i=0; i<limit; i++)

Buffer[i]= iMA(NULL, timeframe,..........................) ;

}

примерно так, без выделения специально памяти под каждый таймфрейм

 
Одинаково.
 
Rossi:

int TimeMassive[15, 30, 60, 240] ;

for(int k=0; k<4; K++)

{

timeframe= TimeMassive[k] ;

for(int i=0; i<limit; i++)

Buffer[i]= iMA(NULL, timeframe,..........................) ;

}

примерно так, без выделения специально памяти под каждый таймфрейм


int TimeMassive[]={15, 30, 60, 240} ;

for(int k=0; k<4; K++)

{

timeframe= TimeMassive[k] ;

for(int i=0; i<limit; i++)

Buffer[i]= iMA(NULL, timeframe,..........................) ;

}
Так немного корректнее будет
 
Из-за чего может происходить переполнение стека? При открытии позиции с большим размером тейка (тейк высчитывается от волатильности и умножается на 100, размер получился 41*100), в журнал записывается stack overflow и... будь здоров. Больше не открывается ни одна позиция, пока эта не закроется, а эта есс-но не закрывается из-за огромного тейка... И советник вообще уже не работает корректно, т.к. он должен закрывать все позиции при достижении заранее заданного общего профита открытых позиций... Но этого не происходит, хотя эта одна позиция уже давно в огромном профите, пунктов, этак порядка двух тысяч... Как бороться с этим? Ведь нельзя быть застрахованным от такой ситуации, когда открытые позы дружно переполнят стек и всё покатится кувырком...
Причина обращения: