//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| s-PSI@ControlExit.mq4 |
//| Copyright © 2012, 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 script or(and) parts of it PROHIBITED. |
//| The author is not liable for any damages resulting from the use of a script. |
//| For all matters relating to the work of the script, comments or suggestions for |
//|their improvement in the contact Skype: TarasBY or e-mail. |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
#property copyright "Copyright © 2008-12, TarasBY WM R418875277808; Z670270286972"
#property link "taras_bulba@tut.by"
//#property show_inputs // ìîæíî ðàñêîììåíòèðîâàòü è ðàáîòàòü ÷åðåç îêíî ñâîéñòâ
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| ***** Ïàðàìåòðû ñêðèïòà ***** |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
extern int MG = 1; // Magic: 1 - Ìàãèê "âûäåëåííîãî" îðäåðà
extern int Type = -1; // OrderType
extern int TypeProfit = 0; // < 0 - ëîññîâûå; 0 - âñå; > 0 - ïðîôèòíûå (íåò - âñå)
extern bool OnlyDrop = TRUE; // Çàêðûòèå òîëüêî "âûáðàííîãî" îðäåðà
extern int PartClosePercent = 100; // Ñêîëüêî ïðîöåíòîâ ðîäèòåëüñêîãî îðäåðà çàêðûòü
extern bool SendReverseOrder = FALSE; // Îòêðûòèå ðåâåðñíîãî îðäåðà (ïðè âûáîðå ðûíî÷íîãî îðäåðà íà çàêðûòèå)
extern double K_LotsReverse = 1; // Êîýôôèöèåíò óâåëè÷åíèÿ ðàçìåðà ðåâåðñíîãî îðäåðà
extern int Order_SL = 40; // â ïï. äëÿ 4-¸õ çíàêîâ
extern int Order_TP = 40; // â ïï. äëÿ 4-¸õ çíàêîâ
extern bool PrintDescription = FALSE; // Ðàñïå÷àòàòü èíñòðóêöèþ ïî íàñòðîéêå ïåðåìåííûõ
//IIIIIIIIIIIIIIIIIII==========Ïîäêëþ÷åííûå áèáëèîòåêè==========IIIIIIIIIIIIIIIIIIIIII+
#include <b-PSI@Base.mqh> // Áèáëèîòåêà áàçîâûõ ôóíêöèé
#include <b-PSI@Trade_Light.mqh> // Áèáëèîòåêà ôóíêöèé òîðãîâûõ îïåðàöèé
//IIIIIIIIIIIIIIIIIIII======Ãëîáàëüíûå ïåðåìåííûå ñêðèïòà=======IIIIIIIIIIIIIIIIIIIIII+
double gda_MyValues[11],
// gda_MyValues[0] - Magic: 0 - ðó÷íûå; -1 - âñå;
// gda_MyValues[1] - Type
// gda_MyValues[2] - Profit: < 0 - ëîññîâûå; 0 - âñå; > 0 - ïðîôèòíûå (íåò - âñå)
// gda_MyValues[3] - Slippage
// gda_MyValues[4] - OnlyDrop (ôëàã óäàëåíèÿ òîëüêî óêàçàííîãî îðäåðà)
// gda_MyValues[5] - PartClosePercent ÷àñòè÷íîå çàêðûòèå îðäåðà (â ïðîöåíòàõ)
// gda_MyValues[6] - SendReverseOrder (ôëàã îòêðûòèÿ ðåâåðñíîãî îðäåðà âçàìåí óäàë¸ííîãî)
// gda_MyValues[7] - K_LotsReverse (êîýôôèöèåíò óâåëè÷åíèÿ ëîòà ðåâåðñíîãî îðäåðà)
// gda_MyValues[8] - StopLoss
// gda_MyValues[9] - TakeProfit
// gda_MyValues[10] - Print Description
gd_Price,
gd_Discount = 1;
int Slip = 2; // Slippage (äëÿ 4-¸õ çíàêîâ)
bool gb_DeleteGV = false;
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Script program start function |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int start()
{
//---- Äåëàåì ïðîâåðêó âîçìîæíîñòè ðàáîòû ñêðèïòà
if (!IsExpertEnabled()) {Alert ("Ðàçðåøè ðàáîòó ýêñïåðòîâ !!!"); return (0);}
int li_start = GetTickCount();
bs_NameGV = "GV";
//---- Èíèöèàëèçèðóåì ïåðåìåííûå áèáëèîòåêè ôóíêöèé òîðãîâûõ îïåðàöèé
fInit_Base (Symbol(), -1);
//----
int cnt = 1, li_cmd;
//----
gd_Price = NDD (WindowPriceOnDropped());
//---- Ïðèâîäèì çíà÷åíèÿ ïåðåìåííûõ â ñîîòâåòñòâèå ñ ðàçðÿäíîñòüþ êîòèðîâîê
gd_Discount = NDP (gd_Discount * bi_Decimal);
//---- Áåð¸ì èç GV-ïåðåìåííûõ óïðàâëÿþùèå çíà÷åíèÿ
if (!fGet_ControlGV (gda_MyValues, bs_NameGV))
{
PlaySound ("wait.wav");
fSet_GlobalVariable (gda_MyValues, bs_NameGV);
if (gda_MyValues[10] == 1) fPrint (bs_NameGV);
return (0);
}
//---- Ïåðåäà¸ì â áèáëèîòåêó ðàçìåð ïðîñêàëüçûâàíèÿ
if (gda_MyValues[3] != 0.0) Slippage = gda_MyValues[3] * bi_Decimal;
//---- Ïðîâåðÿåì êîððåêòíîñòü ïîëó÷åíèÿ öåíû ñ ãðàôèêà
if (gd_Price > 0)
{
double lda_Value[6];
bool lb_continue = true;
//---- Ïîëó÷àåì àòðèáóòû "âûäåëåííîãî" îðäåðà - ðàáî÷àÿ çîíà +- 25 ïï. (4-ðå çíàêà)
while (!fGet_InfoOrdersByPrice (gda_MyValues[0], lda_Value, gd_Price, gd_Discount * cnt))
{
cnt++;
if (cnt > 25) {Print ("Íå óäàëîñü îáíàðóæèòü îðäåð â îçíà÷åííîé çîíå ", gd_Price); lb_continue = false; break;}
}
if (lb_continue)
{
//---- ×àñòè÷íîå çàêðûòèå ÒÎËÜÊÎ âûäåëåííîãî îðäåðà
if (gda_MyValues[5] != 100) gda_MyValues[4] = 1;
//---- Óäàëÿåì òîëüêî "âûäåëåííûé" îðäåð (åñëè çàäàíî)
if (gda_MyValues[4] == 1)
{
OrderSelect (lda_Value[0], SELECT_BY_TICKET);
if (!fCheck_TypeOrder (gda_MyValues[1], OrderType()))
{Alert ("Òèï îðäåðà[", fGet_NameOP (OrderType()), "] ñ çàäàííûì òèïîì íà óäàëåíèå\çàêðûòèå[", fGet_NameOP (gda_MyValues[1]), "] íå ñîâïàäàåò !!!"); return (0);}
gda_MyValues[1] = OrderType();
if (OrderType() % 2 == 0) li_cmd = 0; else li_cmd = 1;
if (lda_Value[2] < 2)
{
double ld_Lot = fLotsNormalize (OrderLots() / 100.0 * gda_MyValues[5]);
string ls_Comment = StringConcatenate (OrderComment(), " | Reverse");
int li_Ticket = OrderTicket(), li_Type = OrderType(), li_CMD = OP_BUY;
if (fOrderClose (li_Ticket, ld_Lot, NDD (fGet_TradePrice (li_cmd, true)), gda_MyValues[3]))
{
OrderSelect (lda_Value[0], SELECT_BY_TICKET, MODE_HISTORY);
if (gda_MyValues[5] != 100)
{
Alert ("Çàêðûëè ÷àñòü (", gda_MyValues[5], " % | ", ld_Lot, ") ", fGet_NameOP (gda_MyValues[2]), "-îðäåðà #", OrderTicket(), " | OpenPrice ", DSD (lda_Value[3]), " | MG ",
OrderMagicNumber(), " | Profit = ", bs_sign, DSDig (OrderProfit() + OrderSwap() + OrderCommission()));
}
else
{
string ls_msg = StringConcatenate ("Çàêðûëè îðäåð #", OrderTicket(), " | OpenPrice ", DSD (lda_Value[3]), " | MG ",
OrderMagicNumber(), " | Profit = ", bs_sign, DSDig (OrderProfit() + OrderSwap() + OrderCommission()));
if (gda_MyValues[6] == 1)
{
ld_Lot = fLotsNormalize (OrderLots() * gda_MyValues[7]);
double ld_SL = 0, ld_TP = 0;
if (li_Type == OP_BUY) {li_CMD = OP_SELL; li_cmd = 1;} else li_cmd = -1;
gd_Price = NDD (fGet_TradePrice (li_Type, true));
if (gda_MyValues[8] > 0) ld_SL = NDD (gd_Price - li_cmd * NDP (gda_MyValues[8] * bi_Decimal));
if (gda_MyValues[9] > 0) ld_TP = NDD (gd_Price + li_cmd * NDP (gda_MyValues[9] * bi_Decimal));
li_Ticket = fOrderSend (Symbol(), li_CMD, ld_Lot, gd_Price, gda_MyValues[3], ld_SL, ld_TP, ls_Comment, lda_Value[1]);
if (li_Ticket > 0)
{
OrderSelect (li_Ticket, SELECT_BY_TICKET);
ls_msg = StringConcatenate (ls_msg, "\nÎòêðûëè ðåâåðñíûé ", fGet_NameOP (OrderType()), "-îðäåð #",
OrderTicket(), " | Lots ", DSDig (ld_Lot), " | OpenPrice ", DSD (OrderOpenPrice()), " | MG ", OrderMagicNumber());
}
//Alert (ls_msg);
}
}
//---- Âûâîäèì îïîâåùåíèÿ
fAlert_TimeControl (ls_msg, li_start, "yes.wav");
//PlaySound ("yes.wav");
return (0);
}
}
else
{
//---- Âûâîäèì îïîâåùåíèÿ
if (fOrderDelete (OrderTicket()))
{fAlert_TimeControl (StringConcatenate ("Óäàëèëè ", fGet_NameOP (lda_Value[2]), " îðäåð #", OrderTicket(), " | OpenPrice ", DSD (lda_Value[3]), " | MG ", lda_Value[1]), li_start, "yes.wav");}
return (0);
}
}
if (gda_MyValues[0] == 1) gda_MyValues[0] = lda_Value[1];
}
}
if (!lb_continue || gd_Price == 0.0)
{
//---- Åñëè Ìàãèê ÿâíî íå îïðåäåë¸í, îòêëþ÷àåì êîíòðîëü ïî Ìàãèêó
if (gda_MyValues[0] == 1) gda_MyValues[0] = -1;
//---- Ôèêñèðóåì ôàêò, ÷òî íåò "âûáðàííîãî" îðäåðà
gda_MyValues[4] = 0.0;
}
int lia_MyOrders[3];
double ld_Profit, ld_Pribul;
//---- Ðàçðåøàåì ê óäàëåíèþ îðäåðà ñ äðóãèõ Ñèìâîëîâ, ÍÎ ñ òåì æå Ìàãèêîì
if (gda_MyValues[1] == -1 || ((gd_Price == 0.0 || lda_Value[2] > 1) && gda_MyValues[1] == 7) || ((gd_Price == 0.0 || lda_Value[2] < 2) && gda_MyValues[1] == -2))
{bs_SymbolList = "";}
bs_MagicList = DS0 (gda_MyValues[0]);
//---- Ïðîâîäèì ðåâèçèþ îðäåðîâ íà óäàëåíèå ïî çàäàííûì óñëîâèÿì
if (fMyPositions (gda_MyValues[1], ld_Profit, lia_MyOrders, gda_MyValues[2]) > 0)
//---- Óäàëÿåì\çàêðûâàåì îðäåðà ïî çàäàííûì óñëîâèÿì
{int li_ord = fClose_AllOrdersBy (ld_Pribul, gda_MyValues[1], 0, 0, gda_MyValues[2]);}
//---- Óäàëÿåì ïîñëå ñåáÿ GV-ïåðåìåííûå (åñëè çàäàíî)
if (gb_DeleteGV) GlobalVariablesDeleteAll (bs_NameGV);
//---- èëè çàíîñèì â íèõ ïîñëåäíèå çíà÷åíèÿ
else fSet_GlobalVariable (gda_MyValues, bs_NameGV);
//---- Âûâîäèì êîììåíòàðèé ñ ðåçóëüòàòàìè ðàáîòû
if (li_ord > 0)
{
string ls_Pending = "", ls_Trade = "", ls_and = "", ls_txt, ls_Profit = "";
if (gda_MyValues[2] != 0.0) ls_Profit = StringConcatenate ("[", fGet_NameTypeProfit (gda_MyValues[2]), "]");
//---- Ãîòîâèì îò÷¸ò ïî ðûíî÷íûì îðäåðàì
if (lia_MyOrders[1] > 0)
{
ls_Trade = StringConcatenate ("çàêðûëè ", lia_MyOrders[1], " îðäåð", fGet_SufCount (lia_MyOrders[1]), " îáùèì ïðîôèòîì", ls_Profit, " = ", bs_sign, DSDig (ld_Profit), " [", DSDig (ld_Profit), "]");
if (lia_MyOrders[2] > 0) ls_and = " è ";
}
//---- Ãîòîâèì îò÷¸ò ïî îòëîæåíûì îðäåðàì
if (lia_MyOrders[2] > 0)
{ls_Pending = StringConcatenate ("óäàëèëè ", lia_MyOrders[2], " îðäåð", fGet_SufCount (lia_MyOrders[2]));}
ls_txt = StringConcatenate ("×òî ñäåëàëè: ", ls_Trade, ls_and, ls_Pending, " c Magic[", fGet_NameMG (gda_MyValues[0]), "]");
//---- Âûâîäèì îïîâåùåíèÿ
fAlert_TimeControl (ls_txt, li_start, "yes.wav");
}
else
{
//---- Âûâîäèì îïîâåùåíèÿ
fAlert_TimeControl ("Ïî âûáðàííûì íàñòðîéêàì óäàëÿòü áûëî íå÷åãî !!!", li_start, "stops.wav");
Print ("Price = ", DSD (gd_Price), " | OpenPrice = ", DSD (lda_Value[3]), " | MG = ", gda_MyValues[0], " | Type ", fGet_NameOP (gda_MyValues[1]), " | Profit = ", gda_MyValues[2], " | OnlyDrop = ", gda_MyValues[4]);
}
//----
return (0);
//---- Óïîìèíàåì íå çàäåéñòâîâàííûå ôóíêöèè
fSTOPTRADE();
fGet_PipsValue();
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Áåð¸ì èç GV-ïåðåìåííûõ óïðàâëÿþùèå çíà÷åíèÿ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fGet_ControlGV (double& ar_Values[], // âîçâðàùàåìûé ìàññèâ ïåðåìåííûõ óïðàâëåíèÿ
string fs_NameGV = "GV") // ïðåôèêñ GV-ïåðåìåííûõ ñêðèïòà
{
string ls_Name, lsa_Name[] = {"_Magic","_Type","_Profit","_Slip","_OnlyDrop",
"_PartClosePercent","_SendReverse","_KoefLotsReverse","_SL_4zn","_TP_4zn","_Print"};
int li_GV, li_cnt = 0, li_size = ArraySize (lsa_Name);
//----
for (int li_IND = 0; li_IND < li_size; li_IND++)
{
ls_Name = StringConcatenate (fs_NameGV, lsa_Name [li_IND]);
if (GlobalVariableCheck (ls_Name)) {ar_Values[li_IND] = GlobalVariableGet (ls_Name);}
else
{
switch (li_IND)
{
case 0: ar_Values[li_IND] = MG; break;
case 1: ar_Values[li_IND] = Type; break;
case 2: ar_Values[li_IND] = TypeProfit; break;
case 3: ar_Values[li_IND] = Slip; break;
case 4: ar_Values[li_IND] = OnlyDrop; break;
case 5: ar_Values[li_IND] = PartClosePercent; break;
case 6: ar_Values[li_IND] = SendReverseOrder; break;
case 7: ar_Values[li_IND] = K_LotsReverse; break;
case 8: ar_Values[li_IND] = Order_SL; break;
case 9: ar_Values[li_IND] = Order_TP; break;
case 10: ar_Values[li_IND] = PrintDescription; break;
}
GlobalVariableSet (ls_Name, ar_Values[li_IND]);
li_cnt++;
}
}
//---- Åñëè îäíà èç GV-ïåðåìåííûõ îòñóòñòâóåò
if (li_cnt != 0)
{
string ls_Pending = "", ls_Trade = "", ls_and = "", ls_txt, ls_Profit = "";
if (gd_Price > 0.0)
{
double lda_Value[6];
bool lb_continue = true;
int cnt = 1;
//---- Ïîëó÷àåì àòðèáóòû "âûäåëåííîãî" îðäåðà - ðàáî÷àÿ çîíà +- 25 ïï. (4-ðå çíàêà)
while (!fGet_InfoOrdersByPrice (ar_Values[0], lda_Value, gd_Price, gd_Discount * cnt))
{
cnt++;
if (cnt > 25) {lb_continue = false; break;}
}
//---- Ïåðåäà¸ì äàëüøå êîíòðîëèðóåìûé Ìàãèê
if (lb_continue) {if (ar_Values[0] == 1) ar_Values[0] = lda_Value[1];}
if (ar_Values[5] != 100) ar_Values[4] = 1;
}
if (!lb_continue || gd_Price == 0.0)
{
//---- Åñëè Ìàãèê ÿâíî íå îïðåäåë¸í, îòêëþ÷àåì êîíòðîëü ïî Ìàãèêó
if (ar_Values[0] == 1) ar_Values[0] = -1;
//---- Ôèêñèðóåì ôàêò, ÷òî íåò "âûáðàííîãî" îðäåðà
ar_Values[4] = 0.0;
}
if (ar_Values[4] == 0.0)
{
double ld_Profit;
int lia_MyOrders[3];
//---- Ðàçðåøàåì ê óäàëåíèþ îðäåðà ñ äðóãèõ Ñèìâîëîâ, ÍÎ ñ òåì æå Ìàãèêîì
if (ar_Values[1] == -1 || ((gd_Price == 0.0 || lda_Value[2] > 1) && ar_Values[1] == 7) || ((gd_Price == 0.0 || lda_Value[2] < 2) && ar_Values[1] == -2))
{bs_SymbolList = "";}
bs_MagicList = DS0 (ar_Values[0]);
//---- Ïðîâîäèì ðåâèçèþ îðäåðîâ íà óäàëåíèå ïî çàäàííûì óñëîâèÿì
fMyPositions (ar_Values[1], ld_Profit, lia_MyOrders, ar_Values[2]);
//---- Ãîòîâèì êîììåíòàðèè
if (ar_Values[2] != 0.0) ls_Profit = StringConcatenate ("[", fGet_NameTypeProfit (ar_Values[2]), "]");
if (lia_MyOrders[1] > 0)
{
ls_Trade = StringConcatenate ("çàêðûòü ", lia_MyOrders[1], " îðäåð", fGet_SufCount (lia_MyOrders[1]), " ñ îáùèì ïðîôèòîì", ls_Profit, " = ", bs_sign, DSDig (ld_Profit));
if (lia_MyOrders[2] > 0) ls_and = " è ";
}
if (lia_MyOrders[2] > 0)
{ls_Pending = StringConcatenate ("óäàëèòü ", lia_MyOrders[2], " îðäåð", fGet_SufCount (lia_MyOrders[2]));}
ls_txt = StringConcatenate ("Âû ñîáèðàåòåñü ", ls_Trade, ls_and, ls_Pending, " c Magic[", fGet_NameMG (ar_Values[0]), "]");
}
//---- Åñëè âûáðàí êîíêðåòíûé îðäåð (OnlyDrop == true)
else
{
if (lda_Value[2] < 2)
{
if (ar_Values[5] != 100)
{
double ld_Lot = fLotsNormalize (lda_Value[5] / 100.0 * ar_Values[5]);
ls_Trade = StringConcatenate ("çàêðûòü ÷àñòü (", ar_Values[5], " % | ", ld_Lot, ") ", fGet_NameOP (lda_Value[2]), "-îðäåðà #", lda_Value[0], " | OpenPrice ", DSD (lda_Value[3]), " | MG ",
OrderMagicNumber(), " | Profit = ", bs_sign, DSDig ((OrderProfit() + OrderSwap() + OrderCommission()) / lda_Value[5] * ld_Lot));
}
else
{
ls_Trade = StringConcatenate ("çàêðûòü #", lda_Value[0], "/", fGet_NameOP (lda_Value[2]), "-îðäåð ñ Profit = ", bs_sign, DSDig (ld_Profit));
if (ar_Values[6] == 1)
{
ld_Lot = fLotsNormalize (lda_Value[5] * ar_Values[7]);
int li_cmd = OP_BUY, cmd = -1;
double ld_SL = 0, ld_TP = 0;
string ls_SL = "", ls_TP = "";
if (lda_Value[2] == OP_BUY) {li_cmd = OP_SELL; cmd = 1;}
gd_Price = NDD (fGet_TradePrice (lda_Value[2], true, Symbol()));
if (ar_Values[8] > 0) {ld_SL = NDP (ar_Values[8] * bi_Decimal); ls_SL = StringConcatenate (" | SL ", DSD (gd_Price - cmd * ld_SL));}
if (ar_Values[9] > 0) {ld_TP = NDP (ar_Values[9] * bi_Decimal); ls_TP = StringConcatenate (" | TP ", DSD (gd_Price + cmd * ld_TP));}
ls_Trade = StringConcatenate (ls_Trade, "\nÎòêðûòü ðåâåðñíûé ", fGet_NameOP (li_cmd), "-îðäåð | Lots ", DSDig (ld_Lot), " | OpenPrice ",
DSD (gd_Price), ls_SL, ls_TP);
}
}
}
else ls_Pending = StringConcatenate ("óäàëèòü #", lda_Value[0], "/", fGet_NameOP (lda_Value[2]), "-îðäåð");
ls_txt = StringConcatenate ("Âû ñîáèðàåòåñü ", ls_Trade, ls_Pending, " c Magic[", fGet_NameMG (lda_Value[1]), "]");
}
Alert (ls_txt, "\nÑîçäàëè GV-ïåðåìåííûå. Ïåðåçàïóñòèòå ñêðèïò !!!");
return (false);
}
//---- Íîðìàëèçóåì çíà÷åíèå ÷àñòè÷íîãî çàêðûòèÿ
if (ar_Values[5] > 100) ar_Values[5] = 100;
if (ar_Values[7] <= 0) ar_Values[7] = 1;
//----
return (true);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Áåð¸ì èíôîðìàöèþ îá îðåäåðå ïî OrderOpenPrice |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fGet_InfoOrdersByPrice (int fi_Magic, // èñêîìûé Magic
double& ar_Values[], // âîçâðàùàåìûé ìàññèâ àòðèáóòîâ îðäåðà
double fd_Price, // çàäàííûé óðîâåíü öåíû
double fd_Discont) // ïîãðåøíîñòü ì\ó OpenPrice è çàäàííûì óðîâíåì öåíû
{
//----
for (int li_ORD = OrdersTotal() - 1; li_ORD >= 0; li_ORD--)
{
if (!OrderSelect (li_ORD, SELECT_BY_POS)) continue;
if (OrderSymbol() != Symbol()) continue;
if (fi_Magic >= 0 && fi_Magic != 1 && fi_Magic != OrderMagicNumber()) continue;
if (MathAbs (fd_Price - OrderOpenPrice()) > fd_Discont) continue;
ar_Values[0] = OrderTicket();
ar_Values[1] = OrderMagicNumber();
ar_Values[2] = OrderType();
ar_Values[3] = OrderOpenPrice();
ar_Values[4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Values[5] = OrderLots();
return (true);
}
//----
return (false);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ñòðîêîâàÿ èíôîðìàöèÿ î êîíòðîëèðóåìûõ Ìàãèêàõ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
string fGet_NameMG (int fi_Magic)
{
//----
switch (fi_Magic)
{
case -1: return ("ALL");
case 0: return ("HANDLE");
default: if (fi_Magic > 0) return (fi_Magic);
}
//----
return ("Ôèãçíàåò, ÷òî Âû õîòèòå?!");
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ïðîâåðÿåì íàëè÷èå "ñâîèõ" îòêðûòûõ ïîçèöèé |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fMyPositions (int fi_Type, // òèï îðäåðîâ
double& fd_Profit, // Âîçâðàùàåìûé ïðîôèò îòêðûòûõ îðäåðîâ
int& ar_MyOrders[], // Âîçâðàùàåìûé ìàññèâ ÷èñëåííîñòè îðäåðîâ
int fi_TypeProfit = 0) // Èäåíòèôèêàòîð ïðîôèòíîñòè îðäåðà: > 0 - ïðîôèòíûé; < 0 - ëîññîâûé
{
int li_total = OrdersTotal(), li_ord = 0, li_Type;
double ld_Profit;
//----
fd_Profit = 0.0;
ArrayInitialize (ar_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, fi_Type)) continue;
if (li_Type < 2)
{
ld_Profit = OrderProfit() + OrderSwap() + OrderCommission();
//---- Ôèëüòðóåì îðäåðà ïî ïðîôèòíîñòè
if (fi_TypeProfit != 0)
{
if (fi_TypeProfit > 0) if (ld_Profit < 0) continue;
if (fi_TypeProfit < 0) if (ld_Profit > 0) continue;
}
fd_Profit += ld_Profit;
ar_MyOrders[1]++;
}
else ar_MyOrders[2]++;
ar_MyOrders[0]++;
li_ord++;
}
//----
return (li_ord);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ñîõðàíÿåì ðàáî÷èå çíà÷åíèÿ â GV-ïåðåìåííûõ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fSet_GlobalVariable (double ar_Values[], // ìàññèâ çíà÷åíèé ïåðåìåííûõ óïðàâëåíèÿ
string fs_NameGV = "GV") // ïðåôèêñ GV-ïåðåìåííûõ ñêðèïòà
{
string ls_Name, lsa_Name[] = {"_Magic","_Type","_Profit","_Slip","_OnlyDrop",
"_PartClosePercent","_SendReverse","_KoefLotsReverse","_SL_4zn","_TP_4zn","_Print"};
int li_size = ArraySize (lsa_Name);
//----
for (int li_IND = 0; li_IND < li_size; li_IND++)
{
ls_Name = StringConcatenate (fs_NameGV, lsa_Name [li_IND]);
GlobalVariableSet (ls_Name, ar_Values[li_IND]);
}
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Ïîëó÷àåì îêîí÷àíèå ñóùåñòâèòåëüíîãî ñâÿçàííîãî ñ ÷èñëèòåëüíûì |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
string fGet_SufCount (int fi_cnt)
{
//----
if (fi_cnt >= 5 && fi_cnt <= 20) return ("îâ");
else if (fi_cnt >= 2 && fi_cnt <= 4) return ("à");
//----
return ("");
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Âûâîäèì â ëîã ðàñøèôðîâêó çíà÷åíèé óïðàâëÿþùèõ ïåðåìåííûõ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fPrint (string fs_NameGV = "GV")
{
string ls_msg = "", lsa_Name[] = {"_Magic","_Type","_Profit","_Slip","_OnlyDrop",
"_PartClosePercent","_SendReverse","_KoefLotsReverse","_SL_4zn","_TP_4zn","_Print"},
ls_Descript;
int li_size = ArraySize (lsa_Name);
//----
for (int li_IND = 0; li_IND < li_size; li_IND++)
{
switch (li_IND)
{
case 0:
ls_Descript = StringConcatenate (fs_NameGV, lsa_Name[li_IND], ": -1 - ALL; 0 - HANDLE; 1 - DROP; > 1 - MagicNumber(); \n");
break;
case 1:
ls_Descript = StringConcatenate (fs_NameGV, lsa_Name[li_IND], ": -2 - (BUY&SELL); -1 - ALL; 0 - BUY; 1 - SELL; 2 - BUYLIMIT; 3 - SELLLIMIT; 4 - BUYSTOP, 5 - SELLSTOP; 7 - PENDING; \n");
break;
case 2:
ls_Descript = StringConcatenate (fs_NameGV, lsa_Name[li_IND], ": < 0 - LOSS (<0); 0 - ALL; > 0 - PROFIT (>0); \n");
break;
case 3:
ls_Descript = StringConcatenate (fs_NameGV, lsa_Name[li_IND], ": Slippage for 4 digits; \n");
break;
case 4:
ls_Descript = StringConcatenate (fs_NameGV, lsa_Name[li_IND], ": 0 - ALL; 1 - DROP (âûáðàííûé); \n");
break;
case 5:
ls_Descript = StringConcatenate (fs_NameGV, lsa_Name[li_IND], ": in % - 0 < PartClosePercent <= 100; \n");
break;
case 6:
ls_Descript = StringConcatenate (fs_NameGV, lsa_Name[li_IND], ": 0 - NOT Send; 1 - Send Reverse Order for Drop Trade Order; \n");
break;
case 7:
ls_Descript = StringConcatenate (fs_NameGV, lsa_Name[li_IND], ": Koef Lots for Send Reverse Order; \n");
break;
case 8:
ls_Descript = StringConcatenate (fs_NameGV, lsa_Name[li_IND], ": StopLoss in pipis for 4 digits; \n");
break;
case 9:
ls_Descript = StringConcatenate (fs_NameGV, lsa_Name[li_IND], ": TakeProfit in pipis for 4 digits; \n");
break;
case 10:
ls_Descript = StringConcatenate (fs_NameGV, lsa_Name[li_IND], ": 0 - NOT Print; 1 - Print Description;");
break;
}
ls_msg = StringConcatenate (ls_msg, ls_Descript);
}
Print (ls_msg);
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
Comments