Озвучка просадки

 

Помогите упростить часть кода...-не хватает соображалки)))

void Sound_DD()
  {
   str_sound=IntegerToString(int((100*(AccountEquity()-AccountBalance()))/AccountBalance()));
   if(
      str_sound!=str_sound_mem && 
      ((StrToInteger(str_sound)<=StrToInteger(str_sound_mem)-5) || 
      (StrToInteger(str_sound)>=StrToInteger(str_sound_mem)+5)) && 
      (
      (StrToInteger(str_sound)<=-55) || 
      (StrToInteger(str_sound)==-50) ||
      (StrToInteger(str_sound)==-45) ||
      (StrToInteger(str_sound)==-40) ||
      (StrToInteger(str_sound)==-35) ||
      (StrToInteger(str_sound)==-30) ||
      (StrToInteger(str_sound)==-25) ||
      (StrToInteger(str_sound)==-20) ||
      (StrToInteger(str_sound)==-15) ||
      (StrToInteger(str_sound)==-10) ||
      (StrToInteger(str_sound)==-5) ||
      (StrToInteger(str_sound)==0) ||
      (StrToInteger(str_sound)==5) ||
      (StrToInteger(str_sound)==10) ||
      (StrToInteger(str_sound)==15)||
      (StrToInteger(str_sound)==20)||
      (StrToInteger(str_sound)==25)||
      (StrToInteger(str_sound)==30)||
      (StrToInteger(str_sound)==35)||
      (StrToInteger(str_sound)==40)||
      (StrToInteger(str_sound)==45)||
      (StrToInteger(str_sound)==50)||
      (StrToInteger(str_sound)>=55)
      )
      )
     {
      if(StrToInteger(str_sound)>=55) {str_m="m";str_sound="50";}else{str_m="";}
      if(StrToInteger(str_sound)<=-55){str_m="m";str_sound="-50";}else{str_m="";}
      str_sound_mem=str_sound;
      PlaySound("e"+str_sound+str_m+".wav");
      Print("***TAASA***   Equity  "+str_sound+"%");
     }
  }		
 

как-то цикл хотел придумать,чтобы не писать

 
      (
      (StrToInteger(str_sound)<=-55) || 
      (StrToInteger(str_sound)==-50) ||
      (StrToInteger(str_sound)==-45) ||
      (StrToInteger(str_sound)==-40) ||
      (StrToInteger(str_sound)==-35) ||
      (StrToInteger(str_sound)==-30) ||
      (StrToInteger(str_sound)==-25) ||
      (StrToInteger(str_sound)==-20) ||
      (StrToInteger(str_sound)==-15) ||
      (StrToInteger(str_sound)==-10) ||
      (StrToInteger(str_sound)==-5) ||
      (StrToInteger(str_sound)==0) ||
      (StrToInteger(str_sound)==5) ||
      (StrToInteger(str_sound)==10) ||
      (StrToInteger(str_sound)==15)||
      (StrToInteger(str_sound)==20)||
      (StrToInteger(str_sound)==25)||
      (StrToInteger(str_sound)==30)||
      (StrToInteger(str_sound)==35)||
      (StrToInteger(str_sound)==40)||
      (StrToInteger(str_sound)==45)||
      (StrToInteger(str_sound)==50)||
      (StrToInteger(str_sound)>=55)
      )
 
А что собственно надо было сделать. Как то у вас слишком все "мудро" написано. Зачем числовые значения преобразовывать в строковые затем потом их опять преобразовываете в числовые?
 
Vitalii Ananev:
А что собственно надо было сделать. Как то у вас слишком все "мудро" написано.

Всё сделано,в принципе,...вот только в настройку совы хочется добавить интервал озвучки....(в коде эта цифра 5)-но путём цикла ,если пойти,можно заменить её на переменную,допустим ,inter_DD_sound

На данный момент я сделал файлы озвучки   от -50  до +50 просадки с шагом 5 %  ,но чтобы сделать интервал в 1%(для многих консервативных торгашей это будет полезно)-просто необходим грамотный цикл с данной переменной шага просадки...Сейчас файлы озвучки имеют вид ,например,

e-15.wav
 
Vitalii Ananev:
А что собственно надо было сделать. Как то у вас слишком все "мудро" написано. Зачем числовые значения преобразовывать в строковые затем потом их опять преобразовываете в числовые?
для преобразования числового значения просадки в название файла озвучки....
 
Nikolay Gaylis:
для преобразование числового значения просадки в название файла озвучки....

А понял у вас в названии файла содержится сумма просадки.

Сделайте временную переменную где будете хранить преобразованную строку.

Попробуйте в цикле с -55 до +55 с шагом цикла 5. То есть у вас будет примерно так первое что пришло на ум. Может кто еще лучше придумает.

 int Просадка = StrToInteger(str_sound);

for (i=-55;i<=55;i=i+5) 

{

    if (Просадка == i)

{

  PlaySound();

  break ;

 
Vitalii Ananev:

А понял у вас в названии файла содержится сумма просадки.

Сделайте временную переменную где будете хранить преобразованную строку.

Попробуйте в цикле с -55 до +55 с шагом цикла 5. То есть у вас будет примерно так первое что пришло на ум. Может кто еще лучше придумает.

 int Просадка = StrToInteger(str_sound);

for (i=-55;i<=55;i=i+5) 

{

    if (Просадка == i)

{

  PlaySound();

  break ;

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

 
Nikolay Gaylis:

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

void Sound_DD()
  {
   str_sound=IntegerToString(int((100*(AccountEquity()-AccountBalance()))/AccountBalance()));
   if(
      str_sound!=str_sound_mem && 
      ((StrToInteger(str_sound)<=StrToInteger(str_sound_mem)-inter_DD_sound) || 
      (StrToInteger(str_sound)>=StrToInteger(str_sound_mem)+inter_DD_sound))
      )
     {
      for(int i=-55;i<=55;i=i+inter_DD_sound)
        {
         if(StrToInteger(str_sound)==i)
           {
            if(StrToInteger(str_sound)>=55) {str_m="m";str_sound="50";}else{str_m="";}
            if(StrToInteger(str_sound)<=-55){str_m="m";str_sound="-50";}else{str_m="";}
            str_sound_mem=str_sound;
            PlaySound("e"+str_sound+str_m+".wav");
            Print("***TAASA***   Equity  "+str_sound+"%");
            break;
           }
        }
     }
  }
 

а цикл-то зачем? %)
делите процент баланса на 5 (или на 1), оставляете только целую часть и её уже добавляете к имени файла...

пс. хотя и делить не надо, пронумеровать файлы процентами и всё (если шаг 1%)

 
Taras Slobodyanik:

а цикл-то зачем? %)
делите процент баланса на 5 (или на 1), оставляете только целую часть и её уже добавляете к имени файла...

пс. хотя и делить не надо, пронумеровать файлы процентами и всё (если шаг 1%)

Видно лёгких путей не ищем(это ещё со школы)-спасибо ещё раз большущее!
Причина обращения: