//----------------------------------------------------------- 0+
// RSS_Signal.mq4 pvm63 2008 11 19
/* Эксперт предназначен для передачи сигналов на:
1. FTP- страничку через RSS канал (рассылка через подписку)
2. свой сотовый телефон в виде SMS на
Мегафон - 7927*******@sms.mgsm.ru или
Стриж 7901802****@sms.samtel.ru
(вместо звездочки необходимо проставить свой номер на закладке Почта)
3. экран Alert и Comment
*/
// ======= indicator parameters ================== 1+
extern bool RSS = false; // включена рассылка
extern bool SMS = false; // выключена рассылка на свой сотовый
extern bool sound = false; // true включена рассылка
extern bool All_Tick = false; // расчет на первом тике нового бара,
// при выборе = true расчет на всех тиках
extern string FOMULA = "K9";
//возможен выбор индикатора К4 или других через окно Параметры
extern int Line_N = 0;
// для индикатора К: 0 -красная линия, 1 - черная линия,
// для К4 - выбор одной из 4 линий
// --- объявление и задание исходных значений переменных --- 2+
bool New_Bar = false,// информация от пользовательской функции
// при обнуружения нового бара в режиме All_Tick = false;
flag_Buy = true,// флаги для фиксации сигнала
flag_Sell = true,
flag_Flet = true;
double Value, // значение индикаторной линии индикатора FOMULA
Price ; // значение текущей цены
string Signal, // полная информация о сигнале
rssNew, // новый сигнал RSS, то что надо вставить
//между заголовком и старыми сигналами в файле test.rss
rssHeader, // заголовок RSS в файле test.rss
rss, // предыдущая строка целиком файла test.rss
rss_one_Header; // предыдущая строка без заголовка, то есть
// это старые сигналы в файле test.rss
int handlerss; // описатетель файла test.rss
// ======== запуск специальной функции start ================= 3+
int start() // cпециальная функция start
{ // 1
// ============ выбор режима передачи сигналов ============= 4+
if( All_Tick == false )
// расчет на первом тике нового бара при выборе All_Tick= false
{ //2
New_Bar = Fun_New_Bar();
//обращение к пользовательской функции, можно просто Fun_New_Bar(), так
// как возвратится последнее значение New_Bar
if (New_Bar == false) // если бар не новый,
return; // ... то уходим
} // 2
// ======== сохранение данных во временных переменных ==== 5+
Value = iCustom(NULL,0,FOMULA,Line_N,0); //значение красной линии в индикаторе К
Price = Bid; // переменная Price на каждом тике
//---------------- формирование заголовока RSS ---------------- 6+
rssHeader ="Signal_pvm63"
+"http://www.sama.ru/~pvm63/RSS"
// http://www.sama.ru/~pvm63/RSS/
+"Signal_pvm63"
+"ru";
//------------- определение длины заголовка -------------------- 7+
int len=StringLen(rssHeader); // возвращается кол-во символов в заголовке
// используется для поиска места вставки нового блока между заголовком и старым текстом сигналов
// Print(" ***************** 1, len= ", len);
// * - для удобства поиска этой строчки в файле log !
//========================= сигнал Flet =================== 8+
if ( Value == 0 ) // нашли сигнал
{ // 3
if(flag_Flet == true ) // это первый бар Flet, тогда выводим информацию:
{ // 4
flag_Flet = false; //отключение следующих баров на участке Flet
flag_Buy = true; // подготовка к обнаружению Buy
flag_Sell = true; // подготовка к обнаружению Sell
Signal= "Flet, " + Symbol()+ "= " +DoubleToStr(Price,Digits) + ", " +
TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS) ;
// Flet, GBP =1,2345; 2008.03.10 10:11:12 пример вывода информации Signal
// здесь используем время, установленное на компьютере. Серверное время МТ4
// можно использовать, если заменить на TimeCurrent
// Print("2, Signal= ", Signal);
Alert( Signal); // Сообщение на экран
Comment(Signal); //сохраним информацию о сигнале, если уберем окно Alert
if(SMS == true) SendMail("Signal", Signal); // SMS-сообщение или E-mail
if( sound== true) PlaySound("sound2.wav");
//============================ RSS =============================== 9+
if( RSS== true)
// если включена опция в Параметрах, то есть надо посылать
// сигналы на FTP -страничку
{ //1 rss
handlerss=FileOpen("test.rss", FILE_READ, ';');
// читаем файл
if(handlerss<0)// в случае отсутствия файла значение = -1
{ // 2 rss
handlerss=FileOpen("test.rss", FILE_WRITE, ';');
// создаем файл в случае его отсутствия
handlerss=FileOpen("test.rss", FILE_READ, ';');
// созданный файл снова читаем
} // 2 rss
if(handlerss>0) // убеждаемся, что файл существует
{ // 3 rss
//---------- формирование нового сигнала RSS --------------- 10+
rssNew = ""
+"Signal, Period = "+Period()+""
+"http://www.sama.ru/~pvm63/RSS"
+""
+Signal // вставка самого сигнала
+""
+"";
//-------------- формирование файла первого сигнала ------- 11+
if(FileSize(handlerss)==0)
// если файл только что создан, то его размер в байтах = 0
{ // 4 rss
handlerss=FileOpen("test.rss", FILE_WRITE, ';');
// открываем файл для записи
FileWrite(handlerss,
rssHeader // вставка заголовка
+rssNew // вставка нового сигнала RSS
+"" // информация о закрытие канала
);
FileClose(handlerss); // закрываем файл
} // 4 rss
// ---- фомирование файла 2 и последующий сигналов --------- 12+
else // если надо делать уже не первую запись
{ // 5 rss
rss=FileReadString(handlerss);
// прочитали предыдущую строку из файла
// Print(" 3, rss= ", rss);
//------- остаток (старый код сигналов без заголовка) ----- 13+
rss_one_Header=StringSubstr(rss,len,0);
//Print(" 4, rss_one_Header = ", rss_one_Header );
handlerss=FileOpen("test.rss", FILE_WRITE, ';') ;
// открыли файл для записи
FileWrite(handlerss,rssHeader + rssNew + rss_one_Header );
// запись в последовательности = заголовок + новый сигнал + старье
FileClose(handlerss); // закрытие файла
} // 5 rss
} // 3 rss
SendFTP("test.rss",NULL);
// отправка файла по адресу согласно вкладки Публикация
} //1 rss ================== окончание блока RSS ======= 14+
} // 4
// GetLastError();
return; // Выход на первом тике следующего бара
} // 3
// Если условия Flet на последующих барах еще действительны, то выходим
// ========================= сигнал Buy =============== 15+
if ( Value == 100 )
{ // 5
if ( flag_Buy == true ) // это первый бар Buy, тогда выводим информацию:
{ // 6
flag_Buy = false; //отключение следующих баров на участке Buy
flag_Flet = true; // подготовка к обнаружению Flet
flag_Sell = true; // подготовка к обнаружению Sell
Signal= "Buy, " + Symbol()+ "= " +DoubleToStr(Price,Digits) + ", " +
TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS) ;
// Print("4, Signal= ", Signal);
Alert( Signal); // Сообщение на экран
Comment(Signal); //сохраним информацию, если уберем окно Alert
if(SMS == true) SendMail("Signal", Signal); //SMS-сообщение или E-mail
if( sound== true) PlaySound("sound2.wav");
//============================ RSS ===================== 16+
if( RSS== true)
{ //1 rss
handlerss=FileOpen("test.rss", FILE_READ, ';');
if(handlerss<0)
{ // 2 rss
handlerss=FileOpen("test.rss", FILE_WRITE, ';');
handlerss=FileOpen("test.rss", FILE_READ, ';');
} // 2 rss
if(handlerss>0)
{ // 3 rss
//---------- формирование нового сигнала RSS ------------- 17+
rssNew = ""
+"Signal, Period = "+Period()+""
+"http://www.sama.ru/~pvm63/RSS"
+""
+Signal
+""
+"";
//---------------------------------------------------------- 18+
if(FileSize(handlerss)==0)
{ // 4 rss
handlerss=FileOpen("test.rss", FILE_WRITE, ';');
FileWrite(handlerss,
rssHeader
+rssNew
+""
);
FileClose(handlerss);
} // 4 rss
else
{ // 5 rss
rss=FileReadString(handlerss);
// Print("5, rss= ", rss);
//------------- остаток (старый код без заголовка) -------- 19+
rss_one_Header=StringSubstr(rss,len,0);
//Print(" 6, rss_one_Header = ", rss_one_Header );
handlerss=FileOpen("test.rss", FILE_WRITE, ';') ;
FileWrite(handlerss,rssHeader + rssNew + rss_one_Header );
FileClose(handlerss);
} // 5 rss
} // 3 rss
SendFTP("test.rss",NULL);
} //1 rss ======= окончание блока RSS ============== 20+
} // 6
return; // Выход на первом тике следующего бара
} // 5
// Если условия Buy на последующих барах еще действительны, то выходим
// ======================= сигнал Sell ================= 21+
if ( Value == -100 )
{ // 7
if(flag_Sell == true ) // это первый бар Sell, тогда выводим информацию:
{ // 8
flag_Sell = false; //отключение следующих баров на участке Sell
flag_Flet = true; // подготовка к обнаружению Flet
flag_Buy = true; // подготовка к обнаружению Buy
Signal= "Sell, " + Symbol()+ "= " +DoubleToStr(Price,Digits) + ", " +
TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS);
// Print("7, Signal= ", Signal);
Alert(Signal); // Сообщение на экран
Comment(Signal); //сохраним информацию, если уберем окно Alert
if(SMS == true) SendMail("Signal", Signal); // SMS-сообщение или E-mail
if( sound== true) PlaySound("sound2.wav");
//============================ RSS ======================= 22+
if( RSS== true)
{ //1 rss
handlerss=FileOpen("test.rss", FILE_READ, ';');
if(handlerss<0)
{ // 2 rss
handlerss=FileOpen("test.rss", FILE_WRITE, ';');
handlerss=FileOpen("test.rss", FILE_READ, ';');
} // 2 rss
if(handlerss>0)
{ // 3 rss
//---------- формирование нового сигнала RSS --------------- 23+
rssNew = ""
+"Signal, Period = "+Period()+""
+"http://www.sama.ru/~pvm63/RSS"
+""
+Signal
+""
+"";
//---------------------------------------------------------- 24+
if(FileSize(handlerss)==0)
{ // 4 rss
handlerss=FileOpen("test.rss", FILE_WRITE, ';');
FileWrite(handlerss,
rssHeader
+rssNew
+""
);
FileClose(handlerss);
} // 4 rss
else
{ // 5 rss
rss=FileReadString(handlerss);
// Print("8, rss= ", rss);
//------------- остаток (старый код без заголовка) ------ 25+
rss_one_Header=StringSubstr(rss,len,0);
//Print(" 9, rss_one_Header = ", rss_one_Header );
handlerss=FileOpen("test.rss", FILE_WRITE, ';') ;
FileWrite(handlerss,rssHeader + rssNew + rss_one_Header );
FileClose(handlerss);
} // 5 rss
} // 3 rss
SendFTP("test.rss",NULL);
} //1 rss ======== окончание блока RSS ============== 26+
} // 8
return; // Выход на первом тике следующего бара
} // 7
// Если условия Sell на последующих барах еще действительны, то выходим
} // 1
// ======== окончание cпециальной функция start ============ 27+
// ============= функция обнаружения нового бара ======== 28+
bool Fun_New_Bar()
{ // 9
static datetime New_Time=0; // время текущего бара
New_Bar=false; // нового бара нет
if( New_Time!= Time[0]) // сравниваем время
{ // 10
New_Time= Time[0]; // теперь время такое
New_Bar= true;
} // 10 поймался новый бар
return(New_Bar);
// возврат значения. Можно и без этой строки, а последнее значение
// New_Bar будет передано в место вызова этой функции
} // 9
// =========== конец, а кто доехал = молодец ! =============== 11+