//----------------------------------------------------------- 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+