0
Views
0
Downloads
0
Favorites
Source_Code_Many_Orders
//+------------------------------------------------------------------+
//| ****.mq4 |
//| BARS |
//| www.*********.ru |
//+------------------------------------------------------------------+
#property copyright "BARS-Alligator"
#property link "****"
// Ýêñïåðò ðàáîòàåò ïî "Öåíàì îòêðûòèÿ".
// Ýêïåðò ñïîñîáåí ðàáîòàòü ïðè îòêðûòèè ïîçèöèé â óñëîâèÿõ ðûíî÷íîãî
// èñïîëíåíèÿ òîðãîâûõ çàÿâîê Market Watch , - WHÑ, BROCO è ò.ï.
// Äîáàâëåí âñòðîåííûé áëîê ÌÌ (êîððåêòíî ðàáîòàåò òîëüêî íà âàëþòàõ).
// Ïðåäóñìîòðåí çàïðåò îäíîèìåííûõ ñäåëîê íà îäíîì áàðå áîëåå îäíîé -
// - ïðèìåíåíà ô-ÿ È.Êèìà NumberOfBarOpenLastPos().
// Ýêñïåðò àäàïòèðîâàí ïîä óñëîâèÿ ×åìïèîíàòà Ðîáîòîâ 2008 ïî
// êîëè÷åñòâó îðäåðîâ è ëîòîâ.
//---- input parameters
extern int Magic=94754;
extern int Magic1=95454;
extern int Magic2=45764;
extern int Magic3=567567;
extern int Orders =1;
extern int StopLoss=2816;
extern int TakeProfit=5676;
extern int StopLoss2=5735;
extern int TakeProfit2=3549;
extern string ___= "Ïàðàìåòðû èíä. Àëëèãàòîð";
extern string ____= "Ïàðàìåòðû Òðåéëèíã ñòîïà";
extern bool UseTrailing = true;//âûêëþ÷àòåëü òðåéëèíãà
extern int lMinProfit = 1811;//ïîðîã òðàëà äëèííûõ ïîç
extern int lTrailingStop = 3037;//ðàçìåð òðàëà äëèííûõ ïîç
extern int lTrailingStep = 5;// øàã òðàëà
extern int sMinProfit = 4279;//ïîðîã òðàëà êîðîòêèõ ïîç
extern int sTrailingStop = 2520;//ðàçìåð òðàëà êîðîòêèõ ïîç
extern int sTrailingStep = 5; //øàã òðàëà
extern string ______= "Ïàðàìåòðû áëîêà MoneyManagement";
extern double Lots = 0.01;
extern double Lots2 = 0.01;
extern double T1 = 0.0016;
extern double T2 = 0.0014;
extern double T3 = 650;
extern double T33 = 140;
extern double X = 260;
extern double X1 = 540;
extern double T333 = 0.0051;
extern double T3333 = 0.0082;
extern double X2 = 131;
extern double X22 = 650;
extern double T4 = 0.0002;
extern double T5 = 0.0004;
extern double A = 100;
extern double B = 100;
extern double C = 100;
extern double D = 100;
extern bool MoneyManagement=true;
extern int MarginPercent=3;
extern double Limit_Lot1 = 0.01;
extern double Limit_Lot2 = 0.01;
extern int Limit_Dist1 = 100;
extern int Limit_Dist2 = 100;
//----------------------------------
int ticket;
int ticket1, S=0;
double lots;
static int prevtime = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (Time[0] == prevtime) return(0); // Áàð ïðåæíèé, à ñëåäîâàòåëüíî âûõîäèì
prevtime = Time[0]; // Ñâåæèé áàð, çàïîìèíàåì âðåìÿ
//----
if (UseTrailing) TrailPositions(); //òðåéëèíã ñòîï
// Îáúÿâëÿåì ïåðåìåííûå
int total, cnt;
double MA1,MA2;
// double lots;
// Âû÷èñëÿåì íà÷àëüíûå ïàðàìåòðû èíäèêàòîðîâ äëÿ ïîèñêà óñëîâèé âõîäà
MA1 = iMA(NULL,0,T3,0,MODE_SMMA,PRICE_MEDIAN,0); // çåë¸íàÿ
MA2 = iMA(NULL,0,T33,0,MODE_SMMA,PRICE_MEDIAN,0);
total=OrdersTotal();
//Comment( LotsCounting() );
//=======================================================================
//============Îòêðûòèå ïîçèöèé =======================================
if ( NumberOfPositions(NULL , -1, Magic )<Orders )
{ //åñëè îòêðûòûõ ïîçèöèé ìåíåå Orders
// Ïðîâåðêà óñëîâèé äëÿ ñîâåðøåíèÿ ñäåëêè áàé
if (! NumberOfBarOpenLastPos(NULL, 0,OP_BUY, Magic) ==0)
{ //çàïðåò íåñê. ïîç íà îäíîì áàðå
if(( MA1<MA2)&&(iATR(NULL,0,X,0)<T1)&&((MA2-MA1)<T4)&&(iStdDev(NULL,0,X1,0,MODE_EMA,PRICE_CLOSE,0)<T333))//ïîêóïàåì
{
lots=LotsCounting();
ticket=OrderSend(Symbol(),OP_BUY,Limit_Lot1,Ask,3,Ask-Point*StopLoss2,Ask+Point*TakeProfit2,"Main_Order",Magic,0,Green);//âåäóùàÿ ñäåëêà
ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1*2, Ask - Limit_Dist1*4*Point, 5, 0, 0, "Limit", Magic1, 0, Aqua );
ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1*4, Ask - Limit_Dist1*8*Point, 5, 0, 0, "Limit", Magic1, 0, Aqua );
ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1*8, Ask - Limit_Dist1*9*Point, 5, 0, 0, "Limit", Magic1, 0, Aqua );
S=1;
SendMail("from your expert", "Ñäåëêa îòêðûòà");
if(ticket < 0)
{
Print("Îøèáêà îòêðûòèÿ îðäåðà BUY #", GetLastError());
Sleep(10000);
prevtime = Time[1];
return (0);
}
}
}
//=================================================================
// Ïðîâåðêà óñëîâèé äëÿ ñîâåðøåíèÿ ñäåëêè ñåëë
if (! NumberOfBarOpenLastPos(NULL, 0,OP_SELL, Magic) ==0)
{//çàïðåò íåñê. ïîç íà îäíîì áàðå
if((MA1>MA2)&&(iATR(NULL,0,X2,0)<T2)&&((MA1-MA2)<T5)&&(iStdDev(NULL,0,X22,0,MODE_EMA,PRICE_CLOSE,0)<T3333))//ïðîäàåì
{
ticket=OrderSend(Symbol(),OP_SELL,Limit_Lot2,Bid,3,Bid+Point*StopLoss,Bid-Point*TakeProfit,"Main_Order",Magic,0,Red);// âåäóùàÿ ñäåëêà
S=1;
SendMail("from your expert", "Ñäåëêà îòêðûòà");
if(ticket < 0)
{
Print("Îøèáêà îòêðûòèÿ îðäåðà SELL #", GetLastError());
Sleep(10000);
prevtime = Time[1];
return (0);
}
}
}
}
//åñëè îòêðûòûõ ïîçèöèé ìåíåå Orders
//============ êîíåö áëîêà îòêðûòèÿ ïîçèöèé ===========================
//================Çàêðûòèå ïîçèöèé=====================================
//----------------------------------------------------------------------
if( Orders_Total_by_comm( "Main_Order", Magic, Symbol()) == 0 )
{
Close_All_Order(Magic1, Symbol());
Close_All_Order(Magic2, Symbol());
Close_All_Order(Magic3, Symbol());
S=0;
}
for ( int v = OrdersTotal() - 1; v >= 0; v -- ) {
if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
//--------------------------------------------------------
if (OrderType() == OP_SELL) {
if((iStochastic(NULL,0,A,3,3,MODE_SMA,0,MODE_MAIN,0)>92)&&(S>=1)) {
ticket1=OrderSend(Symbol(),OP_SELL,0.01,Bid,5 ,0 ,0 ,"Limit",Magic2, 0 , Yellow);
ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*4*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );
ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*8*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );
ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*10*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );
ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*12*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );
ticket1=OrderSend(Symbol(), OP_SELLLIMIT, Limit_Lot1, Bid + Limit_Dist1*14*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );
S=0;
// return(0); // âûõîäèì
} }
//--------------------------------------------------------
if (OrderType() == OP_BUY) {
if((iStochastic(NULL,0,A,3,3,MODE_SMA,0,MODE_MAIN,0)<5)&&(S>=1)) {
ticket1=OrderSend(Symbol(),OP_BUY,0.01,Ask,5 ,0 ,0 ,"Limit",Magic2, 0, Yellow);
ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*5*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );
ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*10*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );
ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*15*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );
ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*20*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );
ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*25*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );
ticket1=OrderSend(Symbol(), OP_BUYLIMIT, Limit_Lot1, Ask - Limit_Dist1*30*Point, 5, 0, 0, "Limit", Magic3, 0, Aqua );
S=0;
// return(0); // âûõîäèì
} }
//-------------------------------------------------------
} // Symbol()
} // select
} //total
//================== Êîíåö áëîêà çàêðûòèÿ =============================
//----------------------------------------------------------------------
for ( int i = OrdersTotal() - 1; i >= 0; i -- ) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic2) {
if (OrderType() == OP_SELL) {
if((iStochastic(NULL,0,B,3,3,MODE_SMA,0,MODE_MAIN,0)<5)&&(OrderProfit( ) >=0)) {
OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow); // çàêðûâàåì ïîçèöèþ
Close_All_Order(Magic3, Symbol());
S=1;
// return(0); // âûõîäèì
// return(0); // âûõîäèì
}}
if (OrderType() == OP_BUY) {
if((iStochastic(NULL,0,B,3,3,MODE_SMA,0,MODE_MAIN,0)>92)&&(OrderProfit( ) >=0)) {
OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow); // çàêðûâàåì ïîçèöèþ
Close_All_Order(Magic3, Symbol());
S=1;
// return(0); // âûõîäèì
}}
}}}
//================== Êîíåö áëîêà çàêðûòèÿ =============================
return(0);
}
//ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ Êîíåö ôóíêöèè int start() ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ
//---- Çàêðûòèå îðäåðà ïî òèïó è êîììåíòàðèþ ----//
void Close_All_Order( int mn, string sym)
{
for(int i= OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if( sym==OrderSymbol() && OrderMagicNumber() == mn )
if(OrderType()<=1)OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
else OrderDelete(OrderTicket());
}
}
int Orders_Total_by_comm(string comm, int mn, string sym)
{
int num_orders=0;
for(int i= OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if( OrderMagicNumber() == mn && sym==OrderSymbol())
{
if( StringFind( OrderComment(), comm) >= 0 )
num_orders++;
}
}
return(num_orders);
}
double LotsCounting()
{
return(Lots);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void TrailPositions() {// ôóíêöèÿ òðåéëèíã ñòîï
int Orders = OrdersTotal();
for (int i=0; i<Orders; i++) {
if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderType() == OP_BUY && OrderMagicNumber()==Magic) {
if (Bid-OrderOpenPrice() > lMinProfit*Point) {
if (OrderStopLoss() < Bid-(lTrailingStop+lTrailingStep-1)*Point) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-lTrailingStop*Point,
OrderTakeProfit(), 0, Blue);
}}}
if (OrderType() == OP_SELL && OrderMagicNumber()==Magic) {
if (OrderOpenPrice()-Ask > sMinProfit*Point) {
if (OrderStopLoss() > Ask+(sTrailingStop+sTrailingStep-1)*Point
|| OrderStopLoss() == 0) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+sTrailingStop*Point,
OrderTakeProfit(), 0, Blue);
}}}} }
//------------------------------------------------------------------------------+
//ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 19.02.2008 |
//| Îïèñàíèå : Âîçâðàùàåò êîëè÷åñòâî ïîçèöèé. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), kp=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) kp++;
}
}
}
}
}
return(kp);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 19.02.2008 |
//| Îïèñàíèå : Âîçâðàùàåò íîìåð áàðà îòêðûòèÿ ïîñëåäíåé ïîçèöèè èëè -1. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" èëè NULL - òåêóùèé ñèìâîë) |
//| tf - òàéìôðåéì ( 0 - òåêóùèé òàéìôðåéì) |
//| op - îïåðàöèÿ ( -1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber ( -1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t;
int i, k=OrdersTotal();
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) t=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sy, tf, t, True));
}
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
---