Agent_Session_Breakout_00xxx7_lokk

Author: Voloshin Yuri
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
Miscellaneous
It issuies visual alerts to the screenIt plays sound alerts
0 Views
0 Downloads
0 Favorites
Agent_Session_Breakout_00xxx7_lokk
//+------------------------------------------------------------------+
//|                        Agent_Session Breakout_00xxx7_lokk.mq4    |
//|                                                 Voloshin Yuri    |
//|                           http://voloshin-fxcci.blogspot.com/    |
//+------------------------------------------------------------------+
#property copyright "  Voloshin Yuri  "
#property link      "  http://voloshin-fxcci.blogspot.com/  "
#include <stdlib.mqh>
#include <WinUser32.mqh>

extern int Magic = 317317;				    		
extern int SL = 250;				    		
extern int TP = 15;
extern double lots = 0.03;

extern bool tr_stops = false;					// Ïåðåäâèãàåì ñòîï-ëîñ
extern bool profittral = false;     			// Ïåðåäâèãàåì òîëüêî ïðè ïðîôèòå îðäåðà
extern int tr_zona = 7;							// Çîíà êîëè÷åñòâà ñâå÷åé äëÿ òðàëà

extern bool lokk_Pos = true;
extern int lokk_zone = 125;
extern int lokk_level = 100;
extern int enlarge_lot = 2;
   
extern string block_01 = " ÀÇÈÀÒÑÊÀß ñåññèÿ ";
extern int J_time = 729;               			// Âðåìÿ äëÿ àíàëèçà ñåññèè ÷àñîâ è ìèíóò
extern int J_zone = 12;    						// Êîëè÷åñòâî áàðîâ äëÿ ðàñ÷åòà ãðàíèö 

extern string block_02 = " ÅÂÐÎÏÅÉÑÊÀß ñåññèÿ ";
extern int E_time = 1429;               		// Âðåìÿ äëÿ àíàëèçà ñåññèè ÷àñîâ è ìèíóò
extern int E_zone = 8;    						// Êîëè÷åñòâî áàðîâ äëÿ ðàñ÷åòà ãðàíèö 

extern string block_03 = " ÀÌÅÐÈÊÀÍÑÊÀß ñåññèÿ ";
extern int A_time = 2329;               		// Âðåìÿ äëÿ àíàëèçà ñåññèè ÷àñîâ è ìèíóò
extern int A_zone = 14;    						// Êîëè÷åñòâî áàðîâ äëÿ ðàñ÷åòà ãðàíèö 

extern string block_04 = " Àçèàòñêî - Åâðîïåéñêèé áîêñ ";
extern int Je_time = 1029;               		// Âðåìÿ äëÿ àíàëèçà ñåññèè ÷àñîâ è ìèíóò
extern int Je_zone = 6;    						// Êîëè÷åñòâî áàðîâ äëÿ ðàñ÷åòà ãðàíèö 

extern string block_05 = " Åâðîïåéñêî - Àìåðèêàíñêèé áîêñ ";
extern int Ea_time = 1629;               		// Âðåìÿ äëÿ àíàëèçà ñåññèè ÷àñîâ è ìèíóò
extern int Ea_zone = 4;    						// Êîëè÷åñòâî áàðîâ äëÿ ðàñ÷åòà ãðàíèö 

extern string block_06 = " Àìåðèêàíñêî - Àçèàòñêèé áîêñ ";
extern int Aj_time = 129;               		// Âðåìÿ äëÿ àíàëèçà ñåññèè ÷àñîâ è ìèíóò
extern int Aj_zone = 4;    						// Êîëè÷åñòâî áàðîâ äëÿ ðàñ÷åòà ãðàíèö 


//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
double St_b, St_s, Tk_b, Tk_s, Pr_b, Pr_s, ExpTime;
string koment;

int init() {
return(0);
}
int deinit() {
return(0);
}
// ========================================================
// =================== ÍÀ×ÈÍÀÅÌ ÐÀÁÎÒÓ ====================
// ========================================================
int start() { 
RefreshRates();
int Cur_time = (Hour()*100) + Minute(); 			// Òåêóùåå âðåìÿ ÷àñû ïîòîì ìíóòû áåç ðàçäåëèòåëÿ
	
Comment("\n"," ==== ñîâåòíèê ÐÀÁÎÒÀÅÒ ==== îïðåäåëÿåò òî÷êè ÂÕÎÄÀ ==== ",
		"\n"," ======================",
		"\n"," òàéìôðåéì =  ", Period(), "   èíñòðóìåíò  ", Symbol(),
		"\n"," èäåíòèôèêàòîð ÌÀÃÈÊ =  ", Magic, 
		"\n"," ======================",
		"\n"," ñâÿçü ñ ñåðâåðîì =  ", IsConnected(), "  ÂÐÅÌß ñåðâåðà  ", Cur_time, 
		"\n"," ñ÷åò çàðåãèñòðèðîâàí â êîìïàíèè   ", AccountCompany(),
		"\n"," ======================");	
		Sleep(500);

if (Cur_time == J_time) { 
	Pr_b = NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,J_zone,0)], Digits);	
	Pr_s = NormalizeDouble(Low[iLowest(NULL,0,MODE_LOW,J_zone,0)], Digits);	
	ExpTime = iTime(NULL,0,0)+86400;
	koment = " àçèàòñêàÿ ñåññèÿ ";
	Print("**** ÑÐÀÁÎÒÀËÀ àçèàòñêàÿ ñåññèÿ ****");
	order(Pr_b, Pr_s, ExpTime, koment);
	}
		
if (Cur_time == E_time) {
	Pr_b = NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,E_zone,0)], Digits);	
	Pr_s = NormalizeDouble(Low[iLowest(NULL,0,MODE_LOW,E_zone,0)], Digits);	
	ExpTime = iTime(NULL,0,0)+86400;
	koment = " åâðîïåéñêàÿ ñåññèÿ ";
	Print("**** ÑÐÀÁÎÒÀËÀ åâðîïåéñêàÿ ñåññèÿ ****");
	order(Pr_b, Pr_s, ExpTime, koment);
	}
		
if (Cur_time == A_time) {
	Pr_b = NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,A_zone,0)], Digits);	
	Pr_s = NormalizeDouble(Low[iLowest(NULL,0,MODE_LOW,A_zone,0)], Digits);	
	ExpTime = iTime(NULL,0,0)+86400;
	koment = " àìåðèêàíñêàÿ ñåññèÿ ";
	Print("**** ÑÐÀÁÎÒÀËÀ àìåðèêàíñêàÿ ñåññèÿ ****");
	order(Pr_b, Pr_s, ExpTime, koment);
	}

if (Cur_time == Je_time) { 
	Pr_b = NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,Je_zone,0)], Digits);	
	Pr_s = NormalizeDouble(Low[iLowest(NULL,0,MODE_LOW,Je_zone,0)], Digits);	
	ExpTime = iTime(NULL,0,0)+86400;
	koment = " àçèÿ/åâðîïà áîêñ ";
	Print("**** ÑÐÀÁÎÒÀË àçèÿ/åâðîïà áîêñ ****");
	order(Pr_b, Pr_s, ExpTime, koment);
	}
		
if (Cur_time == Ea_time) {
	Pr_b = NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,Ea_zone,0)], Digits);	
	Pr_s = NormalizeDouble(Low[iLowest(NULL,0,MODE_LOW,Ea_zone,0)], Digits);	
	ExpTime = iTime(NULL,0,0)+86400;
	koment = " åâðîïà/àìåðèêà áîêñ ";
	Print("**** ÑÐÀÁÎÒÀË åâðîïà/àìåðèêà áîêñ ****");
	order(Pr_b, Pr_s, ExpTime, koment);
	}
		
if (Cur_time == Aj_time) {
	Pr_b = NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,Aj_zone,0)], Digits);	
	Pr_s = NormalizeDouble(Low[iLowest(NULL,0,MODE_LOW,Aj_zone,0)], Digits);	
	ExpTime = iTime(NULL,0,0)+86400;
	koment = " àìåðèêà/àçèÿ áîêñ ";
	Print("**** ÑÐÀÁÎÒÀË àìåðèêà/àçèÿ áîêñ ****");
	order(Pr_b, Pr_s, ExpTime, koment);
	}

		for (int i=0; i<=OrdersTotal(); i++) {
		if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) {
		if (OrderMagicNumber()==Magic && OrderSymbol()==Symbol()) {
		if (tr_stops && OrderType()<2) TrailingPositions();			// Óñëîâèå äëÿ òðàëà îðäåðà
		if (lokk_Pos && OrderType()<2) LokkPositions();				// Óñëîâèå äëÿ ëîêèðîâàíèÿ îðäåðà
		}}}
		
return(0);
}
// ========================================================
// ============ ÔÓÍÊÖÈß ÏÎÄÃÎÒÎÂÊÈ Ê ÐÀÁÎÒÅ ===============
// ========================================================
void order(double Pr_b, double Pr_s, double ExpTime, string koment) {
RefreshRates();
if(AccountFreeMargin()<(1000*lots)) Alert("We have no money. Free Margin = ", AccountFreeMargin());
PlaySound("tick.wav");
int luft = MarketInfo(Symbol(),MODE_STOPLEVEL) + 3;
int spro_b = 0;
int spro_s = 0;
bool tic_b = false;
bool tic_s = false;

while(!tic_b){
	if (Pr_b <= Ask) Pr_b = NormalizeDouble(Ask + luft*Point, Digits);
 	St_b = NormalizeDouble(Pr_b - SL*Point, Digits);
	Tk_b = NormalizeDouble(Pr_b + TP*Point, Digits);
	if(IsTradeAllowed()) tic_b = OrderSend(Symbol(), OP_BUYSTOP, lots, Pr_b, 2, St_b, Tk_b, koment, Magic, ExpTime, Green);
if(!tic_b) Print("ïîïûòêà == ", spro_b, "  /Îøèáêà #",GetLastError());
spro_b = spro_b +1;
if(spro_b > 9) break;
PlaySound("expert.wav");
Sleep(500);
}

while(!tic_s){
	if (Pr_s >= Bid) Pr_s = NormalizeDouble(Bid - luft*Point, Digits);
	St_s = NormalizeDouble(Pr_s + SL*Point, Digits);
	Tk_s = NormalizeDouble(Pr_s - TP*Point, Digits);
	if(IsTradeAllowed()) tic_s = OrderSend(Symbol(), OP_SELLSTOP, lots, Pr_s, 2, St_s, Tk_s, koment, Magic, ExpTime, Red);
if(!tic_s) Print("ïîïûòêà == ", spro_s, "  /Îøèáêà #",GetLastError());
spro_s = spro_s +1;
if(spro_s > 9) break;
PlaySound("expert.wav");
Sleep(500);
}
if(!tic_b || !tic_s) Alert(" ÍÅ óñòàíîâëåí îðäåð == Îøèáêà # ",GetLastError());
    	if (tic_b && tic_s) {
    	PlaySound("ok.wav");
Comment("\n"," ==== ñîâåòíèê ÐÀÁÎÒÀÅÒ ==== ïðîãðàììíàÿ çàäåðæêà âû÷èñëåíèé ====",
		"\n"," ======================",
		"\n","  óñòàíîâëåí îðäåð íà ïîêóïêó ñ òèêåòîì =  ", tic_b, "  ïîïûòîê óñòàíîâêè =  ", spro_b,
		"\n","  óñòàíîâëåí îðäåð íà ïðîäàæó ñ òèêåòîì =  ", tic_s, "  ïîïûòîê óñòàíîâêè =  ", spro_s,
		"\n"," ======================");
Print("óñòàíîâëåí îðäåð íà ïîêóïêó ñ òèêåòîì = ", tic_b, "  ïîïûòîê = ", spro_b);
Print("óñòàíîâëåí îðäåð íà ïðîäàæó ñ òèêåòîì = ", tic_s, "  ïîïûòîê = ", spro_s);
Sleep(60000);
			}
return(0);
} 


// ========================================================
// ============ ÐÀÁÎÒÀ Ñ ÐÛÍÎ×ÍÛÌÈ ÎÐÄÅÐÀÌÈ ===============
// ========================================================
void TrailingPositions() {
	RefreshRates();
	bool fm = false;
	if (!tr_stops) return(0);
	if (profittral) {
	if (OrderProfit() < 0) return(0);
	}
	
Comment("\n"," ==== ñîâåòíèê ÐÀÁÎÒÀÅÒ ==== âûïîëíÿåò ÑÎÏÐÎÂÎÆÄÅÍÈÅ îðäåðîâ ==== ",
		"\n"," ======================",
		"\n"," òàéìôðåéì =  ", Period(), "   èíñòðóìåíò ", Symbol(),
		"\n"," èäåíòèôèêàòîð ÌÀÃÈÊ =  ", Magic, 
		"\n"," ======================",
		"\n"," áóäåì ÒÐÀËÈÒÜ îðäåð  =  ",  OrderTicket(), " (",  OrderComment(), ") ",  OrderProfit(),
		"\n"," ======================");		
Sleep(500);
		
	if (OrderType()==OP_BUY) {
	double Pr_sb = NormalizeDouble(Low[iLowest(NULL, 0, MODE_LOW, tr_zona, 1)], Digits);	
	double StLb = NormalizeDouble(Pr_sb - (4*Point), Digits);
	if(IsTradeAllowed())fm = OrderModify(OrderTicket(), OrderOpenPrice(), StLb, OrderTakeProfit(), 0, Green);
	if (!fm) Print("Îøèáêà ìîäèôèêàöèè îðäåðà #",GetLastError());
	if (fm) PlaySound("wait.wav");
	return(0);
	}
	if (OrderType()==OP_SELL) {
	double Pr_ss = NormalizeDouble(High[iHighest(NULL, 0, MODE_HIGH, tr_zona, 1)], Digits);	
	double StLs = NormalizeDouble(Pr_ss + (4*Point), Digits);
	if(IsTradeAllowed())fm = OrderModify(OrderTicket(), OrderOpenPrice(), StLs, OrderTakeProfit(), 0, Red);
	if (!fm) Print("Îøèáêà ìîäèôèêàöèè îðäåðà #",GetLastError());
	if (fm) PlaySound("wait.wav");
	return(0);
	}	}
// ========================================================
// ============ ÔÓÍÊÖÈß ËÎÊÈÐÎÂÀÍÈß ÎÐÄÅÐÎÂ ===============
// ========================================================
void LokkPositions() {
	RefreshRates();
	
Comment("\n"," ==== ñîâåòíèê ÐÀÁÎÒÀÅÒ ==== â çîíå ËÎÊÈÐÎÂÀÍÈß îðäåðîâ ==== ");	
	
	bool tic_lb = false;
	bool tic_ls = false;
	bool fm_lb = false;
	bool fm_ls = false;
	if (!lokk_Pos) return(0);
	if (OrderProfit() > 0) return(0);
		
//Comment("\n"," ==== ñîâåòíèê ÐÀÁÎÒÀÅÒ ==== ïðîâåðÿåò ÓÁÛÒÎ×ÍÛÅ îðäåðà ==== ",
//		"\n"," ======================",
//		"\n"," òàéìôðåéì =  ", Period(), "   èíñòðóìåíò ", Symbol(),
//		"\n"," èäåíòèôèêàòîð ÌÀÃÈÊ =  ", Magic, 
//		"\n"," ======================",
//		"\n"," âîçìîæíî ËÎÊÈÐÎÂÀÒÜ îðäåð  =  ",  OrderTicket(), "     ", OrderType(), "     ", OrderProfit(),
//		"\n"," ======================");		
//Sleep(500);

int MagicLokk = OrderTicket();
double SL_Lokk = OrderStopLoss();

for (int i=0; i<=OrdersTotal(); i++) {
		if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) {
		if (OrderMagicNumber()==MagicLokk) {
//Comment("\n"," ==== ñîâåòíèê ÐÀÁÎÒÀÅÒ ==== ïðîâåðÿåò ËÎÊÈÐÎÂÀÍÈÅ îðäåðîâ ==== ",
//		"\n"," ======================",
//		"\n"," òàéìôðåéì =  ", Period(), "   èíñòðóìåíò ", Symbol(),
//		"\n"," èäåíòèôèêàòîð ÌÀÃÈÊ =  ", Magic, 
//		"\n"," ======================",
//		"\n"," îðäåð =  ",  MagicLokk, " óæå ëîêèðîâàí îðäåðîì =  ", OrderTicket(),
//		"\n"," ======================");
//		Sleep(500);		
		return(0);
	}	}	}

//Comment("\n"," ==== ñîâåòíèê ÐÀÁÎÒÀÅÒ ==== ïðîâåðÿåò ËÎÊÈÐÎÂÀÍÈÅ îðäåðîâ ==== ",
//		"\n"," ======================",
//		"\n"," òàéìôðåéì =  ", Period(), "   èíñòðóìåíò ", Symbol(),
//		"\n"," èäåíòèôèêàòîð ÌÀÃÈÊ =  ", Magic, 
//		"\n"," ======================",
//		"\n"," îðäåð =  ",  MagicLokk, "   åùå ÍÅ ëîêèðîâàí ",
//		"\n"," ======================");			
//Sleep(500);	
	
if(OrderSelect(MagicLokk, SELECT_BY_TICKET)==true) {
	
//Comment("\n"," ==== ñîâåòíèê ÐÀÁÎÒÀÅÒ ==== óñëîâèå ËÎÊÈÐÎÂÀÍÈß îðäåðîâ ==== ",
//		"\n"," ======================",
//		"\n"," òàéìôðåéì =  ", Period(), "   èíñòðóìåíò ", Symbol(),
//		"\n"," èäåíòèôèêàòîð ÌÀÃÈÊ =  ", Magic, 
//		"\n"," ======================",
//		"\n"," îðäåð =  ",  MagicLokk, 
//		"\n"," ======================");			
//Sleep(500);	
//Comment("\n"," ==== ñîâåòíèê ÐÀÁÎÒÀÅÒ ==== â çîíå ËÎÊÈÐÎÂÀÍÈß îðäåðîâ ==== ");	
	
	if (OrderType()==OP_BUY) {
	if (((OrderOpenPrice() - Ask)/Point)>lokk_zone) {
	double Price_lokkb = NormalizeDouble(OrderOpenPrice() - lokk_level*Point, Digits);
	double lot_lokkb = NormalizeDouble(lots*enlarge_lot, 2);
	double TP_lokkb = NormalizeDouble (OrderOpenPrice() - ((lokk_level/(enlarge_lot+1)*enlarge_lot)*Point), Digits);
	if(IsTradeAllowed()) tic_lb = OrderSend(Symbol(), OP_BUYSTOP, lot_lokkb, Price_lokkb, 2, SL_Lokk, TP_lokkb, " ëîêèðîâêà ïîçèöèè ", MagicLokk, 0, Yellow);
	if(!tic_lb) Alert("ïîïûòêà ëîêèðîâêè 1 == Îøèáêà #",GetLastError());
	PlaySound("expert.wav");
	Sleep(500);
	if(IsTradeAllowed()) fm_lb = OrderModify(MagicLokk, OrderOpenPrice(), OrderStopLoss(), TP_lokkb, 0, Yellow);
	if(!tic_lb) Alert("ïîïûòêà ëîêèðîâêè 2 == Îøèáêà #",GetLastError());
	PlaySound("expert.wav");
	Comment("\n"," ==== ñîâåòíèê ÐÀÁÎÒÀÅÒ ==== ÂÛÏÎËÍÈË ËÎÊÈÐÎÂÀÍÈÅ îðäåðîâ ==== ",
		"\n"," ======================",
		"\n"," òàéìôðåéì =  ", Period(), "   èíñòðóìåíò ", Symbol(),
		"\n"," èäåíòèôèêàòîð ÌÀÃÈÊ =  ", Magic, 
		"\n"," èäåíòèôèêàòîð ÌÀÃÈÊ ËÎÊÀ =  ", MagicLokk, 
		"\n"," ======================",
		"\n"," ÈÇÌÅÍÅÍ îðäåð  =  ",  OrderTicket(), OrderType(), "  íîâûé TP = ", TP_lokkb,
		"\n"," ÓÑÒÀÍÎÂËÅÍ ëîê íà óðîâíå  =  ",  Price_lokkb, "  TP = ", TP_lokkb,
		"\n"," ======================");		
Sleep(500);
	
	return(0);
	}	}
		
	if (OrderType()==OP_SELL) {
	if (((Bid - OrderOpenPrice())/Point)>lokk_zone) {
	double Price_lokks = NormalizeDouble(OrderOpenPrice() + lokk_level*Point, Digits);
	double lot_lokks = NormalizeDouble(lots*enlarge_lot, 2);
	double TP_lokks = NormalizeDouble (OrderOpenPrice() + ((lokk_level/(enlarge_lot+1)*enlarge_lot)*Point), Digits);
	if(IsTradeAllowed()) tic_ls = OrderSend(Symbol(), OP_SELLSTOP, lot_lokks, Price_lokks, 2, SL_Lokk, TP_lokks, " ëîêèðîâêà ïîçèöèè ", MagicLokk, 0, Yellow);
	if(!tic_ls) Alert("ïîïûòêà ëîêèðîâêè 1 == Îøèáêà #",GetLastError());
	PlaySound("expert.wav");
	Sleep(500);
	if(IsTradeAllowed()) fm_ls = OrderModify(MagicLokk, OrderOpenPrice(), OrderStopLoss(), TP_lokks, 0, Yellow);
	if(!tic_ls) Alert("ïîïûòêà ëîêèðîâêè 2 == Îøèáêà #",GetLastError());
	PlaySound("expert.wav");
	Comment("\n"," ==== ñîâåòíèê ÐÀÁÎÒÀÅÒ ==== ÂÛÏÎËÍÈË ËÎÊÈÐÎÂÀÍÈÅ îðäåðîâ ==== ",
		"\n"," ======================",
		"\n"," òàéìôðåéì =  ", Period(), "   èíñòðóìåíò ", Symbol(),
		"\n"," èäåíòèôèêàòîð ÌÀÃÈÊ =  ", Magic, 
		"\n"," èäåíòèôèêàòîð ÌÀÃÈÊ ËÎÊÀ =  ", MagicLokk, 
		"\n"," ======================",
		"\n"," ÈÇÌÅÍÅÍ îðäåð  =  ",  OrderTicket(), OrderType(), "  íîâûé TP = ", TP_lokks,
		"\n"," ÓÑÒÀÍÎÂËÅÍ ëîê íà óðîâíå  =  ",  Price_lokks, "  TP = ", TP_lokks,
		"\n"," ======================");		
Sleep(500);

	return(0);
	}	}	}	}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---