Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Manual_Open_and_Modify_Stop_Limit_orders_3
//+------------------------------------------------------------------+
//| Ðó÷íàÿ óñòàíîâêà è ïåðåìåùåíèå îðäåðîâ |
//| Manual Open and Modify Stop Limit orders.mq4 |
//| Copyright © 2011, Õëûñòîâ Âëàäèìèð |
//| cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Õëûñòîâ Âëàäèìèð"
#property link "cmillion@narod.ru"
//--------------------------------------------------------------------
extern bool StopOrders = true; //âûñòàâëÿòü ñòîï îðäåðà
extern bool LimitOrders = true; //âûñòàâëÿòü ëèìèò îðäåðà
extern int Stoploss = 0, //ñòîïëîññ îðäåðîâ
Takeprofit = 0; //òåéêïðîôèò îðäåðîâ
extern double Lot = 0.1; //åñëè=0 òî ïî risk
extern int Magic = 100; //óíèêàëüíûé íîìåð îðäåðîâ ýòîãî ñîâåòíèêà, åñëè 0 òî âåäåò âñå îðäåðà, â òîì ÷èñëå âûñòàâëåííûå âðó÷íóþ
string txt= "",ss,bs,ssn,bsn,sl,bl,sln,bln;
double SL,TP,STOPLEVEL;
//--------------------------------------------------------------------
int init()
{
ss = StringConcatenate("LINES SELLSTOP",Magic);
bs = StringConcatenate("LINES BUYSTOP",Magic);
ssn = StringConcatenate("LINES SELLSTOPn",Magic);
bsn = StringConcatenate("LINES BUYSTOPn",Magic);
sl = StringConcatenate("LINES SELLLIMIT",Magic);
bl = StringConcatenate("LINES BUYLIMIT",Magic);
sln = StringConcatenate("LINES SELLLIMITn",Magic);
bln = StringConcatenate("LINES BUYLIMITn",Magic);
STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (Stoploss <STOPLEVEL && Stoploss!=0) {Stoploss=0;Alert("Stoploss ",Stoploss," ìåíåå äîïóñòèìîãî óðîâíÿ ",STOPLEVEL," Stoploss îòêëþ÷åí");}
if (Takeprofit <STOPLEVEL && Takeprofit!=0) {Takeprofit=0;Alert("Takeprofit ",Takeprofit," ìåíåå äîïóñòèìîãî óðîâíÿ ",STOPLEVEL," Takeprofit îòêëþ÷åí");}
if (StopOrders)
{
if (ObjectFind(ss)==-1) {drawline(ss,Red,iLow(NULL,1440,0));drawtext(ss,"", iLow(NULL,1440,0));}
if (ObjectFind(bs)==-1) {drawline(bs,Blue,iHigh(NULL,1440,0));drawtext(bs,"", iHigh(NULL,1440,0));}
}
else
{
ObjectDelete(ss);
ObjectDelete(bs);
ObjectDelete(ssn);
ObjectDelete(bsn);
}
if (LimitOrders)
{
if (ObjectFind(sl)==-1) {drawline(sl,Red,iHigh(NULL,1440,0));drawtext(sl,"", iHigh(NULL,1440,0));}
if (ObjectFind(bl)==-1) {drawline(bl,Blue,iLow(NULL,1440,0));drawtext(bl,"", iLow(NULL,1440,0));}
}
else
{
ObjectDelete(sl);
ObjectDelete(bl);
ObjectDelete(bln);
ObjectDelete(bln);
}
}
//--------------------------------------------------------------------
int deinit()
{
/* ObjectDelete(ss);
ObjectDelete(bs);
ObjectDelete(sl);
ObjectDelete(bl);
ObjectDelete(ssn);
ObjectDelete(bsn);
ObjectDelete(bln);
ObjectDelete(bln);*/
}
//--------------------------------------------------------------------
int start()
{
//while(!IsStopped()){RefreshRates();
STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
int TicketSellLimit,TicketBuyLimit,TicketBuyStop,TicketSellStop;
double SELLLIMIT,BUYLIMIT,BUYSTOP,SELLSTOP;//öåíû îòêðûòûõ îòëîæåê
double OOP;
int tip,Ticket;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
tip = OrderType();
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
Ticket = OrderTicket();
SL=0;TP=0;
if (tip==OP_BUYSTOP)
{
BUYSTOP = OOP;
TicketBuyStop = Ticket;
}
if (tip==OP_SELLSTOP)
{
SELLSTOP = OOP;
TicketSellStop = Ticket;
}
if (tip==OP_BUYLIMIT)
{
BUYLIMIT = OOP;
TicketBuyLimit = Ticket;
}
if (tip==OP_SELLLIMIT)
{
SELLLIMIT = OOP;
TicketSellLimit = Ticket;
}
}
}
}
//---
double Price,StopLevel=NormalizeDouble(STOPLEVEL*Point,Digits);
if (ObjectFind(sl)!=-1)
{
Price = NormalizeDouble(ObjectGet(sl,OBJPROP_PRICE1),Digits);
if (Price-StopLevel>=Ask)
{
if (Takeprofit!=0) TP = NormalizeDouble(Price + Takeprofit * Point,Digits); else TP=0;
if (Stoploss!=0) SL = NormalizeDouble(Price - Stoploss * Point,Digits); else SL=0;
if (SELLLIMIT==0)//SellLimit
{
if (OrderSend(Symbol(),OP_SELLLIMIT ,Lot,Price,0,SL,TP,txt,Magic,0,Blue)==-1)
Print("Error OrderSend ",GetLastError());
}
else
{
if (!OrderModify(TicketSellLimit,Price,SL,TP,0,Green)) Print("Error OrderModify ",GetLastError());
drawtext(sl,"", Price);
}
}
else drawtext(sl,"íåïðàâèëüíàÿ öåíà äëÿ SELLLIMIT", Price);
}
else //ÓÄÀËÅÍÈÅ ÎÐÄÅÐÀ
{
if (SELLLIMIT!=0)
{
if (!OrderDelete(TicketSellLimit)) Print("Error OrderDelete ",GetLastError());
else ObjectDelete(sln);
}
}
//---
if (ObjectFind(bl)!=-1)
{
Price = NormalizeDouble(ObjectGet(bl,OBJPROP_PRICE1),Digits);
if (Price+StopLevel<=Bid)
{
if (Takeprofit!=0) TP = NormalizeDouble(Price - Takeprofit * Point,Digits); else TP=0;
if (Stoploss!=0) SL = NormalizeDouble(Price + Stoploss * Point,Digits); else SL=0;
if (BUYLIMIT==0)//BayLimit
{
if (OrderSend(Symbol(),OP_BUYLIMIT,Lot,Price,0,SL,TP,txt,Magic,0,Red )==-1)
Print("Error OrderSend ",GetLastError());
}
else
{
if (!OrderModify(TicketBuyLimit,Price,SL,TP,0,Green)) Print("Error OrderModify ",GetLastError());
drawtext(bl,"", Price);
}
}
else drawtext(bl,"íåïðàâèëüíàÿ öåíà äëÿ BUYLIMIT", Price);
}
else //ÓÄÀËÅÍÈÅ ÎÐÄÅÐÀ
{
if (BUYLIMIT!=0)
{
if (!OrderDelete(TicketBuyLimit)) Print("Error OrderDelete ",GetLastError());
else ObjectDelete(bln);
}
}
if (ObjectFind(bs)!=-1)
{
Price = NormalizeDouble(ObjectGet(bs,OBJPROP_PRICE1),Digits);
if (Price-StopLevel>=Ask)
{
if (Takeprofit!=0) TP = NormalizeDouble(Price + Takeprofit * Point,Digits); else TP=0;
if (Stoploss!=0) SL = NormalizeDouble(Price - Stoploss * Point,Digits); else SL=0;
if (BUYSTOP==0)//BayStop
{
if (OrderSend(Symbol(),OP_BUYSTOP ,Lot,Price,0,SL,TP,txt,Magic,0,Blue)==-1)
Print("Error OrderSend ",GetLastError());
}
else
{
if (!OrderModify(TicketBuyStop,Price,SL,TP,0,Green)) Print("Error OrderModify ",GetLastError());
drawtext(bs,"", Price);
}
}
else drawtext(bs,"íåïðàâèëüíàÿ öåíà äëÿ BUYSTOP", Price);
}
else //ÓÄÀËÅÍÈÅ ÎÐÄÅÐÀ
{
if (BUYSTOP!=0)
{
if (!OrderDelete(TicketBuyStop)) Print("Error OrderDelete ",GetLastError());
else ObjectDelete(bsn);
}
}
//---
if (ObjectFind(ss)!=-1)
{
Price = NormalizeDouble(ObjectGet(ss,OBJPROP_PRICE1),Digits);
if (Price+StopLevel<=Bid)
{
if (Takeprofit!=0) TP = NormalizeDouble(Price - Takeprofit * Point,Digits); else TP=0;
if (Stoploss!=0) SL = NormalizeDouble(Price + Stoploss * Point,Digits); else SL=0;
if (SELLSTOP==0)//SellStop
{
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,Price,0,SL,TP,txt,Magic,0,Red )==-1)
Print("Error OrderSend ",GetLastError());
}
else
{
if (!OrderModify(TicketSellStop,Price,SL,TP,0,Green)) Print("Error OrderModify ",GetLastError());
drawtext(ss,"", Price);
}
}
else drawtext(ss,"íåïðàâèëüíàÿ öåíà äëÿ SELLSTOP", Price);
}
else //ÓÄÀËÅÍÈÅ ÎÐÄÅÐÀ
{
if (SELLSTOP!=0)
{
if (!OrderDelete(TicketSellStop)) Print("Error OrderDelete ",GetLastError());
else ObjectDelete(ssn);
}
}
//Sleep(1000);}
return(0);
}
//--------------------------------------------------------------------
int drawline(string NameL, color col, double Y1)
{
ObjectCreate(NameL, OBJ_HLINE, 0,0,Y1,0,0);
ObjectSet (NameL, OBJPROP_COLOR, col);
ObjectSet (NameL, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet (NameL, OBJPROP_WIDTH, 1);
ObjectSet (NameL, OBJPROP_BACK, false);
ObjectSet (NameL, OBJPROP_RAY, false);
return;
}
//--------------------------------------------------------------------
int drawtext(string NameL, string info, double Y1)
{
double shift_Y = (WindowPriceMax()-WindowPriceMin()) / 40;
string NameLine=StringConcatenate(NameL,"n");
if (info=="") info=StringConcatenate(StringSubstr(NameL,6,0)," lot ",DoubleToStr(Lot,2)," SL " ,DoubleToStr(SL ,0)," TP " ,DoubleToStr(TP ,0));
ObjectDelete (NameLine);
ObjectCreate (NameLine, OBJ_TEXT,0,Time[WindowFirstVisibleBar()-WindowFirstVisibleBar()/4],Y1+shift_Y,0,0,0,0);
ObjectSetText(NameLine, info ,10,"Arial");
ObjectSet (NameLine, OBJPROP_COLOR, ObjectGet(NameL,OBJPROP_COLOR));
}
//--------------------------------------------------------------------
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---