63 lines
3 KiB
MQL4
63 lines
3 KiB
MQL4
|
//+------------------------------------------------------------------+
|
||
|
//| trade.mq4 |
|
||
|
//| nuric |
|
||
|
//| https://github.com/nuric/mt4-tcp |
|
||
|
//+------------------------------------------------------------------+
|
||
|
#property library
|
||
|
#property copyright "nuric"
|
||
|
#property link "https://github.com/nuric/mt4-tcp"
|
||
|
#property version "1.00"
|
||
|
#property strict
|
||
|
//+------------------------------------------------------------------+
|
||
|
//| Close given order ticket |
|
||
|
//+------------------------------------------------------------------+
|
||
|
bool CloseOrder(int ticket) export
|
||
|
{
|
||
|
if(!IsTradeAllowed() || !OrderSelect(ticket,SELECT_BY_TICKET))
|
||
|
return false;
|
||
|
double price=OrderType()==OP_BUY ? Bid : Ask;
|
||
|
return OrderClose(OrderTicket(),OrderLots(),price,3);
|
||
|
}
|
||
|
//+------------------------------------------------------------------+
|
||
|
//| Place a buy order, return ticket |
|
||
|
//+------------------------------------------------------------------+
|
||
|
int Buy(double lots=0.01,double stoploss=0,double takeprofit=0) export
|
||
|
{
|
||
|
// Check context and place the order
|
||
|
if(!IsTradeAllowed()) return -1;
|
||
|
return OrderSend(Symbol(),OP_BUY,lots,Ask,3,stoploss,takeprofit);
|
||
|
}
|
||
|
//+------------------------------------------------------------------+
|
||
|
//| Buy only if given ticket is not live, close ticket if needed |
|
||
|
//+------------------------------------------------------------------+
|
||
|
int SingleBuy(int ticket,double lots=0.01,double stoploss=0,double takeprofit=0) export
|
||
|
{
|
||
|
// Is the current ticket already a buy order?
|
||
|
if(!IsTradeAllowed() || (OrderSelect(ticket,SELECT_BY_TICKET) && OrderCloseTime()==0 && OrderType()==OP_BUY))
|
||
|
return -1; // The last order is still alive
|
||
|
// If it is a sell order then close it as we want to buy now
|
||
|
if(OrderCloseTime()==0 && OrderType()==OP_SELL)
|
||
|
CloseOrder(ticket);
|
||
|
return Buy(lots, stoploss, takeprofit);
|
||
|
}
|
||
|
//+------------------------------------------------------------------+
|
||
|
//| Place a sell order, return ticket |
|
||
|
//+------------------------------------------------------------------+
|
||
|
int Sell(double lots=0.01,double stoploss=0,double takeprofit=0) export
|
||
|
{
|
||
|
if(!IsTradeAllowed()) return -1;
|
||
|
return OrderSend(Symbol(),OP_SELL,lots,Bid,3,stoploss,takeprofit);
|
||
|
}
|
||
|
//+------------------------------------------------------------------+
|
||
|
//| Sell only if given ticket is not live, close ticket if needed |
|
||
|
//+------------------------------------------------------------------+
|
||
|
int SingleSell(int ticket,double lots=0.01,double stoploss=0,double takeprofit=0) export
|
||
|
{
|
||
|
if(!IsTradeAllowed() || (OrderSelect(ticket,SELECT_BY_TICKET) && OrderCloseTime()==0 && OrderType()==OP_SELL))
|
||
|
return -1;
|
||
|
if(OrderCloseTime()==0 && OrderType()==OP_BUY)
|
||
|
CloseOrder(ticket);
|
||
|
return Sell(lots, stoploss, takeprofit);
|
||
|
}
|
||
|
//+------------------------------------------------------------------+
|