Orders Execution
0
Views
0
Downloads
0
Favorites
TradeContext
//+------------------------------------------------------------------+
//| TradeContext.mq4 |
//| Copyright © 2006, komposter |
//| mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, komposter"
#property link "mailto:komposterius@mail.ru"
/////////////////////////////////////////////////////////////////////////////////
/**/ int _IsTradeAllowed( int MaxWaiting_sec = 30 )
/////////////////////////////////////////////////////////////////////////////////
// ôóíêöèÿ îïðåäåëÿåò ñîñòîÿíèå òîðãîâîãî ïîòîêà. Êîäû âîçâðàòîâ:
// 1 - òîðãîâûé ïîòîê ñâîáîäåí, ìîæíî òîðãîâàòü
// 0 - òîðãîâûé ïîòîê áûë çàíÿò, íî îñâîáîäèëñÿ. Òîðãîâàòü ìîæíî òîëüêî ïîñëå îáíîâëåíèÿ ðûíî÷íîé èíôîðìàöèè.
// -1 - òîðãîâûé ïîòîê çàíÿò, îæèäàíèå ïðåðâàíî ïîëüçîâàòåëåì (ýêñïåðò óäàë¸í ñ ãðàôèêà, çàêðûò òåðìèíàë, èçìåíèëñÿ
// ïåðèîä è/èëè ñèìâîë ãðàôèêà, ... )
// -2 - òîðãîâûé ïîòîê çàíÿò, èñòåêëî ìàêñèìàëüíîå âðåìÿ îæèäàíèÿ (MaxWaiting_sec). Âîçìîæíî, ýêñïåðòó çàïðåùåíà
// òîðãîâëÿ (ãàëî÷êà "Ðàçðåøèòü ýêñïåðòó òîðãîâàòü" â íàñòðîéêàõ ýêñïåðòà).
//
// MaxWaiting_sec - âðåìÿ (â ñåêóíäàõ), â òå÷åíèè êîòîðîãî ôóíêöèÿ áóäåò æäàòü îñâîáîæäåíèÿ òîðãîâîãî ïîòîêà (åñëè îí
// çàíÿò). Ïî óìîë÷àíèþ = 30.
/////////////////////////////////////////////////////////////////////////////////
{
// ïðîâåðÿåì, ñâîáîäåí ëè òîðãîâûé ïîòîê
if ( !IsTradeAllowed() )
{
int StartWaitingTime = GetTickCount();
Print( "Òîðãîâûé ïîòîê çàíÿò! Æä¸ì, ïîêà îí îñâîáîäèòüñÿ..." );
// áåñêîíå÷íûé öèêë
while ( true )
{
// åñëè ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì, ïðåêðàùàåì ðàáîòó
if ( IsStopped() ) { Print( "Ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì!" ); return(-1); }
// åñëè îæèäàíèå äëèòñÿ äîëüøå âðåìåíè, óêàçàííîãî â ïåðåìåííîé MaxWaiting_sec, òîæå ïðåêðàùàåì ðàáîòó
if ( GetTickCount() - StartWaitingTime > MaxWaiting_sec * 1000 ) { Print( "Ïðåâûøåí ëèìèò îæèäàíèÿ (" + MaxWaiting_sec + " ñåê.)!" ); return(-2); }
// åñëè òîðãîâûé ïîòîê îñâîáîäèëñÿ,
if ( IsTradeAllowed() )
{
Print( "Òîðãîâûé ïîòîê îñâîáîäèëñÿ!" );
return(0);
}
// åñëè íè îäíî èç óñëîâèé îñòàíîâêè öèêëà íå ñðàáîòàëî, "æä¸ì" 0,1 ñåêóíäû è íà÷èíàåì ïðîâåðêó ñíà÷àëà
Sleep(100);
}
}
else
{
Print( "Òîðãîâûé ïîòîê ñâîáîäåí!" );
return(1);
}
}
/*
Øàáëîí ýêñïåðòà, èñïîëüçóþùåãî ôóíêöèþ _IsTradeAllowed:
int start()
{
// îïðåäåëÿåì íåîáõîäèìîñòü âõîäà â ðûíîê
...
// ðàñ÷èòûâàåì óðîâíè Ñòîï Ëîññ, Òåéê Ïðîôèò è ðàçìåð ëîòà
...
// ïðîâåðÿåì, ñâîáîäåí ëè òîðãîâûé ïîòîê
int TradeAllow = _IsTradeAllowed();
if ( TradeAllow < 0 ) { return(-1); }
if ( TradeAllow == 0 )
{
RefreshRates();
// ïåðåñ÷èòûâàåì óðîâíè Ñòîï Ëîññ è Òåéê Ïðîôèò
...
}
// îòêðûâàåì ïîçèöèþ
OrderSend(.....);
return(0);
}
*/
/////////////////////////////////////////////////////////////////////////////////
/**/ int TradeIsBusy ( int MaxWaiting_sec = 30 )
/////////////////////////////////////////////////////////////////////////////////
// Ôóíêöèÿ ìåíÿåò çíà÷åíèå ãëîáàëüíîé ïåðåìåííîé TradeIsBusy ñ 0 íà 1.
// Åñëè â ìîìåíò çàïóñêà TradeIsBusy = 1, ôóíêöèÿ æä¸ò, ïîêà TradeIsBusy ñòàíåò = 0, è òîëüêî ïîòîì ìåíÿåò.
// Åñëè ãëîáàëüíîé ïåðåìåííîé TradeIsBusy íå ñóùåñòâóåò, ôóíêöèÿ ñîçäà¸ò å¸.
// Êîäû âîçâðàòîâ:
// 1 - óñïåøíîå çàâåðøåíèå. Ãëîáàëüíîé ïåðåìåííîé TradeIsBusy ïðèñâîåíî çíà÷åíèå 1
// -1 - â ìîìåíò çàïóñêà ôóíêöèè TradeIsBusy = 1, îæèäàíèå áûëî ïðåðâàíî ïîëüçîâàòåëåì (ýêñïåðò óäàë¸í ñ ãðàôèêà, çàêðûò
// òåðìèíàë, èçìåíèëñÿ ïåðèîä è/èëè ñèìâîë ãðàôèêà, ... )
// -2 - â ìîìåíò çàïóñêà ôóíêöèè TradeIsBusy = 1, èñòåêëî ìàêñèìàëüíîå âðåìÿ îæèäàíèÿ (MaxWaiting_sec)
/////////////////////////////////////////////////////////////////////////////////
{
// ïðè òåñòèðîâàíèè íåò ñìûñëà â ðàçäåëåíèè òîðãîâîãî ïîòîêà - ïðîñòî çàâåðøàåì ðàáîòó ôóíêöèè
if ( IsTesting() ) { return(1); }
int _GetLastError = 0, StartWaitingTime = GetTickCount();
//+------------------------------------------------------------------+
//| Ïðîâåðÿåì, ñóùåñòâóåò ëè ãë. ïåðåìåííàÿ è, åñëè íåò, ñîçäà¸ì å¸
//+------------------------------------------------------------------+
while( true )
{
// åñëè ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì, ïðåêðàùàåì ðàáîòó
if ( IsStopped() ) { Print( "Ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì!" ); return(-1); }
// åñëè îæèäàíèå äëèòñÿ äîëüøå âðåìåíè, óêàçàííîãî â ïåðåìåííîé MaxWaiting_sec, òîæå ïðåêðàùàåì ðàáîòó
if ( GetTickCount() - StartWaitingTime > MaxWaiting_sec * 1000 ) { Print( "Ïðåâûøåí ëèìèò îæèäàíèÿ (" + MaxWaiting_sec + " ñåê.)!" ); return(-2); }
// ïðîâåðÿåì, ñóùåñòâóåò ëè ãë. ïåðåìåííàÿ
if ( GlobalVariableCheck( "TradeIsBusy" ) )
// åñëè îíà åñòü, âûõîäèì èç ýòîãî öèêëà è ïåðåõîäèì ê áëîêó èçìåíåíèÿ çíà÷åíèÿ TradeIsBusy
{ break; }
else
// åñëè GlobalVariableCheck âåðíóëà FALSE, çíà÷èò ëèáî ïåðåìåííîé íåò, ëèáî ïðè ïðîâåðêå âîçíèêëà îøèáêà
{
_GetLastError = GetLastError();
// åñëè ýòî âñ¸ òàêè îøèáêà, âûâîäèì èíôîðìàöèþ, æä¸ì 0,1 ñåêóíäû è íà÷èíàåì ïðîâåðêó ñíà÷àëà
if ( _GetLastError != 0 )
{
Print( "TradeIsBusy() - GlobalVariableCheck ( \"TradeIsBusy\" ) - Error #", _GetLastError );
Sleep(100);
continue;
}
}
// åñëè îøèáêè íåò, çíà÷èò ãëîáàëüíîé ïåðåìåííîé ïðîñòî íåò, ïûòàåìñÿ ñîçäàòü å¸
if ( GlobalVariableSet ( "TradeIsBusy", 1.0 ) > 0 )
// åñëè GlobalVariableSet > 0, çíà÷èò ãëîáàëüíàÿ ïåðåìåííàÿ óñïåøíî ñîçäàíà. Âûõîäèì èç ô-öèè
{ return(1); }
else
// åñëè GlobalVariableSet âåðíóëà çíà÷åíèå <= 0, çíà÷èò ïðè ñîçäàíèè ïåðåìåííîé âîçíèêëà îøèáêà
{
_GetLastError = GetLastError();
// âûâîäèì èíôîðìàöèþ, æä¸ì 0,1 ñåêóíäû è íà÷èíàåì ïîïûòêó ñíà÷àëà
if ( _GetLastError != 0 )
{
Print( "TradeIsBusy() - GlobalVariableSet ( \"TradeIsBusy\", 0.0 ) - Error #", _GetLastError );
Sleep(100);
continue;
}
}
}
//+------------------------------------------------------------------+
//| Åñëè âûïîëíåíèå ôóíêöèè äîøëî äî ýòîãî ìåñòà, çíà÷èò ãëîáàëüíàÿ ïåðåìåííàÿ ñóùåñòâóåò.
//| Æä¸ì, ïîêà TradeIsBusy ñòàíåò = 0 è ìåíÿåì çíà÷åíèå TradeIsBusy ñ 0 íà 1
//+------------------------------------------------------------------+
while( true )
{
// åñëè ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì, ïðåêðàùàåì ðàáîòó
if ( IsStopped() ) { Print( "Ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì!" ); return(-1); }
// åñëè îæèäàíèå äëèòñÿ äîëüøå âðåìåíè, óêàçàííîãî â ïåðåìåííîé MaxWaiting_sec, òîæå ïðåêðàùàåì ðàáîòó
if ( GetTickCount() - StartWaitingTime > MaxWaiting_sec * 1000 ) { Print( "Ïðåâûøåí ëèìèò îæèäàíèÿ (" + MaxWaiting_sec + " ñåê.)!" ); return(-2); }
// ïûòàåìñÿ ìåíÿòü çíà÷åíèå TradeIsBusy ñ 0 íà 1
if ( GlobalVariableSetOnCondition( "TradeIsBusy", 1.0, 0.0 ) )
// åñëè íàì ýòî óäà¸òñÿ, âûõîäèì èç ô-öèè, âîçâðàùàÿ 1 - "óñïåøíîå çàâåðøåíèå"
{ return(1); }
else
// åñëè íåò, âîçìîæíû 2 ïðè÷èíû: TradeIsBusy = 1 (òîãäà íàäî æäàòü), ëèáî âîçíèêëà îøèáêà (ýòî ìû è ïðîâåðèì)
{
_GetLastError = GetLastError();
// åñëè ýòî âñ¸ òàêè îøèáêà, âûâîäèì èíôîðìàöèþ è ïðîáóåì åù¸ ðàç
if ( _GetLastError != 0 )
{
Print( "TradeIsBusy() - GlobalVariableSetOnCondition ( \"TradeIsBusy\", 1.0, 0.0 ) - Error #", _GetLastError );
continue;
}
}
// åñëè îøèáêè íåò, çíà÷èò TradeIsBusy = 1 (äðóãîé ýêñïåðò òîðãóåò) - âûâîäèì èíôîðìàöèþ è æä¸ì...
Comment ( "Æä¸ì, ïîêà äðóãîé ýêñïåðò çàêîí÷èò òîðãîâàòü..." );
Sleep(1000);
}
}
/////////////////////////////////////////////////////////////////////////////////
/**/ void TradeIsNotBusy ()
/////////////////////////////////////////////////////////////////////////////////
// Ôóíêöèÿ óñòàíàâëèâàåò çíà÷åíèå ãëîáàëüíîé ïåðåìåííîé TradeIsBusy = 0.
// Åñëè ãëîáàëüíîé ïåðåìåííîé TradeIsBusy íå ñóùåñòâóåò, ôóíêöèÿ ñîçäà¸ò å¸.
/////////////////////////////////////////////////////////////////////////////////
{
// ïðè òåñòèðîâàíèè íåò ñìûñëà â ðàçäåëåíèè òîðãîâîãî ïîòîêà - ïðîñòî çàâåðøàåì ðàáîòó ôóíêöèè
if ( IsTesting() ) { return(0); }
int _GetLastError;
while( true )
{
// åñëè ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì, ïðåêðàùàåì ðàáîòó
if ( IsStopped() ) { Print( "Ýêñïåðò áûë îñòàíîâëåí ïîëüçîâàòåëåì!" ); return(-1); }
// ïûòàåìñÿ óñòàíîâèòü çíà÷åíèå ãë. ïåðåìåííîé = 0 (èëè ñîçäàòü ãë. ïåðåìåííóþ)
if ( GlobalVariableSet( "TradeIsBusy", 0.0 ) > 0 )
// åñëè GlobalVariableSet âåðíóëà çíà÷åíèå > 0, çíà÷èò âñ¸ çàêîí÷èëîñü õîðîøî. Âûõîäèì èç ô-öèè
{ return(1); }
else
// åñëè GlobalVariableSet âåðíóëà çíà÷åíèå <= 0, çíà÷èò âîçíèêëà îøèáêà. Âûâîäèì èíôîðìàöèþ, æä¸ì, è ïðîáóåì åù¸ ðàç
{
_GetLastError = GetLastError();
if ( _GetLastError != 0 )
{ Print( "TradeIsNotBusy() - GlobalVariableSet ( \"TradeIsBusy\", 0.0 ) - Error #", _GetLastError ); }
}
Sleep(100);
}
}
/*
Øàáëîí ýêñïåðòà, èñïîëüçóþùåãî ôóíêöèè TradeIsBusy() è TradeIsNotBusy():
#include <TradeContext.mqh>
int start()
{
// îïðåäåëÿåì íåîáõîäèìîñòü âõîäà â ðûíîê
...
// ðàñ÷èòûâàåì óðîâíè Ñòîï Ëîññ, Òåéê Ïðîôèò è ðàçìåð ëîòà
...
// æä¸ì îñâîáîæäåíèÿ òîðãîâîãî ïîòîêà è çàíèìàåì åãî (åñëè ïðîèçîøëà îøèáêà, âûõîäèì)
if ( TradeIsBusy() < 0 ) { return(-1); }
// îáíîâëÿåì ðûíî÷íóþ èíôîðìàöèþ
RefreshRates();
// ïåðåñ÷èòûâàåì óðîâíè Ñòîï Ëîññ è Òåéê Ïðîôèò
...
// îòêðûâàåì ïîçèöèþ
OrderSend(.....);
// îñâîáîæäàåì òîðãîâûé ïîòîê
TradeIsNotBusy();
return(0);
}
*/
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
---