oco.
ezt expertkent latja
#property copyright "Matt C do not sell but you can share"
#property link " http://www.xpworx.com"
string ver = "Modified: 28/11/06-07:15";
//---- Trades limits
extern bool CloseAtDayEnd = false;
extern double distance = 5;
extern double stoploss = 100;
extern double takeprofit = 50;
extern double lots = 0.01;
extern double trailingStop = 35;
extern int slippage = 5;
extern int hour_start = 19;
//--- Global variables
int MN1 = 20611160;
int MN2 = 90611285;
int MagicNumber = 0;
string ExpertComment = "Matt_EA";
//+------------------------------------------------------------------
int init()
{
if (CloseAtDayEnd)
{
ExpertComment = "Matt_EA_CLOSE_ON";
MagicNumber = MN1;
}
else
{
ExpertComment = "Matt_EA_CLOSE_OFF";
MagicNumber = MN2;
}
return(0);
}
int deinit()
{
return(0);
}
int start()
{
int cnt,total,long_ticket,short_ticket;
int hour_end = hour_start -1;
total = OrdersTotal();
if((total 0)
{
if(OrderSelect(short_ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Pending " + GetOrderType(OrderType()) + " order opened : ",OrderOpenPrice());
}
else
{
Print("Error opening Pending " + GetOrderType(OrderType()) + " order : ",GetLastError());
}
long_ticket=OpenPendingOrder(OP_BUYSTOP,lots,distance,slippage,stoploss,takeprofit,ExpertComment+"_BUYSTOP",MagicNumber,0);
if(long_ticket>0)
{
if(OrderSelect(long_ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Pending " + GetOrderType(OrderType()) + " order opened : ",OrderOpenPrice());
}
else
{
Print("Error opening Pending " + GetOrderType(OrderType()) + " order : ",GetLastError());
}
}
if(CloseAtDayEnd && Hour()==hour_end)
{
CloseDeleteAll();
}
for(cnt=0;cnt {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType()==OP_BUY) //Point*trailingStop)
{
if(OrderStopLoss()(Ask+Point*trailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
return(0);
}
int OpenPendingOrder(int pType=OP_BUYLIMIT,double pLots=1,double pLevel=5,int sp=0, double sl=0,double tp=0,string pComment="",int pMagic=123,datetime pExpiration=0,color pColor=Yellow)
{
switch (pType)
{
case OP_BUYLIMIT:
Alert("BUYLIMIT - Ask:",Ask," Bid:",Bid," Open price:",Ask-(pLevel*Point)," StopLoss:",(Ask-pLevel*Point)-sl*Point);
return(OrderSend(Symbol(),OP_BUYLIMIT,pLots,Ask-(pLevel*Point),sp,(Ask-pLevel*Point)-sl*Point,(Ask-pLevel*Point)+tp*Point,pComment,pMagic,pExpiration,pColor));
break;
case OP_BUYSTOP:
Alert("BUYSTOP - Ask:",Ask," Bid:",Bid," Open price:",Ask+(pLevel*Point)," StopLoss:",(Ask+pLevel*Point)-sl*Point);
return(OrderSend(Symbol(),OP_BUYSTOP,pLots,Ask+(pLevel*Point),sp,(Ask+pLevel*Point)-sl*Point,(Ask+pLevel*Point)+tp*Point,pComment,pMagic,pExpiration,pColor));
break;
case OP_SELLLIMIT:
Alert("SELLLIMIT - Ask:",Ask," Bid:",Bid," Open price:",Bid+(pLevel*Point)," StopLoss:",(Bid+pLevel*Point)+sl*Point);
return(OrderSend(Symbol(),OP_SELLLIMIT,pLots,Bid+(pLevel*Point),sp,(Bid+pLevel*Point)+sl*Point,(Bid+pLevel*Point)-tp*Point,pComment,pMagic,pExpiration,pColor));
break;
case OP_SELLSTOP:
Alert("SELLSTOP - Ask:",Ask," Bid:",Bid," Open price:",Bid-(pLevel*Point)," StopLoss:",(Bid-pLevel*Point)+sl*Point);
return(OrderSend(Symbol(),OP_SELLSTOP,pLots,Bid-(pLevel*Point),sp,(Bid-pLevel*Point)+sl*Point,(Bid-pLevel*Point)-tp*Point,pComment,pMagic,pExpiration,pColor));
break;
}
}
string GetOrderType( int type)
{
if(type == OP_BUY) return ("Buying position");
if(type == OP_SELL) return ("Selling position");
if(type == OP_BUYLIMIT) return ("Buy Limit pending position");
if(type == OP_BUYSTOP) return ("Buy Stop pending position");
if(type == OP_SELLLIMIT) return ("Sell Limit pending position");
if(type == OP_SELLSTOP) return ("Sell Stop pending position");
}
bool isNewSymbol(string current_symbol)
{
//loop through all the opened order and compare the symbols
int total = OrdersTotal();
for(int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
string selected_symbol = OrderSymbol();
if (current_symbol == selected_symbol && OrderMagicNumber()==MagicNumber)
return (False);
}
return (True);
}
void CloseOposite(int type)
{
int cnt,total;
total = OrdersTotal();
for(cnt=0;cnt=0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Violet);
if(OrderType()==OP_SELL)
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Violet);
if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT)
OrderDelete(OrderTicket());
}
}
}
/*void mPrint(string msg1 = "" , string msg2 = "" , string msg3 = "" , string msg4 = "" , string msg5 = "", string msg6 = "", string msg7 = "", string msg8 = "")
{
if(IsTesting()) return(0);
string temp = "";
if (msg1 != "") temp = temp + ":" + msg1;
if (msg2 != "") temp = temp + ":" + msg2;
if (msg3 != "") temp = temp + ":" + msg3;
if (msg4 != "") temp = temp + ":" + msg4;
if (msg5 != "") temp = temp + ":" + msg5;
if (msg6 != "") temp = temp + ":" + msg6;
if (msg7 != "") temp = temp + ":" + msg7;
if (msg8 != "") temp = temp + ":" + msg8;
Print(temp);
}*/