//+------------------------------------------------------------------+
//| Opera.mq4 |
//|
//| |
//+------------------------------------------------------------------+
#property copyright
#property link
/*
- торговля раз в сутки в одно и тоже время например в 14.30 (изменяемый параметр)
- в это время выставляется два взаимоотменяемых ордера на продажу и покупку
с отступом от текущей цены (в данный момент времени) в 15 пунктов (изменяемый параметр)
- при срабатывании одного из ордеров (второй автоматом отменяется) выставляется
рофит 50пунктов (изменяемый параметр) и стоп лосс 25пунктов (изменяемый параметр)
- следующие ордера ставятся ровно через сутки.
- если открытая позиция так и не закрылась (ни в профит, ни в убыток) то
принудительно закрывается через 23 часа по текущей цене.
- выставление количества торгуемых лотов (изменяемый параметр).
- при удваении суммы капитала, количество торгуемых лотов удваивается
относительно предыдущих (которыми торговали)
- торговля планируется по четырем основным валютным парам ЕUR/USD, фунт-бакс,
долар-ена, франк-долар.
*/
extern int Magic = 1061;
extern string TradeTime = "14:30";
extern double Lots = 0.1;
extern int Delta = 15;
extern int TakeProfit = 50;
extern int StopLoss = 25;
int slip = 3;
bool TradeDone = false;
datetime LastTradeTime = 0;
datetime TimeNow = 0;
int t1=0, t2=0;
int init()
{
LastTradeTime = StrToTime(TradeTime) - 24*60*60;
return(0);
}
int deinit()
{
return(0);
}
int start()
{
TimeNow = TimeCurrent();
if(TimeNow >= LastTradeTime + 24*60*60 && TradeDone == false)
OpenTrades();
else if(TimeNow >= LastTradeTime + 23*60*60 && TradeDone == true)
CloseTrades();
else if(t1 > 0 && t2 > 0)
CheckTrades();
return(0);
}
void OpenTrades()
{
t1 = OrderSend(Symbol(), OP_BUYSTOP, Lots, Ask + Delta*Point, slip, Bid + Delta*Point - StopLoss*Point, Bid + Delta*Point + TakeProfit*Point, NULL, Magic, TimeNow+23*60*60);
t2 = OrderSend(Symbol(), OP_SELLSTOP, Lots, Bid - Delta*Point, slip, Ask - Delta*Point + StopLoss*Point, Ask - Delta*Point - TakeProfit*Point, NULL, Magic, TimeNow+23*60*60);
LastTradeTime = StrToTime(TradeTime);
TradeDone = true;
}
void CloseTrades()
{
int res;
if(t1>0)
{
OrderSelect(t1, SELECT_BY_TICKET);
if(OrderType() == OP_BUY && OrderCloseTime() == 0)
{
res = OrderClose(OrderTicket(), OrderLots(), Bid, slip, Gold);
if(res<0)
Alert("OrderClose Error: ", GetLastError());
}
}
if(t2>0)
{
OrderSelect(t2, SELECT_BY_TICKET);
if(OrderType() == OP_SELL && OrderCloseTime() == 0)
{
res = OrderClose(OrderTicket(), OrderLots(), Ask, slip, Gold);
if(res<0)
Alert("OrderClose Error: ", GetLastError());
}
}
TradeDone = false;
}
void CheckTrades()
{
OrderSelect(t1, SELECT_BY_TICKET);
if(OrderType() == OP_BUY)
{OrderDelete(t2); t2=0;}
OrderSelect(t2, SELECT_BY_TICKET);
if(OrderType() == OP_SELL)
{OrderDelete(t1); t1=0;}