Звуковой алерт для BW MFI - страница 2

 

Применил стилизатор, но он только подправил расположение скобок и прочее. Результат остался тот же.

static int PrevSignal=0,PrevTime=0;

if(SIGNAL_BAR>0 && Time[0]<=PrevTime)
   return(0);
PrevTime=Time[0];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
if(PrevSignal>=0)
  {
   if(!mfi_up && vol_up[SIGNAL_BAR]>0)
     {
      PrevSignal=1;
      if(SoundON) PlaySound("alert.wav");
     }
  }
 
Andrey:

Применил стилизатор, но он только подправил расположение скобок и прочее. Результат остался тот же.

static int PrevSignal=0,PrevTime=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  {
   if(SIGNAL_BAR>0 && Time[0]<=PrevTime)
      return(0);
   PrevTime=Time[0];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(PrevSignal>=0)
     {
      if(!mfi_up && vol_up[SIGNAL_BAR]>0)
        {
         PrevSignal=1;
         if(SoundON) PlaySound("alert.wav");
        }
     }


 

Ну вот теперь явно видны ошибки проектирования. Теперь видно, что этот кусок кода ВИСИТ В ВОЗДУХЕ. Он не относится ни к одной функции. Другими словами - этот кусок кода нужно поместить в какую-то функцию. 
В какую именно догадаетесь?

 

Добавлено: и замените extern на input. 

 

Я ставил сюда:

 

void CalculateMFI(const int start,const int rates_total,
                  const double &high[],
                  const double &low[],
                  const long &volume[])
  {
   int  i=start;
   bool mfi_up=true,vol_up=true;
//--- calculate first values of mfi_up and vol_up
   if(i>0)
     {
      int n=i;
      while(n>0)
        {
         if(ExtMFIBuffer[n]>ExtMFIBuffer[n-1]) { mfi_up=true;  break; }
         if(ExtMFIBuffer[n]<ExtMFIBuffer[n-1]) { mfi_up=false; break; }
         //--- if mfi values are equal continue
         n--;
        }
      n=i;
      while(n>0)
        {
         if(volume[n]>volume[n-1]) { vol_up=true;  break; }
         if(volume[n]<volume[n-1]) { vol_up=false; break; }
         //--- if real volumes are equal continue
         n--;
        }
     }
//---
   while(i<rates_total && !IsStopped())
     {
      if(volume[i]==0)
        {
         if(i>0) ExtMFIBuffer[i]=ExtMFIBuffer[i-1];
         else    ExtMFIBuffer[i]=0;
        }
      else ExtMFIBuffer[i]=(high[i]-low[i])/_Point/volume[i];
      //--- calculate changes
      if(i>0)
        {
         if(ExtMFIBuffer[i]>ExtMFIBuffer[i-1]) mfi_up=true;
         if(ExtMFIBuffer[i]<ExtMFIBuffer[i-1]) mfi_up=false;
         if(volume[i]>volume[i-1])             vol_up=true;
         if(volume[i]<volume[i-1])             vol_up=false;
        }
      //--- set colors
      if(mfi_up && vol_up)   ExtColorBuffer[i]=0.0;
      if(!mfi_up && !vol_up) ExtColorBuffer[i]=1.0;
      if(mfi_up && !vol_up)  ExtColorBuffer[i]=2.0;
      if(!mfi_up && vol_up)  ExtColorBuffer[i]=3.0;
      i++;
     }
static int PrevSignal=0,PrevTime=0;

if(SIGNAL_BAR>0 && Time[0]<=PrevTime)
   return(0);
PrevTime=Time[0];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
if(PrevSignal>=0)
  {
   if(!mfi_up && vol_up[SIGNAL_BAR]>0)
     {
      PrevSignal=1;
      if(SoundON) PlaySound("alert.wav");
     }
  }
  }

В итоге получил ещё больше ошибок чем обычно(

 
Применяйте стилизатор! Он Вам явно покажет ошибки Вашего кода. 
 
Vladimir Karputov:
Применяйте стилизатор! Он Вам явно покажет ошибки Вашего кода. 

А в какую функцию нужно поставить этот код?

Ладно, вообщем понятно, что ничего не правильно 

 
Andrey:

А в какую функцию нужно поставить этот код?

Ладно, вообщем понятно, что ничего не правильно 

Покажите весь код. Чтобы можно было его скомпилировать.
 
Вот
Файлы:
mfi.mq5  6 kb
 

Вот этот код:

   static int PrevSignal=0,PrevTime=0;

   if(SIGNAL_BAR>0 && Time[0]<=PrevTime)
      return(0);
   PrevTime=Time[0];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(PrevSignal>=0)
     {
      if(!mfi_up && vol_up[SIGNAL_BAR])>0
        {
         PrevSignal=1;
         if(SoundON) PlaySound("alert.wav");
        }
     }

что он делает в CalculateMFI и что этот код должен делать?
 

 
Когда на mfi появляется разворотный бар (if(!mfi_up && vol_up)  ExtColorBuffer[i]=3.0;) должно появиться звуковое уведомление
 
Andrey:
Когда на mfi появляется разворотный бар (if(!mfi_up && vol_up)  ExtColorBuffer[i]=3.0;) должно появиться звуковое уведомление
А зачем это делать в CalculateMFI? Делайте это в OnCalculate - в OnCalculate доступен буфер time[] (именно time[], а не, как у Вас Time[]), в OnCalculate доступны индикаторные буферы (заметьте - индикаторные буферы уже посчитанные в CalculateMFI!).