#define MAGICMA 20120117
extern double Lots = 1;
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double TDSX1;
double TDXX1;
double TDSX2;
double TDXX2;
double TDSX1y;
double TDXX1y;
double TDSX2y;
double TDXX2y;
double res;
double EMA22;
double EMA90;
double EMA300;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get TD
TDSX1=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,0,0);
TDXX1=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,1,0);
TDSX2=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,2,0);
TDXX2=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,3,0);
TDSX1y=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,0,1);
TDXX1y=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,1,1);
TDSX2y=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,2,1);
TDXX2y=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,3,1);
EMA22= iMA(NULL,0,22,0,1,0,0);
EMA90= iMA(NULL,0,90,0,1,0,0);
EMA300= iMA(NULL,0,300,0,1,0,0);
//---- sell conditions
if(Close[1]<TDSX1&&Close[0]>TDSX1&&MathAbs((EMA90-TDXX1)/(EMA90-TDSX1 ))>1)
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,TDSX2,0,"",MAGICMA,0,MediumSpringGreen);
return;
}
//---- buy conditions
if(Close[1]>TDXX1&&Close[0]<TDXX1&&MathAbs((EMA90-TDXX1)/(EMA90-TDSX1 ))<1)
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,TDXX2,0,"",MAGICMA,0,Red);
return;
}
//----
}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose()
{
double TDSX1;
double TDXX1;
double TDSX2;
double TDXX2;
double TDSX1y;
double TDXX1y;
double TDSX2y;
double TDXX2y;
double EMA22;
double EMA90;
double EMA300;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get TD
TDSX1=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,0,0);
TDXX1=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,1,0);
TDSX2=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,2,0);
TDXX2=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,3,0);
TDSX1y=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,0,1);
TDXX1y=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,1,1);
TDSX2y=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,2,1);
TDXX2y=iCustom(NULL,0,"TDJX",15,15,30,30,22,0,3,1);
EMA22= iMA(NULL,0,22,0,1,0,0);
EMA90= iMA(NULL,0,90,0,1,0,0);
EMA300= iMA(NULL,0,300,0,1,0,0);
///----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//---- check order type
if(OrderType()==OP_BUY)
{
if(Close[0]<TDXX2||Close[0]>TDSX1) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
}
if(OrderType()==OP_SELL)
{
if(Close[0]>TDSX2||Close[0]<TDXX1) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
}
}
//----
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Check for baoben |
//+------------------------------------------------------------------+
void CheckForbaoben()
{ double EMA22= iMA(NULL,0,22,0,1,0,0);
double EMA90= iMA(NULL,0,90,0,1,0,0);
///----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//---- check order type
if(OrderType()==OP_BUY)
{
if(Close[0]>EMA22)
OrderModify(OrderTicket(),0,OrderStopLoss( ) ,OrderOpenPrice()*1.00003,0,Blue);
return(0);
}
if(OrderType()==OP_SELL)
{
if(Close[0]<EMA22) OrderModify(OrderTicket(),0,OrderStopLoss( ) ,OrderOpenPrice(),0,Blue);
if(Close[0]<EMA90) OrderModify(OrderTicket(),0,OrderStopLoss( ) ,EMA22,0,Blue);
return(0);
}
}
//----
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void start()
{
//---- check for history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
//----
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==false)
CheckForOpen();
else
CheckForbaoben();
CheckForClose();
//----
}