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

 

Други, никак не могу разобраться с массивами, подскажите что не так (условие простое - покупка/продажа после очередного пика сглаженного CCI):

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

   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,i);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+3);
   
   double c1s[];
   ArrayResize(c1b,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,i);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+3);


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


double c1s[];
ArrayResize(c1b,PeriodS)

Объявляете один массив, а изменяете  другой. 

 
Roger:


double c1s[];
ArrayResize(c1b,PeriodS)

Объявляете один массив, а изменяете  другой. 


Спасибо, в чём ещё ошибка - не помогло.
 

Массив начинается с нулевого элемента, поэтому выражение

for(i=1;i<=PeriodS;i++)

пропускает нулевой и не записывает ничего в последний.

далее, в цикле выполнится только это выражение

c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);

остальные бессмыслены, после цикла i равно максимуму и поэтому все значения будут нулем. 

 
Craft:

в чём ещё ошибка


сравнение double без нормализации - некорректно... попробуйте так:

   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,i);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+3);
   
   double c1s[];
   ArrayResize(c1b,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,i);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+3);


   if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
     {                                          //
      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))
     {                                          //
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

 
DDFedor:


сравнение double без нормализации - некорректно... попробуйте так:


Спасибо за помощь, бразы, всё-равно пока не выходит.
 
Roger:

Массив начинается с нулевого элемента, поэтому выражение

for(i=1;i<=PeriodS;i++)

пропускает нулевой и не записывает ничего в последний.

далее, в цикле выполнится только это выражение

c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);

остальные бессмыслены, после цикла i равно максимуму и поэтому все значения будут нулем. 


А как быть тогда? Пробовал for(i=0;i<=PeriodS;i++) - не помогло.
 
Craft:

  А как быть тогда?  

  Поставьте Принты  на каждую переменную по всем местам кода и смотрите в логах, что у Вас твориться на каждом шаге.
 

добрый день. подскажите новичку. на демо советник открывает ордер когда в функции открытия пишу symbol(), а когда меняю на определенную пару например "EURUSD" то выдает ошибку 133, причем при проверке - if (MarketInfo(Symbol(),MODE_TRADEALLOWED)==true)
{Alert("!");}else{Alert("?");} - выдает "!", т.е. разрешена торговля.. и одновременно 133. в чем же проблема. ни один советник не открывает сделку если в функции открытия указываю опр. символ.. уже как только не пробовал.

заранее спасибо. я тут чтоб не захламлять форум ))

 
artmedia70:
А кто сказал, что это развороты, а не коррекция?

Звиняй, не сразу ответил, нбук сдох совсем. Надеюсь зуб уже не болит, да страшная вещь. Сознаюсь, грешил на Бабон, работает он в норме, а виноват индикатор NMAZZ, уже не помню где его скачал, но на одном графике он еще работает, но я его на три графика впихнул (5М, 30М, 4Н) и все, комп завис окончательно, вернее терминал. По одному с графиков начал убирать индикаторы и вот так и обнаружил, эту болячку. Но сейчас все настроил, не знаю что в этом индюке не так, но по началу рисовал красиво. А по поводу разворота или коррекции, да ты прав, это всегда не однозначно разворот, но если на 30М, 1Н и 4Н бабон меняет цвет, то если не разворот, то коррекция однозначно и можно немного заработать.