Не думал что такие добрые люди есть ещё в этом мире
Да от него и не должно быть никакого сигнала.
Он только показывает время новостей.Всё.
А что от него ещё надо?
//+------------------------------------------------------------------+
//| News.mq4 |
//| Copyright 2022, AM2 |
//| https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link "https://www.forexsystems.biz"
#property version "1.00"
#property strict
#include <WinUser32.mqh>
#define PAUSE 10
#define VK_CONTROL 0x11 //CTRL key
#define KEY_CODE 'E'
extern int MinDo = 30; // Срабатывание минут до новости
extern int MinPosle = 30; // Срабатывание минут после новости
extern int offset = 3; // Часовой пояс сервера
extern bool Vhigh = true; // Показывать важные новости
extern bool Vmedium = false; // Показывать средние новости
extern bool Vlow = false; // Показывать слабые новости
extern bool RisovatLini = true; // Рисовать линии на графике
extern bool CloseOrders = true; // Закрывать все ордера
extern bool BUMoving = true; // Перевести в БУ все ордера
extern int BULevel = 20; // Уровень БУ
extern int BUPoint = 3; // Пункты БУ
extern int Slip = 111; // Проскальзывание
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера |
//+------------------------------------------------------------------+
void CloseAllMulti(int ot=-1)
{
int dg=0;
bool cl=1;
double ask=0,bid=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
ask=SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK);
bid=SymbolInfoDouble(OrderSymbol(),SYMBOL_BID);
dg=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(bid,dg),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(ask,dg),Slip,White);
}
}
}
}
//+------------------------------------------------------------------+
//| Безубыток ордеров |
//+------------------------------------------------------------------+
void BUMulti()
{
int dg=0;
bool m=1;
double ask=0,bid=0,pp=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
ask=SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK);
bid=SymbolInfoDouble(OrderSymbol(),SYMBOL_BID);
dg=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
if(OrderType()==OP_BUY)
{
if(OrderOpenPrice()<=(bid-(BULevel+BUPoint)*pp) && OrderOpenPrice()>OrderStopLoss())
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*pp,OrderTakeProfit(),0,Yellow);
return;
}
}
if(OrderType()==OP_SELL)
{
if(OrderOpenPrice()>=(ask+(BULevel+BUPoint)*pp) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()==0))
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*pp,OrderTakeProfit(),0,Yellow);
return;
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Key()
{
keybd_event(VK_CONTROL,0,0,0);
Sleep(PAUSE);
keybd_event(KEY_CODE,0,0,0);
Sleep(PAUSE);
keybd_event(KEY_CODE,0,2,0);
Sleep(PAUSE);
keybd_event(VK_CONTROL,0,2,0);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double CheckNews = iCustom(NULL,0,"UrdalaNews",MinDo,MinPosle,offset,Vhigh,Vmedium,Vlow,"",RisovatLini,0,0);
if(CheckNews==0)
{
return;
}
if(CheckNews==1)
{
if(CloseOrders)
{
Key();
CloseAllMulti();
}
if(BUMoving)
{
Key();
BUMulti();
}
}
Comment(CheckNews);
}
//+------------------------------------------------------------------+
перед важными новостями
за определенное время до них?
можно ли добавить параметр History — количества истории на графике?добавил: www.opentraders.ru/downloads/3215/
стрела в тестере появляется на закрытии бара для входа, а нужно на открытии бара
if(t!=time[0])
{
...
t=time[0];
}
AM2