Автор Тема: Звуковой сигнал в индикаторе  (Прочитано 6656 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Maxim_DanilovskyАвтор темы

  • Thank You
  • -Given:
  • -Receive:
  • Сообщений: 19
  • +0/-0
    • Просмотр профиля
Добрый день!

Подскажите, пожалуйста, где можно почитать о добавлении звуковых сигналов в индикаторы для MetaTrader? Можно ли это сделать в настройках уже готовых индикаторов или в любом случае придётся расковыривать код?

Спасибо!

akadex

  • Гость
Re: Звуковой сигнал в индикаторе
« Ответ #1 : 21.11.2006 12:17 »
Здравствуйте!
По этой ссылке вы найдете описание функции отвечающей за вызов и воспроизведение звуковых файлов,
а также библиотеку по языку MQ4.

http://docs.mql4.com/ru/common/PlaySound

Оффлайн Maxim_DanilovskyАвтор темы

  • Thank You
  • -Given:
  • -Receive:
  • Сообщений: 19
  • +0/-0
    • Просмотр профиля
Re: Звуковой сигнал в индикаторе
« Ответ #2 : 21.11.2006 19:48 »
Спасибо за ссылку.
Простите, я наверное глубоковато залез, т.к. программирование - это совсем не мой профиль. Передо мной код простого индикатора Parabolic SAR и код звукового сигнала из примера. Скажите, пожалуйста, в какие места я должен его повставлять, чтобы получать звук при возникновении каждой точки? Большое спасибо за помощь!


//+------------------------------------------------------------------+
//|                                                    Parabolic.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Lime
//---- input parameters
extern double    Step=0.02;
extern double    Maximum=0.2;
//---- buffers
double SarBuffer[];
//----
int    save_lastreverse;
bool   save_dirlong;
double save_start;
double save_last_high;
double save_last_low;
double save_ep;
double save_sar;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexBuffer(0,SarBuffer);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SaveLastReverse(int last,int dir,double start,double low,double high,double ep,double sar)
  {
   save_lastreverse=last;
   save_dirlong=dir;
   save_start=start;
   save_last_low=low;
   save_last_high=high;
   save_ep=ep;
   save_sar=sar;
  }
//+------------------------------------------------------------------+
//| Parabolic Sell And Reverse system                                |
//+------------------------------------------------------------------+
int start()
  {
   static bool first=true;
   bool   dirlong;
   double start,last_high,last_low;
   double ep,sar,price_low,price_high,price;
   int    i,counted_bars=IndicatorCounted();
//----
   if(Bars<3) return(0);
//---- initial settings
   i=Bars-2;
   if(counted_bars==0 || first)
     {
      first=false;
      dirlong=true;
      start=Step;
      last_high=-10000000.0;
      last_low=10000000.0;
      while(i>0)
        {
         save_lastreverse=i;
         price_low=Low;
         if(last_low>price_low)   last_low=price_low;
         price_high=High;
         if(last_high<price_high) last_high=price_high;
         if(price_high>High[i+1] && price_low>Low[i+1]) break;
         if(price_high<High[i+1] && price_low<Low[i+1]) { dirlong=false; break; }
         i--;
        }
      //---- initial zero
      int k=i;
      while(k<Bars)
        {
         SarBuffer[k]=0.0;
         k++;
        }
      //---- check further
      if(dirlong) { SarBuffer=Low[i+1]; ep=High; }
      else        { SarBuffer=High[i+1]; ep=Low; }
      i--;
     }
    else
     {
      i=save_lastreverse;
      start=save_start;
      dirlong=save_dirlong;
      last_high=save_last_high;
      last_low=save_last_low;
      ep=save_ep;
      sar=save_sar;
     }
//----
   while(i>=0)
     {
      price_low=Low;
      price_high=High;
      //--- check for reverse
      if(dirlong && price_low<SarBuffer[i+1])
        {
         SaveLastReverse(i,true,start,price_low,last_high,ep,sar);
         start=Step; dirlong=false;
         ep=price_low;  last_low=price_low;
         SarBuffer=last_high;
         i--;
         continue;
        }
      if(!dirlong && price_high>SarBuffer[i+1])
        {
         SaveLastReverse(i,false,start,last_low,price_high,ep,sar);
         start=Step; dirlong=true;
         ep=price_high; last_high=price_high;
         SarBuffer=last_low;
         i--;
         continue;
        }
      //---
      price=SarBuffer[i+1];
      sar=price+start*(ep-price);
      if(dirlong)
        {
         if(ep<price_high && (start+Step)<=Maximum) start+=Step;
         if(price_high<High[i+1] && i==Bars-2)  sar=SarBuffer[i+1];

         price=Low[i+1];
         if(sar>price) sar=price;
         price=Low[i+2];
         if(sar>price) sar=price;
         if(sar>price_low)
           {
            SaveLastReverse(i,true,start,price_low,last_high,ep,sar);
            start=Step; dirlong=false; ep=price_low;
            last_low=price_low;
            SarBuffer=last_high;
            i--;
            continue;
           }
         if(ep<price_high) { last_high=price_high; ep=price_high; }
        }
      else
        {
         if(ep>price_low && (start+Step)<=Maximum) start+=Step;
         if(price_low<Low[i+1] && i==Bars-2)  sar=SarBuffer[i+1];

         price=High[i+1];
         if(sar<price) sar=price;
         price=High[i+2];
         if(sar<price) sar=price;
         if(sar<price_high)
           {
            SaveLastReverse(i,false,start,last_low,price_high,ep,sar);
            start=Step; dirlong=true; ep=price_high;
            last_high=price_high;
            SarBuffer=last_low;
            i--;
            continue;
           }
         if(ep>price_low) { last_low=price_low; ep=price_low; }
        }
      SarBuffer=sar;
      i--;
     }
//   sar=SarBuffer[0];
//   price=iSAR(NULL,0,Step,Maximum,0);
//   if(sar!=price) Print("custom=",sar,"   SAR=",price,"   counted=",counted_bars);
//   if(sar==price) Print("custom=",sar,"   SAR=",price,"   counted=",counted_bars);
//----
   return(0);
  }
//+------------------------------------------------------------------+

akadex

  • Гость
Re: Звуковой сигнал в индикаторе
« Ответ #3 : 21.11.2006 22:25 »
Вам нужен звук при каждой точке? Тогда сигнал будет повторятся в начале каждого часа.
Или нужен сигнал когда идет разворот?

Оффлайн Maxim_DanilovskyАвтор темы

  • Thank You
  • -Given:
  • -Receive:
  • Сообщений: 19
  • +0/-0
    • Просмотр профиля
Re: Звуковой сигнал в индикаторе
« Ответ #4 : 22.11.2006 10:14 »
Хотелось бы на развороте

akadex

  • Гость
Re: Звуковой сигнал в индикаторе
« Ответ #5 : 22.11.2006 11:13 »
Сейчас как раз пробую что-нибудь выжать из темы:
http://www.kroufr.ru/forum/index.php?topic=1161.msg6870;topicseen#new
Заодно сделаю звук на параболик.

Оффлайн Maxim_DanilovskyАвтор темы

  • Thank You
  • -Given:
  • -Receive:
  • Сообщений: 19
  • +0/-0
    • Просмотр профиля
Re: Звуковой сигнал в индикаторе
« Ответ #6 : 22.11.2006 11:30 »
Да мне бы пока просто звук на разворотную точку