//+------------------------------------------------------------------+
//| T3MA.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link "http://www.forexsystems.biz"
#property description "Simple expert advisor"
//--- Inputs
extern double Lots = 0.1; // лот
extern int StopLoss = 500; // лось
extern int TakeProfit = 500; // язь
extern int Slip = 30; // реквот
extern int Shift = 1; // сдвиг
extern int Magic = 123; // магик
extern string IndName = "T3MA-ALARM";
extern int IndPeriod = 4;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void OpenPos()
{
int r=0;
double sl=0,tp=0;
//--- get Ind
double FBlue=iCustom(Symbol(),0,IndName,IndPeriod,0,Shift);
double FRed=iCustom(Symbol(),0,IndName,IndPeriod,1,Shift);
//--- sell conditions
if(FRed<100)
{
if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
r=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
return;
}
//--- buy conditions
if(FBlue<100)
{
if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits);
if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
r=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,sl,tp,"",Magic,0,Blue);
return;
}
//---
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void ClosePos()
{
//--- get Ind
double FBlue=iCustom(Symbol(),0,IndName,IndPeriod,0,Shift);
double FRed=iCustom(Symbol(),0,IndName,IndPeriod,1,Shift);
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(FRed<100)
{
bool c=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White);
}
break;
}
if(OrderType()==OP_SELL)
{
if(FBlue<100)
{
c=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White);
}
break;
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| OnTick function |
//+------------------------------------------------------------------+
void OnTick()
{
double FBlue=iCustom(Symbol(),0,IndName,IndPeriod,0,Shift);
double FRed=iCustom(Symbol(),0,IndName,IndPeriod,1,Shift);
if(CountTrades()<1) OpenPos();
if(CountTrades()>0) ClosePos();
Comment("\n Blue: ",FBlue,
"\n Red: ",FRed);
//---
}
//+------------------------------------------------------------------+
скопировал твой код
//+------------------------------------------------------------------+
//| News.mq5 |
//| Copyright 2015, AM2 |
//| https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "https://www.forexsystems.biz"
#property version "1.00"
//--- входные параметры эксперта
input int TakeProfit = 500; // Тейкпрофит
input int StopLoss = 500; // Стоплосс
input int BeforTime = 10; // Время до новости в секундах
input int Expiration = 10; // Истечение ордера в часах
input int Delta = 300; // Отступ от цены
input int Slip = 50; // Проскальзывание
input double Lot = 0.1; // Количество лотов для торговли
input long Magic = 1012; // Магик
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void BuyStop()
{
double sl=0,tp=0,pr=0;
// Лучшее предложение на покупку
double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
pr=NormalizeDouble(Ask+Delta*_Point,_Digits);
if(StopLoss>0) sl=NormalizeDouble(pr-StopLoss*_Point,_Digits);
if(TakeProfit>0) tp=NormalizeDouble(pr+TakeProfit*_Point,_Digits);
//--- готовим запрос
MqlTradeRequest request={0};
request.action=TRADE_ACTION_PENDING; // отложенный ордер
request.symbol=_Symbol; // Cимвол
request.price = pr; // цена открытия
request.sl = sl; // стоп
request.tp = tp; // тейк
request.volume = Lot; // количество лотов для торговли
request.magic = Magic; // магик
request.type = ORDER_TYPE_BUY_STOP; // ордер байстоп
request.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
request.deviation=Slip; // проскальзывание от текущей цены
request.type_time=ORDER_TIME_SPECIFIED; // Ордер будет действовать до даты истечения
request.expiration=TimeCurrent()+Expiration*3600; // время истечения ордера
//----проверим торговый запрос
MqlTradeCheckResult check={0};
if(!OrderCheck(request,check))
Print(__FUNCTION__,"(): Неверные данные для структуры торгового запроса!");
//--- отправим торговый приказ
MqlTradeResult result={0};
if(OrderSend(request,result))
//--- выведем в лог ответ сервера
Print(__FUNCTION__,":",result.comment);
if(result.retcode==10016) Print(result.bid,result.ask,result.price);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void SellStop()
{
double sl=0,tp=0,pr=0;
// Лучшее предложение на продажу
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
pr=NormalizeDouble(Bid-Delta*_Point,_Digits);
if(StopLoss>0) sl=NormalizeDouble(pr+StopLoss*_Point,_Digits);
if(TakeProfit>0) tp=NormalizeDouble(pr-TakeProfit*_Point,_Digits);
//--- готовим запрос
MqlTradeRequest request={0};
request.action=TRADE_ACTION_PENDING; // отложенный ордер
request.symbol=_Symbol; // Cимвол
request.price = pr; // цена открытия
request.sl = sl; // стоп
request.tp = tp; // тейк
request.volume = Lot; // количество лотов для торговли
request.magic = Magic; // магик
request.type = ORDER_TYPE_SELL_STOP; // ордер селлстоп
request.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
request.deviation=Slip; // проскальзывание от текущей цены
request.type_time = ORDER_TIME_SPECIFIED; // Ордер будет действовать до даты истечения
request.expiration=TimeCurrent()+Expiration*3600; // время истечения ордера
//----проверим торговый запрос
MqlTradeCheckResult check={0};
if(!OrderCheck(request,check))
Print(__FUNCTION__,"(): Неверные данные для структуры торгового запроса!");
//--- отправим торговый приказ
MqlTradeResult result={0};
if(OrderSend(request,result))
//--- выведем в лог ответ сервера
Print(__FUNCTION__,":",result.comment);
if(result.retcode==10016) Print(result.bid,result.ask,result.price);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
datetime t=0;
datetime t0=0;
string name="";
string name0="";
string text="";
int ot=ObjectsTotal(0,0,OBJ_EVENT);
for(int i=0;i<ot;i++)
{
name=ObjectName(0,i+1,0,OBJ_EVENT); //имя новости больше локального времени
name0=ObjectName(0,i,0,OBJ_EVENT); //имя новости меньше локального времени
ObjectGetInteger(0,name,OBJPROP_TIME,0,t);//время новости больше локального времени
ObjectGetInteger(0,name0,OBJPROP_TIME,0,t0);//время новости меньше локального времени
if(TimeCurrent()>t0 && TimeCurrent()<t)
{
text=ObjectGetString(0,name,OBJPROP_TEXT,0);
break;
}
}
if(t-TimeCurrent()<=BeforTime && PositionsTotal()<1 && OrdersTotal()<1)
{
BuyStop();
SellStop();
}
Comment("\n Время сервера: ",TimeCurrent(),
"\n Название новости: ",text,
"\n Время новости: ",t);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| News.mq5 |
//| Copyright 2015, AM2 |
//| https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "https://www.forexsystems.biz"
#property version "1.00"
//--- входные параметры эксперта
input int TakeProfit = 500; // Тейкпрофит
input int StopLoss = 500; // Стоплосс
input int BeforTime = 10; // Время до новости в секундах
input int Expiration = 10; // Истечение ордера в часах
input int Delta = 300; // Отступ от цены
input int Slip = 50; // Проскальзывание
input double Lot = 0.1; // Количество лотов для торговли
input long Magic = 123; // Магик
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void BuyStop()
{
double sl=0,tp=0,pr=0;
// Лучшее предложение на покупку
double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
pr=NormalizeDouble(Ask+Delta*_Point,_Digits);
if(StopLoss>0) sl=NormalizeDouble(pr-StopLoss*_Point,_Digits);
if(TakeProfit>0) tp=NormalizeDouble(pr+TakeProfit*_Point,_Digits);
//--- готовим запрос
MqlTradeRequest request={0};
request.action=TRADE_ACTION_PENDING; // отложенный ордер
request.symbol=_Symbol; // Cимвол
request.price = pr; // цена открытия
request.sl = sl; // стоп
request.tp = tp; // тейк
request.volume = Lot; // количество лотов для торговли
request.magic = Magic; // магик
request.type = ORDER_TYPE_BUY_STOP; // ордер байстоп
request.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
request.deviation=Slip; // проскальзывание от текущей цены
request.type_time=ORDER_TIME_SPECIFIED; // Ордер будет действовать до даты истечения
request.expiration=TimeCurrent()+Expiration*3600; // время истечения ордера
//----проверим торговый запрос
MqlTradeCheckResult check={0};
if(!OrderCheck(request,check))
Print(__FUNCTION__,"(): Неверные данные для структуры торгового запроса!");
//--- отправим торговый приказ
MqlTradeResult result={0};
if(OrderSend(request,result))
//--- выведем в лог ответ сервера
Print(__FUNCTION__,":",result.comment);
if(result.retcode==10016) Print(result.bid,result.ask,result.price);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void SellStop()
{
double sl=0,tp=0,pr=0;
// Лучшее предложение на продажу
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
pr=NormalizeDouble(Bid-Delta*_Point,_Digits);
if(StopLoss>0) sl=NormalizeDouble(pr+StopLoss*_Point,_Digits);
if(TakeProfit>0) tp=NormalizeDouble(pr-TakeProfit*_Point,_Digits);
//--- готовим запрос
MqlTradeRequest request={0};
request.action=TRADE_ACTION_PENDING; // отложенный ордер
request.symbol=_Symbol; // Cимвол
request.price = pr; // цена открытия
request.sl = sl; // стоп
request.tp = tp; // тейк
request.volume = Lot; // количество лотов для торговли
request.magic = Magic; // магик
request.type = ORDER_TYPE_SELL_STOP; // ордер селлстоп
request.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
request.deviation=Slip; // проскальзывание от текущей цены
request.type_time = ORDER_TIME_SPECIFIED; // Ордер будет действовать до даты истечения
request.expiration=TimeCurrent()+Expiration*3600; // время истечения ордера
//----проверим торговый запрос
MqlTradeCheckResult check={0};
if(!OrderCheck(request,check))
Print(__FUNCTION__,"(): Неверные данные для структуры торгового запроса!");
//--- отправим торговый приказ
MqlTradeResult result={0};
if(OrderSend(request,result))
//--- выведем в лог ответ сервера
Print(__FUNCTION__,":",result.comment);
if(result.retcode==10016) Print(result.bid,result.ask,result.price);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
datetime t=0;
string name="";
string text="";
int ot=ObjectsTotal(0,0,OBJ_EVENT);
for(int i=0;i<ot;i++)
{
name=ObjectName(0,ot-i,0,OBJ_EVENT);
text=ObjectGetString(0,name,OBJPROP_TEXT,0);
ObjectGetInteger(0,name,OBJPROP_TIME,0,t);
if(t-TimeCurrent()<=BeforTime && PositionsTotal()<1 && OrdersTotal()<1)
{
BuyStop();
SellStop();
}
}
Comment("\n Время сервера: ",TimeCurrent(),
"\n Название новости: ",text,
"\n Время новости: ",t,
"\n Всего новостей: ",ot-1);
}
//+------------------------------------------------------------------+
при открытии нового бара открывается ордер сначала на продажу потом на покупку!
открылся ордер на покупку и скажем через 3 бара опять наступили условия при котором открылся бы ордер на покупку
А можно как то сделать так в советнике чтобы можно было выбрать важность новости. Очень интересно погонять советник только на важных новостях
//+------------------------------------------------------------------+
//| News VLine.mq5 |
//| Copyright 2010, Urain |
//| https://login.mql5.com/ru/users/Urain |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, Urain"
#property link "https://login.mql5.com/ru/users/Urain"
#property version "1.00"
#property script_show_inputs
//---
input color color_line=clrOrange; // Цвет линий
input ENUM_LINE_STYLE style_line=STYLE_DASHDOT; // Стиль рисования линий
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
long chid=ChartID();
int total=ObjectsTotal(chid,0,OBJ_EVENT);
for(int i=0;i<total;i++)
ObjectNews(chid,i,ObjectName(chid,i,0,OBJ_EVENT));
}
//+------------------------------------------------------------------+
//| ObjectNews |
//+------------------------------------------------------------------+
void ObjectNews(long chid,int num,string tool)
{
datetime time=StringToTime(tool);
string name="news"+(num>99?(string)num:num>9?"0"+(string)num:"00"+(string)num);
if(ObjectFind(chid,name)<0)
ObjectCreate(chid,name,OBJ_VLINE,0,time,0);
ObjectSetString(chid,name,OBJPROP_TOOLTIP,tool);
ObjectSetInteger(chid,name,OBJPROP_COLOR,color_line);
ObjectSetInteger(chid,name,OBJPROP_STYLE,style_line);
ObjectSetInteger(chid,name,OBJPROP_BACK,true);
ObjectSetInteger(chid,name,OBJPROP_SELECTED,false);
}
AM2