Price Data Components
Orders Execution
0
Views
0
Downloads
0
Favorites
e-PSI1ManagerTrailing
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| e-PSI@ManagerTrailing.mq4 |
//| Copyright © 2010-13, Igor Stepovoi aka TarasBY |
//| taras_bulba@tut.by |
//| |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Äàííûé ïðîäóêò ïðåäíàçíà÷åí äëÿ íåêîììåð÷åñêîãî èñïîëüçîâàíèÿ. Ïóáëèêàöèÿ ðàç- |
//|ðåøåíà òîëüêî ïðè óêàçàíèè èìåíè àâòîðà (TarasBY). Ðåäàêòèðîâàíèå èñõîäíîãî êîäà |
//|äîïóñòèìà òîëüêî ïðè óñëîâèè ñîõðàíåíèÿ äàííîãî òåêñòà, ññûëîê è èìåíè àâòîðà. |
//| Ïðîäàæà ñîâåòíèêà èëè îòäåëüíûõ å¸ ÷àñòåé ÇÀÏÐÅÙÅÍÀ. |
//| Àâòîð íå íåñ¸ò îòâåòñòâåííîñòè çà âîçìîæíûå óáûòêè, ïîëó÷åííûå â ðåçóëüòàòå èñ- |
//|ïîëüçîâàíèÿ ñîâåòíèêà. |
//| Ïî âñåì âîïðîñàì, ñâÿçàííûì ñ ðàáîòîé ñîâåòíèêà, çàìå÷àíèÿìè èëè ïðåäëîæåíèÿìè |
//|ïî åãî äîðàáîòêå îáðàùàòüñÿ íà Skype: TarasBY èëè e-mail. |
//+-----------------------------------------------------------------------------------+
//| This product is intended for non-commercial use. The publication is only allo- |
//|wed when you specify the name of the author (TarasBY). Edit the source code is va- |
//|lid only under condition of preservation of the text, links and author's name. |
//| Selling a expert or(and) parts of it PROHIBITED. |
//| The author is not liable for any damages resulting from the use of a expert. |
//| For all matters relating to the work of the expert, comments or suggestions for |
//|their improvement in the contact Skype: TarasBY or e-mail. |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
#property copyright "Copyright © 2008-13, TarasBY WM R418875277808; Z670270286972"
#property link "taras_bulba@tut.by"
//IIIIIIIIIIIIIIIIIII==========Ïîäêëþ÷åííûå áèáëèîòåêè==========IIIIIIIIIIIIIIIIIIIIII+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| ***** Ïàðàìåòðû ñîâåòíèêà ***** |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
extern string SETUP_Expert = "========== Îáùèå íàñòðîéêè ñîâåòíèêà ==========";
extern int NumberAccount = 0; // Íîìåð òîðãîâîãî ñ÷¸òà. Ðàáîòàòü òîëüêî íà óêàçàííîì ñ÷åòå. Ïðè çíà÷åíèè <=0 - íîìåð ñ÷åòà íå ïðîâåðÿåòñÿ
extern int MG = 880; // Ìàãèê: < 0 - ëþáîé (ñî âñåìè), 0 - îòêðûòûé âðó÷íóþ, > 0 - îòêðûòûé ñîâåòíèêîì (êîíêðåòíîãî)
extern datetime TimeControl = D'2013.01.01 00:00';// Ñ êàêîãî ìîìåíòà ïîäñ÷èòûâàåì èòîãè ðàáîòû íà ñ÷¸òå
extern int NewBarInPeriod = -1; // <= 0 - ðàáîòàåì íà íà÷àëå ïåðèîäà íîâîãî áàðà, -1 - ðàáîòàåì íà êàæäîì òèêå
#include <b-PSI@Base.mqh> // Áèáëèîòåêà áàçîâûõ ôóíêöèé
extern bool OnlyCurrentSymbol = TRUE; // Ðàáîòàåò òîëüêî ñ òåêóùèì ñèìâîëîì èëè ñ List_Symbols
extern string List_Symbols = "EURUSD,GBPUSD";// Êîíòðîëèðóåìûå âàëþòíûå ïàðû
extern int NBars_LifeMIN = 0; // Ìèíèìàëüíàÿ "æèçíü" îðäåðà â NBars_LifeMIN áàðîâ íà ïåðèîäå ãðàôèêà
extern int NBars_LifeMAX = -1; // Ìàêñèìàëüíàÿ "æèçíü" îðäåðà â NBars_LifeMAX áàðîâ íà ïåðèîäå ãðàôèêà (0 - îðäåðà æèâóò äî êîíöà òåêóùèõ ñóòîê)
#include <b-PSI@STOPs_Light.mqh> // Áèáëèîòåêà ñîçäàíèÿ è êîíòðîëÿ ÑÒÎÏîâ
#include <b-PSI@TrailSymbol.mqh> // Áèáëèîòåêà òðåéëèíãà
#include <b-PSI@PartClose_Light.mqh> // Áèáëèîòåêà ÷àñòè÷íîãî çàêðûòèÿ îðäåðîâ
#include <b-PSI@ManagerPA.mqh> // Áèáëèîòåêà ïî óïðàâëåíèþ îáùèì ïðîôèòîì ñîâåòíèêà
extern string Setup_Services = "=================== SERVICES ==================";
extern bool ShowCommentInChart = TRUE; // Ïîêàçûâàòü êîììåíòàðèé.
extern bool PrintCom = TRUE; // Ïå÷àòàòü êîììåíòàðèé.
extern bool SoundAlert = FALSE; // Çâóê
extern bool CreatVStopsInChart = FALSE; // Ðèñîâàòü íà ÷àðòå âèðòóàëüíûå ñòîïû (åñëè çàäåéñòâîâàíû)
extern bool ClearALLAfterTrade = FALSE; // Î÷èñòêà ãðàôèêà è GV-ïåðåìåííûõ ïîñëå ñåáÿ
#include <b-PSI@Trade_Light.mqh> // Áèáëèîòåêà òîðãîâûõ îïåðàöèé
extern string Setup_Tester = "=================== Tester ====================";
extern int InTesterOrder = 1; // Ðàáîòàåò òîëüêî â òåñòåðå äëÿ ïðîâåðêè. 1 - áàé, -1 - ñåëë
//IIIIIIIIIIIIIIIIIII======Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà======IIIIIIIIIIIIIIIIIIIIII+
string gs_Base, gs_Info;
int gi_SL = 200, gia_HistoryOrders[3], gia_MyOrders[2];
bool flag_BadAccount = false, gb_Pause = false;
//IIIIIIIIIIIIIIIIIII==========Ïîäêëþ÷åííûå áèáëèîòåêè==========IIIIIIIIIIIIIIIIIIIIII+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Custom expert initialization function |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int init()
{
int err = GetLastError();
//----
//---- Èñêëþ÷àåì ñëó÷àéíóþ ðàáîòó ñîâåòíèêà
if (!fCheck_MyAccount()) return (0);
//---- Ïðîâåðÿåì ïåðåäàííûå â ñîâåòíèê âíåøíèå ïàðàìåòðû
if (!fCheck_ExternParameters()) {bb_OptimContinue = true; return (0);}
//---- Èíèöèàëèçèðóåì áèáëèîòåêó áàçîâûõ ôóíêöèé
fInit_Base (List_Symbols, MG, Period(), ShowCommentInChart, PrintCom, SoundAlert, CreatVStopsInChart);
//---- Èíèöèàëèçèðóåì áèáëèîòåêó óïðàâëåíèÿ îáùèì ïðîôèòîì
if (!fInit_ManagerPA()) return (0);
//---- Èíèöèàëèçèðóåì áèáëèîòåêó ÑÒÎÏîâ
if (!fInit_STOPs()) return (0);
//---- Èíèöèàëèçèðóåì áèáëèîòåêó ÷àñòè÷íîãî çàêðûòèÿ
if (!fInit_PartClose()) return (0);
//---- Èíèöèàëèçèðóåì áèáëèîòåêó òðåéëèíãà
if (!fInit_Trail (fGet_PeriodFromNum (fGet_NumPeriods (TF_STOPs) + 1))) return (0);
//---- Ñîáèðàåì ïåðâîíà÷àëüíóþ ñòàòèñòèêó
fGet_Statistic (-1);
//---- Ó÷èòûâàåì ðàçðÿäíîñòü êîòèðîâîê
fCheck_Decimal();
if (OnlyCurrentSymbol || !bb_RealTrade) {bs_SymbolList = Symbol();}
bs_ExpertName = StringConcatenate (WindowExpertName(), "[", IIFs (MG >= 0, MG, "ALL"), "]: ", fGet_NameTF (Period()), "_", Symbol());
//---- Ïîëó÷àåì äàòû íà÷àëà è ïîñëåäíåãî òðåéäèíãà
bdt_BeginTrade = fGet_TermsTrade (bdt_LastTrade);
//---- Ãîòîâèì êîììåíòû
fPrepareComments();
//---- Ïîä÷èùàåì GV-ïåðåìåííûå
if (!bb_RealTrade)
{
GlobalVariablesDeleteAll (bs_NameGV);
TimeControl = D'1990.01.01 00:00';
}
if (!bb_VirtualTrade) {if (bb_OptimContinue) Alert ("Ïðîâåðüòå ëîã! ÍÀÑÒÐÎÉÊÈ ÍÅ Â ÏÎÐßÄÊÅ !!!");}
//---- Êîíòðîëèðóåì âîçìîæíûå îøèáêè
fGet_LastErrorInArray (bsa_Comment, "init()", bi_indERR);
//----
return (0);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Custor expert deinitialization function |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int deinit()
{
//----
fMineDeInit();
//----
return (0);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Custom expert iteration function |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int start()
{
if (flag_BadAccount) {return (0);}
//---- Åñëè åñòü íåâåðíûå íàñòðîéêè
if (fSTOPTRADE()) return (0);
//----
int err = GetLastError();
//----
//---- Îòêðûâàåì â òåñòîâîì ðåæèìå îðäåðà
fOrderSend_Tester();
//---- Ñ÷èòàåì "ñâîè" îðäåðà
bi_MyOrders = fMyPositions (bd_ProfitCUR);
//---- Ñîáèðàåì ñòàòèñòèêó
fGet_Statistic (PERIOD_D1);
//---- Çàïóñêàåì â ðàáîòó ðàáî÷èå èíäèêàòîðû ôîðìèðîâàíèÿ ÑÒÎÏîâ
fCheck_MyIndicatorsSTOP (bs_Symbol);
//---- Âûâîäèì èíôîðìàöèþ íà ãðàôèê (åñëè ðàçðåøåíî)
if (ShowCommentInChart) {fCommentInChart (bsa_Comment, fGet_StringManagerPA());}
//---- Âõîäèì â íà÷àëå óêàçàííîãî áàðà (åñëè NewBarInPeriod >= 0)
if (!fCheck_NewBarInPeriod (NewBarInPeriod)) return (0);
//---- Çàïóñêàåì â ðàáîòó áèáëèîòåêó óïðàâëåíèÿ îáùèì ïðîôèòîì ñîâåòíèêà
if (fManagerPA (bd_ProfitCUR, bd_Balance, bi_MyOrders > 0)) bi_MyOrders = 0;
//---- Îðãàíèçîâûâàåì óïðàâëåíèå îòêðûòûìè îðäåðàìè
if (!bb_TSProfit) {if (bi_MyOrders > 0) fControl_Positions();}
bb_first = false;
//---- Êîíòðîëèðóåì âîçìîæíûå îøèáêè
fGet_LastErrorInArray (bsa_Comment, "start()", bi_indERR);
//----
return (0);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ïðîâåðÿåì íàëè÷èå "ñâîèõ" îòêðûòûõ ïîçèöèé |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fMyPositions (double& fd_Profit) // Âîçâðàùàåìûé ïðîôèò îòêðûòûõ îðäåðîâ
{
int li_ord = 0, li_total = OrdersTotal();
//----
fd_Profit = 0.0;
ArrayInitialize (gia_MyOrders, 0);
if (li_total == 0) {return (0);}
for (int li_pos = li_total - 1; li_pos >= 0; li_pos--)
{
if (!fCheck_MyOrders (li_pos, -2)) continue;
fd_Profit += (OrderProfit() + OrderSwap() + OrderCommission());
gia_MyOrders[OrderType()]++;
li_ord++;
}
//----
return (li_ord);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: Ðàáîòû ñ îðäåðàìè |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Óïðàâëÿåì "ñâîèìè" îòêðûòûìè ïîçèöèÿìè |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fControl_Positions()
{
int li_Type, li_Ticket, li_LifeBar, err = GetLastError();
double ld_Profit;
bool lb_NewBar = false;
datetime ldt_BeginBar = fGet_SymbolTime (Symbol(), TF_STOPs, 0);
static datetime ldt_NewBar = 0;
//----
if (ldt_NewBar != ldt_BeginBar) lb_NewBar = true;
for (int li_pos = OrdersTotal() - 1; li_pos >= 0; li_pos--)
{
if (!fCheck_MyOrders (li_pos, -2)) continue;
li_Ticket = OrderTicket();
li_LifeBar = iBarShift (Symbol(), TF_STOPs, OrderOpenTime());
//---- Ïîëó÷àåì àêòóàëüíûå äàííûå ïî ñèìâîëó
fGet_MarketInfo (OrderSymbol(), li_Ticket);
//---- Îðãàíèçóåì çàêðûòèå ïî ÌÀÊÑ æèçíè îðäåðà
if (fControl_MAXLife (li_LifeBar, NBars_LifeMAX)) continue;
//---- Îðãàíèçóåì ðàáîòó âèðòóàëüíûõ ñòîïîâ
if (fUSE_VSTOP (li_Ticket, NBars_LifeMIN, li_LifeBar, Slippage, USE_Dinamic_TP)) continue;
//---- Ïðîèçâîäèì óñòàíîâêó ÑÒÎÏîâ
if (fCreat_STOPs (N_STOPs, li_Ticket, bda_Price[bi_Type], TF_STOPs, lb_NewBar, USE_VirtualSTOPs)) continue;
//---- Òðàëèì âûáðàííóþ ïîçèöèþ
if (fTrail_Position (li_Ticket, Slippage) == 0) continue;
if (!PartClose_ON) continue;
ld_Profit = OrderProfit() + OrderCommission() + OrderSwap();
//---- Êîíòðîëèðóåì ÷àñòè÷íîå çàêðûòèå îðäåðîâ
if (ld_Profit > 0.0) {fPartClose (li_Ticket, Slippage, USE_VirtualSTOPs);}
}
if (lb_NewBar) ldt_NewBar = ldt_BeginBar;
//---- Êîíòðîëèðóåì âîçìîæíûå îøèáêè
fGet_LastErrorInArray (bsa_Comment, "fControl_Positions()", bi_indERR);
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ôëàã óáûòî÷íîñòè ïîñëåäíåãî çàêðûòîãî îðäåðà |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fIs_LossLastPos()
{
datetime ldt_CloseTime;
int li_Ticket = -1, li_total = OrdersHistoryTotal();
//----
for (int li_ORD = li_total - 1; li_ORD >= 0; li_ORD--)
{
if (!fCheck_MyOrders (li_ORD, -2, MODE_HISTORY)) continue;
if (ldt_CloseTime >= OrderCloseTime()) continue;
ldt_CloseTime = OrderCloseTime();
li_Ticket = OrderTicket();
}
if (OrderSelect (li_Ticket, SELECT_BY_TICKET, MODE_HISTORY))
{if (OrderProfit() < 0) return (True);}
//----
return (False);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: Îáùèå ôóíêöèè |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ó÷èòûâàåì ðàçðÿäíîñòü êîòèðîâîê |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fCheck_Decimal()
{
//----
gi_SL *= bi_Decimal;
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
// Ïðîâåðÿåì ïåðåäàííûå â ñîâåòíèê âíåøíèå ïàðàìåòðû. |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fCheck_ExternParameters()
{
//----
bs_ERROR = "";
//---- Ïðîâåðÿåì ðàçðåøåíèå ñîâåòíèêó íà òîðãîâëþ
if (!IsTesting()) {if (!IsOptimization()) if (!IsExpertEnabled()) return (false);}
//---- Ñîçäà¸ì ïðåôèêñ GV-ïåðåìåííûõ ñîâåòíèêà
bs_NameGV = "ManagerTrailing";
if (NewBarInPeriod == 0) NewBarInPeriod = Period();
//---- Ïîëó÷àåì òåêóùåå çíà÷åíèÿ ïðåäûäóùèì áàðîì
bdt_NewBarInPeriod = fGet_SymbolTime (Symbol(), MathMax (0, NewBarInPeriod), 1);
//----
return (true);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Äåèíèöèàëèçèðóåì ñîâåòíèê |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fMineDeInit()
{
//----
//---- Óäàëÿåì ïîñëå ñåáÿ GV-ïåðåìåííûå
if (!bb_RealTrade) {GlobalVariablesDeleteAll (bs_NameGV);}
//---- Ïîä÷èùàåì ïîñëå ñåáÿ ãðàôèê
if (ClearALLAfterTrade)
{
Comment ("");
//---- Óäàëÿåì ãðàôè÷åñêèå îáúåêòû ñ ÷àðòà
fObjectsDeleteAll (bs_NameGV, -1, 0);
//---- Óäàëÿåì GV-ïåðåìåííûå
GlobalVariablesDeleteAll (bs_NameGV);
}
else
{
//---- Ïîäñ÷èòûâàåì èòîãè ðàáîòû
fGet_Statistic (-1);
//---- Ðèñóåì íà ãðàôèêå êîììåíòû
if (ShowCommentInChart) {fCommentInChart (bsa_Comment, fGet_StringManagerPA());}
}
//---- Óäàëÿåì ïðåäóïðåäèòåëüíûå íàäïèñè
for (int li_IND = 0; li_IND < 3; li_IND++)
{if (ObjectFind ("STOP" + li_IND) == 0) ObjectDelete ("STOP" + li_IND);}
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: MONEY MANAGEMENT |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ñ÷èòàåì èòîãè ðàáîòû ïî ñâîèì îðäåðàì |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fCalculate_Pribul (int& ar_HistoryOrders[3], // âîçâàðùàåìûé ìàññèâ çàêðûòûõ îðäåðîâ ïî òð¸ì òèïàì îðäåðîâ
int fi_OP = -2, // òèï (BUY\SELL) ó÷èòûâàåìûõ îðäåðîâ
datetime fdt_TimeBegin = 0) // ìîìåíò âðåìåíè, ñ êîòîðîãî ïðîèçâîäèì ðàñ÷¸ò
{
double ld_Pribul = 0.0;
int li_Type, history_total = OrdersHistoryTotal(), li_Ticket,
err = GetLastError();
datetime ldt_preLastTrade = bdt_LastTrade - 1209600;
//----
ArrayInitialize (ar_HistoryOrders, 0);
for (int li_ORD = 0; li_ORD < history_total; li_ORD++)
{
if (!fCheck_MyOrders (li_ORD, fi_OP, MODE_HISTORY)) continue;
if (fdt_TimeBegin > OrderCloseTime()) continue;
li_Type = OrderType();
ld_Pribul += (OrderProfit() + OrderSwap() + OrderCommission());
ar_HistoryOrders[2]++;
ar_HistoryOrders[li_Type]++;
if (bdt_LastTrade < OrderCloseTime()) bdt_LastTrade = OrderCloseTime();
//---- Îðãàíèçóåì óäàëåíèå GV-ïåðåìåííûõ çà ïîñëåäíèõ 2-íåäåëè
if (!bb_ClearGV) continue;
if (ldt_preLastTrade >= OrderCloseTime()) continue;
li_Ticket = OrderTicket();
//---- Ïåðåäà¸ì ñâîéñòâà îò ðîäèòåëüñêîãî îðäåðà ê äî÷åðíåìó
if (fTransmit_Sets (li_Ticket)) continue;
//---- Ïîä÷èùàåì îòðàáîòàâøèå GV-ïåðåìåííûå
fClear_WasteGV (bsa_prefGV, li_Ticket);
}
//---- Êîíòðîëèðóåì âîçìîæíûå îøèáêè
fGet_LastErrorInArray (bsa_Comment, "fCalculate_Pribul()", bi_indERR);
//----
return (ld_Pribul);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ñîáèðàåì ñòàòèñòèêó |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fGet_Statistic (int fi_Period = 0, // Ìèíèìàëüíûé ïåðèîä (TF) íà êîòîðîì ñîáèðàåì ñòàòèñòèêó
bool fb_IsTimeGMT = false) // Êàêîå âðåìÿ ó÷èòûâàåì
{
static datetime ldt_NewBar = 0;
static int li_PreHistOrders = 0;
int li_ORD, err = GetLastError(), li_Period = MathMax (0, fi_Period);
bool lb_CondON = true;
datetime ldt_NewPeriod = fGet_SymbolTime (Symbol(), li_Period, 0);
//----
//---- Ôèêñèðóåì âðåìÿ â "íàñòîÿùèé ìîìåíò"
bdt_curTime = TimeCurrent();
bd_Balance = AccountBalance();
bd_Equity = AccountEquity();
bd_FreeMargin = AccountFreeMargin();
bd_Margin = AccountMargin();
//---- Ñ÷èòàåì ñòàòèñòèêó ïî çàêðûòûì îðäåðàì
if (ldt_NewBar == ldt_NewPeriod) if (li_PreHistOrders == OrdersHistoryTotal()) if (fi_Period >= 0)
{lb_CondON = false;}
if (lb_CondON)
{
li_PreHistOrders = OrdersHistoryTotal();
ldt_NewBar = ldt_NewPeriod;
//---- Ïîäñ÷èòûâàåì èòîãè ðàáîòû
bd_Pribul = fCalculate_Pribul (gia_HistoryOrders, -2, TimeControl);
}
//---- Êîíòðîëèðóåì âîçìîæíûå îøèáêè
fGet_LastErrorInArray (bsa_Comment, "fGet_Statistic()", bi_indERR);
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ïåðåäà¸ì ñâîéñòâà îò ðîäèòåëüñêîãî îðäåðà ê äî÷åðíåìó |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fTransmit_Sets (string fs_Ticket) // Ticket
{
string ls_Name, ls_NameChild;
int li_ChildTicket = fGet_ÑhildTicket (OrderComment());
static string lsa_NameGV[] = {"_#VirtSL","_#VirtTP","_#BU","_#STOP"};
//----
//---- Åñëè åñòü äî÷åðíèé îðäåð, èùåì åãî ñðåäè çàêðûòûõ
if (li_ChildTicket == 0) return (false);
if (!OrderSelect (li_ChildTicket, SELECT_BY_TICKET)) return (false);
//---- Åñëè îðäåð çàêðûò - íàñëåäîâàòü íå÷åãî
if (OrderCloseTime() > 0) return (false);
for (int li_GV = 0; li_GV < 4; li_GV++)
{
//---- Íàñëåäóåì äàííûå îò ðîäèòåëüñêîãî îðäåðà ê äî÷åðíåìó
ls_Name = StringConcatenate (fs_Ticket, lsa_NameGV[li_GV]);
if (!GlobalVariableCheck (ls_Name)) continue;
ls_NameChild = StringConcatenate (li_ChildTicket, lsa_NameGV[li_GV]);
if (GlobalVariableCheck (ls_NameChild)) continue;
GlobalVariableSet (ls_NameChild, GlobalVariableGet (ls_Name));
}
//----
return (true);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ïî Òèêåòó ïîä÷èùàåì îòðàáîòàâøèå GV-ïåðåìåííûå |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fClear_WasteGV (string ar_NameGV[], // ìàññèâ ñ ïðåôèêñàìè âðåìåííûõ GV-ïåðìåííûõ
string fs_Ticket) // Ticket
{
string ls_Name;
int li_size = ArraySize (ar_NameGV);
//----
for (int li_IND = 0; li_IND < li_size; li_IND++)
{
ls_Name = StringConcatenate (fs_Ticket, ar_NameGV[li_IND]);
if (GlobalVariableCheck (ls_Name)) GlobalVariableDel (ls_Name);
}
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ïîëó÷àåì Ticket äî÷åðíåãî îðäåðà |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGet_ÑhildTicket (string fs_Comment)
{
int li_N1 = StringFind (fs_Comment, "to");
//----
if (li_N1 >= 0)
{
int li_N2 = StringFind (fs_Comment, "#");
if (li_N2 > li_N1)
{return (StrToInteger (StringSubstr (fs_Comment, li_N2 + 1, StringLen (fs_Comment) - li_N2 - 1)));}
}
//----
return (0);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: Ñåðâèñíûõ ôóíêöèé |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Âûâîäèì èíôîðìàöèþ íà ÷àðò |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fCommentInChart (string& ar_Comment[], // ìàññèâ ñ êîììåíòàðèÿìè
string fs_ManagerPA = "") // ñòðîêà ñî ñòàòèñòèêîé îò áèáëèîòåêè óïðàâëåíèÿ îáùèì ïðîôèòîì
{
static string lsa_Time[], lsa_Comment[], ls_BeginTrade,
ls_row = "\n",
ls_PSI = " PSI©TarasBY \n";
static int li_size, li_size_CommTime, li_Period = 60;
string ls_CTRL = "", ls_BLOCK_Comment, ls_Comment = "",
ls_Error = "", ls_time = "", ls_sign, ls_TermsTrade;
//----
//---- Ïðè ïåðâîì çàïóñêå ôîðìèðóåì ðàáî÷èå ìàññèâû
if (bb_first)
{
li_Period *= NewBarInPeriod;
li_size = ArraySize (ar_Comment);
ArrayResize (lsa_Time, li_size);
ArrayResize (lsa_Comment, li_size);
InitializeArray_STR (lsa_Comment, "");
InitializeArray_STR (lsa_Time, "");
ls_BeginTrade = StringConcatenate ("Terms Trade :: Begin - ", TimeToStr (bdt_BeginTrade));
//bdt_NewBarInPeriod = fGet_SymbolTime (Symbol(), NewBarInPeriod, 0);
}
//---- ÁËÎÊ ÊÎÌÌÅÍÒÀÐÈÅÂ
for (int li_MSG = 0; li_MSG < li_size; li_MSG++)
{
//---- Çàïîìèíàåì âðåìÿ ïîñëåäíåãî ñîîáùåíèÿ
if (StringLen (ar_Comment[li_MSG]) > 0)
{
if (ar_Comment[li_MSG] != lsa_Comment[li_MSG]) {lsa_Comment[li_MSG] = ar_Comment[li_MSG];}
if (li_MSG == li_size - 1) {ls_sign = "";} else {ls_sign = " : ";}
lsa_Time[li_MSG] = StringConcatenate (TimeToStr (bdt_curTime), ls_sign);
ar_Comment[li_MSG] = "";
}
//---- Ôîðìèðóåì áëîê êîììåíòàðèåâ
if (li_MSG < li_size - 1)
{if (StringLen (lsa_Comment[li_MSG]) > 0) {ls_Comment = StringConcatenate (ls_Comment, lsa_Time[li_MSG], lsa_Comment[li_MSG], "\n");}}
//---- Ôîðìèðóåì áëîê îøèáîê
else if (li_MSG == li_size - 1)
{
//---- Ñïóñòÿ 2 ÷àñà óïîìèíàíèå îá îøèáêå óáèðàåì
if (bdt_curTime > StrToTime (lsa_Time[li_MSG]) + 7200)
{lsa_Comment[li_MSG] = "";}
if (StringLen (lsa_Comment[li_MSG]) > 0) {ls_Error = StringConcatenate (ls_row, "ERROR: ", lsa_Time[li_MSG], "\n", lsa_Comment[li_MSG]);}
}
}
//---- Ñòðîêà êîíòðîëÿ çà âðåìåíåì ðàáîòû ñîâåòíèêà
ls_time = StringConcatenate ("\nTime :: cur ", TimeToStr (bdt_curTime, TIME_DATE|TIME_SECONDS), " | local ", TimeToStr (TimeLocal(), TIME_MINUTES|TIME_SECONDS));
if (NewBarInPeriod > 0) {ls_time = StringConcatenate (TimeToStr (bdt_NewBarInPeriod + li_Period), ls_time);}
ls_TermsTrade = StringConcatenate (ls_BeginTrade, " | Last - ", TimeToStr (bdt_LastTrade), "\n");
//---- Ôîðìèðóåì ÂÑÅ áëîêè êîììåíòàðèåâ
ls_BLOCK_Comment = StringConcatenate (bs_ExpertName, "\n", ls_row, gs_Info, "\n",
gs_Base, ls_time, "\n",
ls_TermsTrade,
ls_row,
//---- Áëîê ðåçóëüòàòîâ ðàáîòû
" PROFIT = ", bs_sign, " ", fSplitField (DoubleToStr (bd_ProfitCUR, 1)), " | ", DoubleToStr (bd_ProfitPercent - 100.0, 1), " % [ ", bi_MyOrders, " | ", gia_MyOrders[0], " / ", gia_MyOrders[1], " ]\n",
//---- Áëîê ðàáîòû ñ îáùèì ïðîôèòîì
fs_ManagerPA,
" RESULT = ", bs_sign, " ", fSplitField (DoubleToStr (bd_Pribul, 1)), " [ ", fSplitField (gia_HistoryOrders[2]), " | ", fSplitField (gia_HistoryOrders[0]), " / ", fSplitField (gia_HistoryOrders[1]), " ]\n",
ls_PSI,
//---- Áëîê êîììåíòàðèåâ
ls_Comment,
//---- Îòîáðàæàåì îøèáêè
ls_Error);//,
//---- Âûâîäèì íà ÷àðò ñôîðìèðîâàííûé áëîê êîììåíòàðèåâ
Comment (ls_BLOCK_Comment);
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ãîòîâèì êîììåíòû |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fPrepareComments()
{
string ls_txt;
//----
if (ShowCommentInChart)
{
if (!OnlyCurrentSymbol)
{
string ls_ListSymbols = IIFs (List_Symbols == "", "íà ëþáûõ èíñòðóìåíòàõ", "íà èíñòðóìåíòàõ:\n" + bs_SymbolList);
if (NumberAccount > 0)
{gs_Info = StringConcatenate ("Ðàáîòàåì íà ñ÷¸òå ¹", AccountNumber(), " ñ îðäåðàìè ", ls_ListSymbols);}
if (NumberAccount == 0)
{gs_Info = StringConcatenate ("Ðàáîòàåì íà òåêóùåì ñ÷¸òå ñ îðäåðàìè ", ls_ListSymbols);}
}
else
{
ls_ListSymbols = StringConcatenate ("c ", bs_SymbolList);
if (NumberAccount > 0)
{gs_Info = StringConcatenate ("Ðàáîòàåì íà ñ÷¸òå ¹", AccountNumber(), " òîëüêî ñ îðäåðàìè ", Symbol(), ".");}
if (NumberAccount == 0)
{gs_Info = StringConcatenate ("Ðàáîòàåì íà òåêóùåì ñ÷¸òå òîëüêî ñ îðäåðàìè ", Symbol(), ".");}
}
if (!ValueInCurrency)
{gs_Base = StringConcatenate ("Ðàñ÷¸ò â ïðîöåíòàõ îò äåïîçèòà.\nTrailProfit_ON = ", CheckBOOL (TrailProfit_ON), "; TrailProfit_StartPercent = ", DoubleToStr (TrailProfit_StartPercent, 1), " %; TrailProfit_LevelPercent = ", DoubleToStr (TrailProfit_LevelPercent, 1), " %",
"\nTakeProfit_ON = ", CheckBOOL (TakeProfit_ON), "; TPPercent = ", DoubleToStr (TP_AdvisorPercent, 1), " %; StopLoss_ON = ", CheckBOOL (StopLoss_ON), "; SLPercent = ", DoubleToStr (SL_AdvisorPercent, 1), " %");}
else {gs_Base = StringConcatenate ("Ðàñ÷¸ò â âàëþòå äåïîçèòà.\nTrailProfit_ON = ", CheckBOOL (TrailProfit_ON), "; TrailProfit_Start = ", bs_sign, DS0 (TrailProfit_Start), "; TrailProfit_Level = ", bs_sign, DS0 (TrailProfit_Level),
"\nTakeProfit_ON = ", CheckBOOL (TakeProfit_ON), "; TakeProfit = ", bs_sign, DS0 (TP_Advisor), "; StopLoss_ON = ", CheckBOOL (StopLoss_ON), "; StopLoss = ", bs_sign, DS0 (SL_Advisor));}
gs_Base = StringConcatenate (gs_Base, "\n", IIFs ((NewBarInPeriod < 0), "Ðàáîòàåì íà êàæäîì òèêå", "ÏÀÓÇÀ äî: "));
}
if (ls_ListSymbols != "")
{
ls_txt = StringConcatenate ("Ñîâåòíèê áóäåò ðàáîòàòü ", ls_ListSymbols);
Print (ls_txt);
}
Print (IIFs ((MG == 0), "Áåç êîíòðîëÿ ïî MAGIC !!!", StringConcatenate ("Ñ êîíòðîëåì ïî MAGIC = ", MG, " !!!")));
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Èñêëþ÷àåì ñëó÷àéíóþ ðàáîòó ñîâåòíèêà |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fCheck_MyAccount()
{
//----
if (NumberAccount > 0)
{
if (AccountNumber() != NumberAccount)
{
flag_BadAccount = true;
Alert ("Íå ïðàâèëüíûé íîìåð ñ÷åòà");
return (false);
}
}
//----
return (true);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: TESTER |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Îòêðûâàåì â òåñòîâîì ðåæèìå îðäåðà |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fOrderSend_Tester()
{
//----
if (!IsTesting()) return;
static datetime ldt_NewBar = 0;
datetime ldt_curBar = fGet_SymbolTime (Symbol(), PERIOD_H4, 0);
if (OrdersTotal() < 3) if (ldt_NewBar != ldt_curBar)
{
if (fIs_LossLastPos()) {InTesterOrder = IIFi ((InTesterOrder == 1), -1, 1);}
if (InTesterOrder == 1)
{fOrderSend (Symbol(), OP_BUY, 0.6, NDD (Ask), 2, 0., 0., NULL, MathMax (MG, 0));}
if (InTesterOrder == -1)
{fOrderSend (Symbol(), OP_SELL, 0.6, NDD (Bid), 2, 0., 0., NULL, MathMax (MG, 0));}
ldt_NewBar = ldt_curBar;
}
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
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
---