Примеры: СМС-извещения о состоянии Советника - страница 2

 
vedroid:

Я слабо себе представляю, какой трейдер согласится каждые 5 минут принимать SMS с уведомлением о том, что все в порядке, вместо того, чтобы 1 раз получить уведомление, если вдруг что-то поломалось.

Простите, ровно это предложение доказывает, что вы не разобрались в вопросе. Если взять цитату из текста статьи, то ответ будет таков:

Извините, уважаемый автор, но это Вы не поняли, что я объясняю другому пользователю именно ту самую стратегию, какую Вы еще раз описали, а именно периодическую отмену периодически возобновляемого отложенного алерта. Я называю это для краткости пингом, в соответствии с тем, как это делается во всех распределенных системах.

Я же русским языком написал, что я "слабо представляю" (т.е. считаю не пригодным для работы, из-за чего собсно и написана данная статья с правильным решением), чтобы sms-ить нормальную работу каждые 5 минут, вместо того, чтобы один раз от-sms-ить проблему.

 
marketeer:
Большое спасибо. Приношу извинения за ситуацию.
 
master255:

...

Вобщем погуглил и написал консольную утилитку на C#. Принимает на вход Логин Пароль Текст сообщения


Я дико извиняюсь, но не могли бы вы приложить исходник? Просто для того чтобы мы были уверены, что утилита не делает ничего лишнего... и просто потому, что здесь так принято...
 
moby_dick:
master255:

...

Вобщем погуглил и написал консольную утилитку на C#. Принимает на вход Логин Пароль Текст сообщения


Я дико извиняюсь, но не могли бы вы приложить исходник? Просто для того чтобы мы были уверены, что утилита не делает ничего лишнего... и просто потому, что здесь так принято...
Вот исходник, только нужно учесть что придется еще поставить Google Data API
 

Спасибо автору за интересное решение и за статью.


Есть несколько вопросов и замечаний:

  1. Зачем выложен (1-й) TerminalWatch.rar? В нем СМС-ка назначается за минуту до события и из-за этого: 1) не приходит "реанимационное" сообщение; 2) обычный алерт приходит на минуту раньше. Это ошибка, или есть какие-то детали, о которых не сказано в статье?
  2. Использование ярлыка - не самое удобное решение. Можно попробовать запускать bat-файл с параметром "/MIN" (обсуждалось здесь). Да и от самого bat-ника я бы избавился. Достаточно одной функции на MQL4 с 9-ю аргументами которую и надо будет вызывать. Аргументы можно задавать внешними переменными или просто передавать при вызове.
  3. При использовании в текстах сообщений (названиях событий в календаре) пробелов terminalWatcher.jar ругается. Если текст заключить в кавычки, ругаться перестает, но найти "свое" событие не может и просто плодит новые.
  4. Не везде понятна логика программы.
  • Зачем удалять реанимационное сообщение, если оно не отправилось? Мне кажется, его надо удалять только если оно уже отправлено.
  • Почему не удаляются все сообщения кроме стопового, если пользователь вручную "установил стоп"? Приходят лишние СМС-ки о потере связи (сразу) и ее восстановлении (после "снятия стопа"). Не логично.


А вообще, работа проделана хорошая. Немножечко доделать, собрать во включаемый mq4-файл и пользоваться налево и направо ;)

Спасибо автору.

 

komposter писал(а):

Использование ярлыка - не самое удобное решение. Можно попробовать запускать bat-файл с параметром "/MIN" (обсуждалось здесь).

Решение без ярлыка:

#import "shell32.dll"
  int ShellExecuteA(int hWnd, int lpVerb, string lpFile, int lpParameters, string lpDirectory, int nCmdShow);
#import
#define SW_HIDE			0
#define SW_SHOWNORMAL		1
#define SW_SHOWMINIMIZED	2
#define SW_SHOWMAXIMIZED	3
#define SW_MAXIMIZE		3
#define SW_SHOWNOACTIVATE	4
#define SW_SHOW			5
#define SW_MINIMIZE		6
#define SW_SHOWMINNOACTIVE	7
#define SW_SHOWNA		8
#define SW_RESTORE		9
#define SW_SHOWDEFAULT		10
int start()
{
	ShellExecuteA( 0, 0, "C:\\TerminalWatch\\launch.bat", 0, "", SW_SHOWMINIMIZED );
	return(0);
}


Если вместо SW_SHOWMINIMIZED использовать SW_HIDE, окно вообще не будет появляться.

 

komposter писал(а):

Да и от самого bat-ника я бы избавился. Достаточно одной функции на MQL4 с 9-ю аргументами которую и надо будет вызывать. Аргументы можно задавать внешними переменными или просто передавать при вызове.

Вариант без bat-файла:

#import "kernel32.dll"
  int WinExec(string lpCmdLine, int uCmdShow);
#import
#define SW_HIDE			0
#define SW_SHOWNORMAL		1
#define SW_SHOWMINIMIZED	2
#define SW_SHOWMAXIMIZED	3
#define SW_MAXIMIZE		3
#define SW_SHOWNOACTIVATE	4
#define SW_SHOW			5
#define SW_MINIMIZE		6
#define SW_SHOWMINNOACTIVE	7
#define SW_SHOWNA		8
#define SW_RESTORE		9
#define SW_SHOWDEFAULT		10
int start()
{
	GoogleCalendar( "C:\\TerminalWatch\\terminalWatcher.jar", "user_name", "password" );
	return(0);
}
void GoogleCalendar(
	// Имя java-файла, включая полный путь			
	string JavaFileName,						
	// Логин Google
	string UserName,	
	// Пароль Google
	string Password,
	// Текст сообщения о потере связи 
	string AlertString		= "Terminal_Alert",	
	// Текст сообщения о восстановлении связи
	string ReanimationString	= "Trading_Resolved",	
	// Название события, при нахождении которого новые сообщения размещаться не будут	
	string StopString		= "STOP",		
	// Интервал обновления
	int	 RefreshPeriod		= 5,			
	// Режим (0 - обычная работа, 1 - отправка сообщения на завтрашнее утро или утро понедельника)
	int	 Mode			= 0,			
	// Час...
	int	 MondayHour		= 8,
	// ...и минута завтрашнего утра
	int	 MondayMinute		= 20 )
{
	WinExec( StringConcatenate( "java -jar \"", JavaFileName, "\" ", UserName, " ", Password, " ", 
					AlertString, " ", ReanimationString, " ", StopString, " ", 
					RefreshPeriod, " ", Mode, " ", MondayHour, " ", MondayMinute ), SW_HIDE );
}


Осталось исправить мелкие огрехи в логике, и можно пользоваться ;)

 

И еще было бы неплохо добавить 2 независимые функции (jar-файла):

- создать_событие ( "имя", время );

- и удалить_событие( "имя" ).

Это бы значительно расширило область применения этой удобности.

 

Добрый день.

to: komposter

1-ый вариант сборки был сыроват и я хотел его удалить, прикрепив 2-ую версию, но не успел до публикации статьи.

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


Большое спасибо, сообществу, что идея теперь будет жить.

Уверен, что даже в том варианте готовности, в котором система представлена, она сможет помочь многим трейдерам, а те, кому её как таковой мало, смогут на базе этой идеи сформировать свой "шедевр".

to: komposter

Подскажите, могу ли я чем-то быть полезен, для улучшения логики утилиты?

 
vedroid:

Добрый день.

to: komposter

1-ый вариант сборки был сыроват и я хотел его удалить, прикрепив 2-ую версию, но не успел до публикации статьи.

Вы в любой момент можете отредактировать уже опубликованную статью и отправить ее снова на публикацию. Это касается не только текста, но и всех вложений (файлов,прикрепленныхк статье).