Озвучивание MetaTrader - страница 2

 
Все хорошо. Вот примерный код эксперта:


//+------------------------------------------------------------------+
//|                                                   SoundTicks.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net// |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net//"
 
extern int Luft = 3;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   static double pre_bid = 0.0;
//----
   if ( NormalizeDouble( MathAbs( Bid - pre_bid ) - Luft*Point ) >= 0 )
   {
      pre_bid = Bid;
      // выделяем 2 последних цифры из котировки - они соответствуют номеру 
      // звукового файла, который должен находиться в папке 
      // Program Files -> Meta Trader 4 -> sounds
      string name = StringSubstr( DoubleToStr( Bid, Digits ), 4, 2 ) + ".wav";
      PlaySound(name);
   }   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Dmitrich:
Что-то у меня ничего не вышло. Я, может, не в то место вставил фрагмент? и ещё не понял где и какие строки повторить для следующих котировок: 01, 02, 03 и т.д. Извините уж меня неуча!
Ничего повторять не надо - эксперт сам берёт 2 последние цифры из котировки.
alexjou - всё сделал правильно.


< double pre_bid = 0.0; >

static double pre_bid = 0.0;

А разница? ;)
 

Отредактировал еще раз. Теперь должно работать правильно.

// Может, лучше сделать так:
 
// наговорить файлы p<n>.wav - "Цена выросла на <n> пунктов от последней";
// наговорить файлы m<n>.wav - "Цена упала на <n> пунктов от последней";
 
// Говорящий эксперт будет выглядеть примерно так:
//+------------------------------------------------------------------+
//|                                                   SoundTicks.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net// |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net//"
 
extern int Luft = 3; // шаг озвучания в пунктах
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   //
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   //
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   static double pre_bid = 0.0; // хранить предыдущее значение цены
   string name;   
   double tmp;
//----   
   tmp = NormalizeDouble((MathAbs(Bid - pre_bid) / Point), 0); // 1, 2, etc.
   name = DoubleToStr(tmp, 0);
   if (StringLen(name) == 1) { name = "0" + name; } // "01", "02", etc.
   //
   if (( tmp >= Luft ) && (Bid > pre_bid))
   {
      // цена выросла по крайней мере на Luft пунктов от последней
      name = "p" + name + ".wav";
      PlaySound(name);        
      pre_bid = Bid; // сохраняем 
   }
   else if (( tmp >= Luft ) && (Bid < pre_bid))
   {
      // цена упала по крайней мере на на Luft пунктов от последней
      name = "m" + name + ".wav";
      PlaySound(name);         
      pre_bid = Bid; // сохраняем
   }
   else // чтобы синтаксически закончить конструкцию if - else if - else
   { name = ""; }
//----
   return(0);
  }
//+------------------------------------------------------------------+






 
< А разница? ;) >
Чтобы не обнулялась на каждом чихе. Или поместить ее в общую секцию.
 
alexjou:
< А разница? ;) >
Чтобы не обнулялась на каждом чихе. Или поместить ее в общую секцию.

Когда она объявлена вне функций, она не обнуляется ;)
 
Тики озвучиваются, но непонятно откуда. Просто "бемс"! Я уже все файлы из папки убрал, а он "бемс" находит где-то, а мои -нет.
 
Dmitrich:
Тики озвучиваются, но непонятно откуда. Просто "бемс"! Я уже все файлы из папки убрал, а он "бемс" находит где-то, а мои -нет.
это сообщение об ошибки. Если есть ошибка (напр. нету такого файла), то на системном уравне проигрывается сигнал. WAV файл можно поменять в Control Panel
 
Виноват, просто уже глаз замылился. См текст выше (пост от 13:44). Проверил, переименовав стандартные файлы connect.wav (цена пошла вверх на 3 пункта) в p03.wav и alert.wav (цена пошла вниз на 3 пункта) в m03.wav. Работает.
 

Советник должен сигнализировать об изменении котировок более чем на 3 пункта, правильно? У меня же подготовлено 100 файлов от 00 до 99. Я думал, что при изменении котировок будет воспроизводиться файл с соответсвующей новой котировке цифрой. Можно так?

 

Т.е., что именно записано в ваших файлах? Какой текст?

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