VisualizationTestExpert

Author: Copyright � 2006, komposter
Orders Execution
It Closes Orders by itself It can change open orders parameters, due to possible stepping strategyChecks for the total of open ordersIt automatically opens orders when conditions are reached
Indicators Used
MACD Histogram
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
VisualizationTestExpert
//+------------------------------------------------------------------+
//|                                      VisualizationTestExpert.mq4 |
//|                                      Copyright © 2006, komposter |
//|                                      mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, komposter"
#property link      "mailto:komposterius@mail.ru"

extern int			_MagicNumber					= 1122;
extern int			StopLoss							= 50;
extern int			TakeProfit						= 100;
extern int			TrailingStop					= 50;

extern int			FastEMAPeriod					= 12;
extern int			SlowEMAPeriod					= 26;

extern int			OpenLuft							= 10;
extern int			CloseLuft						= 0;

int _Ticket = 0, _Type = 0; double _Lots = 0.0, _OpenPrice = 0.0, _StopLoss = 0.0;
double _TakeProfit = 0.0; datetime _OpenTime = -1; double _Profit = 0.0, _Swap = 0.0;
double _Commission = 0.0; string _Comment = ""; datetime _Expiration = -1;

#include <VisualTestingTools.mq4>

int init()
{
	vTerminalInit();
	vHistoryInit();
	return(0);
}

int start()
{
	vTerminalRefresh();
	vHistoryRefresh();

	int _GetLastError = 0;

	//---- Çàïîìèíàåì ïàðàìåòðû îòêðûòîé ïîçèöèè (åñëè îíà åñòü)
	OneOrderInit( _MagicNumber );

	//---- Çàïîìèíàåì çíà÷åíèÿ èíäèêàòîðà äëÿ äàëüíåéøåãî àíàëèçà
	double MACD_1 = iMACD( Symbol(), 0, FastEMAPeriod, SlowEMAPeriod, 9, 
															PRICE_CLOSE, MODE_MAIN, 1 );
	double MACD_2 = iMACD( Symbol(), 0, FastEMAPeriod, SlowEMAPeriod, 9, 
															PRICE_CLOSE, MODE_MAIN, 2 );

	//---- À òåïåðü, âìåñòî ïåðåáîðà ïîçèöèé, ïðîñòî ñìîòðèì, åñòü ëè îòêðûòàÿ ïîçèöèÿ:
	if ( _Ticket > 0 )
	{
		//---- åñëè îòêðûòà ÁÀÉ-ïîçèöèÿ,
		if ( _Type == OP_BUY )
		{
			//---- åñëè ÌÀÊÄ ïåðåñ¸ê 0-þ ëèíèþ âíèç,
			if ( NormalizeDouble( MACD_1 + CloseLuft*Point*0.1, Digits + 1 ) <= 0.0 )
			{
				//---- çàêðûâàåì ïîçèöèþ
				if ( !OrderClose( _Ticket, _Lots, Bid, 5, Green ) )
				{
					_GetLastError = GetLastError();
					Alert( "Îøèáêà OrderClose ¹ ", _GetLastError );
					return(-1);
				}
			}
			//---- åñëè ñèãíàë íå èçìåíèëñÿ, âûõîäèì - ïîêà ðàíî îòêðûâàòü íîâóþ ïîçèöèþ
			else
			{
				if ( TrailingStop > 0 )
				{
					if ( NormalizeDouble( Bid - _OpenPrice, Digits ) > 0.0 )
					{
						if ( NormalizeDouble( Bid - _StopLoss - TrailingStop*Point, Digits ) > 0.0 ||
							  _StopLoss < Point )
						{
							if ( !OrderModify( _Ticket, _OpenPrice, Bid - TrailingStop*Point, 
																	_TakeProfit, _Expiration, Magenta ) )
							{
								_GetLastError = GetLastError();
								Alert( "Îøèáêà OrderModify ¹ ", _GetLastError );
								return(-1);
							}
						}
					}
				}
				return(0);
			}
		}
		//---- åñëè îòêðûòà ÑÅËË-ïîçèöèÿ,
		if ( _Type == OP_SELL )
		{
			//---- åñëè ÌÀÊÄ ïåðåñ¸ê 0-þ ëèíèþ ââåðõ,
			if ( NormalizeDouble( MACD_1 - CloseLuft*Point*0.1, Digits + 1 ) >= 0.0 )
			{
				//---- çàêðûâàåì ïîçèöèþ
				if ( !OrderClose( _Ticket, _Lots, Ask, 5, Red ) )
				{
					_GetLastError = GetLastError();
					Alert( "Îøèáêà OrderClose ¹ ", _GetLastError );
					return(-1);
				}
			}
			//---- åñëè ñèãíàë íå èçìåíèëñÿ, âûõîäèì - ïîêà ðàíî îòêðûâàòü íîâóþ ïîçèöèþ
			else
			{
				if ( TrailingStop > 0 )
				{
					if ( NormalizeDouble( _OpenPrice - Ask, Digits ) > 0.0 )
					{
						if ( NormalizeDouble( _StopLoss - ( Ask + TrailingStop*Point ), Digits ) > 0.0 ||
							  _StopLoss < Point )
						{
							if ( !OrderModify( _Ticket, _OpenPrice, Ask + TrailingStop*Point, 
																	_TakeProfit, _Expiration, Magenta ) )
							{
								_GetLastError = GetLastError();
								Alert( "Îøèáêà OrderModify ¹ ", _GetLastError );
								return(-1);
							}
						}
					}
				}
				return(0);
			}
		}
	}
	//---- åñëè íåò ïîçèöèè, îòêðûòîé ýêñïåðòîì ( _Ticket == 0 )
	//---- åñëè ÌÀÊÄ ïåðåñ¸ê 0-þ ëèíèþ ââåðõ,
	if ( NormalizeDouble( MACD_1 - OpenLuft*Point*0.1, Digits + 1 ) > 0.0 && 
		  NormalizeDouble( MACD_2, Digits + 1 ) <= 0.0 )
	{
		//---- îòêðûâàåì ÁÀÉ ïîçèöèþ
		OpenBuy();
		return(0);
	}
	//---- åñëè ÌÀÊÄ ïåðåñ¸ê 0-þ ëèíèþ âíèç,
	if ( NormalizeDouble( MACD_1 + OpenLuft*Point*0.1, Digits + 1 ) < 0.0 && 
		  NormalizeDouble( MACD_2, Digits + 1 ) >= 0.0 )
	{
		//---- îòêðûâàåì ÑÅËË ïîçèöèþ
		OpenSell();
		return(0);
	}
	return(0);
}

void OneOrderInit( int magic )
{
	int _GetLastError, _OrdersTotal = OrdersTotal();

	_Ticket = 0; _Type = 0; _Lots = 0.0; _OpenPrice = 0.0; _StopLoss = 0.0;
	_TakeProfit = 0.0; _OpenTime = -1; _Profit = 0.0; _Swap = 0.0;
	_Commission = 0.0; _Comment = ""; _Expiration = -1;

	for ( int z = _OrdersTotal - 1; z >= 0; z -- )
	{
		if ( !OrderSelect( z, SELECT_BY_POS ) )
		{
			_GetLastError = GetLastError();
			Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
			continue;
		}
		if ( OrderMagicNumber() == magic && OrderSymbol() == Symbol() )
		{
			_Ticket		= OrderTicket();
			_Type			= OrderType();
			_Lots			= NormalizeDouble( OrderLots(), 1 );
			_OpenPrice	= NormalizeDouble( OrderOpenPrice(), Digits );
			_StopLoss	= NormalizeDouble( OrderStopLoss(), Digits );
			_TakeProfit	= NormalizeDouble( OrderTakeProfit(), Digits );
			_OpenTime	= OrderOpenTime();
			_Profit		= NormalizeDouble( OrderProfit(), 2 );
			_Swap			= NormalizeDouble( OrderSwap(), 2 );
			_Commission	= NormalizeDouble( OrderCommission(), 2 );
			_Comment		= OrderComment();
			_Expiration	= OrderExpiration();
			return(0);
		}
	}
}

void OpenBuy()
{
	int _GetLastError = 0;
	double _OpenPriceLevel, _StopLossLevel, _TakeProfitLevel;
	_OpenPriceLevel = NormalizeDouble( Ask, Digits );

	if ( StopLoss > 0 )
	{ _StopLossLevel = NormalizeDouble( _OpenPriceLevel - StopLoss*Point, Digits ); }
	else
	{ _StopLossLevel = 0.0; }

	if ( TakeProfit > 0 )
	{ _TakeProfitLevel = NormalizeDouble( _OpenPriceLevel + TakeProfit*Point, Digits ); }
	else
	{ _TakeProfitLevel = 0.0; }

	if ( OrderSend( Symbol(), OP_BUY, 0.1, _OpenPriceLevel, 3, _StopLossLevel, 
		  _TakeProfitLevel, "CrossMACD", _MagicNumber, 0, Green ) < 0 )
	{
		_GetLastError = GetLastError();
		Alert( "Îøèáêà OrderSend ¹ ", _GetLastError );
		return(-1);
	}
}

void OpenSell()
{
	int _GetLastError = 0;
	double _OpenPriceLevel, _StopLossLevel, _TakeProfitLevel;
	_OpenPriceLevel = NormalizeDouble( Bid, Digits );

	if ( StopLoss > 0 )
	{ _StopLossLevel = NormalizeDouble( _OpenPriceLevel + StopLoss*Point, Digits ); }
	else
	{ _StopLossLevel = 0.0; }

	if ( TakeProfit > 0 )
	{ _TakeProfitLevel = NormalizeDouble( _OpenPriceLevel - TakeProfit*Point, Digits ); }
	else
	{ _TakeProfitLevel = 0.0; }

	if ( OrderSend( Symbol(), OP_SELL, 0.1, _OpenPriceLevel, 3, _StopLossLevel, 
				  _TakeProfitLevel, "CrossMACD", _MagicNumber, 0, Red ) < 0 )
	{
		_GetLastError = GetLastError();
		Alert( "Îøèáêà OrderSend ¹ ", _GetLastError );
		return(-1);
	}
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---