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

 
Craft:

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


Как Вам уже писали

   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);

iMAOnArray выполняется за пределами цикла (как и должно быть). Cоответственно i+2 = PeriodB + 2. Для ArrayResize(c1b,PeriodB);

Да и по сути ... замените Ваши "i+" на 0,2,3.

 
SergNF:


Как Вам уже писали

iMAOnArray выполняется за пределами цикла (как и должно быть). Cоответственно i+2 = PeriodB + 2. Для ArrayResize(c1b,PeriodB);

Да и по сути ... замените Ваши "i+" на 0,2,3.


Спасибо, сделал всё как Вы сказали, но теперь-то почему ордера не выставляются?

Пробовал и с нормализацией и без. 

   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
     }
 
gordeef:

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


Спасибо, сделал всё как Вы сказали, но теперь-то почему ордера не выставляются?

Пробовал и с нормализацией и без.


Ну тогда только "распринтовка" после обоих if'ов для того, чтобы понять в этом ли блоке ошибка или нет (Включая Opn_B и Cls_S) Одна строчка и Вы все узнаете.

Мало ли, может быть Вы потом их (Opn_B и Cls_S) переприсваиваете или при открытии используются совершенно другие переменные.

 
artmedia70:
Да... больной зуб чудеса творит... Куда с ним только ни залезешь... :)

А лечить не пробовали. Говорят помогает.
 
Vinin:

А лечить не пробовали. Говорят помогает.
О, точно! Век живи - век учись... ;) Только ночью у нас в нашем Заколючинске не найти ни одного дантиста... Пришлось народными средствами биться...
 

Ребяты, я понимаю, что чудес не бывает, но вот никак не могу победить... Уже под стол заглядываю - вдруг там Хоттабыч сидит... :)

Делал вывод в окно индикатора состояние некоторых данных по советнику, ну и состояние трендов решил туда же вывести, тренды рассчитываю своей функцией, которая возвращает значение int -1, 0 и +1. Соответственно тренд вниз=-1, флэт=0, тренд вверх=1. Заметил, что стрелочки выводятся как хотят, но только не в сторону трендов на разных ТФ. Долго мучился и закомментировал вывод стрелочек, а вместо них поставил вывод значения, возвращаемого функцией определения тренда. Причём в двух местах кода сделал вывод состояния, возвращаемого данной функцией. Состояние своё она возвращает верно, в левом верхнем углу чарта выводятся значения функции напрямую после вызова сей функции. Внизу, в окне индикатора тоже выводятся значения функции. В цифровом виде всё правильно, но откуда-то берётся четвёртое значение функции, которая по определению возвращает только три числа... Так вот при этом, четвёртом значении, в окно индикатора выводится надпись "Хрен вам"... ну так, уже от злости себе написал... :)

Помогите понять в чём суть проблемы? Не хочется верить в Гассана Обдурахмана ибн Хоттаба... :):)

   ObjectCreate("trM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM15",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trM15",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM15",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowM15",OBJPROP_YDISTANCE,y*10);
   
   if (trM15==1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",Lime);
//         ObjectSetText("ArrowM15",CharToStr(241),10,"Wingdings",Lime);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",Lime);
      }
   if (trM15==-1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
//         ObjectSetText("ArrowM15",CharToStr(242),10,"Wingdings",OrangeRed);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   if (trM15==0)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",OrangeRed);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trM15","Хрен вам",9,"Tahoma",LightGray);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",LightGray);
      }

Тут я уже постарался проверить все четыре состояния, а не только -1, 1 и else...

И вот он мне и выводит именно else

trM15 - переменная, которой присваивается значение, возвращаемое функцией определения тренда

На картинке видно, что значения возвращаются верные, а выводится "весёлая надпись", которая только если else

Голова уже по швам...

 
artmedia70:

Ребяты, я понимаю, что чудес не бывает, но вот никак не могу победить... Уже под стол заглядываю - вдруг там Хоттабыч сидит... :)

Делал вывод в окно индикатора состояние некоторых данных по советнику, ну и состояние трендов решил туда же вывести, тренды рассчитываю своей функцией, которая возвращает значение int -1, 0 и +1. Соответственно тренд вниз=-1, флэт=0, тренд вверх=1. Заметил, что стрелочки выводятся как хотят, но только не в сторону трендов на разных ТФ. Долго мучился и закомментировал вывод стрелочек, а вместо них поставил вывод значения, возвращаемого функцией определения тренда. Причём в двух местах кода сделал вывод состояния, возвращаемого данной функцией. Состояние своё она возвращает верно, в левом верхнем углу чарта выводятся значения функции напрямую после вызова сей функции. Внизу, в окне индикатора тоже выводятся значения функции. В цифровом виде всё правильно, но откуда-то берётся четвёртое значение функции, которая по определению возвращает только три числа... Так вот при этом, четвёртом значении, в окно индикатора выводится надпись "Хрен вам"... ну так, уже от злости себе написал... :)

Помогите понять в чём суть проблемы? Не хочется верить в Гасана Обдурахмана ибн Хоттаба... :):)

Тут я уже постарался проверить все четыре состояния, а не только -1, 1 и else...

И вот он мне и выводит именно else

trM15 - переменная, которой присваивается значение, возвращаемое функцией определения тренда

На картинке видно, что значения возвращаются верные, а выводится "весёлая надпись", которая только если else

Голова уже по швам...



Все правильно

ObjectCreate("trM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("trM15",OBJPROP_XDISTANCE,x*10);
   ObjectSet("trM15",OBJPROP_YDISTANCE,y*10);
   
   ObjectCreate("ArrowM15",OBJ_LABEL,1,0,0,0,0);
   ObjectSet("ArrowM15",OBJPROP_XDISTANCE,x*17);
   ObjectSet("ArrowM15",OBJPROP_YDISTANCE,y*10);
   
   if (trM15==1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",Lime);
//         ObjectSetText("ArrowM15",CharToStr(241),10,"Wingdings",Lime);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",Lime);
      }
   else if (trM15==-1)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
//         ObjectSetText("ArrowM15",CharToStr(242),10,"Wingdings",OrangeRed);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   else if (trM15==0)
      {
         ObjectSetText("trM15","Тренд M15",9,"Tahoma",OrangeRed);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",OrangeRed);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",OrangeRed);
      }
   else
      {
         ObjectSetText("trM15","Хрен вам",9,"Tahoma",LightGray);
//         ObjectSetText("ArrowM15",CharToStr(240),10,"Wingdings",LightGray);
         ObjectSetText("ArrowM15",DoubleToStr(trM15,0),9,"Tahoma",LightGray);
      }

Можно попробовать такой вариант

 
Vinin:


Все правильно

Можно попробовать такой вариант

ОК. Спасибо, Виктор. Так пока работает верно. Пока, потому что долго не следил, но НИКОГДА он мне до этого не выводил Тренд Вверх. Сейчас выводит:


Я знал, что на одного колдуна-пакостника всегда найдётся более могущественный чародей-волшебник... :)

Это конечно всё шутки-прибаутки, но... Виктор, хочется не просто тупо скопировать правильное решение, а узнать и понять где ж тут собака-то порылась, в чём соль проблемы и такого непонятного мне поведения кода?

 
artmedia70:
Да... больной зуб чудеса творит... Куда с ним только ни залезешь... :) Если нравится индюк и хошь с ним работать - либо iCustom, либо в код советника, думаю. А насчёт трендовых ТС - тут поаккуратнее нужно, можно прикупиться уже в конце движения, то бишь перед разворотом. Вот и повиснет в воздухе лось (как я вчерась с больным зубом... :))) . Сейчас как раз работаю над определением истощения тренда, надеюсь поделюсь выкладками и результатами.

Да я и так стараюсь с осторожностью к разворотам и коррекции. А вот насчет истощения тренда, меня тоже это интересует, бродил по просторам форума и в CodeBase заглядывал, но индюков на эту тему не встречал. Поэтому будет интересно ознакомиться с твоими выкладками. И еще вопрос, скинули мне  советник контролирующий мои потери и прибыли, вроде по картинке должен работать, но вопрос в том, заложен в нем профит в 15 пунктов, а я вижу что цена может и дальше пойти, так вот если я увеличу профит на какой либо одной сделке, это может нарушить общие расчеты и работу советника?
Причина обращения: