//+------------------------------------------------------------------+ //| web.mq5 | //| Copyright 2018, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Русский Бафет" #property link "https://www.alexeybogachev.ru" #property version "1.01" #include CTrade trade; enum sell_or_buy1 { sell,// продать buy, // купить all // оба }; input int timer=15; // Интервал времени input double lot=0.01; // лотность по умолчанию /*input double lot_gold=0.01; // Металы (лотность) input double lot_oil=0.01; // (лотность) input string oil1="#LCOM0"; // BRENT input string oil2="#CLK0"; // WTI input string ngold2="XAUUSD"; // name Gold */ input sell_or_buy1 sell_or_buy=all; // Торговля по тренду input string ig1=""; // Игнорировать инструмент 1 input string ig2=""; // Игнорировать инструмент 2 input string ig3=""; // Игнорировать инструмент 3 input string domen="http://rusbafet.ru/fx/"; //Домен input int userId=0;//№ пользователя //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- EventSetTimer(timer); //Alert( openlink("https://wlink.ru/fx/fx.txt")); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTimer() { //--- string str=openlink(domen+"fx"+userId+".txt"); if(StringLen(str)>0){ string sep=" "; // разделитель в виде символа ushort u_sep; // код символа разделителя string result[]; // массив для получения строк //--- получим код разделителя u_sep=StringGetCharacter(sep,0); //--- разобьем строку на подстроки int k=StringSplit(str,u_sep,result); string res=result[1]; string sym=result[0]; ulong mid; double olot; if(ArraySize(result)>2)olot=result[2]; else olot=lot; //if(sym=="GOLD" || sym=="SILVER" || sym==ngold2)olot=lot_gold; //if(sym==oil1 || sym==oil2)olot=lot_oil; if(res=="sell" || res=="buy"){ ulong ticket; //string type; uint total=PositionsTotal(); int i; for(uint i=0; i0){ if(PositionGetString(POSITION_SYMBOL)==sym)mid=PositionGetInteger(POSITION_IDENTIFIER); } } } string s_o_b=EnumToString(sell_or_buy); if(sym!=ig1 && sym!=ig2 && sym!=ig3){ if(res=="sell"){ trade.PositionClose(mid); if(s_o_b=="sell" || s_o_b=="all") { trade.Sell(olot,result[0]); openlink(domen+"in.php?del="+userId); string push="sell"+result[0]; SendNotification(push); } } //Alert(PositionsTotal()); if(res=="buy"){ trade.PositionClose(mid); if(s_o_b=="buy" || s_o_b=="all"){ trade.Buy(olot,result[0]); openlink(domen+"in.php?del="+userId); string push="buy"+result[0]; SendNotification(push); } } } // по ошибке } } string openlink(string url) { string cookie=NULL,headers; char post[],result[]; //string url="https://finance.yahoo.com"; //--- для работы с сервером необходимо добавить URL "https://finance.yahoo.com" //--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"): //--- обнуляем код последней ошибки ResetLastError(); //--- загрузка html-страницы с Yahoo Finance int res=WebRequest("GET",url,cookie,NULL,500,post,0,result,headers); if(res==-1) { Print("Ошибка в WebRequest. Код ошибки =",GetLastError()); //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION); } else { if(res==200) { //--- успешная загрузка PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result)); //PrintFormat("Заголовки сервера: %s",headers); //--- сохраняем данные в файл int filehandle=FileOpen("in.txt",FILE_WRITE|FILE_BIN); if(filehandle!=INVALID_HANDLE) { //--- сохраняем содержимое массива result[] в файл FileWriteArray(filehandle,result,0,ArraySize(result)); //--- закрываем файл FileClose(filehandle); } else Print("Ошибка в FileOpen. Код ошибки =",GetLastError()); } else PrintFormat("Ошибка загрузки '%s', код %d",url,res); } return CharArrayToString(result); } //+------------------------------------------------------------------+