Orders Execution
0
Views
0
Downloads
0
Favorites
e-PSIqVirtualTrader1_24
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| e-PSI@VirtualTrader.mq4 |
//| Copyright © 2011, TarasBY |
//| taras_bulba@tut.by |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
#property copyright "Copyright © 2011, TarasBY WM Z670270286972"
#property link "taras_bulba@tut.by"
//IIIIIIIIIIIIIIIIIII==================CONSTANS=================IIIIIIIIIIIIIIIIIIIIII+
#define Line_BUY 0
#define Line_SELL 1
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| ***** Ïàðàìåòðû ñîâåòíèêà ***** |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
extern string SETUP_Expert = "========== Îáùèå íàñòðîéêè ñîâåòíèêà ==========";
extern int MG = 880; // Ìàãèê: -1 - ëþáîé, >= 0 - îòêðûòûé ñîâåòíèêîì èëè âðó÷íóþ
extern bool WhileTrade_ON = FALSE; // Ðàáîòà ñîâåòíèêà â öèêëå
extern bool PrintCom = TRUE; // Ïå÷àòàòü êîììåíòàðèé.
extern bool ShowCommentInChart = TRUE; // Ïîêàçûâàòü êîììåíòàðèè íà ãðàôèêå.
extern string Order_Comment = "VirtualTrader"; // Êîììåíòàðèé äëÿ îòêðûâàåìîãî îðäåðà
extern bool VirtualOrders_ON = TRUE; // Âêëþ÷åíèå îòêðûòèÿ îðäåðîâ ïî ëèíèÿì íà ãðàôèêå
extern int Variant_Send = 0;
// 0 - ïðè ïåðåñå÷åíèè óðîâíÿ - îòêðûâàåì ïî òåêóùåé öåíå îðäåð ïî íàçâàíèþ ëèíèè
// 1 - ïðè ïåðåñå÷åíèè óðîâíÿ: STOP-îðäåðà îòêðûâàåì ïî òåêóùåé öåíå, LIMIT îòêðûâàåì ïîñëå òîãî, êàê öåíà ðàçâåðí¸òñÿ è âûéäåò çà ïðåäåëû "âèäèìîñòè" óðîâíÿ (OpenPrice+-Reliable_Area)
extern int Variant_Line = 0; // 0 - OBJ_HLINE; 1 - OBJ_TREND
extern bool TrailPrice_ON = TRUE; // Òðàëèòü PriceOpen çà öåíîé
extern bool DeleteInActiveLine = TRUE; // Óäàëåíèå "îòðàáîòàííîé" ëèíèè
extern int NewBarInPeriod = 1; // <= 0 - ðàáîòàåì íà íà÷àëå ïåðèîäà íîâîãî áàðà, -1 - ðàáîòàåì íà êàæäîì òèêå
extern int Reliable_Area = 20; // Çîíà â ïï. (äëÿ 4-¸õ çíàêîâ) çà ïðåäåëàõ êîòîðîé (ïîñëå ïåðåñå÷åíèÿ) äîëæíà âûéòè öåíà, ÷òîáû ñîâåòíèê îòêðûë îðäåð - ðàçìåð "âèäèìîñòè" óðîâíÿ
extern int Order_SL = 200; // SL îðäåðîâ (äëÿ 4-¸õ çíàêîâ)
extern int Order_TP = 200; // TP îðäåðîâ
extern int Slippage = 2; // Äîïóñòèìîå îòêëîíåíèå îò çàïðîøåííîé öåíû
extern int MAX_OredersInSymbol = 1; // Ìàêñèìàëüíîå êîëè÷åñòâî îðäåðîâ íà ðàáî÷åì ñèìâîëå
extern string Name_BUY_Line = "OpenPrice_BUY"; // Èìÿ ëèíèè äëÿ îðäåðà BUY
extern string Name_SELL_Line = "OpenPrice_SELL"; // Èìÿ ëèíèè äëÿ îðäåðà SELL
extern string Setup_Lots = "======== Ïàðàìåòðû ìîäóëÿ ðàñ÷¸òà ëîòà ========";
extern bool UseMM = False; // Èñïîëüçîâàòü ðàñøèðÿþùèéñÿ ëîò
extern string Setup_LotsWayChoice = "LotsWayChoice: 0 - ôèêñèð.; 1 - % îò Depo; 2 - ôðàêöèîííî-ïðîïîðö.; 3 - ôðàêöèîííî-ôèêñèð.";
extern int LotsWayChoice = 0; // Ñïîñîá âûáîðà ðàáî÷åãî ëîòà:
// 0 - ôèêñèðîâàííûé,
// 1 - ïðîöåíò îò MeansType,
// 2 - ôðàêöèîííî-ïðîïîðöèîíàëüíûé,
// 3 - ôðàêöèîííî-ôèêñèðîâàííûé
extern string Setup_MeansType = "MeansType: 1 - Balance; 2 - Equity; 3 - FreeMargin; 4 - RiskDepo";
extern int MeansType = 2; // Òèï ñðåäñòâ èñïîëüçóåìûõ ïðè ðàñ÷åòå ðàçìåðà ëîòà:
// 1 - Balance,
// 2 - Equity,
// 3 - FreeMargin,
// 4 - RiskDepo
extern double Order_Lots = 0.1; // Ôèêñèðîâàííûé ðàçìåð ëîòà
extern int LotsPercent = 3; // Ïðîöåíò îò äåïîçèòà
extern int LotsDeltaDepo = 500; // Êîýôôèöèåíò ïðèðàùåíèÿ äåïîçèòà
extern int LotsDepoForOne = 500; // Ðàçìåð äåïîçèòà äëÿ îäíîãî ìèíèëîòà
extern int LotsMax = 1000; // Ìàêñèìàëüíîå êîëè÷åñòâî ìèíèëîòîâ
extern double MinLot = 0.1; // Ìèíèìàëüíûé ëîò ðûíî÷íîãî îðäåðà
extern double MaxLot = 5.0; // Ìàêñèìàëüíûé ëîò ðûíî÷íîãî îðäåðà
extern double RiskDepo = 2000.0; // Ðàçìåð Depo â âàëþòå äåïîçèòà, íà êîòîðûé èãðàåì
extern int StopMarginPercent = 50; // Ïðîöåíò ñâîáîäíîé ìàðæè îò Áàëàíñà ïðè êîòîðîì íîâûå îðäåðà íå âûñòàâëÿþòñÿ
extern int RiskDepoPercent = 30; // Ïðè êàêîì ëîññå îò Depo (â ïðîöåíòàõ) çàêðûâàþòñÿ âñå îðäåðà
extern bool FULL_Control_ON = False; // Ïðè ïîëíîì óäàëåíèè óäàëÿòü ÂÑÅ îðäåðà íà ñ÷åòó (èëè òîëüêî ïî MAGIC)
extern string Setup_Tester = "=================== Tester ====================";
extern int Period_CreatHLine = 240; // Ñâå÷ó êàêîãî ïåðèîäà áåð¸ì çà "òî÷êó îòñ÷¸òà" (> Period())
extern bool CreatHLINE_ON = FALSE; // Âêëþ÷åíèå îòêðûòèÿ îðäåðîâ ïî HLine íà ãðàôèêå
//IIIIIIIIIIIIIIIIIII======Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà======IIIIIIIIIIIIIIIIIIIIII+
double gda_Price[2], gd_Point, gd_area, gda_SendLevel[4], gd_Value_draw, gda_TimeOfLine[2];
int gi_Digits, gi_Decimal = 1, gi_MyOrders, cur_Line, pre_Type, ind_Draw,
gia_Line[] = {0,1};
string gs_Symbol, gs_pre_Name, gs_NameGV, gs_Info, gsa_Name_Line[2], gsa_Comment[5],
gsa_Name_ORD[] = {"BUY","SELL"};
datetime NewBar;
bool gb_NewLine = true, gb_Virtual_Trade, gb_InfoPrint = false, RealTrade = True,
gb_Pause = false, gb_Control = FALSE;
color gca_color[] = {Blue,Red,Blue,Red,DeepSkyBlue,Magenta}, gc_color;
//IIIIIIIIIIIIIIIIIII==========Ïîäêëþ÷åííûå áèáëèîòåêè==========IIIIIIIIIIIIIIIIIIIIII+
double bda_cur_Order[5]; // ìàññèâ èíôîðìàöèè î áëèæàéøåì ê öåíå îòëîæåííîì îðäåðå
// bda_cur_Order[0] - Ticket
// bda_cur_Order[1] - OpenPrice
// bda_cur_Order[2] - Type
// bda_cur_Order[3] - Expiration
// bda_cur_Order[4] - òèï îòêðûâàåìîãî îðäåðà (OP_BUY èëè OP_SELL)
extern string Setup_Integration = "================ Integration ==================";
extern bool Integration_ON = FALSE; // Âêëþ÷åíèå ñîâìåñòíîé ðàáîòû VirtualTrader ñ ÷óæèìè îòëîæåííûìè îðäåðàìè
extern int MG_Check = 880; // Ìàãèê: -1 - ëþáîé, >= 0 - îòêðûòûé ñîâåòíèêîì èëè âðó÷íóþ
extern int Expiration = 240; // Âðåìÿ æèçíè ëèíèè (ìèí.) (OrderExpiration - åñëè åñòü ïðèîðèòåòíî), (0 - áåññðî÷íî)
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Custom expert initialization function |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int init()
{
int lia_Periods[] = {1,5,15,30,60,240,1440,10080,43200},
//---- ïîãðåøíîñòü ðèñîâàíèÿ îáúåêòîâ íà ãðàôèêå ñ ðàçíûìè TF
lia_Value_draw[] = {8,12,16,20,26,50,80,100,140};
string ls_addConditions, ls_Trail, ls_DelLine, ls_MM, ls_Integration;
//----
gs_Symbol = Symbol();
gd_Point = MarketInfo (gs_Symbol, MODE_POINT);
gi_Digits = MarketInfo (gs_Symbol, MODE_DIGITS);
//---- Ó÷èòûâàåì ðàáîòó 5-òè çíàêà
if (gi_Digits == 3 || gi_Digits == 5)
{gi_Decimal = 10;}
gd_area = NDP (Reliable_Area * gi_Decimal);
Order_SL *= gi_Decimal;
Order_TP *= gi_Decimal;
//---- Çàïîëíÿåì ìàññèâ èì¸í ëèíèé
gsa_Name_Line[0] = Name_BUY_Line;
gsa_Name_Line[1] = Name_SELL_Line;
ArrayInitialize (gda_SendLevel, -1.0);
gs_NameGV = "e-PSI@VirtualTrader";
ind_Draw = fGetNumPeriods (lia_Periods, Period());
gd_Value_draw = NDP (lia_Value_draw[ind_Draw] * gi_Decimal);
gb_Virtual_Trade = VirtualOrders_ON;
ls_Trail = IIFs (TrailPrice_ON, "TrailPrice", "");
ls_DelLine = IIFs (DeleteInActiveLine, "DelLine", "");
ls_MM = IIFs (UseMM, StringConcatenate ("MM (", DSDig (GetSizeLot (Order_Lots)), ")"), "");
ls_Integration = IIFs (Integration_ON, "Integration", "");
ls_addConditions = StringConcatenate (IIFs ((StringLen (ls_Trail) > 0), ls_Trail, ""),
IIFs ((StringLen (ls_DelLine) > 0), " - ", ""),
IIFs ((StringLen (ls_DelLine) > 0), ls_DelLine, ""),
IIFs ((StringLen (ls_MM) > 0), " - ", ""),
IIFs ((StringLen (ls_MM) > 0), ls_MM, ""),
IIFs ((StringLen (ls_Integration) > 0), " - ", ""),
IIFs ((StringLen (ls_Integration) > 0), ls_Integration, ""));
//---- Óáèðàåì " - " èç íà÷àëà ñòðîêè (åñëè åñòü)
ls_addConditions = IIFs ((StringFind (ls_addConditions, " - ") == 0), StringSubstr (ls_addConditions, 3), ls_addConditions);
gs_Info = StringConcatenate (gs_NameGV, ": Area = ", Reliable_Area * gi_Decimal, "; ", IIFs ((Variant_Line == 0), "HLINE", "TREND"), "; Send = ", Variant_Send,
"; STOPS (", Order_SL, "/", Order_TP, ")\n",
IIFs ((StringLen (ls_addConditions) > 0), StringConcatenate (ls_addConditions, "\n"), ""),
IIFs (WhileTrade_ON, "C: ", "N: "), IIFs ((NewBarInPeriod < 0), "Ðàáîòàåì íà êàæäîì òèêå", "ÏÀÓÇÀ äî: "));
//---- Èäåíòèôèöèðóåì ñòàòóñ ðàáîòû ñîâåòíèêà
if (IsTesting() || IsOptimization())
{RealTrade = False;}
//---- Îðãàíèçóåì ïîäãîòîâêó êîììåíòàðèåâ
if (PrintCom || ShowCommentInChart)
{gb_InfoPrint = true;}
InitializeArray_STR (gsa_Comment);
//---- ÏÐÅÄÓÏÐÅÆÄÅÍÈÅ
if (Variant_Line == 1 && Integration_ON)
{Alert ("Äëÿ ïðàâèëüíîé ðàáîòû ñîâåòíèêà óñòàíîâèòå ïàðàìåòð Variant_Line = 0 !!!");}
//----
return (0);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Custor expert deinitialization function |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int deinit()
{
//----
//----
return (0);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Custom expert iteration function |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int start()
{
int err = GetLastError();
//----
if (WhileTrade_ON)
{
//---- Çàïóñêàåì â öèêëå ðàáîòó ñîâåòíèêà
while (IsExpertEnabled()) //---- Ïàóçà äëÿ èçìåíåíèÿ ïàðàìåòðîâ ñîâåòíèêà
{
if (fMain() == 2)
{return (0);}
Sleep (500);
}
}
else
{fMain();}
//---- Êîíòðîëèðóåì âîçìîæíûå îøèáêè
fGetLastError (gsa_Comment, "start():", 3);
//----
return (0);
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Îñíîâíîé êîä ñîâåòíèêà |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fMain()
{
int err = GetLastError();
string ls_txt = "";
//----
//---- Ïîëó÷àåì â ìàññèâ àêòóàëüíûå öåíû ïî èíñòðóìåíòó
gda_Price[0] = MarketInfo (gs_Symbol, MODE_BID);
gda_Price[1] = MarketInfo (gs_Symbol, MODE_ASK);
gi_MyOrders = MyPositions();
//---- Äëÿ ãðàôè÷åñêîãî óïðàâëåíèÿ ñîâåòíèêîì ðèñóåì îáúåêòû
if (!FindObject ("lable-BUY"))
{SetLabel ("lable-BUY", "BUY", 45, 55, 18, "Calibri", 2, 0, Blue);}
else {ObjectSet ("lable-BUY", OBJPROP_COLOR, IIFc (gb_Virtual_Trade, Blue, Gray));}
if (!FindObject ("lable-SELL"))
{SetLabel ("lable-SELL", "SELL", 45, 15, 18, "Calibri", 2, 0, Red);}
else {ObjectSet ("lable-SELL", OBJPROP_COLOR, IIFc (gb_Virtual_Trade, Red, Gray));}
if (!FindObject ("lable-TRADE"))
{SetLabel ("lable-TRADE", IIFs (gb_Virtual_Trade, "TRADE", "PAUSE"), 35, 15, 18, "Calibri", 2, 90, Gold);}
//---- Îñóùåñòâëÿåì ãðàôè÷åñêîå óïðàâëåíèå îáúåêòàìè
fOBJ_Check (gsa_Name_Line);
//---- Íåïîñðåäñòâåííî ñàì Virtual Trading
if (gb_Virtual_Trade)
{
//---- Â òåñòîâîì ðåæèìå ðèñóåì ëèíèè
if (IsTesting() && CreatHLINE_ON)
{
if (fCreatHLine (Period_CreatHLine))
{return (0);}
}
//---- Ïðè íåäîñòàòêå ñâîáîäíîé ìàðæè - áîëüøå îðäåðîâ íå âûñòàâëÿåì !!!
gb_Pause = fCheckMargin (ls_txt, AccountBalance(), StopMarginPercent, RiskDepoPercent);
fPrintAndShowComment (ls_txt, ShowCommentInChart, PrintCom && fCCV_I (gb_Pause, 2), gsa_Comment, 2);
//---- Êîíòðîëèðóåì êîëè÷åñòâî îòêðûòûõ íà ïàðå îðäåðîâ
if (gi_MyOrders < MAX_OredersInSymbol && !gb_Pause)
{fSendOrdersFromLine (gs_Symbol, gda_SendLevel, gda_Price);}
}
else
{gsa_Comment[0] = "Âèðòóàëüíûé òðåéäèíã ïðèîñòàíîâëåí !!!";}
//---- Âûâîäèì èíôîðìàöèþ íà ãðàôèê
if (ShowCommentInChart)
{fCommentInChart();}
//---- Åñëè ëîññ ïðåâûñèë äîïóñòèìîå çíà÷åíèå îò áàëàíñà, çàêðûâàåì âñå îðäåðà
if (fRiskPercentControl (ls_txt, AccountBalance(), AccountProfit()))
{
fPrintAndShowComment (ls_txt, ShowCommentInChart, PrintCom, gsa_Comment, 2);
CloseOrderAll (IIFi (FULL_Control_ON, -1, MG));
}
//---- Âìåñòî îòëîæåííîãî îðäåðà ðèñóåì ñîîòâåòñòâóþùóþ ëèíèþ (åñëè çàäàíî)
fCreatIntegratedHLine (bda_cur_Order, gsa_Name_Line, Expiration, gs_Symbol, MG_Check);
//---- Êîíòðîëèðóåì âîçìîæíûå îøèáêè
fGetLastError (gsa_Comment, "fMain():", 3);
return (0);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ñîáèðàåì ñòàòèñòèêó ïî ïàðå (Sym) íà Magic (iMG) |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int MyPositions (string Sym = "", int iMG = -1)
{
int li_int, li_order, err = GetLastError(), li_total = OrdersTotal();
//----
if (li_total == 0)
{return (0);}
li_order = 0;
Sym = IIFs ((Sym == ""), Symbol(), Sym);
for (li_int = li_total - 1; li_int >= 0; li_int--)
{
if (!OrderSelect (li_int, SELECT_BY_POS, MODE_TRADES))
{
if (PrintCom) {Print ("Îøèáêà ïîëó÷åíèÿ òåêóùåãî îðäåðà OrderSelect() â ôóíêöèè MyPositions(): ", GetLastError(), " (", OrderTicket(), ").");}
return (0);
}
if (OrderSymbol() == Sym && (OrderMagicNumber() == iMG || iMG < 0))
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{li_order++;}
}
}
fGetLastError (gsa_Comment, "MyPositions():", 3);
//----
return (li_order);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Îòêðûâàåì îðäåðà ïî Line íà ãðàôèêàõ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fSendOrdersFromLine (string fs_Symbol, // ðàáî÷èé ñèìâîë
double& ar_curLevel[], // ìàññèâ ïàðàìåòðîâ óïðàâëÿþùåãî óðîâíÿ
double ar_Price[2]) // ìàññèâ öåí ïî ðàáî÷åìó èíñòðóìåíòó
{
int cmd, li_Ticket, cur_Type, err = GetLastError();
double ld_PriceOpen, ld_Price, ld_SL, ld_TP, ld_deltaPrice;
bool lb_Send;
static int cnt;
string ls_txt, ls_txt1 = "", ls_Name, ls_fName = "fSendOrdersFromLine()";
//----
//---- Ñ÷èòûâàåì óðîâåíü îòêðûòèÿ îðäåðà
fGetLevelFromLine (ar_curLevel, ar_Price);
//---- Âõîäèì â íà÷àëå óêàçàííîãî áàðà (åñëè NewBarInPeriod >= 0)
if (NewBarInPeriod >= 0)
{
if (NewBar == iTime (gs_Symbol, NewBarInPeriod, 0))
{return (0);}
NewBar = iTime (gs_Symbol, NewBarInPeriod, 0);
}
cur_Type = -1;
lb_Send = false;
//---- Ïðîâåðÿåì óñëîâèÿ íà îòêðûòèå îðäåðà
if (ar_curLevel[0] > 0)
{
ld_PriceOpen = ar_curLevel[0];
cur_Type = ar_curLevel[1];
cmd = IIFi ((cur_Line == Line_BUY), 1, 0);
ld_Price = ar_Price[cmd];
gc_color = gca_color[cur_Type];
switch (Variant_Send)
{
case 0:
switch (cur_Type)
{
case OP_BUYSTOP:
case OP_SELLLIMIT:
if (ld_Price > ld_PriceOpen)
{lb_Send = true;}
break;
case OP_BUYLIMIT:
case OP_SELLSTOP:
if (ld_Price < ld_PriceOpen)
{lb_Send = true;}
break;
}
break;
case 1:
switch (cur_Type)
{
case OP_BUYSTOP:
if (ld_Price > ld_PriceOpen)
{
if (ld_Price <= ld_PriceOpen + gd_area)
{lb_Send = true;}
else
{ar_curLevel[2] = cur_Type;}
}
break;
case OP_BUYLIMIT:
if (ld_Price < ld_PriceOpen)
{
if (fCCV_I (cur_Type, 0))
{
ar_curLevel[2] = cur_Type;
ls_txt1 = fPrepareComment (StringConcatenate (ls_fName, ": Åñòü óñëîâèÿ äëÿ îòêðûòèÿ ", GetNameOP (cur_Type), " îðäåðà. Æä¸ì ðàçâîðîòà ðûíêà. PriceOpen = ", DSD (ld_PriceOpen)), gb_InfoPrint);
//---- Ðèñóåì íà ÷àðòå ñòðåëî÷êó
ls_Name = "ar" + cnt;
fCreat_OBJ (ls_Name, OBJ_ARROW, 233, (GetNameOP (cur_Type) + "/" + cur_Line), 0, Time[0], ld_Price, false, gc_color);
cnt++;
}
//---- Äâèãàåì ëèíèþ çà öåíîé (åñëè çàäàíî)
if (TrailPrice_ON && ld_Price < ld_PriceOpen - gd_area)
{
ld_deltaPrice = NDD (ld_PriceOpen - gd_area - ld_Price);
fMooveLineByPrice (gsa_Name_Line[cur_Line], ld_deltaPrice, ar_curLevel, ld_PriceOpen, ld_Price); // öåíà
ls_txt1 = fPrepareComment (StringConcatenate (ls_fName, ": Òðàëèì óðîâåíü ", GetNameOP (cur_Type), " îðäåðà çà öåíîé. Æä¸ì ðàçâîðîòà ðûíêà. PriceOpen = ", DSD (ld_PriceOpen), "; Price = ", DSD (ld_Price)), gb_InfoPrint);
}
}
if (ar_curLevel[2] == cur_Type && ld_Price > ld_PriceOpen + gd_area)
{lb_Send = true;}
break;
case OP_SELLSTOP:
if (ld_Price < ld_PriceOpen)
{
if (ld_Price >= ld_PriceOpen - gd_area)
{lb_Send = true;}
else
{ar_curLevel[2] = cur_Type;}
}
break;
case OP_SELLLIMIT:
if (ld_Price > ld_PriceOpen)
{
if (fCCV_I (cur_Type, 0))
{
ar_curLevel[2] = cur_Type;
ls_txt1 = fPrepareComment (StringConcatenate (ls_fName, ": Åñòü óñëîâèÿ äëÿ îòêðûòèÿ ", GetNameOP (cur_Type), " îðäåðà. Æä¸ì ðàçâîðîòà ðûíêà. PriceOpen = ", DSD (ld_PriceOpen)), gb_InfoPrint);
//---- Ðèñóåì íà ÷àðòå ñòðåëî÷êó
ls_Name = "ar" + cnt;
fCreat_OBJ (ls_Name, OBJ_ARROW, 234, (GetNameOP (cur_Type) + "/" + cur_Line), 0, Time[0], ld_Price, false, gc_color);
cnt++;
}
//---- Äâèãàåì ëèíèþ çà öåíîé (åñëè çàäàíî)
if (TrailPrice_ON && ld_Price > ld_PriceOpen + gd_area)
{
ld_deltaPrice = NDD (ld_Price - ld_PriceOpen - gd_area);
fMooveLineByPrice (gsa_Name_Line[cur_Line], ld_deltaPrice, ar_curLevel, ld_PriceOpen, ld_Price); // öåíà
ls_txt1 = fPrepareComment (StringConcatenate (ls_fName, ": Òðàëèì óðîâåíü ", GetNameOP (cur_Type), " îðäåðà çà öåíîé. Æä¸ì ðàçâîðîòà ðûíêà. PriceOpen = ", DSD (ld_PriceOpen), "; Price = ", DSD (ld_Price)), gb_InfoPrint);
}
}
if (ar_curLevel[2] == cur_Type && ld_Price < ld_PriceOpen - gd_area)
{lb_Send = true;}
break;
}
break;
}
}
//---- Âûâîäèì êðììåíòàðèè
fPrintAndShowComment (ls_txt1, ShowCommentInChart, PrintCom, gsa_Comment, 1);
//---- Âûâîäèì îòëàäî÷íóþ èíôîðìàöèþ
gsa_Comment[4] = fPrepareComment (StringConcatenate ("PriceOpen = ", DSD (ld_PriceOpen), "; Type = ", GetNameOP (ar_curLevel[1]), "; flag = ", IIFs ((ar_curLevel[2] == 0), "NO", GetNameOP (ar_curLevel[2]))), gb_Control);
if (lb_Send)
{
if (cur_Type > 0)
{cur_Type = IIFi ((cur_Type == OP_BUYSTOP || cur_Type == OP_BUYLIMIT), OP_BUY, OP_SELL);}
//---- Ôîðìèðóåì ÑÒÎÏÛ
cmd = IIFi ((cur_Type == 0), 1, -1);
ld_SL = IIFd ((Order_SL == 0), 0, ld_Price - cmd * NDP (Order_SL));
ld_TP = IIFd ((Order_TP == 0), 0, ld_Price + cmd * NDP (Order_TP));
li_Ticket = OrderSend (fs_Symbol, cur_Type, NDDig (GetSizeLot (Order_Lots)), ld_Price, Slippage, NDD (ld_SL), NDD (ld_TP), Order_Comment, MG, 0, gc_color);
if (li_Ticket > 0)
{
ls_txt = StringConcatenate (ls_fName, ": Îòêðûëè ", GetNameOP (cur_Type), "-îðäåð[", li_Ticket, "] ïî ", IIFs ((Variant_Line == 0), "HLine", "TRENDLine"), ". LevelPrice = ", DSD (ld_PriceOpen), "; Price = ", DSD (ld_Price));
if (PrintCom) {Print (ls_txt);}
pre_Type = ar_curLevel[1];
//---- Àííóëèðóåì îòðàáîòàííóþ ëèíèþ
ls_Name = gsa_Name_Line[cur_Line];
//---- Óäàëÿåì "îòðàáîòàííóþ" ëèíèþ (åñëè çàäàíî)
if (DeleteInActiveLine)
{
if (ObjectFind (ls_Name) == 0)
{
ObjectDelete (ls_Name);
ls_txt1 = "Óäàëèëè îòðàáîòàííóþ ëèíèþ !!!";
}
}
else
{
ObjectSet (ls_Name, OBJPROP_COLOR, White);
gda_TimeOfLine[0] = ObjectGet (ls_Name, IIFd ((Variant_Line == 0), OBJPROP_PRICE1, OBJPROP_TIME1));
gda_TimeOfLine[1] = ObjectGet (ls_Name, IIFd ((Variant_Line == 0), OBJPROP_PRICE1, OBJPROP_TIME2));
}
cur_Line = -1;
ls_Name = "RAY_Price";
if (ObjectFind (ls_Name) == 0)
{ObjectDelete (ls_Name);}
gb_NewLine = false;
ls_txt1 = StringConcatenate (ls_fName, ": ", ls_txt1, " Óäàëèëè ëèíèþ ", ls_Name, ".");
if (PrintCom) {Print (ls_txt1);}
if (ShowCommentInChart)
{
gsa_Comment[1] = ls_txt1;
gsa_Comment[2] = ls_txt;
}
ArrayInitialize (ar_curLevel, -1.0);
fCCV_I (cur_Type, 0);
if (OrderSelect (li_Ticket, SELECT_BY_TICKET))
{OrderPrint();}
}
}
fGetLastError (gsa_Comment, "fSendOrdersFromLine():", 3);
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Äâèãàåì ëèíèþ çà öåíîé |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fMooveLineByPrice (string fs_Name, // èìÿ ïåðåäâèãàåìîé ëèíèè
double fd_Distance, // ðàññòîÿíèå ïåðåäâèæåíèÿ
double& ar_cur_Level[], // ìàññèâ çíà÷åíèé ïåðåäâèãàåìîãî óðîâíÿ
double& fd_OpenPrice, // OpenPrice
double fd_Price) // öåíà
{
double lda_Price[2];
string ls_fName = "fMooveLineByPrice()";
int li_cmd, err = GetLastError();
//----
li_cmd = IIFi ((fd_Price < fd_OpenPrice), 1, -1);
switch (Variant_Line)
{
case 0: ObjectSet (fs_Name, OBJPROP_PRICE1, fd_Price + gd_area * li_cmd); break;
case 1:
lda_Price[0] = ObjectGet (fs_Name, OBJPROP_PRICE1);
lda_Price[1] = ObjectGet (fs_Name, OBJPROP_PRICE2);
ObjectSet (fs_Name, OBJPROP_PRICE1, lda_Price[0] - fd_Distance * li_cmd);
ObjectSet (fs_Name, OBJPROP_PRICE2, lda_Price[1] - fd_Distance * li_cmd);
break;
}
fd_OpenPrice = IIFd ((Variant_Line == 0), ObjectGet (fs_Name, OBJPROP_PRICE1), fObjectGetValue_ByCurrent (fs_Name));
ar_cur_Level[0] = fd_OpenPrice;
fGetLastError (gsa_Comment, "fMooveLineByPrice():", 3);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ïðîâåðÿåì íàëè÷èå óïðàâëÿþùåé ëèíèè è ôèêñèðóåì çàäàííûé óðîâåíü |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fGetLevelFromLine (double& ar_Level[], // âîçâðàùàåìûé ìàññèâ ïàðàìåòðîâ óïðàâëÿþùåãî óðîâíÿ
double ar_Price[]) // àêòóàëüíûé ìàññèâ öåí ïî èíñòðóìåíòó
{
int cmd, li_cmd, li_Type = -1, li_Total = ObjectsTotal(), err = GetLastError();
double ld_PriceOpen, ld_PriceOP_area;
string ls_Name, ls_Type, ls_delta_Price, ls_txt = "", ls_txt1, ls_fName;
color lca_color[] = {Blue,Red}, lc_color;
bool lb_break = false;
datetime ldt_curTime;
ls_fName = "fGetLevelFromLine()";
//----
if (cur_Line < 0)
{ls_txt = "Íåò àêòèâíîé ëèíèè !!!";}
ls_txt1 = ls_fName + ": Íàøëè óðîâåíü äëÿ îòêðûòèÿ îðäåðà-";
for (int li_OBJ = li_Total - 1; li_OBJ >= 0; li_OBJ--)
{
ls_Name = ObjectName (li_OBJ);
for (int li_LN = 0; li_LN < 2; li_LN++)
{
cmd = IIFi ((li_LN == 0), 1, 0);
//---- Èùåì íóæíóþ ëèíèþ
if (ls_Name == gsa_Name_Line[li_LN])
{
//---- Èñêëþ÷àåì ïîâòîðíîå ñðàáàòûâàíèå ëèíèè
if (!gb_NewLine && !DeleteInActiveLine)
{
if (fCheckChangeLine (ls_Name, Variant_Line, gda_TimeOfLine))
{gb_NewLine = true;}
}
if (!gb_NewLine)
{continue;}
ld_PriceOpen = IIFd ((Variant_Line == 0), ObjectGet (ls_Name, OBJPROP_PRICE1), fObjectGetValue_ByCurrent (ls_Name));
cur_Line = gia_Line[li_LN];
ar_Level[0] = ld_PriceOpen;
//---- Ðèñóåì ëó÷ äëÿ îòîáðàæåíèÿ óðîâíÿ OpenPrice
fCreat_OBJ ("RAY_Price", OBJ_TREND, 0, "", 0, Time[0], ld_PriceOpen, true, Yellow, Time[0] + Period() * 60, ld_PriceOpen);
//---- Ðèñóåì íàçâàíèå îòêðûâàåìîãî îðäåðà
ls_txt = gsa_Name_ORD[cur_Line];
fCreat_OBJ ("Name_ORD", OBJ_TEXT, 0, ls_txt, 10, Time[0] + Period() * 300, ld_PriceOpen + gd_Value_draw, false, gca_color[cur_Line]);
//---- Ðèñóåì òåêóùóþ öåíó îòêðûòèÿ îðäåðà
li_cmd = IIFi ((ar_Level[1] >= 0), IIFi ((ar_Level[1] == OP_BUYLIMIT || ar_Level[1] == OP_SELLSTOP), 1, -1), 0);
ls_delta_Price = DS0 ((ar_Price[cmd] - ld_PriceOpen) / gd_Point * li_cmd);
ls_txt = StringConcatenate (DSD (ld_PriceOpen), " (", ls_delta_Price, ")");
//---- Îðãàíèçóåì ìèãàíèå öâåòà ïðè íàõîæäåíèè öåíû â "çîíå âèäèìîñòè" óðîâíÿ
lc_color = IIFc ((ar_Price[cmd] > ld_PriceOpen + gd_area || ar_Price[cmd] < ld_PriceOpen - gd_area), Gold, IIFc (fMigalka(), Gold, Gray));
fCreat_OBJ ("Value_Price", OBJ_TEXT, 0, ls_txt, 12, Time[0] + Period() * 900, ld_PriceOpen - gd_Value_draw, false, lc_color);
//---- Ðèñóåì ãðàíèöû "âèäèìîñòè" óðîâíÿ
for (int li_int = 0; li_int < 2; li_int++)
{
li_cmd = IIFi ((li_int == 1), 1, -1);
ld_PriceOP_area = ld_PriceOpen + gd_area * li_cmd;
fCreat_OBJ ("RAY_Price_area_" + li_int, OBJ_TREND, 0, "", 0, Time[0], ld_PriceOP_area, false, lc_color, Time[4], ld_PriceOP_area);
}
ls_txt = StringConcatenate (GetNameOP (ar_Level[1]), " ", IIFs ((ar_Price[cmd] <= ld_PriceOpen), "UP", "DW"), "#", DSD (ld_PriceOpen), " !!! ");
fPrintAndShowComment (StringConcatenate ("Æä¸ì îòêðûòü: îðäåð-", ls_txt), ShowCommentInChart, False, gsa_Comment, 0);
//---- Ïîäêðàøèâàåì ëèíèþ â íóæíûé öâåò
ObjectSet (ls_Name, OBJPROP_COLOR, lca_color[li_LN]);
//---- Ôèêñèðóåì âðåìÿ æèçíè ëèíèè (åñëè çàäàíî)
ls_txt = ObjectDescription (ls_Name);
if (StringLen (ls_txt) > 0)
{
ar_Level[3] = StrToTime (ls_txt);
//---- Ïðîâåðÿåì ëèíèþ íà "ïðàâî æèçíè"
if (ar_Level[3] > 0)
{
ldt_curTime = IIFi (RealTrade, TimeCurrent(), iTime (gs_Symbol, 1, 0));
if (ldt_curTime > ar_Level[3])
{
//---- Óäàëÿåì ëèíèþ ïî èñòå÷åíèþ "âðåìåíè æèçíè"
if (ObjectDelete (ls_Name))
{
ls_txt = fPrepareComment (StringConcatenate (ls_fName, ": Óäàëèëè ëèíèþ ", ls_Name, " ïî èñòå÷åíèþ ñðîêà æèçíè !!! Expiration = ", TS_DM (ar_Level[3]), "; Time = ", TS_DM (ldt_curTime), "."), gb_InfoPrint);
fPrintAndShowComment (ls_txt, ShowCommentInChart, PrintCom, gsa_Comment, 1);
return (false);
}
}
}
}
if (gs_pre_Name != ls_Name || ar_Level[1] <= 0)
{
if (ar_Price[cmd] > ld_PriceOpen)
{ar_Level[1] = IIFi ((li_LN == 0), OP_BUYLIMIT, OP_SELLSTOP);}
if (ar_Price[cmd] < ld_PriceOpen)
{ar_Level[1] = IIFi ((li_LN == 0), OP_BUYSTOP, OP_SELLLIMIT);}
ls_txt = StringConcatenate (GetNameOP (ar_Level[1]), " ", IIFs ((ar_Price[cmd] <= ld_PriceOpen), "UP", "DW"), "#", DSD (ld_PriceOpen), " !!! ");
fPrintAndShowComment (StringConcatenate ("Æä¸ì îòêðûòü: îðäåð-", ls_txt), ShowCommentInChart, False, gsa_Comment, 0);
gs_pre_Name = ls_Name;
}
lb_break = true;
break;
}
}
if (lb_break)
{break;}
}
if (ls_txt != "" && PrintCom)
{
ls_txt1 = StringConcatenate (ls_txt1, ls_txt);
if (fCCV_I (ar_Level[1], 1))
{Print (IIFs ((cur_Line < 0), ls_txt, ls_txt1));}
}
if (ShowCommentInChart && !lb_break)
{gsa_Comment[0] = ls_txt;}
fGetLastError (gsa_Comment, "fGetLevelFromLine():", 3);
return (lb_break);
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ïðîâåðÿåì ïîëîæåíèå îáúåêòîâ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fOBJ_Check (string fsa_Name_Line[])
{
int li_int, cmd, li_OBJ = 0, li_curOBJ = 0,
lia_Property[] = {OBJPROP_TIME1,OBJPROP_PRICE1,OBJPROP_TIME2,OBJPROP_PRICE2,OBJPROP_RAY};
string ls_txt, ls_Name, tmp_Name, lsa_Name[] = {"lable-BUY","lable-SELL"},
ls_fName = "fOBJ_Check()";
double lda_InfoLine[6];
color lc_color;
//----
ArrayInitialize (lda_InfoLine, 0.0);
//---- Ïðîâåðÿåì íà åäèíè÷íîñòü (â îäíîì ýêçåìïëÿðå) óïðàâëÿåìîé ëèíèè
for (li_int = ObjectsTotal() - 1; li_int >= 0; li_int--)
{
ls_Name = ObjectName (li_int);
if ((ObjectType (ls_Name) == OBJ_HLINE && Variant_Line == 0) || (ObjectType (ls_Name) == OBJ_TREND && Variant_Line == 1))
{
if (StringFind (ls_Name, "Horizontal Line ") == 0 || StringFind (ls_Name, "Trendline ") == 0)
{
tmp_Name = ls_Name;
li_OBJ++;
}
li_curOBJ++;
}
}
//---- Åñëè èñêîìûõ îáúåêòîâ íåò - âûõîäèì
if (li_curOBJ == 0)
{return (0);}
//---- Êîíòðîëèðóåì èçìåíåíèå íàçâàíèé óïðàâëÿåìîé ëèíèè
for (li_int = 0; li_int < 2; li_int++)
{
//---- Ïðåäóñìàòðèâàåì ÷òîáû ñäâèíóòûé Lable è òèï (íàçâàíèå) ëèíèè íå ñîâïàäàëè
cmd = IIFi ((li_int == 0), 1, 0);
if (!SearchObject (lsa_Name[cmd], OBJPROP_XDISTANCE, 45))
{
if (PrintCom) {Print (ls_fName, ": FindObject[", lsa_Name[cmd], "] = ", CheckBOOL (FindObject (lsa_Name[cmd])), "; Êîîðäèíàòà X = ", ObjectGet (lsa_Name[cmd], OBJPROP_XDISTANCE), "; ÊÎÎÐÄÈÍÀÒÀ Y = ", ObjectGet (lsa_Name[cmd], OBJPROP_YDISTANCE));}
Sleep (2000);
DelObject (lsa_Name[cmd]);
WindowRedraw();
Sleep (1000);
//---- Ïðîâåðÿåì íàëè÷èå óïðàâëÿåìîé ëèíèè äëÿ å¸ ïåðåèìåíîâàíèÿ
if (li_OBJ == 1 || FindObject (gsa_Name_Line[li_int]))
{
ls_Name = IIFs ((li_OBJ == 1), tmp_Name, gsa_Name_Line[li_int]);
//---- Ñîõðàíÿåì ðîäèòåëüñêèå äàííûå î ëèíèè
lda_InfoLine[0] = ObjectType (ls_Name);
for (int li_PRT = 0; li_PRT < 5; li_PRT++)
{lda_InfoLine[li_PRT+1] = ObjectGet (ls_Name, lia_Property[li_PRT]);}
//---- Óäàëÿåì ñòàðóþ ëèíèþ è ðèñóåì äóáëèêàò ñ íîâûì èìåíåì
if (ObjectDelete (ls_Name))
{
ls_Name = gsa_Name_Line[cmd];
ls_txt = fPrepareComment (StringConcatenate (ls_fName, ": ", IIFs ((li_OBJ == 1), StringConcatenate ("Íàèìåíîâàëè ëèíèþ ", ls_Name), StringConcatenate ("Ïðîèçâåëè ïåðåèìåíîâàíèå óïðàâëÿåìîé ëèíèè ñ ", gsa_Name_Line[li_int], " íà ", gsa_Name_Line[cmd]))), gb_InfoPrint);
fPrintAndShowComment (ls_txt, ShowCommentInChart, PrintCom, gsa_Comment, 1);
fCreat_OBJ (ls_Name, lda_InfoLine[0], 0, "", 0, lda_InfoLine[1], lda_InfoLine[2], lda_InfoLine[5], White, lda_InfoLine[3], lda_InfoLine[4]);
gb_NewLine = true;
}
return (1);
}
else
{
if (li_OBJ > 1)
{Alert ("Êîëè÷åñòâî ëèíèé > 1 - óäàëèòå ëèøíèå ëèíèè èëè èìåíóéòå ëèíèþ âðó÷íóþ !!!");}
else
{Alert ("Ìîæíî ïîïûòàòüñÿ ñìåíèòü çíà÷åíèå Variant_Send (íå ñ òåì òèïîì ëèíèè ðàáîòàåì) !!!");}
}
}
}
//---- Êîíòðîëèðóåì âêë.\âûêë. ïàóçû
ls_Name = "lable-TRADE";
if (!SearchObject (ls_Name, OBJPROP_XDISTANCE, 35))
{
if (PrintCom) {Print (ls_fName, ": FindObject[", ls_Name, "] = ", CheckBOOL (FindObject (ls_Name)), "; Êîîðäèíàòà X = ", ObjectGet (ls_Name, OBJPROP_XDISTANCE), "; ÊÎÎÐÄÈÍÀÒÀ Y = ", ObjectGet (ls_Name, OBJPROP_YDISTANCE));}
Sleep (2000);
DelObject (ls_Name);
WindowRedraw();
Sleep (1000);
gb_Virtual_Trade = IIFb (gb_Virtual_Trade == true, false, true);
ls_txt = StringConcatenate (ls_fName, ": ", IIFs (!gb_Virtual_Trade, "Ïðèîñòàíàâëèâàåì òîðãîâëþ !!!", "ÐÀÁÎÒÀÅÌ !!!"));
fPrintAndShowComment (ls_txt, ShowCommentInChart, PrintCom, gsa_Comment, 1);
//---- Îáåñöâå÷èâàåì óïðàâëÿåìóþ ëèíèþ
ls_Name = gsa_Name_Line[cur_Line];
if (FindObject (ls_Name))
{
lc_color = IIFc (gb_Virtual_Trade, gca_color[cur_Line], White);
ObjectSet (ls_Name, OBJPROP_COLOR, lc_color);
}
return (1);
}
return (0);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Â òåñòîâîì ðåæèìå âûñòàâëÿåì ëèíèè (OBJ_HLINE) |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fCreatHLine (int fi_Period)
{
static datetime li_NewDay;
if (li_NewDay == iTime (gs_Symbol, fi_Period, 0))
{return (false);}
li_NewDay = iTime (gs_Symbol, fi_Period, 0);
int li_Type = -1;
string ls_line, ls_Name, ls_fName = "fCreatHLine()";
double ld_middle, ld_candle, ld_Price,
ld_MAX = iHigh (gs_Symbol, fi_Period, 1),
ld_MIN = iLow (gs_Symbol, fi_Period, 1);
static int cnt;
static double pre_Price;
//----
ld_candle = (ld_MAX - ld_MIN);
ld_middle = ld_MIN + ld_candle / 2;
if (fi_Period > Period())
{
if (pre_Price > 0)
{
pre_Type = IIFi ((pre_Type < 0), gda_SendLevel[1], pre_Type);
ls_Name = "ray" + cnt;
fCreat_OBJ (ls_Name, OBJ_TREND, 0, (GetNameOP (pre_Type) + "/" + NameDayOfWeek (DayOfWeek())), 0, iTime (gs_Symbol, fi_Period, 1), pre_Price, li_NewDay, pre_Price, false, gc_color);
}
//---- Ðèñóåì âåðòèêàëüíóþ ëèíèþ, ÷òîáû ñèãìåíòèðîâàòü âðåìåííóþ ëèíèþ ïî äëèòåëüíîñòè äåéñòâèÿ íàðèñîâàííîé ãîðèçîíòàëüíîé ëèíèè
ObjectCreate ("vline" + cnt, OBJ_VLINE, 0, li_NewDay, 0);
}
if (fDeleteHLine())
{
if (PrintCom) {Print (ls_fName, ": Óäàëèëè ëèíèþ.");}
ArrayInitialize (gda_SendLevel, -1.0);
}
cnt++;
if (gda_Price[0] < ld_middle - ld_candle * 0.236)
{
li_Type = IIFi ((DayOfWeek() == 5), 0, 1);
ld_Price = ld_MIN;
}
if (gda_Price[0] > ld_middle + ld_candle * 0.236)
{
li_Type = IIFi ((DayOfWeek() == 5), 1, 0);
ld_Price = ld_MAX;
}
if (li_Type >= 0)
{
ls_line = gsa_Name_Line[li_Type];
pre_Price = ld_Price;
pre_Type = gda_SendLevel[1];
if (ObjectCreate (ls_line, OBJ_HLINE, 0, 0, ld_Price))
{
if (PrintCom) {Print (ls_fName, ": ", TS_DM (li_NewDay), "/", NameDayOfWeek (DayOfWeek()), ": Íàðèñîâàëè ëèíèþ ", ls_line, " íà óðîâíå #", ld_Price, " !!!");}
return (true);
}
}
else
{
if (PrintCom) {Print (ls_fName, ": ", TS_DM (li_NewDay), "/", NameDayOfWeek (DayOfWeek()), ": Ëèíèè íå áóäåò !!!");}
pre_Price = 0.0;
pre_Type = -1;
}
return (false);
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: Ñîâìåñòíàÿ ðàáîòà ñ "÷óæèìè" îðäåðàìè |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Èùåì áëèæàéøèé ê öåíå îòëîæåííûé îðäåð ïî ïàðå (fs_Symbol) íà Magic (iMG) |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fCheckIntegratedPosition (double& ar_Array[], // âîçâðàùàåìûé ìàññèâ c äàííûìè ïî áëèæàéøåìó ê öåíå îðäåðó
string fs_Symbol = "", // ðàáî÷èé ñèìâîë
int iMG = -1) // Magic
{
int li_int, li_Ticket = 0, li_Type, li_cmd = -1, err = GetLastError(), li_total = OrdersTotal();
double ld_OpenPrice, ld_Price, ld_Distance = 100;
//----
if (li_total == 0)
{return (0);}
ArrayInitialize (ar_Array, -1.0);
fs_Symbol = IIFs ((fs_Symbol == ""), Symbol(), fs_Symbol);
for (li_int = li_total - 1; li_int >= 0; li_int--)
{
if (!OrderSelect (li_int, SELECT_BY_POS, MODE_TRADES))
{
if (PrintCom) {Print ("Îøèáêà ïîëó÷åíèÿ òåêóùåãî îðäåðà OrderSelect() â ôóíêöèè fCheckIntegratedPosition(): ", GetLastError(), " (", OrderTicket(), ").");}
return (false);
}
if (OrderSymbol() == fs_Symbol && (OrderMagicNumber() == iMG || iMG < 0))
{
li_Type = OrderType();
if (li_Type > 1)
{
ld_OpenPrice = OrderOpenPrice();
li_cmd = IIFi ((li_Type == OP_BUYLIMIT || li_Type == OP_BUYSTOP), 0, 1);
ld_Price = IIFd ((li_cmd == 0), Ask, Bid);
if (MathAbs (ld_OpenPrice - ld_Price) < ld_Distance)
{
ld_Distance = MathAbs (ld_OpenPrice - ld_Price);
li_Ticket = OrderTicket();
ar_Array[4] = li_cmd;
}
}
}
}
if (li_Ticket > 0)
{
if (OrderSelect (li_Ticket, SELECT_BY_TICKET, MODE_TRADES))
{
ar_Array[0] = li_Ticket;
ar_Array[1] = OrderOpenPrice();
ar_Array[2] = OrderType();
ar_Array[3] = OrderExpiration();
return (true);
}
}
fGetLastError (gsa_Comment, "fCheckIntegratedPosition():", 3);
//----
return (false);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Âìåñòî îòëîæåííîãî îðäåðà ðèñóåì OBJ_HLINE |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fCreatIntegratedHLine (double ar_Array[], // âîçâðàùàåìûé ìàññèâ c äàííûìè ïî áëèæàéøåìó ê öåíå îðäåðó
string ar_NameLines[], // ìàññèâ èì¸í óïðàâëÿþùèõ ëèíèé
int fi_Expiration = 0, // âðåìÿ æèçíè ñîçäàâàåìîé ëèíèè
string fs_Symbol = "", // ðàáî÷èé ñèìâîë
int iMG = -1) // Magic
{
string ls_Name, ls_Expiration, ls_txt;
int li_cmd, li_Expiration, li_Ticket, err = GetLastError();
datetime ldt_curTime;
if (Integration_ON)
{
if (fCheckIntegratedPosition (ar_Array, fs_Symbol, iMG))
{
//---- Ðèñóåì óïðàâëÿþùóþ ëèíèþ
li_cmd = ar_Array[4];
ls_Name = ar_NameLines[li_cmd];
//---- Ðàáîòàåì òîëüêî â òîì ñëó÷àå, êîãäà íåò óïðàâëÿþùåé ëèíèè
if (FindObject (ls_Name))
{return (false);}
ldt_curTime = IIFi (RealTrade, TimeCurrent(), iTime (fs_Symbol, 1, 0));
li_Expiration = IIFi ((ar_Array[3] > 0), ND0 (ar_Array[3]), IIFi ((fi_Expiration > 0), ldt_curTime + fi_Expiration * 60, 0));
ls_Expiration = IIFs ((li_Expiration > 0), TS_DM (li_Expiration), "");
fCreat_OBJ (ls_Name, OBJ_HLINE, 0, ls_Expiration, 10, Time[0], ar_Array[1], false, Red);
if (FindObject (ls_Name))
{
gb_NewLine = true;
//---- Óäàëÿåì îòëîæåííûé îðäåð
li_Ticket = ar_Array[0];
if (OrderDelete (li_Ticket))
{
ls_txt = fPrepareComment (StringConcatenate ("Âìåñòî îòëîæåííîãî îðäåðà íà ", DSD (ar_Array[1]), ", ñîçäàëè ", gsa_Name_ORD[li_cmd], " ëèíèþ. Îðäåð[", li_Ticket, "] ", GetNameOP (ar_Array[2]), " óäàëèëè !!!"), gb_InfoPrint);
fPrintAndShowComment (ls_txt, ShowCommentInChart, PrintCom, gsa_Comment, 1);
return (true);
}
}
}
}
fGetLastError (gsa_Comment, "fCreatIntegratedHLine():", 3);
return (false);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: Ðàáîòà ñ îðäåðàìè |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ çàêðûòèÿ îðäåðîâ ïî òèïó (OP) è Magic (iMG) |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool CloseOrderAll (int iMG = -1, int OP = -1)
{
color lc_close;
int li_Type, err = GetLastError();
double ld_ClosePrice;
bool lb_Close = false;
//----
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (!OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
{continue;}
if (OrderMagicNumber() != iMG && iMG >= 0)
{continue;}
//if (OrderSymbol() != Symbol())
//{continue;}
li_Type = OrderType();
if (OP == li_Type || OP == -1)
{
ld_ClosePrice = MarketInfo (Symbol(), IIFi ((li_Type == OP_BUY), MODE_BID, MODE_ASK));
lc_close = IIFc (li_Type == OP_BUY, Blue, Red);
lb_Close = OrderClose (OrderTicket(), OrderLots(), ld_ClosePrice, Slippage, lc_close);
}
}
fGetLastError (gsa_Comment, "CloseOrderAll():", 3);
//----
return (lb_Close);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: Îáùèå ôóíêöèè |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY |
//+-----------------------------------------------------------------------------------+
//| Âåðñèÿ : 27.10.2009 |
//| Îïèñàíèå: fControlChangeValue_I Ôèêñèðóåò ôàêò èçìåíåíèÿ ïðîâåðÿåìîãî |
//| int ïàðàìåòðà |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fCCV_I (int param, int ix)
{
static int cur_param[20];
if (cur_param[ix] != param)
{
cur_param[ix] = param;
return (true);
}
//----
return (false);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY |
//+-----------------------------------------------------------------------------------+
//| Âåðñèÿ : 14.07.2010 |
//| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå äíÿ íåäåëè |
//+-----------------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| ndw - íîìåð äíÿ íåäåëè |
//| Var - 0: ñîêðàù¸ííûé; 1: ïîëíûé |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
string NameDayOfWeek (int ndw, int Var = 0)
{
switch (ndw)
{
case 0: return (IIFs (Var == 1, "Âîñêðåñåíüå", "Âñ"));
case 1: return (IIFs (Var == 1, "Ïîíåäåëüíèê", "Ïí"));
case 2: return (IIFs (Var == 1, "Âòîðíèê", "Âò"));
case 3: return (IIFs (Var == 1, "Ñðåäà", "Ñð"));
case 4: return (IIFs (Var == 1, "×åòâåðã", "×ò"));
case 5: return (IIFs (Var == 1, "Ïÿòíèöà", "Ïò"));
case 6: return (IIFs (Var == 1, "Ñóááîòà", "Ñá"));
}
//----
return ("NO-unknow");
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ, îïðåäåëåíèÿ ìèíèìàëüíîé ðàçðÿäíîñòè ëîòà |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (MarketInfo (Symbol(), MODE_LOTSTEP)) / MathLog (10))));}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+-----------------------------------------------------------------------------------+
//| Âåðñèÿ : 01.02.2008 |
//| Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ. |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double IIFd (bool condition, double ifTrue, double ifFalse)
{if (condition) {return (ifTrue);} else {return (ifFalse);}}
//+-----------------------------------------------------------------------------------+
int IIFi (bool condition, int ifTrue, int ifFalse)
{if (condition) {return (ifTrue);} else {return (ifFalse);}}
//+-----------------------------------------------------------------------------------+
bool IIFb (bool condition, bool ifTrue, bool ifFalse)
{if (condition) {return (ifTrue);} else {return (ifFalse);}}
//+-----------------------------------------------------------------------------------+
string IIFs (bool condition, string ifTrue, string ifFalse)
{if (condition) {return (ifTrue);} else {return (ifFalse);}}
//+-----------------------------------------------------------------------------------+
color IIFc (bool condition, color ifTrue, color ifFalse)
{if (condition) {return (ifTrue);} else {return (ifFalse);}}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+-----------------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè |
//+-----------------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
string GetNameOP (int op)
{
switch (op)
{
case OP_BUY : return ("BUY");
case OP_SELL : return ("SELL");
case OP_BUYLIMIT : return ("BUYLIMIT");
case OP_SELLLIMIT: return ("SELLLIMIT");
case OP_BUYSTOP : return ("BUYSTOP");
case OP_SELLSTOP : return ("SELLSTOP");
}
return (StringConcatenate ("None (", op, ")"));
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ, íîðìàëèçàöèè çíà÷åíèÿ double äî 0 |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double ND0 (double v) {return (NormalizeDouble (v, 0));}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ, ïåðåâîäà int â double ïî Point |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double NDP (int v) {return (v * gd_Point);}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ, íîðìàëèçàöèè çíà÷åíèÿ double äî Digit |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double NDD (double v) {return (NormalizeDouble (v, gi_Digits));}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ, íîðìàëèçàöèè çíà÷åíèÿ double äî Digit-1 (äëÿ 5-ãî çíàêà) |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double NDDl (double v)
{
int li_digit = IIFi ((gi_Digits == 5 || gi_Digits == 3), gi_Digits - 1, gi_Digits);
return (NormalizeDouble (v, li_digit));
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ, íîðìàëèçàöèè çíà÷åíèÿ double äî ìèíèìàëüíîé ðàçðÿäíîñòè ëîòà |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double NDDig (double v) {return (NormalizeDouble (v, LotDecimal()));}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ, ïåðåâîäà çíà÷åíèÿ èç double â string c íîðìàëèçàöèåé ïî Digit |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
string DSD (double v) {return (DoubleToStr (v, gi_Digits));}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ, ïåðåâîäà âðåìåíè â ñåê. â ñòðîêó ôîðìàòà "yyyy.mm.dd hh:mi" |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
string TS_DM (datetime v) {return (TimeToStr (v, TIME_DATE|TIME_MINUTES));}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ, ïåðåâîäà çíà÷åíèÿ èç double â string c íîðìàëèçàöèåé ïî 0 |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
string DS0 (double v) {return (DoubleToStr (v, 0));}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ, ïåðåâîäà çíà÷åíèÿ èç double â string c íîðìàëèçàöèåé ïî |
//| ìèíèìàëüíîé ðàçðÿäíîñòè ëîòà |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
string DSDig (double v) {return (DoubleToStr (v, LotDecimal()));}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ïðîâåðÿåì íà òðàíñôîðìàöèþ îòðàáîòàííîé ëèíèè |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fCheckChangeLine (string fs_Name, int fi_type_OBJ, double& ar_TimeLine[])
{
string ls_txt, ls_fName = "fCheckChangeLine()";
double lda_TimeLine[2];
//----
lda_TimeLine[0] = ObjectGet (fs_Name, IIFd ((fi_type_OBJ == 0), OBJPROP_PRICE1, OBJPROP_TIME1));
lda_TimeLine[1] = ObjectGet (fs_Name, IIFd ((fi_type_OBJ == 0), OBJPROP_PRICE1, OBJPROP_TIME2));
if (lda_TimeLine[0] != ar_TimeLine[0] || lda_TimeLine[1] != ar_TimeLine[1])
{
ls_txt = StringConcatenate (ls_fName, ": Ëèíèÿ ", fs_Name, " â ðàáîòå.");
fPrintAndShowComment (ls_txt, ShowCommentInChart, PrintCom, gsa_Comment, 1);
ar_TimeLine[0] = lda_TimeLine[0];
ar_TimeLine[1] = lda_TimeLine[1];
return (true);
}
//----
return (false);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| UNI: Ïîëó÷àåì íîìåð ïåðèîäà ãðàôèêà |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGetNumPeriods (int aPeriod[], int iPeriod)
{
for (int l_int = 0; l_int < ArraySize (aPeriod); l_int++)
{
if (aPeriod[l_int] == iPeriod)
{return (l_int);}
}
//----
return (-1);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| UNI: ÈÍÈÖÈÀËÈÇÈÐÓÅÌ ÌÀÑÑÈÂ STRING |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int InitializeArray_STR (string& PrepareArray[], string Value = "")
{
int l_int, size = ArraySize (PrepareArray);
//----
for (l_int = 0; l_int < size; l_int++)
{PrepareArray[l_int] = Value;}
//----
return;
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| ÎÐÃÀÍÈÇÓÅÌ ÌÈÃÀÅÍÈÅ ÂÛÂÎÄÈÌÛÕ ÍÀ ÃÐÀÔÈÊ ÎÁÚÅÊÒÎÂ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fMigalka (double sec = 0.5)
{
static bool li_migalka = true;
//----
Sleep (sec * 1000);
li_migalka = IIFb (li_migalka == true, false, true);
//----
return (li_migalka);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Âîçâðàùàåò íàèìåíîâàíèå ñîñòîÿíèÿ (ÄÀ\ÍÅÒ) |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
string CheckBOOL (int M)
{
//----
switch (M)
{
case 0: {return ("Íåò");}
case 1: {return ("Äà");}
}
//----
return ("Íå çíàþ...");
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: Ðàáîòà ñ ãðàôè÷åñêèìè îáúåêòàìè |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ðèñóåì OBJ_TREND, OBJ_ARROW, OBJ_HLINE |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fCreat_OBJ (string fs_Name, int fi_OBJ, int fi_ArrowCode, string fs_Text, int fi_FontSize,
datetime fdt_Time1, double fd_Price1, bool fb_Ray = true, color fc_Color = Gold,
datetime fdt_Time2 = 0, double fd_Price2 = 0)
{
int err = GetLastError();
if (ObjectFind (fs_Name) == -1)
{ObjectCreate (fs_Name, fi_OBJ, 0, 0, 0);}
ObjectSet (fs_Name, OBJPROP_TIME1, fdt_Time1);
ObjectSet (fs_Name, OBJPROP_PRICE1, fd_Price1);
if (fdt_Time2 != 0 || fd_Price2 != 0)
{
ObjectSet (fs_Name, OBJPROP_TIME2, fdt_Time2);
ObjectSet (fs_Name, OBJPROP_PRICE2, fd_Price2);
}
ObjectSet (fs_Name, OBJPROP_COLOR, fc_Color);
if (fi_OBJ == OBJ_TREND)
{ObjectSet (fs_Name, OBJPROP_RAY, fb_Ray);}
if (fi_OBJ == OBJ_ARROW)
{ObjectSet (fs_Name, OBJPROP_ARROWCODE, fi_ArrowCode);}
if (StringLen (fs_Text) > 0)
{ObjectSetText (fs_Name, fs_Text, fi_FontSize, "Calibri", fc_Color);}
fGetLastError (gsa_Comment, "fCreat_OBJ():", 3);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Àâòîð : TarasBY, taras_bulba@tut.by |
//+-----------------------------------------------------------------------------------+
//| Âåðñèÿ : 23.07.2010 |
//| Îïèñàíèå : Óñòàíîâêà îáúåêòà OBJ_LABEL |
//+-----------------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| name - íàèìåíîâàíèå îáúåêòà |
//| text - ñàì îáúåêò |
//| X - êîîðäèíàòà X |
//| Y - êîîðäèíàòà Y |
//| size - ðàçìåð îáúåêòà |
//| Font - øðèôò îáúåêòà |
//| Corner - óãîë (0 - ïî óìîë÷àíèþ) |
//| Angle - óãîë (0 - ïî óìîë÷àíèþ) |
//| CL - öâåò (CLR_NONE - ïî óìîë÷àíèþ) |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void SetLabel (string name, string text, int X, int Y, int size = 10, string Font = "Calibri",
int Corner = 0, int Angle = 0, color CL = CLR_NONE)
{
if (ObjectFind (name) == -1)
{ObjectCreate (name, OBJ_LABEL, 0, 0, 0);}
ObjectSet (name, OBJPROP_COLOR, CL);
ObjectSet (name, OBJPROP_XDISTANCE, X);
ObjectSet (name, OBJPROP_YDISTANCE, Y);
ObjectSet (name, OBJPROP_CORNER, Corner);
if (Angle > 0)
{ObjectSet (name, OBJPROP_ANGLE, Angle);}
if (text != "")
{ObjectSetText (name, text, size, Font, CL);}
//----
return;
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Óäàëÿåì OBJ_HLINE |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fDeleteHLine()
{
string ls_Name;
bool li_result = false;
//----
for (int li_int = 0; li_int < 2; li_int++)
{
ls_Name = gsa_Name_Line[li_int];
if (ObjectFind (ls_Name) == 0)
{
if (ObjectDelete (ls_Name))
{li_result = true;}
}
}
//----
return (li_result);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| ÏÎËÓ×ÅÍÈÅ ÑÂÎÉÑÒ ÃÐÀÔÈ×ÅÑÊÎÃÎ ÎÁÚÅÊÒÀ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool SearchObject (string txt, int Property, int Value)
{
int cnt, position;
bool result;
//----
if (!FindObject (txt))
return (true);
else
{
position = ObjectGet (txt, Property);
while (position <= 0)
{
position = ObjectGet (txt, Property);
if (cnt == 10)
{break;}
cnt++;
}
}
if (position == Value || position == 0)
{result = true;}
//---- Èçáåãàåì âîçìîæíûõ îøèáîê
if (position != Value)
{result = false;}
//---- Êîíòðîëèðóåì âîçìîæíûå îøèáêè
fGetLastError (gsa_Comment, StringConcatenate ("SearchObject(): Search (", txt, ")"), 3);
//----
return (result);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| ÏÎÈÑÊ ÃÐÀÔÈ×ÅÑÊÎÃÎ ÎÁÚÅÊÒÀ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool FindObject (string txt)
{
string lbl;
//----
if (ObjectFind (txt) != -1)
{return (true);}
for (int i = ObjectsTotal() - 1; i >= 0; i--)
{
lbl = ObjectName (i);
if (lbl == txt)
{return (true);}
}
//---- Êîíòðîëèðóåì âîçìîæíûå îøèáêè
fGetLastError (gsa_Comment, StringConcatenate ("FindObject(): Find (", txt, ")"), 3);
//----
return (false);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
// ÓÄÀËÅÍÈÅ ÃÐÀÔÈ×ÅÑÊÎÃÎ ÎÁÚÅÊÒÀ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool DelObject (string txtPart)
{
string lbl;
//----
if (ObjectFind (txtPart) != -1)
{
if (ObjectDelete (txtPart))
{return (true);}
}
for (int i = ObjectsTotal() - 1; i >= 0; i--)
{
lbl = ObjectName (i);
if (StringFind (lbl, txtPart, 0) > -1)
{
if (ObjectDelete (lbl))
{return (true);}
}
}
//---- Êîíòðîëèðóåì âîçìîæíûå îøèáêè
fGetLastError (gsa_Comment, StringConcatenate ("DelObject(): Delete (", txtPart, ")"), 3);
//----
return (false);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ïîëó÷àåì çíà÷åíèå öåíû äëÿ óêàçàííîãî áàðà ñ ïîïðàâêîé |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fObjectGetValue_ByCurrent (string fs_Name, int fi_Shift = 0)
{
double ld_Price = ObjectGetValueByShift (fs_Name, fi_Shift);
//----
if (ld_Price != 0)
{return (NDDl (ld_Price + fObjectGetDelta_ByCurrent (fs_Name)));}
else {return (0);}
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Âû÷èñëÿåì ïîïðàâêó â "áàðàõ" |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fObjectGetDelta_PerBar (string fs_Name)
{
double ld_Price1 = ObjectGet (fs_Name, OBJPROP_PRICE1),
ld_Price2 = ObjectGet (fs_Name, OBJPROP_PRICE2);
int li_shift1 = ObjectGetShiftByValue (fs_Name, ld_Price1),
li_shift2 = ObjectGetShiftByValue (fs_Name, ld_Price2),
li_minus = li_shift1 - li_shift2;
//---- Åñëè íå ãîðèçîíòàëüíàÿ ëèíèÿ
if (li_minus != 0)
{double delta = (ld_Price2 - ld_Price1) / li_minus;}
return (NDDl (delta));
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Âû÷èñëÿåì ïîïðàâêó â çíà÷åíèÿõ öåíû |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fObjectGetDelta_ByCurrent (string fs_Name)
{
double ld_deltaTime = TimeCurrent() - iTime (Symbol(), 0, 0),
ld_TF = 60 * Period(),
delta = fObjectGetDelta_PerBar (fs_Name),
delta_ByCurrent = delta * (ld_deltaTime / ld_TF);
return (NDDl (delta_ByCurrent));
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: Ñåðâèñíûõ ôóíêöèé |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Âûâîäèì èíôîðìàöèþ íà ÷àðò |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fCommentInChart()
{
int li_Period = IIFi ((NewBarInPeriod == 0), Period(), NewBarInPeriod) * 60;
static string lsa_Time, ls_Error;
datetime ldt_curTime;
static datetime lsdt_TimeError;
//----
ldt_curTime = IIFi ((RealTrade), TimeLocal(), iTime (gs_Symbol, 1, 0));
//---- Îðãàíèçóåì óäàëåíèå ÷åðåç 1 ÷àñ ñîîáùåíèÿ îá îøèáêå
if (StringLen (gsa_Comment[3]) > 0)
{
if (ls_Error != gsa_Comment[3])
{
ls_Error = gsa_Comment[3];
lsdt_TimeError = ldt_curTime;
}
}
//---- Ñïóñòÿ 1 ÷àñ óïîìèíàíèå îá îøèáêå óäàëÿåì
if (ldt_curTime > lsdt_TimeError + 3600)
{gsa_Comment[3] = "";}
Comment ("\n", gs_Info, IIFs ((NewBarInPeriod < 0), "", TS_DM (NewBar + li_Period)), "\n",
"*******************************************************\n",
IIFs ((StringLen (gsa_Comment[0]) > 0), StringConcatenate (gsa_Comment[0], "\n"), ""),
IIFs ((StringLen (gsa_Comment[1]) > 0), StringConcatenate (gsa_Comment[1], "\n"), ""),
IIFs ((StringLen (gsa_Comment[2]) > 0), StringConcatenate (gsa_Comment[2], "\n"), ""),
"*******************************************************\n",
"ERROR:\n",
IIFs ((StringLen (gsa_Comment[3]) > 0), StringConcatenate (gsa_Comment[3], "\n"), ""),
//---- Ñòðîêà ñ îòëàäî÷íîé èíôîðìàöèåé
IIFs (gb_Control, "CONTROL: ", ""), gsa_Comment[4]);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ãîòîâèì ê âûâîäó íà ïå÷àòü è íà ãðàôèê êîììåíòàðèè |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
string fPrepareComment (string sText = "", bool bConditions = false)
{if (bConditions && StringLen (sText) > 0) {return (sText);}}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Âûâîäèì íà ïå÷àòü è íà ãðàôèê êîììåíòàðèè |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fPrintAndShowComment (string Text, bool Show_Conditions, bool Print_Conditions, string& s_Show[], int ind = -1)
{
if ((Show_Conditions || Print_Conditions) && StringLen (Text) > 0)
{
if (ind >= 0 && Show_Conditions)
{s_Show[ind] = Text;}
if (Print_Conditions)
{Print (Text);}
}
//----
return;
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: Money Management |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ãëàâíàÿ ôóíêöèÿ ïîëó÷åíèÿ ðàçìåðà ëîòà (âûçûâàåòñÿ èç ñîâåòíèêà) |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double GetSizeLot (double fd_Lot)
{
double dLot, koef = 1, Money = 0;
int dig;
//----
dig = LotDecimal();
switch (MeansType)
{
case 1: Money = AccountBalance(); break;
case 2: Money = AccountEquity(); break;
case 3: Money = AccountFreeMargin(); break;
case 4: Money = RiskDepo; break;
}
switch (LotsWayChoice)
{
case 0: dLot = fd_Lot; break;
case 1: // ôèêñèðîâàííûé ïðîöåíò îò äåïîçèòà
koef = Money * AccountLeverage() * LotsPercent / (100000 * 10);
dLot = fd_Lot * koef;
break;
case 2: // ôðàêöèîííî-ïðîïîðöèîíàëüíûé
int k = LotsDepoForOne;
for (double i = 2; i <= LotsMax; i++)
{
k += i * LotsDeltaDepo;
if (k > Money)
{
dLot = (i - 1) / 10;
break;
}
}
break;
case 3: // ôðàêöèîííî-ôèêñèðîâàííûé
dLot = MathCeil ((Money - LotsDepoForOne) / LotsDeltaDepo) / 10;
break;
}
dLot = NormalizeDouble (dLot, dig);
dLot = MathMax (MinLot, dLot);
dLot = MathMin (MaxLot, dLot);
//----
return (dLot);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Îïðåäåëÿåì âîçìîæíîñòü äàëüíåéøåãî âûñòàâëåíèÿ îðäåðîâ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fCheckMargin (string& sInfo, // âîçâðàùàåìûé êîììåíòàðèé
double d_BeginBalance, // íà÷àëüíûé ðàçìåð äåïî
int i_StopMarginPercent, // äîïóñòèìûé ðàçìåð çàëîãà â %
int i_RiskDepoPercent) // ìàêñèìàëüíûé ðàçìåð ëîññà â %
{
bool Zapret, StopMargin, StopBalance, lb_Pause = False;
string ls_prichina, ls_fName = "CheckMargin()";
StopMargin = AccountFreeMargin() / AccountEquity() * 100 <= i_StopMarginPercent;
StopBalance = AccountBalance() / d_BeginBalance * 100 <= i_RiskDepoPercent;
Zapret = (StopMargin || StopBalance);
if (Zapret == true)
{
if (!lb_Pause)
{
ls_prichina = fPrepareComment ("Äîñòèãëè îãðàíè÷åíèÿ ðàçìåðà ñâîáîäíîé ìàðæè - ïðèîñòàíàâëèâàåì âûñòàâëåíèå îðäåðîâ", StopMargin);
ls_prichina = fPrepareComment ("Äîñòèãëè äîïóñòèìîãî çíà÷åíèÿ óìåíüøåíèÿ áàëàíñà - ïðèîñòàíàâëèâàåì òîðãîâëþ", StopBalance);
sInfo = StringConcatenate (ls_fName, ": ", ls_prichina, " (FreeMargin = $", DS0 (AccountFreeMargin()), "; Equity = $", DS0 (AccountEquity()), ")", "; Balance = $", DS0 (AccountBalance()), "; BeginBalance = $", DS0 (d_BeginBalance), " (", WindowExpertName(), ").");
}
lb_Pause = True;
}
else
{
if (lb_Pause)
{sInfo = StringConcatenate (ls_fName, ": Îãðàíè÷åíèÿ ðàçìåðà ñâîáîäíîé ìàðæè íåò, áàëàíñ â íîðìå - òîðãóåì (FreeMargin = $", DS0 (AccountFreeMargin()), "; Equity = $", DS0 (AccountEquity()), ")", "; Balance = $", DS0 (AccountBalance()), " (", WindowExpertName(), ").");}
lb_Pause = False;
}
//----
return (lb_Pause);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ñëåäèì çà êðèòè÷åñêèì óìåíüøåíèåì ðàçìåðà äåïî |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fRiskPercentControl (string& sInfo, // âîçâðàùàåìûé êîììåíòàðèé
double dBalance, // îò êàêîé âåëè÷èíû âåä¸ì ðàñ÷¸ò
double dProfit) // ñîñòîÿíèå ñ÷¸òà
{
if (dBalance * RiskDepoPercent / 100 < MathAbs (dProfit))
{
sInfo = StringConcatenate ("fRiskPercentControl(): Çàêðûâàåì âñå îðäåðà ïî ïðåâûøåíèþ ëîññà çàäàííîìó çàí÷åíèþ RiskDepoPercent! (", WindowExpertName(), ").");
return (true);
}
//----
return (false);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//+===================================================================================+
//|***********************************************************************************|
//| ÐÀÇÄÅË: Ðàáîòà ñ îøèáêàìè |
//|***********************************************************************************|
//+===================================================================================+
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ôóíêöèÿ ErrorDescription() âîçâðàùàåò íå êîä îøèáêè à å¸ ñëîâåñòíîå îïèñàíèå |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
string ErrorDescription (int error_code)
{
string error_string;
switch (error_code)
{
//---- codes returned from trade server
case 0: return ("ÍÅÒ !!!");
case 1: error_string = "Ïîïûòêà èçìåíèòü óæå óñòàíîâëåííûå çíà÷åíèÿ òàêèìè æå çíà÷åíèÿìè."; break;
case 2: error_string = "Îáùàÿ îøèáêà. Ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé äî âûÿñíåíèÿ îáñòîÿòåëüñòâ."; break;
case 3: error_string = "Â òîðãîâóþ ôóíêöèþ ïåðåäàíû íåïðàâèëüíûå ïàðàìåòðû."; break;
case 4: error_string = "Òîðãîâûé ñåðâåð çàíÿò."; break;
case 5: error_string = "Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà."; break;
case 6: error_string = "Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì."; break;
case 7: error_string = "Íåäîñòàòî÷íî ïðàâ."; break;
case 8: error_string = "Ñëèøêîì ÷àñòûå çàïðîñû."; break;
case 9: error_string = "Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà."; break;
case 64: error_string = "Ñ÷åò çàáëîêèðîâàí. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé."; break;
case 65: error_string = "Íåïðàâèëüíûé íîìåð ñ÷åòà."; break;
case 128: error_string = "Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè."; break;
case 129: error_string = "Íåïðàâèëüíàÿ öåíà bid èëè ask, âîçìîæíî, íåíîðìàëèçîâàííàÿ öåíà."; break;
case 130: error_string = "Ñëèøêîì áëèçêèå ñòîïû èëè íåïðàâèëüíî ðàññ÷èòàííûå èëè íåíîðìàëèçîâàííûå öåíû â ñòîïàõ (èëè â öåíå îòêðûòèÿ îòëîæåííîãî îðäåðà)."; break;
case 131: error_string = "Íåïðàâèëüíûé îáúåì, îøèáêà â ãðàíóëÿöèè îáúåìà."; break;
case 132: error_string = "Ðûíîê çàêðûò."; break;
case 133: error_string = "Òîðãîâëÿ çàïðåùåíà."; break;
case 134: error_string = "Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè."; break;
case 135: error_string = "Öåíà èçìåíèëàñü."; break;
case 136: error_string = "Íåò öåí."; break;
case 137: error_string = "Áðîêåð çàíÿò."; break;
case 138: error_string = "Çàïðîøåííàÿ öåíà óñòàðåëà, ëèáî ïåðåïóòàíû bid è ask."; break;
case 139: error_string = "Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ."; break;
case 140: error_string = "Ðàçðåøåíà òîëüêî ïîêóïêà. Ïîâòîðÿòü îïåðàöèþ SELL íåëüçÿ."; break;
case 141: error_string = "Ñëèøêîì ìíîãî çàïðîñîâ."; break;
case 142: error_string = "Îðäåð ïîñòàâëåí â î÷åðåäü."; break;
case 143: error_string = "Îðäåð ïðèíÿò äèëåðîì ê èñïîëíåíèþ."; break;
case 144: error_string = "Îðäåð àííóëèðîâàí ñàìèì êëèåíòîì ïðè ðó÷íîì ïîäòâåðæäåíèè ñäåëêè."; break;
case 145: error_string = "Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó è çàáëîêèðîâàí èç-çà âîçìîæíîãî ñêîðîãî èñïîëíåíèÿ."; break;
case 146: error_string = "Ïîäñèñòåìà òîðãîâëè çàíÿòà."; break;
case 147: error_string = "Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì."; break;
case 148: error_string = "Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ äîñòèãëî ïðåäåëà, óñòàíîâëåííîãî áðîêåðîì."; break;
case 149: error_string = "Ïîïûòêà îòêðûòü ïðîòèâîïîëîæíóþ ïîçèöèþ ê óæå ñóùåñòâóþùåé â ñëó÷àå, åñëè õåäæèðîâàíèå çàïðåùåíî."; break;
case 4000: return ("");
case 4001: error_string = "Íåïðàâèëüíûé óêàçàòåëü ôóíêöèè."; break;
case 4002: error_string = "Èíäåêñ ìàññèâà - âíå äèàïàçîíà."; break;
case 4003: error_string = "Íåò ïàìÿòè äëÿ ñòåêà ôóíêöèé."; break;
case 4004: error_string = "Ïåðåïîëíåíèå ñòåêà ïîñëå ðåêóðñèâíîãî âûçîâà."; break;
case 4005: error_string = "Íà ñòåêå íåò ïàìÿòè äëÿ ïåðåäà÷è ïàðàìåòðîâ."; break;
case 4006: error_string = "Íåò ïàìÿòè äëÿ ñòðîêîâîãî ïàðàìåòðà."; break;
case 4007: error_string = "Íåò ïàìÿòè äëÿ âðåìåííîé ñòðîêè."; break;
case 4008: error_string = "Íåèíèöèàëèçèðîâàííàÿ ñòðîêà."; break;
case 4009: error_string = "Íåèíèöèàëèçèðîâàííàÿ ñòðîêà â ìàññèâå."; break;
case 4010: error_string = "Íåò ïàìÿòè äëÿ ñòðîêîâîãî ìàññèâà."; break;
case 4011: error_string = "Ñëèøêîì äëèííàÿ ñòðîêà."; break;
case 4012: error_string = "Îñòàòîê îò äåëåíèÿ íà íîëü."; break;
case 4013: error_string = "Äåëåíèå íà íîëü."; break;
case 4014: error_string = "Íåèçâåñòíàÿ êîìàíäà."; break;
case 4015: error_string = "Íåïðàâèëüíûé ïåðåõîä."; break;
case 4016: error_string = "Íåèíèöèàëèçèðîâàííûé ìàññèâ."; break;
case 4017: error_string = "Âûçîâû DLL íå ðàçðåøåíû."; break;
case 4018: error_string = "Íåâîçìîæíî çàãðóçèòü áèáëèîòåêó."; break;
case 4019: error_string = "Íåâîçìîæíî âûçâàòü ôóíêöèþ."; break;
case 4020: error_string = "Âûçîâû âíåøíèõ áèáëèîòå÷íûõ ôóíêöèé íå ðàçðåøåíû."; break;
case 4021: error_string = "Íåäîñòàòî÷íî ïàìÿòè äëÿ ñòðîêè, âîçâðàùàåìîé èç ôóíêöèè."; break;
case 4022: error_string = "Ñèñòåìà çàíÿòà."; break;
case 4050: error_string = "Íåïðàâèëüíîå êîëè÷åñòâî ïàðàìåòðîâ ôóíêöèè."; break;
case 4051: error_string = "Íåäîïóñòèìîå çíà÷åíèå ïàðàìåòðà ôóíêöèè."; break;
case 4052: error_string = "Âíóòðåííÿÿ îøèáêà ñòðîêîâîé ôóíêöèè."; break;
case 4053: error_string = "Îøèáêà ìàññèâà."; break;
case 4054: error_string = "Íåïðàâèëüíîå èñïîëüçîâàíèå ìàññèâà-òàéìñåðèè."; break;
case 4055: error_string = "Îøèáêà ïîëüçîâàòåëüñêîãî èíäèêàòîðà."; break;
case 4056: error_string = "Ìàññèâû íåñîâìåñòèìû."; break;
case 4057: error_string = "Îøèáêà îáðàáîòêè ãëîáàëüíûåõ ïåðåìåííûõ."; break;
case 4058: error_string = "Ãëîáàëüíàÿ ïåðåìåííàÿ íå îáíàðóæåíà."; break;
case 4059: error_string = "Ôóíêöèÿ íå ðàçðåøåíà â òåñòîâîì ðåæèìå."; break;
case 4060: error_string = "Ôóíêöèÿ íå ïîäòâåðæäåíà."; break;
case 4061: error_string = "Îøèáêà îòïðàâêè ïî÷òû."; break;
case 4062: error_string = "Îæèäàåòñÿ ïàðàìåòð òèïà string."; break;
case 4063: error_string = "Îæèäàåòñÿ ïàðàìåòð òèïà integer."; break;
case 4064: error_string = "Îæèäàåòñÿ ïàðàìåòð òèïà double."; break;
case 4065: error_string = " êà÷åñòâå ïàðàìåòðà îæèäàåòñÿ ìàññèâ."; break;
case 4066: error_string = "Çàïðîøåííûå èñòîðè÷åñêèå äàííûå â ñîñòîÿíèè îáíîâëåíèÿ."; break;
case 4067: error_string = "Îøèáêà ïðè âûïîëíåíèè òîðãîâîé îïåðàöèè."; break;
case 4099: error_string = "Êîíåö ôàéëà."; break;
case 4100: error_string = "Îøèáêà ïðè ðàáîòå ñ ôàéëîì."; break;
case 4101: error_string = "Íåïðàâèëüíîå èìÿ ôàéëà."; break;
case 4102: error_string = "Ñëèøêîì ìíîãî îòêðûòûõ ôàéëîâ."; break;
case 4103: error_string = "Íåâîçìîæíî îòêðûòü ôàéë."; break;
case 4104: error_string = "Íåñîâìåñòèìûé ðåæèì äîñòóïà ê ôàéëó."; break;
case 4105: error_string = "Íè îäèí îðäåð íå âûáðàí."; break;
case 4106: error_string = "Íåèçâåñòíûé ñèìâîë."; break;
case 4107: error_string = "Íåïðàâèëüíûé ïàðàìåòð öåíû äëÿ òîðãîâîé ôóíêöèè."; break;
case 4108: error_string = "Íåâåðíûé íîìåð òèêåòà."; break;
case 4109: error_string = "Òîðãîâëÿ íå ðàçðåøåíà. Íåîáõîäèìî âêëþ÷èòü îïöèþ Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü â ñâîéñòâàõ ýêñïåðòà."; break;
case 4110: error_string = "Äëèííûå ïîçèöèè íå ðàçðåøåíû. Íåîáõîäèìî ïðîâåðèòü ñâîéñòâà ýêñïåðòà."; break;
case 4111: error_string = "Êîðîòêèå ïîçèöèè íå ðàçðåøåíû. Íåîáõîäèìî ïðîâåðèòü ñâîéñòâà ýêñïåðòà."; break;
case 4200: error_string = "Îáúåêò óæå ñóùåñòâóåò."; break;
case 4201: error_string = "Çàïðîøåíî íåèçâåñòíîå ñâîéñòâî îáúåêòà."; break;
case 4202: error_string = "Îáúåêò íå ñóùåñòâóåò."; break;
case 4203: error_string = "Íåèçâåñòíûé òèï îáúåêòà."; break;
case 4204: error_string = "Íåò èìåíè îáúåêòà."; break;
case 4205: error_string = "Îøèáêà êîîðäèíàò îáúåêòà."; break;
case 4206: error_string = "Íå íàéäåíî óêàçàííîå ïîäîêíî."; break;
case 4207: error_string = "Îøèáêà ïðè ðàáîòå ñ îáúåêòîì."; break;
}
return (error_string);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//| Ïîëó÷àåì íîìåð è îïèñàíèå ïîñëåäíåé îøèáêè è âûâîäèì â ìàññèâ êîììåíòîâ |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGetLastError (string& Comm_Array[], string Com = "", int index = -1)
{
int err = GetLastError();
string ls_err;
//----
if (err > 0 && err != 4202)
{
ls_err = StringConcatenate (Com, " Îøèáêà ¹ ", err, ": ", ErrorDescription (err));
Print (ls_err);
if (index >= 0)
{Comm_Array[index] = ls_err;}
}
//----
return (err);
}
//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
---