Orders Execution
0
Views
0
Downloads
0
Favorites
ReversWaves_TimeShift
//+------------------------------------------------------------------+
//| Revers.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| http://www.carbonclub.ru |
//+------------------------------------------------------------------+
extern double TakeProfit = 5; // ÒÝÉÊÏÐÎÔÈÒ
extern double Lots = 0.02; // Ñóììà ñòàâêè
extern double StopLoss = 70; // ÑÒÎÏËÎÑÑ
extern double OrderLimitPrice = 5; // Ïðîãðàììíûé ÑÒÎÏËÎÑÑ
extern int StartHour = 23; // Âðåìÿ íà÷àëà ðàáîòû
extern int EndHour = 5; // Îêîí÷àíèå ðàáîòû
extern int MM = 2; // Ìíîæèòåëü ñòàâêè
extern int MagicNumber = 111; // Magic number
extern int MaxLot = 45; // Ìàêñèìàëüíàÿ ñóììà ëîòà äëÿ îòáèâêè
int count=0; // Ãëîáàëüíàÿ ïåðåìåí.
bool BoSpos=0; // Ôëàã íà ïîêóïêó äëèíîé èëè êîðîòêîé ïîçèöèè.
int TicketOrder; // Íîìåð òåêóùåãî óáûòî÷íîãî îðäåðà
string Symb; // Íàèìåíîâàíèå êîòèðîâêè. USDEUR
int Lpos,LposR,Count2; // Ïîñëåäíÿÿ óáûòî÷íàÿ ñòàâêà. Íà SELL or BUY
int
z=0, // ñ÷åò÷èê öèêëîâ
Clost,
total, // Îáùåå êîë-âî îðäåðîâ
POrder, // Íîìåð òåêóøåãî îòêðûòîãî îðäåðà
TOrder, // Íîìåð îòëîæåííîãî îðäåðà
Total, // Êîëè÷åñòâî îðäåðîâ â îêíå
Tip=-1, // Òèï âûáðàí. îðäåðà (B=0,S=1)
Ticket, // Íîìåð îðäåðà
ticket;
double
// Lots, // Ñòàâêà
LPCOrder, // Îáú¸ì çàêðûòèÿ ïîñëåäíåãî óáûòî÷íîãî îðäåðà
MA_1_t, // Çíà÷åí. ÌÀ_1 òåêóùåå
MA_2_t, // Çíà÷åí. ÌÀ_2 òåêóùåå
Lot, // Êîëè÷. ëîòîâ â âûáðàí.îðäåðå
Lts, // Êîëè÷. ëîòîâ â îòêðûâ.îðäåðå
Min_Lot, // Ìèíèìàëüíîå êîëè÷åñòâî ëîòîâ
Step, // Øàã èçìåíåíèÿ ðàçìåðà ëîòà
Free, // Òåêóùèå ñâîáîäíûå ñðåäñòâà
One_Lot, // Ñòîèìîñòü îäíîãî ëîòà
PS_Lot, // Ïîñëåäíÿÿ ñòîèìîñòü ïðîéãðûøíîãî ëîòà
Price, // Öåíà âûáðàííîãî îðäåðà
SL, // SL âûáðàííîãî îðäåðà
TP; // TP âûáðàííîãî îðäåðà
bool
Work,
Ans=false, // Îòâåò ñåðâåðà ïîñëå çàêðûòèÿ
Cls_B=false, // Êðèòåðèé äëÿ çàêðûòèÿ Buy
Cls_S=false, // Êðèòåðèé äëÿ çàêðûòèÿ Sell
Opn_B=false, // Êðèòåðèé äëÿ îòêðûòèÿ Buy
Opn_S=false; // Êðèòåðèé äëÿ îòêðûòèÿ Sell
//--------------------------------------------------------------------
int init() // Ñïåö. ô-èÿ init()
{
Symb=Symbol();
// Íàçâàíèå ôèí.èíñòð.
return;
}
//--------------------------------------------------------------------
// -------------------------------------------------
// expert deinitialization function
// -------------------------------------------------
int deinit()
{
return(0);
}
//--------------------------------------------------------------------
// -------------------------------------------------
// Ìåíÿåò ïîçèöèþ íà ïðîòèâîïîëîæíóþ
// -------------------------------------------------
int LastPosChg(int Lpos)
{
if (Lpos == OP_BUY)
{Lpos=OP_SELL;
}
else
{Lpos=OP_BUY;
}
return(Lpos);
}
////////////////////////////////////////////////////
//+------------------------------------------------------------------+
//| íå ïðåâûñèëè ëè ìû âðåìåííîé èíòåðâàë |
//+------------------------------------------------------------------+
bool CheckTimeLimit(int b, int e)
{
bool isEnd=false;
if (b<e)
if (TimeHour(TimeCurrent())<b || TimeHour(TimeCurrent())>=e)
{
isEnd=true;
}
if (OrdersTotal()>0 || Work==true)
{
isEnd=false;
}
if (OrdersTotal()==0)
{
if (OrderSelect(TicketOrder, SELECT_BY_POS, MODE_HISTORY)==true) // Áåð¸ì 1-ûé îðäåð
{
if (OrderProfit()>0) // Ïðîâåðêà íà îòêðûòûå îðäåðà
{
isEnd=true;
}
else isEnd=false;
}
}
if (b>e)
{
isEnd=true;
if (TimeHour(TimeCurrent())>=b)
{isEnd=false;}
if (TimeHour(TimeCurrent())<e)
{isEnd=false;}
}
return (isEnd);
}
////////////////////////////////////////////////////////
int start() // Ñïåö. ô-èÿ start()
{
//-------------------------------------
// verify state
//-------------------------------------
if(!IsTradeAllowed()) return(0);
if(!IsConnected()) return(0);
if(IsStopped()) return(0);
if(IsTradeContextBusy())
{
Print("Trade context is busy!");
return(0);
}
if (CheckTimeLimit(StartHour, EndHour)==true )
{
Comment("Åùå ïîêà íå âðåìÿ ðàáîòû ýêñïåðòà" );
z = 0;
return;
}
else
{
Comment("Ýêñïåðò ðàáîòàåò"+ "\n" +
"Work = ", Work);
}
// ------ Îïðåäåëåíèå äâèæåíèÿ êóðñà -----
double open = Open[2]; // Óçíà¸ì öåíó îòêðûòèÿ 3-ãî áàðà.
double close = Close[1]; // Óçàí¸ì öåíó çàêðûòèÿ 2-ãî áàðà.
if(close>=open) BoSpos=0;
else BoSpos=1;
// Îïðåäåëÿåì è ïðèñâàèâàåì çíà÷åíèå ïåðåìåííîé. îðäåð íà BUY or SELL
if (BoSpos == 0) Lpos = OP_BUY; // Ïåðåìåíîé ïðèñâàèâàåì çíà÷åíèå íà BUY
if (BoSpos == 1) Lpos = OP_SELL; // Ïåðåìåíîé ïðèñâàèâàåì çíà÷åíèå íà SELL
/////////////////////////////////// N |Àíàëèç îðäåðîâ| /////////////////////////////////////////////
total=OrdersTotal();
Print("Îáùåå êîëè÷åñòâî îòêðûòûõ îðäåðîâ â òåðìèíàëå = ",total);
//--------------------------------------------------------------- 4 --
if (total!=0)
{ Total=0;
int SameOrder=0; // Êîëè÷åñòâî îðäåðîâ
for(int i=0; i<=OrdersTotal(); i++) // Öèêë ïåðåáîðà îðäåð
{
// Print("Íà÷àëñÿ ",i,"-ûé öèêë ïîäñ÷¸òà îðäåðîâ ");
if (OrderSelect(i,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
{
// Print("Îðäåð N ",i," Åñòü â íàëè÷èè ");
if (Symb==OrderSymbol())
{
// Print("Îðäåð N ",i," Ñîâïàäåíèå ñèìâîëà ïàðû");
if (MagicNumber==OrderMagicNumber())
{
// Print("Îðäåð N ",i," Ñîâïàäåíèå Magic Number");
SameOrder=SameOrder+1;
// Print("Ñ÷¸ò÷èê èòîãî : +",SameOrder);
}
else
{
// Print("Íå Íàø îðäåð.");
}
}
else
{
// Print("Ñîâïàäåíèé íåò. Ïðîäîëæàåì ïîèñê... ");
}
}
else
{
// Print("Îðäåðîâ áîëüøå íåò");
}
}
if (SameOrder>=1) {total=1; Print("Åñòü ñîâïàäåíèÿ, áîëüøå ñîâåòíèêó íåëüçÿ îòêðûâàòü îðäåðà ïî äàííîé ïàðå, total =",total); }
else {total=0; Print("Ñ÷¸ò÷èê ïóñò, ñîâïàäåíèé íåò total =",total);}
}
//--------------------------------------------------------------- 5 --
if(total<1) // Åñëè ëè îòêðûòûå îðäåðà?
{
if(AccountFreeMargin()<(1000*Lots)) // Åñòü ëè äåíüãè íà ñ÷åòó
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// Ïðîâåðêà íà (BUY) ïîçèöèþ
if(BoSpos == 0)
{
if(Work == true)
{
PS_Lot=Price*MM;
Lpos=LastPosChg(LposR);
if (PS_Lot>=MaxLot) {Work=false; return(0);}
TicketOrder=OrderSend(Symbol(),Lpos,PS_Lot,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point," =1= Order Profit BUY ",MagicNumber,0,Green);
Print("PS_Lot for BUY order = ", PS_Lot);
Print("COUNT = ",Clost);
if (TicketOrder>0){Work=false;}
}
else
{
Clost=0;
TicketOrder=OrderSend(Symbol(),Lpos,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Standart Order BUY",MagicNumber,0,Green);
Work=false;
}
}
// Ïðîâåðêà íà (SELL) ïîçèöèþ
if (BoSpos == 1)
{
if (Work == true)
{
PS_Lot=Price*MM;
if (PS_Lot>=MaxLot) {Work=false; return(0);}
TicketOrder=OrderSend(Symbol(),Lpos,PS_Lot,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"=1= Order Profit SELL",MagicNumber,0,Red);
Print("PS_Lot for SELL order = ", PS_Lot);
Print("COUNT = ",Clost);
if (TicketOrder>0){Work=false;}
}
else
{
Clost=0;
TicketOrder=OrderSend(Symbol(),Lpos,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,"Standart Order SELL",MagicNumber,0,Red);
Work=false;
}
}
}
// it is important to enter the market correctly,
// but it is more important to exit it correctly...
for(count=0;count<total;count++) // Öèêë. Ïåðåáèðàåì îðäåðà
{OrderSelect(count, SELECT_BY_POS, MODE_TRADES); // Áåð¸ì 1-ûé îðäåð
if(OrderType()<=OP_SELL && // Ïðîâåðêà íà îòêðûòûå îðäåðà
OrderSymbol()==Symb && MagicNumber==OrderMagicNumber()) // Ïðîâåðêà ñîâïàäíèÿ ñèìâîëà ïàðû
{
if(OrderType()==OP_BUY) // Ïðîâåðêà íà äëèííóþ ïîçèöèþ
{
TP=OrderProfit();
// Ïðîâåðêà óñëîâèÿ íà çàêðûòèå îðäåðà
double AskNow=Ask;
if ( AskNow<(OrderOpenPrice()-OrderLimitPrice*Point ) || ( OrderOpenPrice()-OrderLimitPrice*Point)==AskNow )
{
Count2=OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // Çàêðûâàåì îðäåð
Print("Ïîòåðè ñîñòàâëÿþò : ",TP); // Åñëè ïðîôèò ìåíüøå 0. Ñîîáùåíèå.
Price=OrderLots(); // Áåð¸ì çíà÷åíèå òåêóùåé öåíû
LposR=OrderType(); // Çíà÷åíèå ïîñëåäíåé ïðîéãðûøíîé ïîçèöèè BUY or SELL
Work=true; // Ðàç ïðîôèò ìåíüøå 0 òîãäà çàâîäèì ñòàâêó â öèêë. Ïîêà íå ñûãðàåò ïðîôèò.
TicketOrder=OrderTicket(); // Çàïîìèíàåì ïîðÿäêîâûé íîìåð îðäåðà
Print("Ticket óáûòî÷íîãî îðäåðà â öèêëå çàêðûòèÿ îðäåðîâ : ",TicketOrder);
if(Count2>0)
{
if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES))
{
Print("BUY order closed : ",OrderClosePrice());
}
}
Clost++;
}
}
// check for trailing stop
/* if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
*/
else // go to short position
{// Ïðîâåðêà óñëîâèÿ íà çàêðûòèå îðäåðà
double BidNow=Bid;
if ( BidNow==(OrderOpenPrice()+OrderLimitPrice*Point) || BidNow>(OrderOpenPrice()+OrderLimitPrice*Point) ) // should it be closed?*/
{
Count2=OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
Price=OrderLots(); // Áåð¸ì çíà÷åíèå òåêóùåé öåíû
LposR=OrderType(); // Çíà÷åíèå ïîñëåäíåé ïðîéãðûøíîé ïîçèöèè BUY or SELL
Work=true; // Ðàç ïðîôèò ìåíüøå 0 òîãäà çàâîäèì ñòàâêó â öèêë. Ïîêà íå ñûãðàåò ïðîôèò.
TicketOrder=OrderTicket(); // Çàïîìèíàåì ïîðÿäêîâûé íîìåð îðäåðà
Print("Ticket óáûòî÷íîãî îðäåðà â öèêëå çàêðûòèÿ îðäåðîâ : ",TicketOrder);
if(Count2>0)
{
if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES))
{
Print("SELL order closed : ",OrderClosePrice());
}
}
Clost++;
}
// check for trailing stop
/* if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
*/ }
}
}
return(0);
}
// the end.
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
---