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

 
Dmitrich:

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

Можно. Нужно вызывать PlaySound(nn.wav), где nn - две последние цифры котировки.
 
Тогда должен работать первый вариант (13:05). Я почему-то решил, что речь идет об изменениях цены вверх и вниз.
 
alexjou:
Тогда должен работать первый вариант (13:05). Я почему-то решил, что речь идет об изменениях цены вверх и вниз.
По идее нужен синтез этих двух вариантов, так как иначе будет стоять постоянный звон. я предложил именно такой вариант (без коода)

http://forum.alpari-idc.ru/thread29450-22.html
 
alexjou писал (а):

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

В wav файлах надиктованы цифры от 0 до 99.
 
alexjou писал (а):
Тогда должен работать первый вариант (13:05). Я почему-то решил, что речь идет об изменениях цены вверх и вниз.
Первый вариант у меня вообще не становится. Всё в редактор скопировал, но...
 

Замените в первом варианте (13:05) строку с оператором if на такую:

if ( NormalizeDouble( ( ( MathAbs( Bid - pre_bid ) / Point ) - Luft ), 0 ) >= 0 )

 
alexjou писал (а):

Замените в первом варианте (13:05) строку с оператором if на такую:

if ( NormalizeDouble( ( ( MathAbs( Bid - pre_bid ) / Point ) - Luft ), 0 ) >= 0 )

Да вроде работает! Поверить не могу, что моя проблема уже разрешилась! Спасибо огромное!
 
alexjou писал (а):

Замените в первом варианте (13:05) строку с оператором if на такую:

if ( NormalizeDouble( ( ( MathAbs( Bid - pre_bid ) / Point ) - Luft ), 0 ) >= 0 )

alexjou! Мёд вкусный, теперь я к Вам за ложкой! Скажите, а другие валютные пары при переходе на них советник не озвучивает? Можно переход на пары привязать к каким-то клавишам или ещё как-то?
 

По идее, должен озвучивать любые пары, поскольку у него нет привязки к определенному символу. Можно, например, сделать фильтр по символам, добавив в имя wav-файла соответствующий символ (например, EURUSD<NN>.wav), и изменив сам файл:

string name = Symbol() + StringSubstr(DoubleToStr(Bid, Digits ), 4, 2) + ". wav";

Можно такое же сделать и по тайм-фреймам, но при этом объем аудиоинформации многократно возрастет, о чем говорил Рош. Вообще-то эта задача корректно решается с помощью программ речевого синтеза из текстовых файлов, чтобы не плодить лишние сущности, т.е. аудиофайлы, тем более, что wav-формат довольно расточителен в плане места на диске. К сожалению, разработчики почему-то совсем убрали из МТ функцию SpeechText(...) , оставив вместо нее заглушку, и теперь такие вещи приходится делать средствами С и WinAPI, а это уже совсем другая задача. Вот пример с англоязычного форума:

// REFERENCE: https://www.mql5.com/en/forum/45211

//---- SOURCE: SpeechText.cpp

#include <windows.h>
#include <sapi.h>

#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "sapi.lib")

ISpVoice * gpVoice = NULL;

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
if (FAILED(CoInitialize(NULL))) {
return FALSE;
}
if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&gpVoice))) {
return FALSE;
}
if (!gpVoice) return FALSE;
break;
case DLL_PROCESS_DETACH:
/*
if (gpVoice) gpVoice->Release();
*/
gpVoice = NULL;
CoUninitialize();
break;
default:
break;
}
return TRUE;
}

BOOL WINAPI MT_SpeechText(char const * text, BOOL async)
{
WCHAR * msg;
BOOL ret;
int len;
DWORD dwFlags;

len = strlen(text) + 1;
msg = new WCHAR[len];
MultiByteToWideChar(CP_ACP, 0, text, len, msg, len);
if (async) {
dwFlags = SPF_ASYNC;
} else {
dwFlags = SPF_DEFAULT;
}
if (FAILED(gpVoice->Speak(msg, dwFlags, NULL))) {
ret = FALSE;
} else {
ret = TRUE;
}
delete msg;
return ret;
}

//---- DEF file
LIBRARY SpeechText

EXPORTS
MT_SpeechText

//---- MT4
#import "SpeechText.dll"
int MT_SpeechText(string text, int async);
#import

MT_SpeechText("Hello world", 1);

Этот код компилируется в dll - "говорилку" для МТ4. За недостатком времени я его не пробовал.

Насчет клавиш - наверное, можно, однако я этим сервисом (hot-keys) не пользуюсь, поэтому не очень в курсе.

 
alexjou писал (а):

По идее, должен озвучивать любые пары, поскольку у него нет привязки к определенному символу. Можно, например, сделать фильтр по символам, добавив в имя wav-файла соответствующий символ (например, EURUSD<NN>.wav), и изменив сам файл:

Я прогсто не нарадуюсь от Вашего советника! Очень облегчает! По поводу перехода на другие пары - яничего не понял. Откуда советник знает, что нужно брать эту пару? Если это есть в тексте, то можно ли этот параметр вынести в настройки советника или привязать к условию расположения курсора в обзоре рынка?
Причина обращения: