//+------------------------------------------------------------------+
//| PauseBeforeTrade.mq4 |
//| Copyright © 2006, komposter |
//| mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
//#property copyright "Copyright © 2006, komposter"
//#property link "mailto:komposterius@mail.ru"
extern int PauseBeforeTrade = 10; // ïàóçà ìåæäó òîðãîâûìè îïåðàöèÿìè (â ñåêóíäàõ)
/////////////////////////////////////////////////////////////////////////////////
// int _PauseBeforeTrade ()
//
// Ôóíêöèÿ óñòàíàâëèâàåò ãëîáàëüíîé ïåðåìåííîé LastTradeTime çíà÷åíèå ëîêàëüíîãî âðåìåíè.
// Åñëè â ìîìåíò çàïóñêà ëîêàëüíîå âðåìÿ ìåíüøå, ÷åì çíà÷åíèå LastTradeTime + PauseBeforeTrade, ôóíêöèÿ æä¸ò.
// Åñëè ãëîáàëüíîé ïåðåìåííîé LastTradeTime íå ñóùåñòâóåò, ôóíêöèÿ ñîçäà¸ò å¸.
// Êîäû âîçâðàòîâ:
// 1 - óñïåøíîå çàâåðøåíèå
// -1 - ðàáîòà ýêñïåðòà áûëà ïðåðâàíà ïîëüçîâàòåëåì (ýêñïåðò óäàë¸í ñ ãðàôèêà, çàêðûò òåðìèíàë, èçìåíèëñÿ ïåðèîä
// èëè ñèìâîë ãðàôèêà, ... )
/////////////////////////////////////////////////////////////////////////////////
int _PauseBeforeTrade ()
{
// ïðè òåñòèðîâàíèè íåò ñìûñëà âûäåðæèâàòü ïàóçó - ïðîñòî çàâåðøàåì ðàáîòó ôóíêöèè
if ( IsTesting() ) { return(1); }
int _GetLastError = 0;
double _LastTradeTime, RealPauseBeforeTrade;
//+------------------------------------------------------------------+
//| Ïðîâåðÿåì, ñóùåñòâóåò ëè ãë. ïåðåìåííàÿ è, åñëè íåò, ñîçäà¸ì å¸ |
//+------------------------------------------------------------------+
while( true )
{
// åñëè ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì, ïðåêðàùàåì ðàáîòó
if ( IsStopped() ) { Print( "Ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì!" ); return(-1); }
// ïðîâåðÿåì, ñóùåñòâóåò ëè ãë. ïåðåìåííàÿ
// åñëè îíà åñòü, âûõîäèì èç ýòîãî öèêëà
if ( GlobalVariableCheck( "LastTradeTime" ) ) break;
else
// åñëè GlobalVariableCheck âåðíóëà FALSE, çíà÷èò ëèáî ïåðåìåííîé íåò, ëèáî ïðè ïðîâåðêå âîçíèêëà îøèáêà
{
_GetLastError = GetLastError();
// åñëè ýòî âñ¸ òàêè îøèáêà, âûâîäèì èíôîðìàöèþ, æä¸ì 0,1 ñåêóíäû è íà÷èíàåì ïðîâåðêó ñíà÷àëà
if ( _GetLastError != 0 )
{
Print( "_PauseBeforeTrade() - GlobalVariableCheck( \"LastTradeTime\" ) - Error #", _GetLastError );
Sleep(100);
continue;
}
}
// åñëè îøèáêè íåò, çíà÷èò ãëîáàëüíîé ïåðåìåííîé ïðîñòî íåò, ïûòàåìñÿ ñîçäàòü å¸
// åñëè GlobalVariableSet > 0, çíà÷èò ãëîáàëüíàÿ ïåðåìåííàÿ óñïåøíî ñîçäàíà. Âûõîäèì èç ô-öèè
if ( GlobalVariableSet( "LastTradeTime", LocalTime() ) > 0 ) return(1);
else
// åñëè GlobalVariableSet âåðíóëà çíà÷åíèå <= 0, çíà÷èò ïðè ñîçäàíèè ïåðåìåííîé âîçíèêëà îøèáêà
{
_GetLastError = GetLastError();
// âûâîäèì èíôîðìàöèþ, æä¸ì 0,1 ñåêóíäû è íà÷èíàåì ïîïûòêó ñíà÷àëà
if ( _GetLastError != 0 )
{
Print( "_PauseBeforeTrade() - GlobalVariableSet ( \"LastTradeTime\", ", LocalTime(), " ) - Error #", _GetLastError );
Sleep(100);
continue;
}
}
}
//+---------------------------------------------------------------------------------------+
//| Åñëè âûïîëíåíèå ôóíêöèè äîøëî äî ýòîãî ìåñòà, çíà÷èò ãëîáàëüíàÿ ïåðåìåííàÿ ñóùåñòâóåò.|
//| Æä¸ì, ïîêà LocalTime() ñòàíåò > LastTradeTime + PauseBeforeTrade |
//+---------------------------------------------------------------------------------------+
while( true )
{
// åñëè ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì, ïðåêðàùàåì ðàáîòó
if ( IsStopped() ) { Print( "Ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì!" ); return(-1); }
// ïîëó÷àåì çíà÷åíèå ãë. ïåðåìåííîé
_LastTradeTime = GlobalVariableGet ( "LastTradeTime" );
// åñëè ïðè ýòîì âîçíèêàåò îøèáêà, âûâîäèì èíôîðìàöèþ, æä¸ì 0,1 ñåêóíäû è íà÷èíàåì ïîïûòêó ñíà÷àëà
_GetLastError = GetLastError();
if ( _GetLastError != 0 )
{
Print( "_PauseBeforeTrade() - GlobalVariableGet ( \"LastTradeTime\" ) - Error #", _GetLastError );
continue;
}
// ñ÷èòàåì, ñêîëüêî ïðîøëî ñåêóíä ñî âðåìåíè ïîñëåäíåé òîðãîâîé îïåðàöèè
RealPauseBeforeTrade = LocalTime() - _LastTradeTime;
// åñëè ïðîøëî ìåíüøå, ÷åì PauseBeforeTrade ñåêóíä,
if ( RealPauseBeforeTrade < PauseBeforeTrade )
{
// âûâîäèì èíôîðìàöèþ, æä¸ì ñåêóíäó, è ïðîâåðÿåì ñíîâà
Comment( "Ïàóçà ìåæäó òîðãîâûìè îïåðàöèÿìè. Îñòàëîñü ", DoubleToStr( PauseBeforeTrade - RealPauseBeforeTrade, 0 ), " ñåê." );
Sleep(1000);
continue;
}
// åñëè ïðîøëî áîëüøå, ÷åì PauseBeforeTrade ñåêóíä, îñòàíàâëèâàåì âûïîëíåíèÿ öèêëà
else
{ break; }
}
//+---------------------------------------------------------------------------------------+
//| Åñëè âûïîëíåíèå ôóíêöèè äîøëî äî ýòîãî ìåñòà, çíà÷èò ãëîáàëüíàÿ ïåðåìåííàÿ ñóùåñòâóåò,|
//| è ëîêàëüíîå âðåìÿ áîëüøå, ÷åì LastTradeTime + PauseBeforeTrade |
//| Óñòàíàâëèâàåì ãëîáàëüíîé ïåðåìåííîé LastTradeTime çíà÷åíèå ëîêàëüíîãî âðåìåíè |
//+---------------------------------------------------------------------------------------+
while( true )
{
// åñëè ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì, ïðåêðàùàåì ðàáîòó
if ( IsStopped() ) { Print( "Ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì!" ); return(-1); }
// Óñòàíàâëèâàåì ãëîáàëüíîé ïåðåìåííîé LastTradeTime çíà÷åíèå ëîêàëüíîãî âðåìåíè. Åñëè óñïåøíî - âûõîäèì
if ( GlobalVariableSet( "LastTradeTime", LocalTime() ) > 0 ) { Comment( "" ); return(1); }
else
// åñëè GlobalVariableSet âåðíóëà çíà÷åíèå <= 0, çíà÷èò âîçíèêëà îøèáêà
{
_GetLastError = GetLastError();
// âûâîäèì èíôîðìàöèþ, æä¸ì 0,1 ñåêóíäû è íà÷èíàåì ïîïûòêó ñíà÷àëà
if ( _GetLastError != 0 )
{
Print( "_PauseBeforeTrade() - GlobalVariableSet ( \"LastTradeTime\", ", LocalTime(), " ) - Error #", _GetLastError );
Sleep(100);
continue;
}
}
}
}
Comments