Orders Execution
0
Views
0
Downloads
0
Favorites
grid_v2
//+------------------------------------------------------------------+
//| grid.mq4 |
//| Ðîìàí Àëåêñàíäðîâè÷ |
//| roman_machanow@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Ðîìàí Àëåêñàíäðîâè÷"
#property link "roman_machanow@mail.ru"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Îáúÿâëåíèå ïåðåìåííûõ |
//+------------------------------------------------------------------+
input int Hag = 10; //øàã îòëîæåííèêîâ
input double Lot = 0.01; //ëîò îðäåðà
input int tp= 200; //òåéê ïðîôèò
input double Profit_S=1; //ïðèáûëü äëÿ íà÷àëà ïåðåçàïóñêà ðîáîòà
input bool Martin=true; //âêëþ÷åíèå îòêëþ÷åíèå ìàðòèíãåéëà (false=âûêë)
//---
bool Poisc_Po; //ïîèñê îòêðûòîé ïîçèöèè íà ïîêóïêó
bool Poisc_Pr; //ïîèñê îòêðûòîé ïîçèöèè íà ïðîäàæó
//---
double
PriceAsk, //öåíà òðàëà íà ïîêóïêó
PriceBid, //öåíà òðàëà íà ïðîäàæó
Sredstva, //äîñòóïíûå ñðåäñòâà
LotSell, //ëîò íà ïðîäàæó
LotBuy, //ëîò íà ïîêóïêó
MaxLotBay, //ìàêñèìàëüíûé ëîò íà ïîêóïêó
MaxLotSell; //ìàêñèìàëüíûé ëîò íà ïðîäàæó
//---
int
TotalOrder,//îáùåå ÷èñëî îðäåðîâ
TotalBuy,
TotalSell,
TotalBuyStop,
TotalSellStop,
BuySell,
Perezapusk;
//---
string
textLots;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
TotalOrder=OrdersTotal();
for(int i=0; i<=TotalOrder;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
int OrderTupe=OrderType();
if(OrderTupe==OP_SELL) {TotalSell++;}
if(OrderTupe==OP_BUY ) {TotalBuy++;}
}
BuySell=TotalSell+TotalBuy;
}
//---
Sredstva=AccountFreeMargin();
//---
LotBuy = Lot;
LotSell=Lot;
//---
Perezapusk=0;
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
RefreshRates();
ComentInform();//ÂÛÂÎÄ ÒÎÐÃÎÂÛÕ ÄÀÍÍÛÕ
ModDelOtlSdelok();//ÌÎÄÓËÜ ÎÏÐÅÄÅËÈÒÅËÜ ÑÎÂÅÐØÅÍÍÛÕ ÑÄÅËÎÊ È ÇÀÊÐÛÒÈÅ ÎÒËÎÆÅÍÍÈÊÎÂ
ProfitReturn();//ÌÎÄÓËÜ ÎÏÐÅÄÅËÈÒÅËÜ ÑÎÂÅÐØÅÍÍÛÕ ÑÄÅËÎÊ È ÇÀÊÐÛÒÈÅ ÎÒËÎÆÅÍÍÈÊÎÂ
LotSellBuy();//ÐÀÑ×ÅÒ ÓÐÎÂÍß ËÎÒÀ
//--- ÐÀÑ×ÅÒ ÖÅÍÛ
PriceBid=MathFloor(Bid/(Hag*Point))*(Hag*Point);//öåíà òðàëà íà ïðîäàæó
PriceAsk=MathFloor(Ask/(Hag*Point))*(Hag*Point)+(Hag*Point);//öåíà òðàëà íà ïîêóïêó
//---
Poisc_Po = true; //ðàçðåøåíèÿ ïîêóïêè
Poisc_Pr = true; //ðàçðåøåíèå ïðîäàæè
//--- ÎÏÐÅÄÅËÅÍÈÅ ÍÀ ÐÀÇÐÅØÅÍÈÅ ÑÄÅËÎÊ
for(int i=0; i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
double PriceOrder=OrderOpenPrice();
int OrderTupe=OrderType();
if(NormalizeDouble(PriceAsk,Digits)==NormalizeDouble(PriceOrder,Digits))
{
if((OrderTupe==OP_BUYSTOP) || (OrderTupe==OP_BUY) || (OrderTupe==OP_SELLSTOP) || (OrderTupe==OP_SELL))
{
Poisc_Po=false;
continue;
}
}
}
}
//---
for(int i=0; i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
double PriceOrder=OrderOpenPrice();
int OrderTupe=OrderType();
if(NormalizeDouble(PriceBid,Digits)==NormalizeDouble(PriceOrder,Digits))
{
if((OrderTupe==OP_SELLSTOP) || (OrderTupe==OP_SELL) || (OrderTupe==OP_BUYSTOP) || (OrderTupe==OP_BUY))
{
Poisc_Pr=false;
continue;
}
}
}
}
//--- ÑÎÂÅÐØÅÍÈÅ ÑÄÅËÎÊ
if(Poisc_Pr)
{
int Error_SELLSTOP=OrderSend(Symbol(),OP_SELLSTOP,LotSell,PriceBid,3,0,PriceBid-tp*Point);
if(Error_SELLSTOP<0)
{
Print("Îøèáêà SELLSTOP ",GetLastError());
}
}
//---
if(Poisc_Po)
{
int Error_BUYSTOP=OrderSend(Symbol(),OP_BUYSTOP,LotBuy,PriceAsk,3,0,PriceAsk+tp*Point);
if(Error_BUYSTOP<0)
{
Print("Îøèáêà BUYSTOP ",GetLastError());
}
}
}
//+------------------------------------------------------------------+
//| ÂÛÂÎÄ ÒÎÐÃÎÂÛÕ ÄÀÍÍÛÕ |
//+------------------------------------------------------------------+
int ComentInform()
{
SvodInform();
//---
Comment("Âñåãî îðäåðîâ : "+IntegerToString(TotalOrder)+
"\n ÏÅÐÅÇÀÏÓÑÊÎÂ: "+IntegerToString(Perezapusk)+
"\n SELL : "+IntegerToString(TotalSell)+
"\n BUY : "+IntegerToString(TotalBuy)+
"\n SELLSTOP : "+IntegerToString(TotalSellStop)+
"\n BUYSTOP : "+IntegerToString(TotalBuyStop)+
"\n ÏÐÈÁÛËÜ : "+DoubleToStr(AccountProfit(),1)+
"\n ÑÐÅÄÑÒÂÀ : "+DoubleToStr(Sredstva,0)+textLots);
//AccountFreeMargin()
// Print("Ñðåäñòâà ñ÷åòà = ",AccountEquity());
return(0);
}
//--- ÐÀÑ×ÅÒ×ÈÊ
int SvodInform()
{
TotalOrder=OrdersTotal();
TotalSell=0;
TotalBuy=0;
TotalSellStop=0;
TotalBuyStop=0;
//---
for(int i=0; i<=TotalOrder;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
int OrderTupe=OrderType();
if(OrderTupe==OP_SELL) {TotalSell++;}
if(OrderTupe==OP_BUY ) {TotalBuy++;}
if(OrderTupe==OP_SELLSTOP) {TotalSellStop++;}
if(OrderTupe==OP_BUYSTOP) {TotalBuyStop++;}
}
}
return(0);
}
//+------------------------------------------------------------------+
//| ÌÎÄÓËÜ ÎÏÐÅÄÅËÈÒÅËÜ ÑÎÂÅÐØÅÍÍÛÕ ÑÄÅËÎÊ È ÇÀÊÐÛÒÈÅ ÎÒËÎÆÅÍÍÈÊÎÂ |
//+------------------------------------------------------------------+
int ModDelOtlSdelok()
{
for(int i=0; i<=TotalOrder;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
int OrderTupe=OrderType();
if(OrderTupe==OP_SELL) {TotalSell++;}
if(OrderTupe==OP_BUY ) {TotalBuy++;}
}
}
if(BuySell!=(TotalSell+TotalBuy))
{
for(int i=0; i<=TotalOrder;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
int OrderTupe = OrderType();
if(OrderType()==OP_BUYSTOP)
{
bool ord_close=OrderDelete(OrderTicket(),clrNONE);
if(!ord_close) i--;
}
if(OrderType()==OP_SELLSTOP)
{
bool ord_close=OrderDelete(OrderTicket(),clrNONE);
if(!ord_close) i--;
}
}
}
BuySell=TotalSell+TotalBuy;
}
return(0);
}
//+------------------------------------------------------------------+
//| ÌÎÄÓËÜ ÏÅÐÅÇÀÏÓÑÊÀ ÐÎÁÎÒÀ ÏÎÑËÅ ÄÎÑÒÈÆÅÍÈß ÓÐÎÂÍß PROFIT |
//+------------------------------------------------------------------+
int ProfitReturn()
{
if(AccountProfit()>=Profit_S)
{
for(int i=0; i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
int OrderTupe= OrderType();
if((OrderTupe==OP_SELLSTOP)||(OrderTupe==OP_BUYSTOP))
{
bool ord_close=OrderDelete(OrderTicket(),clrNONE);
if(!ord_close) i--;
}
if(OrderTupe==OP_SELL)
{
bool ord_close=OrderClose(OrderTicket(),OrderLots(),Ask,5);
if(!ord_close) i--;
}
if(OrderTupe==OP_BUY)
{
bool ord_close=OrderClose(OrderTicket(),OrderLots(),Bid,5);
if(!ord_close) i--;
}
}
}
Perezapusk++;
Sredstva=AccountFreeMargin();
LotSell=0.01;
LotBuy=0.01;
}
//---
return(0);
}
//+-------------------------------------------------------------------------+
//| ÌÎÄÓËÜ ÏÅÐÅÇÀÏÓÑÊÀ ÐÎÁÎÒÀ ÏÎÑËÅ ÄÎÑÒÈÆÅÍÈß ÓÐÎÂÍß PROFIT_äðóãîé âàðèàíò |
//+-------------------------------------------------------------------------+
int ProfitReturn_1()
{
if(AccountProfit()>=Profit_S)
{
for(int i=0; i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
int OrderTupe= OrderType();
if((OrderTupe==OP_SELLSTOP)||(OrderTupe==OP_BUYSTOP))
{
bool ord_close=OrderDelete(OrderTicket(),clrNONE);
if(!ord_close) i--;
}
if(OrderTupe==OP_SELL)
{
bool ord_close=OrderClose(OrderTicket(),OrderLots(),Ask,5);
if(!ord_close) i--;
}
if(OrderTupe==OP_BUY)
{
bool ord_close=OrderClose(OrderTicket(),OrderLots(),Bid,5);
if(!ord_close) i--;
}
}
}
Sredstva=AccountFreeMargin();
LotSell=0.01;
LotBuy=0.01;
}
//---
return(0);
}
//+------------------------------------------------------------------+
//| ÐÀÑ×ÅÒ ÓÐÎÂÍß ËÎÒÀ |
//+------------------------------------------------------------------+
int LotSellBuy()
{
if(Martin==true)
{
double
ToAllLotSell=0,
ToAllLotBuy=0;
//---
for(int i=0; i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
double LotOrder=OrderLots();
int OrderTupe = OrderType();
if(OrderType()==OP_SELL) {ToAllLotSell=ToAllLotSell+LotOrder;}
if(OrderType()==OP_BUY) {ToAllLotBuy=ToAllLotBuy+LotOrder;}
}
}
//---
if(ToAllLotSell>ToAllLotBuy){LotBuy=ToAllLotSell+Lot;}else{LotSell=ToAllLotBuy+Lot;}
//---
if(ToAllLotBuy>MaxLotBay){MaxLotBay=ToAllLotBuy;}
if(ToAllLotSell>MaxLotSell){MaxLotSell=ToAllLotSell;}
//---
textLots=("\nÂñåãî ëîòîâ êóïëåíî : "+DoubleToStr(ToAllLotBuy,2)+
"\nÂñåãî ëîòîâ ïðîäàíî : "+DoubleToStr(ToAllLotSell,2)+
"\nÌàêñèìàëüíûé ëîò íà ïîêóïêó : "+DoubleToStr(MaxLotBay,2)+
"\nÌàêñèìàëüíûé ëîò íà ïðîäàæó : "+DoubleToStr(MaxLotSell,2));
}
else
{
textLots="";
}
//---
return(0);
}
//+------------------------------------------------------------------+
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
---