в чем логическая ошибка кода? - страница 3

 
double close_price(int nomer_bara)
{
if(nomer_bara<1)
{
Alert("нельзя анализировать текущий бар");
}
else
{
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3)//возвращает 1/3 если цена текущего бара закрылась ниже 1/3 его спреда 
{
return(1/3);
}
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3&&(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)*2)/3)//возвращает 2/3 если цена текущего бара закрылась ниже 2/3 и выше 1/3 его спреда 
{
return(2/3);
}

if((iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>(iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))*2)/3&&iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))//возвращает 1 если цена текущего бара закрылась выше 2/3 его спреда
{
return(1);
}
}

}

 if(close_price(1)==1/3)// в случае если цена закрылась внизу то нарисовать линию на этом баре
   {
 SetVLine(Red, "", Time[1], STYLE_SOLID, 2);
   }

и так вся проблема заключается в том что линия рисуется на каждом баре не пойму какого черта..должна рисоватся на том баре в котором цена закрылась внизу тоесть 1/3 бара. помогите пожалуйст

 

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

Первая строка: C-L<H-L/3 возвращает 1/3, хотя реально это совсем не так, да и скобки не расставлены.

Учите арифметику.

 
tara:

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

Первая строка: C-L<H-L/3 возвращает 1/3, хотя реально это совсем не так, да и скобки не расставлены.

Учите арифметику.


признаюсь вам чесно не помоглло с ростановкой скобок все равно печает линию на каждом баре
 
Zver4991:

признаюсь вам чесно не помоглло с ростановкой скобок все равно печает линию на каждом баре


(1/3)==0

Подсказка

 
Vinin:


(1/3)==0

Подсказка


все равно не доганяю тип данных double....пробовал тоже 1/3 закидывать в переменную этого типа но все равно рисует на каждой....

и так если прочитать ещо раз код функ старт то оно должно рисовать линию если значение которое вернула функция равно 1/3 к примеру ....а то что 1/3 это будет ноль в тиме инт это не оправдывает того что оно рисует в таком случае не должно ничего делать....скажите прямо если не трудно где я ошибся и все чего загадками то писать....

кстате я пробовал возвращать и другие значения целого типа....все равно таккая же лажа

 
double close_price(int pos=1)
  {
   if(pos<1)
     {
      Alert("нельзя анализировать текущий бар");
      return(-1.0);
     }

   double H=iHigh(Symbol(),0,pos);
   double L=iLow(Symbol(),0,pos);
   double C=iClose(Symbol(),0,pos);

   double Value=(C-L)/(H-L)*3.0;

   if(Value<1.0)     //возвращает 1/3 если цена текущего бара закрылась в нижней части
     {
      return(1.0/3.0);
     }
   if(Value<2.0)     //возвращает 2/3 если цена текущего бара закрылась в средней части
     {
      return(2.0/3.0);
     }
   return(1.0);      //возвращает 1 если цена текущего бара закрылась в верхней части

  }

Дополнительно

Если 1 разделить на 3 получим ноль,

Ну и сверху как я бы сделал

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