Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
GRID_ORDERS
//+------------------------------------------------------------------+
//| GRID_ORDERS.mq4 |
//| Yuriy Tokman (YTG) |
//| http://ytg.com.ua/ |
//+------------------------------------------------------------------+
#property copyright "Yuriy Tokman (YTG)"
#property link "http://ytg.com.ua/"
#property version "1.00"
#property strict
input string LotBuy = "0.01/0.02/0.03/0.04/0.05/0.06/0.07/0.08/0.09/0.10";
input string LotSell = "0.01/0.02/0.03/0.04/0.05/0.06/0.07/0.08/0.09/0.10";
input int steps = 5;
input int MN = 233;
bool UseSound = True;
string NameFileSound = "expert.wav";
bool MarketWatch = True;
int Slippage = 30;
int NumberOfTry = 5;
//-------
bool gbDisabled = False;
color clOpenBuy = LightBlue;
color clOpenSell = LightCoral;
//-------
#include <stdlib.mqh>
int startPIP;
string resultB[];
string resultS[];
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
string to_split=LotBuy;//ñòðîêà äëÿ ðàçáèâêè íà ïîäñòðîêè
string sep="/";// ðàçäåëèòåëü â âèäå ñèìâîëà
ushort u_sep;// êîä ñèìâîëà ðàçäåëèòåëÿ
//string resultB[]; // ìàññèâ äëÿ ïîëó÷åíèÿ ñòðîê
//string resultS[]; // ìàññèâ äëÿ ïîëó÷åíèÿ ñòðîê
//--- ïîëó÷èì êîä ðàçäåëèòåëÿ
u_sep=StringGetCharacter(sep,0);
//--- ðàçîáüåì ñòðîêó íà ïîäñòðîêè
int k=StringSplit(to_split,u_sep,resultB);
//--- âûâåäåì êîììåíòàðèé
PrintFormat("Ïîëó÷åíî ñòðîê: %d. Èñïîëüçîâàí ðàçäåëèòåëü '%s' ñ êîäîì %d",k,sep,u_sep);
//--- òåïåðü âûâåäåì âñå ïîëó÷åííûå ñòðîêè
if(k>0)
{
for(int i=0;i<k;i++)
{
PrintFormat("resultB[%d]=%s",i,resultB[i]);
}
}
to_split=LotSell;
k=StringSplit(to_split,u_sep,resultS);
PrintFormat("Ïîëó÷åíî ñòðîê: %d. Èñïîëüçîâàí ðàçäåëèòåëü '%s' ñ êîäîì %d",k,sep,u_sep);
if(k>0) {
for(int i=0;i<k;i++)
PrintFormat("resultS[%d]=%s",i,resultS[i]);}
//---
startPIP = steps;
int stoplevel = (int)MarketInfo(Symbol(),MODE_STOPLEVEL);
if(startPIP<stoplevel)
{startPIP=stoplevel; Alert(WindowExpertName()+" STOPLEVEL("+DoubleToStr(stoplevel,0)+") > step("+DoubleToStr(steps,0)+"), correction!");}
double pp =0, ll=0;
for(int i = 0; i<10;i++)
{
pp = Ask + (startPIP + steps*i)*_Point;
ll = NormalizeDouble(StrToDouble(resultB[i]),2);
SetOrder(Symbol(),OP_BUYSTOP,ll,pp,0,0,MN,0,DoubleToStr(i,0));
}
for(int i = 0; i<10;i++)
{
pp = Bid - (startPIP + steps*i)*_Point;
ll = NormalizeDouble(StrToDouble(resultS[i]),2);
SetOrder(Symbol(),OP_SELLSTOP,ll,pp,0,0,MN,0,DoubleToStr(i,0));
}
//---
}
//+------------------------------------------------------------------+
//----
string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("Buy Limit");
case OP_SELLLIMIT: return("Sell Limit");
case OP_BUYSTOP : return("Buy Stop");
case OP_SELLSTOP : return("Sell Stop");
default : return("Unknown Operation");
}
}
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
if (TimeFrame==0) TimeFrame=Period();
switch (TimeFrame) {
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("Daily");
case PERIOD_W1: return("Weekly");
case PERIOD_MN1: return("Monthly");
default: return("UnknownPeriod");
}
}
//+----------------------------------------------------------------------------+
void Message(string m) {
Comment(m);
if (StringLen(m)>0) Print(m);
}
//-----
//+----------------------------------------------------------------------------+
bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0) {
int i, k=OrdersTotal(), ty;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ty=OrderType();
if (ty>1 && ty<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
return(False);
}
//----
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
double sl=0, double tp=0, int mn=0, datetime ex=0, string txt="") {
color clOpen;
datetime ot;
double pa, pb, mp;
int err, it, ticket, msl;
string lsComm=txt;//WindowExpertName()+" "+GetNameTF(Period());
if (sy=="" || sy=="0") sy=Symbol();
msl=(int)MarketInfo(sy, MODE_STOPLEVEL);
if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=Lime; else clOpen=Red;
if (ex>0 && ex<TimeCurrent()) ex=0;
for (it=1; it<=5; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
Print("SetOrder(): Îñòàíîâêà ðàáîòû ôóíêöèè");
break;
}
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ot=TimeCurrent();
ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, ex, clOpen);
if (ticket>0) {
PlaySound("ok"); break;
} else {
err=GetLastError();
if (err==128 || err==142 || err==143) {
Sleep(1000*66);
if (ExistOrders(sy, op, mn, ot)) {
PlaySound("ok"); break;
}
Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
continue;
}
mp=MarketInfo(sy, MODE_POINT);
pa=MarketInfo(sy, MODE_ASK);
pb=MarketInfo(sy, MODE_BID);
// Íåïðàâèëüíûå ñòîïû
if (err==130) {
switch (op) {
case OP_BUYLIMIT:
if (pp>pa-msl*mp) pp=pa-msl*mp;
if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
break;
case OP_BUYSTOP:
if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
break;
case OP_SELLLIMIT:
if (pp<pb+msl*mp) pp=pb+msl*mp;
if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
break;
case OP_SELLSTOP:
if (pp>pb-msl*mp) pp=pb-msl*mp;
if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
break;
}
Print("SetOrder(): Ñêîððåêòèðîâàíû öåíîâûå óðîâíè");
}
Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
if (pa==0 && pb==0) Message("SetOrder(): Ïðîâåðüòå â îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
// Áëîêèðîâêà ðàáîòû ñîâåòíèêà
if (err==2 || err==64 || err==65 || err==133) {
gbDisabled=True; break;
}
// Äëèòåëüíàÿ ïàóçà
if (err==4 || err==131 || err==132) {
Sleep(1000*300); break;
}
// Ñëèøêîì ÷àñòûå çàïðîñû (8) èëè ñëèøêîì ìíîãî çàïðîñîâ (141)
if (err==8 || err==141) Sleep(1000*100);
if (err==139 || err==140 || err==148) break;
// Îæèäàíèå îñâîáîæäåíèÿ ïîäñèñòåìû òîðãîâëè
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
// Îáíóëåíèå äàòû èñòå÷åíèÿ
if (err==147) {
ex=0; continue;
}
if (err!=135 && err!=138) Sleep(1000*7.7);
}
}
}
//----
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
---