Звуковой сигнал для force index

 

Добрый вечер. У меня просьба - нужен звуковой сигнал на force index при пересечений уровня 0. В программировании не силён, поэтому прошу помочь кто сможет.

Force index со стандартными настройками: Метод МА - Exponential, по ценам Close, период - 13. Желательно, чтобы все параметры настраивались как у обычного force index.

Сигнал на пересечение как вверх так и вниз. Сигнал из стандартного набора звуков + сообщение с названием инструмента в окне которого произошло пересечение. Необходимо чтобы направление пересечения настраивалось, т.е. чтобы сигнал был только при пересечении наверх или только при пересечение вниз.

 
Не хотите сами попробовать написать по образцу из статьи?
 
Где находится файл индикатора force? В списке индикаторов в редакторе только пользовательские индикаторы.
 

Не пойму. Написал только на продажу. Применил индикатор к 15 минутке, в течении одного периода выдается несколько сигналов на продажу, что здесь не так?

... 

if(PrevSignal <= 0)
{
if(ExtForceBuffer[SIGNAL_BAR] < 0 &&
ExtForceBuffer[SIGNAL_BAR+1] > 0)
{
PrevSignal = 1;
//PlaySound("Alert.wav");
//Alert("sStochastic (", Symbol(), ", ", Period(), ") - BUY!!!");
}
}
if(PrevSignal >= 0)
{
if(ExtForceBuffer[SIGNAL_BAR] > 0 &&
ExtForceBuffer[SIGNAL_BAR+1] < 0)
{
PrevSignal = -1;
PlaySound("Alert.wav");
Alert("Forse Index (", Symbol(), ", ", Period(), ") - SELL!!!");
}
}

... 

 Ещё вопрос. Как в сплывающем окне удалить предыдущие сигналы перед выводом нового, чтобы была только одна строка?

 
да. интересно было бы посмотреть как добиться одноразового сигнала...
 
_Aybulat_:

Не пойму. Написал только на продажу. Применил индикатор к 15 минутке, в течении одного периода выдается несколько сигналов на продажу, что здесь не так?

Ещё вопрос. Как в сплывающем окне удалить предыдущие сигналы перед выводом нового, чтобы была только одна строка?
На первый взгляд все нормально. При SIGNAL_BAR>0 должен быть один сигнал, при SIGNAL_BAR==0 будут множественные сигналы, поскольку на нулевом баре событие может повторяться неоднократно.
Я пользуюсь только PlaySound(SoundName), однократный сигнал получается. Есть и другие варианты кода, тоже работают.
По алерту ничего сказать не могу, видимо, очистить его не удастся.
 
atik:
да. интересно было бы посмотреть как добиться одноразового сигнала...

наверно нуно так:

//+------------------------------------------------------------------+
//|                                                  Force Index.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
//---- input parameters
extern int ExtForcePeriod=13;
extern int ExtForceMAMethod=0;
extern int ExtForceAppliedPrice=0;
//---- buffers
double ExtForceBuffer[];
bool firstrun=false;
double sign=0;
datetime newbartime=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   string sShortName;
   SetIndexBuffer(0,ExtForceBuffer);
   SetIndexStyle(0,DRAW_LINE);
   sShortName="Force("+ExtForcePeriod+")";
   IndicatorShortName(sShortName);
   SetIndexLabel(0,sShortName);
   SetIndexDrawBegin(0,ExtForcePeriod);
   firstrun=false;
   newbartime=Time[0];
   sign=0;
return(0);
}
//+------------------------------------------------------------------+
//| Force Index indicator                                            |
//+------------------------------------------------------------------+
int start(){
   int nLimit;
   int nCountedBars=IndicatorCounted();
   if(Bars<=ExtForcePeriod) return(0);
   if(nCountedBars>ExtForcePeriod) nCountedBars--;
   nLimit=Bars-nCountedBars;
   for(int i=0; i<nLimit; i++)
      ExtForceBuffer[i]=Volume[i]*
                        (iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtForceAppliedPrice,i)-
                         iMA(NULL,0,ExtForcePeriod,0,ExtForceMAMethod,ExtForceAppliedPrice,i+1));
//если это не первый запуск расчетов тогда проверяем время открытия нулевого бара и если это новый бар
//проверим одинаковые ли знаки у предидущего запомненного значения индикатора и текущего
   if(firstrun){
         if (newbartime!=Time[0]){
               newbartime=Time[0];
               if((sign<0 && ExtForceBuffer[1]>0) || (sign>0 && ExtForceBuffer[1]<0)){
                     PlaySound("alert.wav");
                     sign=ExtForceBuffer[1];
               }
         }
//если это первый запуск расчетов тогда изменим firstrun и запомним время открытия нулевого бара и 
//посдеднее расчитанное значение индикатора
   }else{
         firstrun=true;
         newbartime=Time[0];
         sign=ExtForceBuffer[1];
   }
return(0);
}
//+------------------------------------------------------------------+

вот набросал на скорую руку, нужно проверить online, думаю все правильно

 
IgorM:

наверно нуно так:

вот набросал на скорую руку, нужно проверить online, думаю все правильно



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


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

у меня 229 билд, ошибок не было, вроде бы и сигнал как положено выдается, но нет времени понаблюдать
 

заменил PlaySound("alert.wav") на Print("alert.wav"), вот лог:

18:06:27 Force_Index_Sound USDJPY,M1: loaded successfully
18:06:27 Force_Index_Sound USDJPY,M1: initialized
18:07:03 Force_Index_Sound USDJPY,M1: alert.wav
18:18:03 Force_Index_Sound USDJPY,M1: alert.wav
18:25:03 Force_Index_Sound USDJPY,M1: alert.wav
18:39:03 Force_Index_Sound USDJPY,M1: alert.wav

наверно работает