Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
ISIMOKU
//+------------------------------------------------------------------+
//| ISHIMOKU.mq4 |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "more"
#property link "mailto:tradertobe@gmail.com"
#include <stderror.mqh>
#include <stdlib.mqh>
#include <WinUser32.mqh>
//+------------------------------------------------------------------+
//ÂÑÅ Î×ÅÍÜ ÏÐÎÑÒÎ: ÎÒÊÐÛÒÈÅ/ÇÀÊÐÛÒÈÅ ÏÎÇÈÖÈÉ ÏÐÎÈÑÕÎÄÈÒ ÏÐÈ ÏÅÐÅÑÅ×ÅÍÈÅ ËÈÍÈÉ ÈÍÄÈÊÀÒÎÐÀ ÈØÈÌÎÊÓ tenkan_sen È kijun_sen.
// TakeProfit, StopLoss è Stop_0 çàäàíû äëÿ 4-õ ðàçðÿäíûõ êîòèðîâîê, åñëè êîòèðîâêè 5-òè ðàçðÿäíûå, òî ïðîãðàììà ñàìà ýòî îáíàðóæèâàåò
// è óìíîæàåò çàäàííûå âåëè÷èíû íà 10.
//+------------------------------------------------------------------+
// Bar0Mode - ðåæèì íóëåâîãî áàðà:
extern bool Bar0Mode = true; // åñëè Bar0Mode = true, òî ïåðå÷å÷åíèå tenkan_sen È kijun_sen áóäåò ôèêñèðîâàòüñÿ ïî íóëåâîìó áàðó,
// èíà÷å ïåðåñå÷åíèå áóäåò ôèêñèðîâàòüñÿ ïî ïåðâîìó áàðó.
extern int MagicNumber = 999;
extern bool TradeAllowed = true; // ðàçðåøåíèå íà òîðãîâëþ, åñëè TradeAllowed = false, íî åñòü îòêðûòàÿ ïîçèöèÿ,
// òî îíà áóäåò çàêðûòà îáû÷íûì ìàíåðîì - ïðè âîçíèêíîâåíèÿ ñèãíàëà íà çàêðûòèå,
// îäíàêî, íîâàÿ ïîçèöèÿ îòêðûâàòüñÿ íå áóäåò.
// Ïîýòîìó çàäàâ TradeAllowed = false, ìîæíî èäòè îòäûõàòü, íàäåÿñü ÷òî âñå áóäåò õîðîøî.
extern double Lot = 0.1; // ýòè ëîòîì ìû áóäåì òîðãîâàòü
// TakeProfit,StopLoss è Stop_0 çàäàíû äëÿ 4-õ ðàçðÿäíûõ êîòèðîâîê, åñëè êîòèðîâêè 5-òè ðàçðÿäíûå, òî ïðîãðàììà ñàìà ýòî îáíàðóæèâàåò
// è óìíîæàåò çàäàííûå âåëè÷èíû íà 10.
extern int TakeProfit = 30; // 4-õ ðàçðÿäíàÿ êîòèðîâêà
extern int StopLoss = 30; // 4-õ ðàçðÿäíàÿ êîòèðîâêà
extern int Stop_0 = 10; // 4-õ ðàçðÿäíàÿ êîòèðîâêà, ïðè äîñòèæåíèå òàêîãî ïðîôèòà StopLoss ïåðåíîñèòñÿ â áåçóáûòîê.
// Åñëè Stoplevel íå ïîçâîëÿåò ýòîãî ñäåëàòü, âûäàåòñÿ ñîîáùåíèå è çâóêîâîé ñèãíàë òðåâîãè.
int Stoplevel; // çäåñü áóäåò õðàíèòüñÿ òåêóùèé Stoplevel = MarketInfo(Symbol(),MODE_STOPLEVE)
string Indicator_Name = "ISHIMOKU_IND";
static bool BUY_Sign, BUY_Stop, SELL_Sign, SELL_Stop;
static datetime LastBar;
int bar2, bar1, bar0;
int _ExpertOrdersTotal; //îáùåå êîëè÷åñòâî îðäåðîâ, ïðèíàäëåæàùèõ ýêñïåðòó
int _ExpertOrdersBuy;
int _ExpertOrdersSell;
int _ExpertOrdersBuyStop;
int _ExpertOrdersSellStop;
int _ExpertOrdersBuyLimit;
int _ExpertOrdersSellLimit;
// ìàññèâû, â êîòîðûõ áóäóò õðàíèòñüÿ õàðàêòåðèñòèêè îðäåðîâ ïðè âõîäå ïî òåêóùåìó òèêó:
int _OrderTicket[], _OrderType[];
double _OrderLots[], _OrderOpenPrice[], _OrderStopLoss[], _OrderTakeProfit[];
double _OrderProfit[], _OrderSwap[], _OrderCommission[];
datetime _OrderOpenTime[], _OrderExpiration[];
string _OrderComment[];
int _OrderMagicNumber[];
color Order_Clr;
#define ORDER_BUY_CLR Blue
#define ORDER_SELL_CLR Red
string OrderOpenSetOkMes = " - Îòêðûò/óñòàíîâëåí óñïåøíî";
string OrderOpenSetErrorMes = " - Îøèáêà îòêðûòèÿ/óñòàíîâêè";
string OrderOpenStoplevel_ErrorMes = " - Îøèáêà îòêðûòèÿ: StopLoss/TakeProfit ìåíüøå òåêóùåãî Stoplevel=";
string OrderModifyOkMes = " - Ìîäèôèöèðîâàí óñïåøíî";
string OrderModifyErrorMes = " - Îøèáêà ïðè ìîäèôèêàöèè";
string OrderModifyStop_0_ErrorMes = " - Îøèáêà ïðè ìîäèôèêàöèè: Stop_0 ìåíüøå òåêóùåãî Stoplevel=";
string OrderDeleteOkMes = " - Óäàëåí óñïåøíî";
string OrderDeleteErrorMes = " - Îøèáêà ïðè óäàëåíèè";
string OrderCloseOkMes = " - Çàêðûò óñïåøíî";
string OrderCloseErrorMes = " - Îøèáêà ïðè çàêðûòèè";
int TradeDirection;
int LastError;
int i;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if (Digits == 5 ||Digits == 3 )
{
TakeProfit *=10;
StopLoss *=10;
Stop_0 *=10;
}
//----
LastBar = iTime(NULL,0,0);
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
AllOrdersInit(MagicNumber);
SetSignales(BUY_Sign, BUY_Stop, SELL_Sign, SELL_Stop, LastBar, bar2, bar1, bar0 );
if (OrdersOpenSet(BUY_Sign, SELL_Sign)) return(0);
AllOrdersInit(MagicNumber);
if (OrdersClose(BUY_Stop, SELL_Stop ) ) return(0);
AllOrdersInit(MagicNumber);
if (OrdersModify()) return(0);
//----
return(0); // âîçâðàùàåì óïðàâëåíèå òåðìèíàëó
}
// end of int start()
void SetSignales(bool& BUY_Sign, bool& BUY_Stop, bool& SELL_Sign, bool& SELL_Stop, datetime& LastBar, int& bar2, int& bar1,int& bar0 )
{
if (Bar0Mode)
{
//---
BUY_Sign = false;
BUY_Stop = false;
SELL_Sign = false;
SELL_Stop = false;
//---
bar0 = iCustom(NULL,0,Indicator_Name,0,0);
//---
bar1 = iCustom(NULL,0,Indicator_Name,0,1);
//---
bar2 = iCustom(NULL,0,Indicator_Name,0,2);
//---
if (bar0 > 0 && bar1 <= 0) BUY_Sign = true;
if (bar0 < 0 && bar1 >= 0) BUY_Stop = true;
if (bar0 < 0 && bar1 >= 0) SELL_Sign = true;
if (bar0 > 0 && bar1 <= 0) SELL_Stop = true;
//---
return;
} // end of if (Bar0Mode)
//---
datetime IBARS = iTime(NULL,0,0);
//---
if (LastBar == IBARS) return;
LastBar = IBARS;
//---
BUY_Sign = false;
BUY_Stop = false;
SELL_Sign = false;
SELL_Stop = false;
//---
//---
bar0 = iCustom(NULL,0,Indicator_Name,0,0);
//---
bar1 = iCustom(NULL,0,Indicator_Name,0,1);
//---
bar2 = iCustom(NULL,0,Indicator_Name,0,2);
//---
//---
if (bar1 > 0 && bar2 <= 0) BUY_Sign = true;
if (bar1 < 0 && bar2 >= 0) BUY_Stop = true;
if (bar1 < 0 && bar2 >= 0) SELL_Sign = true;
if (bar1 > 0 && bar2 <= 0) SELL_Stop = true;
//---
return;
} // end of void SetSignales ()
//************************************************************
//+---------------------------------------------------------------------------------------------------------------+
//| ôóíêöèÿ îòêðûâàåò îðäåðà è óñòàíàâëèâàåò ëèìèòíûå îðäåðà èñõîäÿ èç ðåçóëüòàòîâ àíàëèçà òåêóùåé ñèòóàöèþ |
//+---------------------------------------------------------------------------------------------------------------+
bool OrdersOpenSet(bool& BUY_Sign, bool& SELL_Sign) // return(true) -ôóíêöèÿ âûïîëíèëà âñå ÷òî ìîãëà è óïðàâëåíèå ñëåäóåò ïåðåäàòü òåðìèíàëó
{ // return(false)-â âûçîâå ôóíêöèè íå áûëî íåîáõîäèìîñòè, óïðàâëåíèå ñëåäóåò ïåðåäàòü äàëåå ïî òåëó ôóíêöèè start()
//----
if (_ExpertOrdersTotal == 0 && TradeAllowed)
{
Stoplevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if ( (StopLoss != 0 && StopLoss < Stoplevel) || (TakeProfit != 0 && TakeProfit < Stoplevel) )
{
PlaySound("alert.wav");
Print(OrderOpenStoplevel_ErrorMes+Stoplevel);
return(false);
}
i = 0; // ðàäè óäîáñòâà
TradeDirection = iif(BUY_Sign,+1,-1);
_OrderType [i] = iif(TradeDirection < 0,OP_SELL,OP_BUY);
_OrderLots [i] = Lot;
_OrderOpenPrice [i] = iif(_OrderType[i]==OP_BUY,Ask,Bid);
_OrderStopLoss [i] = iif(_OrderType[i]==OP_BUY,_OrderOpenPrice[i] - StopLoss * Point,_OrderOpenPrice[i] + StopLoss * Point);
_OrderStopLoss [i] = iif( _OrderStopLoss[i]==_OrderOpenPrice[i],0,_OrderStopLoss[i]);
_OrderTakeProfit[i] = iif(_OrderType[i]==OP_BUY,_OrderOpenPrice[i] + TakeProfit*Point,_OrderOpenPrice[i] - TakeProfit*Point);
_OrderTakeProfit[i] = iif(_OrderTakeProfit[i] == _OrderOpenPrice[i],0,_OrderTakeProfit[i]);
_OrderMagicNumber[i] = MagicNumber;
_OrderComment [i] = " ";
Order_Clr = iif(TradeDirection > 0,ORDER_BUY_CLR,ORDER_SELL_CLR);
if (_OrderSend())
{
BUY_Sign = iif(TradeDirection == +1,false,BUY_Sign );
SELL_Sign = iif(TradeDirection == -1,false,SELL_Sign);
}
return(true);
} // end of if (_ExpertOrdersTotal == 0 && TradeAllowed)
//----
return(false); // âûçîâ ôóíêöèè íå áûë íåîáõîäèì, óïðàâëåíèå ñëåäóåò ïåðåäàòü äàëåå ïî òåëó ôóíêöèè start()
} // end of bool OrdersOpenSet(BUY_Sign, SELL_Sign)
//+------------------------------------------------------------------+
//| ôóíêöèÿ ïîñûëàåò íà ÒÎÐÃÎÂÛÉ ÑÅÐÂÅÐ êîìàíäû íà íåìåäëåííîå |
//| îòêðûòèå îðäåðà èëè íà óñòàíîâêó ëèìèòíîãî îðäåðà |
//+------------------------------------------------------------------+
bool _OrderSend()
{
if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // òîðãîâûé ïîòîê çàíÿò, ïîäîæäåì ñëåäóþùåãî òèêà
_OrderTicket[i]=
OrderSend(Symbol(),_OrderType [i]
,_OrderLots [i]
,_OrderOpenPrice [i] ,3
,_OrderStopLoss [i]
,_OrderTakeProfit [i]
,_OrderComment [i]
,_OrderMagicNumber[i],0,Order_Clr);
if (_OrderTicket[i] < 0)
{
LastError = GetLastError();
Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+OrderOpenSetErrorMes+" : "+ LastError+" - "+ErrorDescription(LastError));
PlaySound("alert.wav");
return(false);
}
Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderOpenSetOkMes);
PlaySound("ok.wav");
return(true);
} // end of bool _OrderSend()
//+---------------------------------------------------------------------------------------+
//| ôóíêöèÿ ïðîèçâîäèò ìîäèôèêàöèþ îðäåðîâ èñõîäÿ èç ðåçóëüòàòîâ àíàëèçà òåêóùåé ñèòóàöèè |
//+---------------------------------------------------------------------------------------+
bool OrdersModify() // return(true) -ôóíêöèÿ âûïîëíèëà âñå ÷òî ìîãëà è óïðàâëåíèå ñëåäóåò ïåðåäàòü òåðìèíàëó
{ // return(false)-â âûçîâå ôóíêöèè íå áûëî íåîáõîäèìîñòè, óïðàâëåíèå ñëåäóåò ïåðåäàòü äàëåå ïî òåëó ôóíêöèè start()
if (_ExpertOrdersTotal == 0) return(false);
i = 0; // ðàäè óäîáñòâà
TradeDirection = iif(_OrderType[i] == OP_BUY,+1,-1);
double CurrentPrice = iif(TradeDirection == +1,Bid,Ask);
int Profit = iif(TradeDirection == +1,(CurrentPrice - _OrderOpenPrice[i])/Point,(_OrderOpenPrice[i] - CurrentPrice)/Point);
if (Profit < Stop_0) return(false);
Stoplevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (Stop_0 <= Stoplevel)
{
PlaySound("alert.wav");
Print("("+MagicNumber+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderModifyStop_0_ErrorMes+Stoplevel);
return(false);
}
if (_OrderStopLoss [i] >= _OrderOpenPrice [i]) return(false);
_OrderStopLoss [i] = _OrderOpenPrice [i];
_OrderModify();
return(true);
} // end of bool OrdersModify()
//+--------------------------------------------------------------------+
//| ôóíêöèÿ ïîñûëàåò íà ÒÎÐÃÎÂÛÉ ÑÅÐÂÅÐ êîìàíäó íà íåìåäëåííóþ |
//| ìîäèôèêàöèþ îòêðûòîãî èëè ëèìèòíîãî îðäåðà |
//+--------------------------------------------------------------------+
bool _OrderModify()
{
if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // òîðãîâûé ïîòîê çàíÿò, ïîäîæäåì ñëåäóþùåãî òèêà
if (OrderModify(_OrderTicket [i]
,_OrderOpenPrice [i]
,_OrderStopLoss [i]
,_OrderTakeProfit[i]
,0
,CLR_NONE))
{
Print("("+MagicNumber+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderModifyOkMes);
PlaySound("ok.wav");
return(true);
}
LastError = GetLastError(); if (LastError == ERR_NO_RESULT) return(true);
Print("("+MagicNumber+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderModifyErrorMes+" : "+ LastError+" - "+ErrorDescription(LastError));
PlaySound("alert.wav");
return(false);
} // end of bool _OrderModify()
//+---------------------------------------------------------------------------------------+
//| ôóíêöèÿ ïðîèçâîäèò óäàëåíèå ñòîïîâûõ îðäåðîâ, êîãäà îòêðûòûõ îðäåðîâ óæå íå îñòàëîñü |
//+---------------------------------------------------------------------------------------+
/*
bool OrdersDelete() // return(true) -ôóíêöèÿ âûïîëíèëà âñå ÷òî ìîãëà è óïðàâëåíèå ñëåäóåò ïåðåäàòü òåðìèíàëó
{ // return(false)-â âûçîâå ôóíêöèè íå áûëî íåîáõîäèìîñòè, óïðàâëåíèå ñëåäóåò ïåðåäàòü äàëåå ïî òåëó ôóíêöèè start()
//----
if (TradeCycleClose)
{
if ( (_ExpertOrdersSell + _ExpertOrdersBuy) != 0) return(false);
if (_ExpertOrdersTotal == 0) { TradeCycleClose = false; return(false); }
for (i = 0; i < _ExpertOrdersTotal; i++)
{
switch(_OrderType [i])
{
case OP_BUYSTOP : _OrderDelete(); break;
case OP_SELLSTOP : _OrderDelete(); break;
}
}
}
//----
return(true);
}
//+--------------------------------------------------------------------+
//| ôóíêöèÿ ïîñûëàåò íà ÒÎÐÃÎÂÛÉ ÑÅÐÂÅÐ êîìàíäó íà íåìåäëåííîå |
//| óäàëåíèå ëèìèòíîãî îðäåðà |
//+--------------------------------------------------------------------+
bool _OrderDelete()
{
if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // òîðãîâûé ïîòîê çàíÿò, ïîäîæäåì ñëåäóþùåãî òèêà
if (OrderDelete(_OrderTicket[i]
,CLR_NONE))
{
Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderDeleteOkMes);
PlaySound("ok.wav");
return(true);
}
LastError = GetLastError();
Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderDeleteErrorMes+" : "+ LastError+" - "+ErrorDescription(LastError));
PlaySound("alert.wav");
return(false);
}
*/
//+----------------------------------------------------------------------------------------------------------------------+
//| ôóíêöèÿ ïðîèçâîäèò çàêðûòèå âñåõ îòêðûòûõ îðäåðîâ, â ñëó÷àå åñëè îáíàðóæèò ñìåíó òðåíäà ïî ïðîñòîìó ïðèçíàêó Èøèìîêó |
//+----------------------------------------------------------------------------------------------------------------------+
bool OrdersClose(bool& BUY_Stop, bool& SELL_Stop ) // return(true) -ôóíêöèÿ âûïîëíèëà âñå ÷òî ìîãëà è óïðàâëåíèå ñëåäóåò ïåðåäàòü òåðìèíàëó
{ // return(false)-â âûçîâå ôóíêöèè íå áûëî íåîáõîäèìîñòè, óïðàâëåíèå ñëåäóåò ïåðåäàòü äàëåå ïî òåëó ôóíêöèè start()
if ( (BUY_Stop && _ExpertOrdersBuy != 0) || (SELL_Stop && _ExpertOrdersSell != 0))
{
i = 0;
TradeDirection = iif(BUY_Stop,+1,-1);
_OrderOpenPrice [i] = iif(TradeDirection == +1,Bid,Ask);
Order_Clr = iif(TradeDirection > 0,ORDER_BUY_CLR,ORDER_SELL_CLR);
if (_OrderClose())
{
BUY_Stop = iif(TradeDirection == +1,false,BUY_Stop );
SELL_Stop = iif(TradeDirection == -1,false,SELL_Stop);
}
return(true);
} // end of if ( (BUY_Stop && _ExpertOrdersOP_BUY != 0) || (SELL_Stop && _ExpertOrdersOP_SELL != 0))
return(false);
} // end of if ( (BUY_Stop && _ExpertOrdersBuy != 0) || (SELL_Stop && _ExpertOrdersSell != 0))
//+--------------------------------------------------------------------+
//| ôóíêöèÿ ïîñûëàåò íà ÒÎÐÃÎÂÛÉ ÑÅÐÂÅÐ êîìàíäó íà íåìåäëåííîå |
//| çàêðûòèå îòêðûòîãîî îðäåðà |
//+--------------------------------------------------------------------+
bool _OrderClose()
{
if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // òîðãîâûé ïîòîê çàíÿò, ïîäîæäåì ñëåäóþùåãî òèêà
if (OrderClose(_OrderTicket [i]
,_OrderLots [i]
,_OrderOpenPrice[i],3
,Order_Clr))
{
Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderCloseOkMes);
PlaySound("ok.wav");
return(true);
}
LastError = GetLastError();
Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderCloseErrorMes+" : "+ LastError+" - "+ErrorDescription(LastError));
PlaySound("alert.wav");
return(false);
} // end of bool _OrderClose()
//+-----------------------------------------------------------------------------------------------------+
//| ôóíêöèÿ ïðîèçâîäèò ôîðìèðîâàíèå ìàññèâîâ, êàæäûé èç êîòîðûõ ïðåäñòàâëÿåò îäíî |
//| ïîëå îðäåðà, ïðèíàäëåæàùåãî ýêñïåðòó. òàêèì îáðàçîì, ìíîæåñòâî ýëåìåíòîâ ìàññèâîâ ñ |
//| îäíèì çíà÷åíèå èíäåêñà ïðåäñòàâëÿåò îðäåð. ìàññèâû îòñîðòèðîâàíû â ïîðÿäêå âîçðàñòàíèÿ òèêåòà |
//| ðàçìåðíîñòü ìàññèâîâ = _ExpertOrdersTotal + 1 |
//| ïîñëåäíèå ýëåìåíòû ìàññèâîâ áóäóò èñïîëüçîâàòüñÿ íàìè äëÿ ôîðìèðîâàíèÿ äàííûõ ïðè îòêðûòèè/óñòàíîâêè|
//| íîâîãî îðäåðà |
//+----------------------------------------------------------------------------------------------------+
//"mailto:komposterius@mail.ru" - Àíäðåé Õàòèìëÿíñêèé - àâòîð ýòîé ôóíêöèè
//http://www.mql4.com/ru/users/komposter Àíäðåé Õàòèìëÿíñêèé
void AllOrdersInit( int magic )
{
int _GetLastError = 0, _OrdersTotal = OrdersTotal();
_ExpertOrdersTotal = 0; //îáùåå êîëè÷åñòâî îðäåðîâ, ïðèíàäëåæàùèõ ýêñïåðòó
_ExpertOrdersBuy = 0; //
_ExpertOrdersSell = 0; //
_ExpertOrdersBuyStop = 0; //
_ExpertOrdersSellStop = 0; //
_ExpertOrdersBuyLimit = 0; //
_ExpertOrdersSellLimit = 0; //
// èçìåíÿåì ðàçìåðû ìàññèâîâ ïîä òåêóùåå êîë-âî ïîçèöèé
// (åñëè _OrdersTotal = 0, ìåíÿåì ðàçìåð ìàññèâîâ íà 1)
int temp_value = MathMax( _OrdersTotal+1, 1 );
ArrayResize( _OrderTicket, temp_value );
ArrayResize( _OrderType, temp_value );
ArrayResize( _OrderLots, temp_value );
ArrayResize( _OrderOpenPrice, temp_value );
ArrayResize( _OrderStopLoss, temp_value );
ArrayResize( _OrderTakeProfit, temp_value );
ArrayResize( _OrderOpenTime, temp_value );
ArrayResize( _OrderProfit, temp_value );
ArrayResize( _OrderSwap, temp_value );
ArrayResize( _OrderCommission, temp_value );
ArrayResize( _OrderComment, temp_value );
ArrayResize( _OrderExpiration, temp_value );
ArrayResize( _OrderMagicNumber, temp_value );
// îáíóëÿåì ìàññèâû
ArrayInitialize( _OrderTicket, 0 );
ArrayInitialize( _OrderType, 0 );
ArrayInitialize( _OrderLots, 0 );
ArrayInitialize( _OrderOpenPrice, 0 );
ArrayInitialize( _OrderStopLoss, 0 );
ArrayInitialize( _OrderTakeProfit, 0 );
ArrayInitialize( _OrderOpenTime, 0 );
ArrayInitialize( _OrderProfit, 0 );
ArrayInitialize( _OrderSwap, 0 );
ArrayInitialize( _OrderCommission, 0 );
ArrayInitialize( _OrderExpiration, 0 );
ArrayInitialize( _OrderMagicNumber, 0 );
for ( int z = 0; z < _OrdersTotal; z ++ )
{
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
_GetLastError = GetLastError();
Print("OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
continue;
}
if (OrderMagicNumber() == magic && OrderSymbol() == Symbol() )
{
// çàïîëíÿåì ìàññèâ òèêåòîâ îðäåðîâ, ïðèíàäëåæàùèõ åêñïåðòó
_OrderTicket [_ExpertOrdersTotal] = OrderTicket();
_ExpertOrdersTotal ++;
switch(OrderType())
{
case OP_BUY : _ExpertOrdersBuy++ ; break;
case OP_SELL : _ExpertOrdersSell++ ; break;
case OP_BUYSTOP : _ExpertOrdersBuyStop++ ; break;
case OP_SELLSTOP : _ExpertOrdersSellStop++ ; break;
case OP_BUYLIMIT : _ExpertOrdersBuyLimit++ ; break;
case OP_SELLLIMIT : _ExpertOrdersSellLimit++ ; break;
}
}
}
// èçìåíÿåì ðàçìåðû ìàññèâîâ ïîä êîë-âî ïîçèöèé, ïðèíàäëåæàùèõ ýêñïåðòó + îäíà
// (åñëè _ExpertOrdersTotal = 0, ìåíÿåì ðàçìåð ìàññèâîâ íà 1)
temp_value = MathMax( _ExpertOrdersTotal+1, 1 );
ArrayResize( _OrderTicket, temp_value );
ArrayResize( _OrderType, temp_value );
ArrayResize( _OrderLots, temp_value );
ArrayResize( _OrderOpenPrice, temp_value );
ArrayResize( _OrderStopLoss, temp_value );
ArrayResize( _OrderTakeProfit, temp_value );
ArrayResize( _OrderOpenTime, temp_value );
ArrayResize( _OrderProfit, temp_value );
ArrayResize( _OrderSwap, temp_value );
ArrayResize( _OrderCommission, temp_value );
ArrayResize( _OrderComment, temp_value );
ArrayResize( _OrderExpiration, temp_value );
_OrderTicket[_ExpertOrdersTotal] = 99999999;// ïðè ñîðòèðîâêå ýòîò ïóñòîé ýëåìåíò áóäåò ïîñëåäíèì
ArraySort(_OrderTicket); // ïîëó÷èì õðîíîëîãè÷åñêèé ïîðÿäîê...
//------------------------------------------------------------------------------------------------------------------------
for ( z = 0; z < _ExpertOrdersTotal; z ++ )
{
if ( !OrderSelect( _OrderTicket[z], SELECT_BY_TICKET ) )
{
_GetLastError = GetLastError();
Print("OrderSelect( ", _OrderTicket[z], ", SELECT_BY_TICKET ) - Error #", _GetLastError );
continue;
}
// çàïîëíÿåì îñòàëüíûå ìàññèâû
_OrderType [z] = OrderType();
_OrderLots [z] = NormalizeDouble( OrderLots(), 2 );
_OrderOpenPrice [z] = NormalizeDouble( OrderOpenPrice(), Digits );
_OrderStopLoss [z] = NormalizeDouble( OrderStopLoss(), Digits );
_OrderTakeProfit [z] = NormalizeDouble( OrderTakeProfit(), Digits );
_OrderOpenTime [z] = OrderOpenTime();
_OrderProfit [z] = NormalizeDouble( OrderProfit(), 2 );
_OrderSwap [z] = NormalizeDouble( OrderSwap(), 2 );
_OrderCommission [z] = NormalizeDouble( OrderCommission(), 2 );
_OrderComment [z] = OrderComment();
_OrderExpiration [z] = OrderExpiration();
_OrderMagicNumber [z] = OrderMagicNumber();
}
//------------------------------------------------------------------------------------------------------------------------
return;
}
//------------------------------------------------------------------------------------------------------------------------
//http://www.mql4.com/ru/users/bstone -Êðàìàðü Ðîìàí - àâòîð ÷åòûðåõ, ñëåäóþùèõ íèæå ôóíêöèé
//+------------------------------------------------------------------+
//| helper functions - Êðàìàðü Ðîìàí
//+------------------------------------------------------------------+
int sign( double v )
{
if( v < 0 ) return( -1 );
return( 1 );
}
//+------------------------------------------------------------------+
double iif( bool condition, double ifTrue, double ifFalse )
{
if( condition ) return( ifTrue );
return( ifFalse );
}
//+------------------------------------------------------------------+
string iifStr( bool condition, string ifTrue, string ifFalse )
{
if( condition ) return( ifTrue );
return( ifFalse );
}
//+------------------------------------------------------------------+
int orderDirection()
{
return( 1 - 2 * ( OrderType() % 2 ) );
}
//------------------------------------------------------------------------------------------------------------------------
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
---