
//+------------------------------------------------------------------+
//| CloseScript.mq4 |
//| Copyright 2015, AM2 |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict
#property show_inputs
extern int TakeProfit1 = 100;
extern int TakeProfit2 = 200;
extern int TakeProfit3 = 300;
extern int Slip=30;
extern double Lot1 = 0.01;
extern double Lot2 = 0.02;
extern double Lot3 = 0.03;
double tp1=0,tp2=0,tp3=0;
bool CloseTP1=true,CloseTP2=true,CloseTP3=true;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
ObjectsDeleteAll();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutLable(string name,datetime time,double price)
{
ObjectCreate(0,name,OBJ_ARROW_LEFT_PRICE,0,time,price);
//--- установим цвет метки
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим стиль окаймляющей линии
ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
//--- установим размер метки
ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
//--- включим (true) или отключим (false) режим перемещения метки мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,true);
ObjectSetInteger(0,name,OBJPROP_SELECTED,true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OrdersType()
{
int t=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) t=0;
if(OrderType()==OP_SELL) t=1;
}
}
}
return(t);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseOrders()
{
bool cl;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(Bid>tp1)
{
if(CloseTP1) cl=OrderClose(OrderTicket(),Lot1,Bid,Slip,Blue);
if(cl)CloseTP1=false;
}
if(Bid>tp2)
{
if(CloseTP2) cl=OrderClose(OrderTicket(),Lot2,Bid,Slip,Blue);
if(cl)CloseTP2=false;
}
if(Bid>tp3)
{
if(CloseTP3) cl=OrderClose(OrderTicket(),Lot3,Bid,Slip,Blue);
if(cl)CloseTP3=false;
}
}
if(OrderType()==OP_SELL)
{
if(Ask<tp1)
{
if(CloseTP1) cl=OrderClose(OrderTicket(),Lot1,Ask,Slip,Red);
if(cl)CloseTP1=false;
}
if(Ask<tp2)
{
if(CloseTP2) cl=OrderClose(OrderTicket(),Lot2,Ask,Slip,Red);
if(cl)CloseTP2=false;
}
if(Ask<tp3)
{
if(CloseTP3) cl=OrderClose(OrderTicket(),Lot3,Ask,Slip,Red);
if(cl)CloseTP3=false;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
while(!IsStopped())
{
if(OrdersType()==0)
{
PutLable("TP1",Time[0],Bid+TakeProfit1*Point);
PutLable("TP2",Time[0],Bid+TakeProfit2*Point);
PutLable("TP3",Time[0],Bid+TakeProfit3*Point);
}
if(OrdersType()==1)
{
PutLable("TP1",Time[0],Ask-TakeProfit1*Point);
PutLable("TP2",Time[0],Ask-TakeProfit2*Point);
PutLable("TP3",Time[0],Ask-TakeProfit3*Point);
}
for(int i=ObjectsTotal()-1;i>=0;i--)
{
if(ObjectName(i)=="TP1") tp1=ObjectGetDouble(0,"TP1",OBJPROP_PRICE);
if(ObjectName(i)=="TP2") tp2=ObjectGetDouble(0,"TP2",OBJPROP_PRICE);
if(ObjectName(i)=="TP3") tp3=ObjectGetDouble(0,"TP3",OBJPROP_PRICE);
}
CloseOrders();
Comment("\n TP1: ",DoubleToString(tp1,Digits),
"\n TP2: ",DoubleToString(tp2,Digits),
"\n TP3: ",DoubleToString(tp3,Digits),
"\n CloseTP1: ",CloseTP1,
"\n CloseTP2: ",CloseTP2,
"\n CloseTP3: ",CloseTP3);
}
}
//+------------------------------------------------------------------+
AM2