150 lines
10 KiB
MQL5
150 lines
10 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| web.mq5 |
|
|
//| Copyright 2018, MetaQuotes Software Corp. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Русский Бафет"
|
|
#property link "https://www.alexeybogachev.ru"
|
|
#property version "1.01"
|
|
|
|
#include <Trade\Trade.mqh>
|
|
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 sell_or_buy1 sell_or_buy=all; // Торговля по тренду
|
|
input string ig1=""; // Игнорировать инструмент 1
|
|
input string ig2=""; // Игнорировать инструмент 2
|
|
input string ig3=""; // Игнорировать инструмент 3
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| 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("https://wlink.ru/fx/fx3.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];
|
|
int mid;
|
|
double olot;
|
|
olot=lot;
|
|
if(sym=="GOLD" || sym=="SILVER")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; i<total; i++)
|
|
{
|
|
//--- получим тикет ордера по его позиции в списке
|
|
if((ticket=PositionGetTicket(i))>0){
|
|
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")
|
|
{if(trade.Sell(olot,result[0]))openlink("https://wlink.ru/fx/in.php?del2=1");
|
|
}
|
|
}
|
|
//Alert(PositionsTotal());
|
|
if(res=="buy"){
|
|
trade.PositionClose(mid);
|
|
if(s_o_b=="buy" || s_o_b=="all"){
|
|
if(trade.Buy(olot,result[0]))
|
|
openlink("https://wlink.ru/fx/in.php?del2=1");
|
|
}
|
|
} }
|
|
// по ошибке
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
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);
|
|
}
|
|
//+------------------------------------------------------------------+
|