Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
grid_6_symbols
//+------------------------------------------------------------------+
//| grid_6_symbols.mq4 |
//| Copyright © 2015, Vladimir Hlystov |
//| cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Vladimir Hlystov"
#property link "cmillion@narod.ru"
#property strict
#property description "Ñîâåòíèê âûñòàâëÿåò ñåòè èç ñòîï îðäåðîâ ïî óêàçàííûì ïàðàì"
#property description "Êàê òîëüêî ñóììàðíûé ïðîôèò ïî âñåì ïîçèöèÿì ïðåâûñèò óêàçàííûé óðîâåíü,"
#property description "ñîâåòíèê çàêðûâàåò âñå è ïî íîâîé ïåðåîòêðûâàåò ñåòè"
//---
extern string Symbol1 = "EURUSD";
extern string Symbol2 = "GBPUSD";
extern string Symbol3 = "EURJPY";
extern string Symbol4 = "";
extern string Symbol5 = "";
extern string Symbol6 = "";
//---
extern int sleep = 300; // Çàäåðæêà ïîñëå çàêðûòèÿ â ñåêóíäàõ
extern int Step = 100; // Øàã ìåæäó îðäåðàìè
//--- Ïðè äîñòèæåíèè ïðèáûëè NoLoss + MinProfitNL (èçìåðÿåòñÿ â ïóíêòàõ) ñòîï-ëîññ ïåðåíîñèì íà öåíó îòêðûòèÿ îðäåðà ïëþñ ìèíóñ MinProfitNL
extern int NoLoss=150; // Áåçóáûòîê (ðàññòîÿíèå îò ÑË äî öåíû)
extern int MinProfitNL=20; // Ìèíèìàëüíàÿ ïðèáûëü áåçóáûòêà
//---
extern int Orders=3; // Êîë-âî îòëîæåííûõ
extern double Lot = 0.01;
extern double Profit = 0.5;
extern int Magic = 123;
//-------------------------------
string val,symbol[6];
int n=0,digits[6];
double point[6];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
val=" "+AccountCurrency();
n=0;
if(MarketInfo(Symbol1,MODE_TRADEALLOWED)==1&&Symbol1 != "") {symbol[n] = Symbol1; point[n] = MarketInfo(symbol[n],MODE_POINT); digits[n] = (int)MarketInfo(symbol[n],MODE_DIGITS); n++;}
if(MarketInfo(Symbol2,MODE_TRADEALLOWED)==1&&Symbol2 != "") {symbol[n] = Symbol2; point[n] = MarketInfo(symbol[n],MODE_POINT); digits[n] = (int)MarketInfo(symbol[n],MODE_DIGITS); n++;}
if(MarketInfo(Symbol3,MODE_TRADEALLOWED)==1&&Symbol3 != "") {symbol[n] = Symbol3; point[n] = MarketInfo(symbol[n],MODE_POINT); digits[n] = (int)MarketInfo(symbol[n],MODE_DIGITS); n++;}
if(MarketInfo(Symbol4,MODE_TRADEALLOWED)==1&&Symbol4 != "") {symbol[n] = Symbol4; point[n] = MarketInfo(symbol[n],MODE_POINT); digits[n] = (int)MarketInfo(symbol[n],MODE_DIGITS); n++;}
if(MarketInfo(Symbol5,MODE_TRADEALLOWED)==1&&Symbol5 != "") {symbol[n] = Symbol5; point[n] = MarketInfo(symbol[n],MODE_POINT); digits[n] = (int)MarketInfo(symbol[n],MODE_DIGITS); n++;}
if(MarketInfo(Symbol6,MODE_TRADEALLOWED)==1&&Symbol6 != "") {symbol[n] = Symbol6; point[n] = MarketInfo(symbol[n],MODE_POINT); digits[n] = (int)MarketInfo(symbol[n],MODE_DIGITS); n++;}
//---
if(n==0 && IsTesting()) {symbol[0]=Symbol(); point[n]=MarketInfo(symbol[n],MODE_POINT); digits[n]=(int)MarketInfo(symbol[n],MODE_DIGITS);n=1;} // òåñòåð
//---
Comment("Òîðãîâëÿ ïî ",n," ñèì");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
int S(string sym)
{
for(int i=0; i<6; i++)
if(symbol[i] == sym) return(i);
return(-1);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
if(!IsTesting()) ObjectsDeleteAll();
Comment("");
}
//+------------------------------------------------------------------+
void OnTick()
{
if(n==0 || n>6) {Comment("Òîðãè ïî âûáðàííûì ïàðàì çàïðåùåíû"); return;}
int OT,i,j,orders=0;
double OSL,OOP,profit=0;
double ProfitS[6];
ArrayInitialize(ProfitS,0);
double MaxPrice[6],MinPrice[6];
ArrayInitialize(MaxPrice,0);
ArrayInitialize(MinPrice,0);
int bs[6],ss[6];
ArrayInitialize(bs,0);
ArrayInitialize(ss,0);
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderMagicNumber()==Magic)
{
j=S(OrderSymbol());
if(j!=-1)
{
OT=OrderType();
ProfitS[j]+=OrderProfit()+OrderSwap()+OrderCommission();
profit+=OrderProfit()+OrderSwap()+OrderCommission();
orders++;
OOP = NormalizeDouble(OrderOpenPrice(),digits[j]);
OSL = NormalizeDouble(OrderStopLoss(),digits[j]);
if(OT==OP_BUY)
{
if(MaxPrice[j]<OOP) MaxPrice[j]=OOP;
if(MarketInfo(symbol[j],MODE_BID)>=NormalizeDouble(OOP+(MinProfitNL+NoLoss)*point[j],digits[j]) && OSL<NormalizeDouble(OOP+MinProfitNL*point[j],digits[j]))
{
if(!OrderModify(OrderTicket(),OOP,NormalizeDouble(OOP+MinProfitNL*point[j],digits[j]),OrderTakeProfit(),0,White))
Print(symbol[j]," NoLoss Error ",GetLastError()," order ",OrderTicket()," SL ",DoubleToStr(OOP+MinProfitNL*point[j],digits[j]));
}
}
if(OT==OP_SELL)
{
if(MinPrice[j]>OOP || MinPrice[j]==0) MinPrice[j]=OOP;
if(MarketInfo(symbol[j],MODE_ASK)<=NormalizeDouble(OOP -(MinProfitNL+NoLoss)*point[j],digits[j]) &&(OSL==0|| OSL>NormalizeDouble(OOP-MinProfitNL*point[j],digits[j])))
{
if(!OrderModify(OrderTicket(),OOP,NormalizeDouble(OOP-MinProfitNL*point[j],digits[j]),OrderTakeProfit(),0,White))
Print(symbol[j]," NoLoss Error ",GetLastError()," order ",OrderTicket()," SL ",DoubleToStr(OOP+MinProfitNL*point[j],digits[j]));
}
}
if(OT==OP_BUYSTOP)
{
if(MaxPrice[j]<OOP) MaxPrice[j]=OOP;
bs[j]++;
}
if(OT==OP_SELLSTOP)
{
if(MinPrice[j]>OOP || MinPrice[j]==0) MinPrice[j]=OOP;
ss[j]++;
}
}
}
}
}
if(sleep>0 && orders==0)
{
for(i=OrdersHistoryTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderMagicNumber()==Magic)
{
if(S(OrderSymbol())!=-1) if(TimeCurrent()-OrderCloseTime()<sleep) return;
break;
}
}
}
}
double price;
for(i=0; i<n; i++)
{
if(bs[i]<Orders)
{
if(MaxPrice[i]==0) price=NormalizeDouble(MarketInfo(symbol[i],MODE_ASK)+Step*point[i],digits[i]);
else price=NormalizeDouble(MaxPrice[i]+Step*point[i],digits[i]);
if(price<NormalizeDouble(MarketInfo(symbol[i],MODE_ASK)+MarketInfo(symbol[i],MODE_STOPLEVEL)*point[i],digits[i]))
price=NormalizeDouble(MarketInfo(symbol[i],MODE_ASK)+MarketInfo(symbol[i],MODE_STOPLEVEL)*point[i],digits[i]);
if(OrderSend(symbol[i],OP_BUYSTOP,Lot,price,30,0,0,"GRID ",Magic,0,CLR_NONE)==-1)
Comment("OrderSend ",symbol[i]," Error ",GetLastError());
}
//---
if(ss[i]<Orders)
{
if(MinPrice[i]==0) price=NormalizeDouble(MarketInfo(symbol[i],MODE_BID)-Step*point[i],digits[i]);
else price=NormalizeDouble(MinPrice[i]-Step*point[i],digits[i]);
if(price>NormalizeDouble(MarketInfo(symbol[i],MODE_BID)-MarketInfo(symbol[i],MODE_STOPLEVEL)*point[i],digits[i]))
price=NormalizeDouble(MarketInfo(symbol[i],MODE_BID)-MarketInfo(symbol[i],MODE_STOPLEVEL)*point[i],digits[i]);
if(OrderSend(symbol[i],OP_SELLSTOP,Lot,price,30,0,0,"GRID ",Magic,0,CLR_NONE)==-1)
Comment("OrderSend ",symbol[i]," Error ",GetLastError());
}
RefreshRates();
}
//---
if(profit>Profit) DeleteAllOrders();
//---
DrawLABEL("Balance",StringConcatenate("Balance ",DoubleToStr(AccountBalance(),2),val),5,35,Lime);
DrawLABEL("Equity",StringConcatenate("Equity ",DoubleToStr(AccountEquity(),2),val),5,55,Lime);
DrawLABEL("FreeMargin",StringConcatenate("FreeMargin ",DoubleToStr(AccountFreeMargin(),2),val),5,75,Lime);
for(i=0; i<n; i++)
DrawLABEL(StringConcatenate("Profit ",symbol[i]),StringConcatenate("Profit ",symbol[i]," ",DoubleToStr(ProfitS[i],2),val),5,100+20*i,Color(ProfitS[i]<0,clrRed,clrLime));
DrawLABEL("Profit ",StringConcatenate("Profit ",DoubleToStr(profit,2)," (close ",DoubleToStr(Profit,2),")"),5,105+20*n,Color(profit<0,clrRed,clrLime));
return;
}
//-------------------------------
color Color(bool P,color a,color b)
{
if(P) return(a);
else return(b);
}
//------------------------------------------------------------------
void DrawLABEL(string name,string Name,int x,int y,color clr)
{
if(ObjectFind(name)==-1)
{
ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSet(name,OBJPROP_CORNER,1);
ObjectSet(name,OBJPROP_XDISTANCE,x);
ObjectSet(name,OBJPROP_YDISTANCE,y);
}
ObjectSetText(name,Name,12,"Arial",clr);
}
//--------------------------------------------------------------------
void DeleteAllOrders()
{
bool error=true;
int i,j,nn=0;
while(true)
{
if(!IsDemo())
{
int ret=MessageBox("Çàêðûòü âñå îðäåðà","Äåìî âåðñèÿ",MB_YESNO|MB_TOPMOST);
if(ret==IDNO) return;
}
for(i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==Magic)
{
j=S(OrderSymbol());
if(j!=-1)
{
int OT=OrderType();
int Ticket=OrderTicket();
if(OT==OP_BUY)
{
error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(symbol[j],MODE_BID),digits[j]),50,clrNONE);
}
if(OT==OP_SELL)
{
error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(symbol[j],MODE_ASK),digits[j]),50,clrNONE);
}
if(OT>1)
if(!OrderDelete(Ticket))
Comment("Îðäåð ",Ticket," îøèáêà óäàëåíèÿ ",GetLastError());
//---
if(!error)
{
int err=GetLastError();
if(err<2) continue;
if(err==129)
{
Comment("Íåïðàâèëüíàÿ öåíà ",TimeToStr(TimeCurrent(),TIME_SECONDS));
Sleep(500);
RefreshRates();
continue;
}
if(err==146)
{
j++;
if(IsTradeContextBusy()) Sleep(500);
RefreshRates();
continue;
}
}
}
}
}
}
int k=0;
for(j= 0; j<OrdersTotal(); j++)
{
if(OrderSelect(j,SELECT_BY_POS))
{
if(OrderMagicNumber()==Magic)
{
if(S(OrderSymbol())!=-1) k++;
}
}
}
if(k==0) break;
nn++;
if(nn>10) break;
Sleep(500);
RefreshRates();
}
}
//-------------------------------
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
---