s-PSIjControlExit

Author: Copyright � 2008-12, TarasBY WM R418875277808
Orders Execution
Checks for the total of open orders
0 Views
0 Downloads
0 Favorites
s-PSIjControlExit
//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