Я не понимаю, какая разница, где именно настраивать: в указанном меню или в меню той программы, которая это будет делать? Ведь все равно требуется действие от человека. В чем тогда автоматизация?
Боюсь, что я не смогу Вам объяснить, если после столь подробного мной описания Вам не удается понять сути проблемы.... но я попробую.
Итак, у нас есть необходимость контролировать непредвиденныйразрыв соединения с интернетом - для этих целей звук удачное решение. Однако у нас есть потребность перебрать 50 счетов и получить информацию о текущем финансовом состоянии, делать это надо примерно раз в час, что б отреагировать в случае необходимости. И вот при запуске скрипта по горячей клавише мы слушаем 100 звуковых сигналов, которые утомляют и не несут смысловой для нас нагрузки. Поэтому и есть потребность, что б скрипт отключал звук перед перебором аккаунтов и включал его после окончания. Цель - не лазить каждый раз в меню и не включать/отключать звук.
Боюсь, что я не смогу Вам объяснить, если после столь подробного мной описания Вам не удается понять сути проблемы.... но я попробую.
Итак, у нас есть необходимость контролировать непредвиденныйразрыв соединения с интернетом - для этих целей звук удачное решение. Однако у нас есть потребность перебрать 50 счетов и получить информацию о текущем финансовом состоянии, делать это надо примерно раз в час, что б отреагировать в случае необходимости. И вот при запуске скрипта по горячей клавише мы слушаем 100 звуковых сигналов, которые утомляют и не несут смысловой для нас нагрузки. Поэтому и есть потребность, что б скрипт отключал звук перед перебором аккаунтов и включал его после окончания. Цель - не лазить каждый раз в меню и не включать/отключать звук.
Реализовать отключение звука, в момент перебора аккаунтов, можно по Api. После перебора вновь включать.
Про звук - просто отключил сигналы при разрыве и установлении связи руками - пока так.
Немного улучшил скрипт:
1. Добавил критерий, при котором просадка требует внимания к себе. Теперь визуально видно, на какой счет нужно обратить внимание, кроме того, добавил звуковой сигнал.
2. Скрипт теперь зациклен, в настройках можно настроить, через сколько минут после окончания проверки счетов его снова запускать.
//+------------------------------------------------------------------+//| mql4-auth-example.mq4 |//| Copyright 2015, Sergey Lukin |//| #property script_show_inputs | +//+------------------------------------------------------------------+#property strict#property script_show_inputs#include <mql4-auth.mqh>
inputint ReScanTime=5;
inputint ProcAlert=75;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnStart()
{
//--- удаление всех созданных объектов bool DelAllObjects=true;
if(DelAllObjects==true)
{
int obj_total=ObjectsTotal();
PrintFormat("Всего%d объектов",obj_total);
for(int i=obj_total-1;i>=0;i--)
{
string name=ObjectName(i);
PrintFormat("Объект%d:%s",i,name);
ObjectDelete(name);
}
}
int arrName[2]=//Заполняем массив логинами
{
1000,
1001,
};
string arrPass[2]=//Заполняем массив паролями
{
"mIq5",
"mIq5",
};
datetime nextCheckTime=0;
while(true)
{
if(TimeLocal()>nextCheckTime)
{
int Razriv=0;
int Raznica=20;
for(int i=0; i<36; i++)//i равно числу аккаунтов
{
//Print("arrName=",arrName[i],"arrPass=",arrPass[i]);if(auth((string)arrName[i],arrPass[i],"RoboForex-FixCent"))
{
// Print("1 Hooray, I found the login dialog, inserted credentials, now wait until MT4 connects :)");if(Razriv==0) Sleep(30000);
Sleep(15000);
Razriv=Razriv+Raznica;
info(Razriv);
}
else
{
// Print("1 Sorry, I could not even find the Login dialog... Is your MT4 older than v880 or something?");
}
}
nextCheckTime = TimeLocal() + 60*ReScanTime;
Print(TimeToString(nextCheckTime,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
}
elseSleep(0);
}
}
//+------------------------------------------------------------------+//|Функция запроса вывода информации на экран |//+------------------------------------------------------------------+int info(int x)
{
double Balance=AccountInfoDouble(ACCOUNT_BALANCE);
double Eguity=AccountInfoDouble(ACCOUNT_EQUITY);
long Name=AccountInfoInteger(ACCOUNT_LOGIN);
double Proc=0.0;
double lotAll=GetAmountLotFromOpenPos("",-1,-1);
if(Balance>0 && Eguity>0) Proc=Eguity/Balance*100;
else Proc=100.0;
if(Proc<ProcAlert)
{
Label((string)x,//Название0, //Окно30, //X
x, //Y"N:"+(string)Name+" Balance="+DoubleToString(Balance,2)+" Eguity="+DoubleToString(Eguity,2)+" %="+DoubleToString(Proc,2)+" lot="+DoubleToString(lotAll,2),
10,//Размер шрифтаclrDeepPink,//Цвет шрифтаCORNER_LEFT_UPPER,//Выбор угла: 3 - нижний правый, 1 - верхний правый. 2 - нижний левый, 4 - верхний левый ANCHOR_LEFT_UPPER
);
PlaySound("\\Files\\Sound\\NecromancerNoGold1.wav");
}
else
{
Label((string)x,//Название0, //Окно30, //X
x, //Y"N:"+(string)Name+" Balance="+DoubleToString(Balance,2)+" Eguity="+DoubleToString(Eguity,2)+" %="+DoubleToString(Proc,2)+" lot="+DoubleToString(lotAll,2),
10,//Размер шрифта
Yellow,//Цвет шрифтаCORNER_LEFT_UPPER,//Выбор угла: 3 - нижний правый, 1 - верхний правый. 2 - нижний левый, 4 - верхний левый ANCHOR_LEFT_UPPER
);
}
return(0);
}
//+------------------------------------------------------------------+//|Функция вывода информации на экран |//+------------------------------------------------------------------+void Label(string _name,int _window,int _x,int _y,string _text,int _font,color _color,int corner,int anchor)
{
ObjectDelete(0,_name);
ObjectCreate(0,_name,OBJ_LABEL,_window,0,0);
ObjectSetInteger(0,_name,OBJPROP_CORNER,corner);
ObjectSetInteger(0,_name,OBJPROP_XDISTANCE,_x);
ObjectSetInteger(0,_name,OBJPROP_YDISTANCE,_y);
ObjectSetText(_name,_text,_font,"Arial",_color);
ObjectSetInteger(0,_name,OBJPROP_ANCHOR,anchor);
}
//+------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает сумму лотов открытых позиций |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - торговая операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+double GetAmountLotFromOpenPos(string sy="",int op=-1,int mn=-1)
{
double l=0;
int i,k=OrdersTotal();
if(sy=="0") sy=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==sy || sy=="")
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op<0 || OrderType()==op)
{
if(mn<0 || OrderMagicNumber()==mn)
{
l+=OrderLots();
}
}
}
}
}
}
return(l);
}
//+------------------------------------------------------------------+
Программно выключить звук без всяких API можно программно, меняю имя звука: zvuk="aaa.wav"; - будет звук zvuk="bbb.wav"; звук отсутствует, так как в этом файле тишина
Я не понимаю, какая разница, где именно настраивать: в указанном меню или в меню той программы, которая это будет делать? Ведь все равно требуется действие от человека. В чем тогда автоматизация?
Боюсь, что я не смогу Вам объяснить, если после столь подробного мной описания Вам не удается понять сути проблемы.... но я попробую.
Итак, у нас есть необходимость контролировать непредвиденный разрыв соединения с интернетом - для этих целей звук удачное решение. Однако у нас есть потребность перебрать 50 счетов и получить информацию о текущем финансовом состоянии, делать это надо примерно раз в час, что б отреагировать в случае необходимости. И вот при запуске скрипта по горячей клавише мы слушаем 100 звуковых сигналов, которые утомляют и не несут смысловой для нас нагрузки. Поэтому и есть потребность, что б скрипт отключал звук перед перебором аккаунтов и включал его после окончания. Цель - не лазить каждый раз в меню и не включать/отключать звук.
Попробуйте программно переименовать disconnect.wav из папки Sounds, а потом переименовать его обратно.
Попробуйте программно переименовать disconnect.wav из папки Sounds, а потом переименовать его обратно.
Идея интересная. Но вот реализовать её как?
Вероятно нужно задействовать стандартные виндовые длл, как в примере здесь.
Боюсь, что я не смогу Вам объяснить, если после столь подробного мной описания Вам не удается понять сути проблемы.... но я попробую.
Итак, у нас есть необходимость контролировать непредвиденный разрыв соединения с интернетом - для этих целей звук удачное решение. Однако у нас есть потребность перебрать 50 счетов и получить информацию о текущем финансовом состоянии, делать это надо примерно раз в час, что б отреагировать в случае необходимости. И вот при запуске скрипта по горячей клавише мы слушаем 100 звуковых сигналов, которые утомляют и не несут смысловой для нас нагрузки. Поэтому и есть потребность, что б скрипт отключал звук перед перебором аккаунтов и включал его после окончания. Цель - не лазить каждый раз в меню и не включать/отключать звук.
Конечно это так - я так и хочу, но только не знаю, как это делать.
Конечно это так - я так и хочу, но только не знаю, как это делать.
создать жесткую ссылку на этот файл в папке MQL\Files\ и работать с ней обычными MQL-функциями.
Про звук - просто отключил сигналы при разрыве и установлении связи руками - пока так.
Немного улучшил скрипт:
1. Добавил критерий, при котором просадка требует внимания к себе. Теперь визуально видно, на какой счет нужно обратить внимание, кроме того, добавил звуковой сигнал.
2. Скрипт теперь зациклен, в настройках можно настроить, через сколько минут после окончания проверки счетов его снова запускать.