extern double Lots=0.1;
extern int Symb.magic=9001,
nORD.Buy = 5, // max buy orders
nORD.Sell = 5; // max sell orders
//----
double PRC.Buy,
PRC.Sell;
int ord.ticket,
nORDER,
ORD.Buy,
ORD.Sell,
max.ORD = 1, // max orders at one bar
Slippage=10;
string Name_Expert="Simple KISS";
bool Signal.Bars,
ORD.Close.Buy,
ORD.Close.Sell,
Signal.Buy,
Signal.Sell;
//+------------------------------------------------------------------------------------+
int init() {
Signal.Bars=Bars;
ORD.Close.Buy=true;
ORD.Close.Sell=true;
return(0);
}
//+------------------------------------------------------------------------------------+
void deinit() {
Comment("");
}
//+------------------------------------------------------------------------------------+
int start() {
if(AccountBalance()<1000) return(0);
Signal.Sell=false;
Signal.Buy=false;
if(OrdersTotal()==0) {
Signal.Bars=Bars;
ORD.Close.Buy=true;
ORD.Close.Sell=true;
ORD.Buy=0;
ORD.Sell=0;
}
nORDER=OrdersTotal();
//+---------------------------------------------------------------------------------+
// BUY Signals
//+---------------------------------------------------------------------------------+
if(true
&& High[0]<iLow(NULL,0,1)
&& ORD.Buy<nORD.Buy
//.........................................Filters...................................
&& true // empty filter: passes all signals
) {
//----
Signal.Buy=true;
}
//+---------------------------------------------------------------------------------+
// SELL Signals
//+---------------------------------------------------------------------------------+
if(true
&& Low[0]>iHigh(NULL,0,1)
&& ORD.Sell<nORD.Sell
//.........................................Filters...................................
&& true // empty filter: passes all signals
) {
//----
Signal.Sell=true;
}
//+---------------------------------------------------------------------------------+
if(ORD.Close.Buy==false) StopBuy(Symb.magic); // close orders
if(ORD.Close.Sell==false) StopSell(Symb.magic); // close orders
//+---------------------------------------------------------------------------------+
// Trade: open several orders inside one bar
//+---------------------------------------------------------------------------------+
if (nORDER<max.ORD) {
if (Signal.Buy) {
OpenBuy(Symb.magic);
return(0);
}
if (Signal.Sell) {
OpenSell(Symb.magic);
return(0);
}
}
//+---------------------------------------------------------------------------------+
// Trade: Open one order inside one bar
//+---------------------------------------------------------------------------------+
if (nORDER>=max.ORD) {
if (Signal.Buy && Signal.Bars<Bars) {
OpenBuy(Symb.magic);
return(0);
}
if (Signal.Sell && Signal.Bars<Bars) {
OpenSell(Symb.magic);
return(0);
}
}
return (0);
}
//+------------------------------------------------------------------------------------+
void OpenBuy(int Symbol.magic) {
ORD.Close.Buy=true;
ORD.Close.Sell=false;
if(ORD.Buy>=1 && Ask>PRC.Buy-5*Point) return(0);
ord.ticket=OrderSend
(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,Name_Expert,Symbol.magic,0,Blue);
if(ord.ticket<0) {
Print("Ticket ",ord.ticket," Error",GetLastError());
return(0);
}
PRC.Buy=Ask;
Signal.Bars=Bars;
ORD.Buy++;
ORD.Sell=0;
}
//+------------------------------------------------------------------------------------+
void OpenSell(int Symbol.magic) {
ORD.Close.Sell=true;
ORD.Close.Buy=false;
if(ORD.Sell>=1 && Bid<PRC.Sell+5*Point) return(0);
ord.ticket=OrderSend
(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,Name_Expert,Symbol.magic,0,Red);
if(ord.ticket<0) {
Print("Ticket ",ord.ticket," Error",GetLastError());
return(0);
}
PRC.Sell=Bid;
Signal.Bars=Bars;
ORD.Sell++;
ORD.Buy=0;
}
//+------------------------------------------------------------------------------------+
void StopBuy(int Symbol.magic) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Symbol.magic) {
if (OrderType()==OP_BUY) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue);
}
}
}
}
}
//+------------------------------------------------------------------------------------+
void StopSell(int Symbol.magic) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Symbol.magic) {
if (OrderType()==OP_SELL) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red);
}
}
}
}
}
//+------------------------------------------------------------------------------------+