TradeSystem





//+------------------------------------------------------------------+
//|                                                  TradeSystem.mq4 |
//|                                 Copyright © 2007 Ñåðãååâ Àëåêñåé |
//|                                                los@we.kherson.ua |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Ñåðãååâ Àëåêñåé "
#property link      "mailto: los@we.kherson.ua"

#include <Traling.mqh>
#include <stderror.mqh>
#include <stdlib.mqh>

double MinLot=0.1; //Ñàìûé ìàëåíüêèé ëîò, ñ êîòîðîãî íà÷èíàåò òîðãîâëþ ëþáîé ïðîöåññ 

void ProcessAvgLim(int SignalID, int SysID, color ClrBuy, color ClrSell)
{
//	double lots = AccountFreeMargin()*0.1*0.00001; //íà÷àëüíûé ëîò = 100 ó.å. ïðè 100000 ó.å. (ñîîòíîøåíèå 1/1000)
	double lots = AccountFreeMargin()*0.1*0.00001; //íà÷àëüíûé ëîò
	lots = NormalizeDouble(lots, LotDigit); //îêðóãëèëè äî çíàêîâ ìèíèìàëüíîãî ëîòà
	if (MinLot>lots) lots = MinLot;// åñëè òåêóùéè áàëàíñ ìåíüøå ìèíèìàëüíîãî
	
	double price = 0.0;
	int total, i, cbuy, csell, Signal, pos;
	
//---- òåïåðü äëÿ íîâûõ ïîçèöèé
	Signal = CheckSignal(true, SignalID);
	if (Signal == -1) return; // åñëè íåò ñèãíàëà òî ïðîñòî íè÷åãî íå äåëàåì
	
//----- äëÿ ñîâåðøåíèÿ ïîêóïêè
	if(Signal == OP_BUY)
	{
		cbuy = CountAllOrders(OP_BUY, SysID); 
		if (cbuy<=0) //åñëè íåò, òî îòêðûâàåì
		{	//èíà÷å çà÷èñòèëè îðäåðà LIMIT
			total = CreatTicketArray(OP_BUYLIMIT, SysID); for (i=1; i<=total; i++) OrderDelete(Ticket[i], Green);
			//îòêðûâàåì îðäåð
			OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Ask-SysPar[SysID][_SL]*Point, Ask+SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrBuy);
		}
		else // èíà÷å äîëèâàåì
		{	// íàõîäèì ñàìûé ïåðâûé îðäåð	
			total = CreatTicketArray(OP_BUY, SysID); OrderSelect(Ticket[1], SELECT_BY_TICKET); price=OrderOpenPrice(); pos = 1;
			for (i=2; i<=total; i++)
			{	OrderSelect(Ticket[i], SELECT_BY_TICKET);	if (OrderOpenPrice()>price)	{	price=OrderOpenPrice(); pos = i; }	}
			OrderSelect(Ticket[pos], SELECT_BY_TICKET);  lots = OrderLots(); 	lots = NormalizeDouble(lots, LotDigit);
			if (OrderOpenPrice()<Ask-100*Point)
				OrderSend(Symbol(), OP_BUY, lots, Ask, 2, Ask-SysPar[SysID][_SL]*Point, Ask+SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrBuy);
		}
	}
//----- äëÿ ñîâåðøåíèÿ ïðîäàæè àíàëîãè÷íî
	if(Signal == OP_SELL)
	{
		csell = CountAllOrders(OP_SELL, SysID); 
		if (csell<=0)	//åñëè íåò, òî îòêðûâàåì
		{
			total = CreatTicketArray(OP_SELLLIMIT, SysID);	for (i=1; i<=total; i++)	OrderDelete(Ticket[i], Red);
			OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Bid+SysPar[SysID][_SL]*Point, Bid-SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrSell);
		}
		else // èíà÷å äîëèâàåì
		{	// íàõîäèì ñàìûé ïåðâûé îðäåð	
			total = CreatTicketArray(OP_SELL, SysID);	OrderSelect(Ticket[1], SELECT_BY_TICKET); price=OrderOpenPrice(); pos = 1;
			for (i=2; i<=total; i++)
			{	OrderSelect(Ticket[i], SELECT_BY_TICKET);	if (OrderOpenPrice()<price)	{	price=OrderOpenPrice(); pos = i; }	}
			OrderSelect(Ticket[pos], SELECT_BY_TICKET);  lots = OrderLots(); 	lots = NormalizeDouble(lots, LotDigit);
			if (OrderOpenPrice()>Bid+100*Point)
				OrderSend(Symbol(), OP_SELL, lots, Bid, 2, Bid+SysPar[SysID][_SL]*Point, Bid-SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrBuy);
		}
	}
}

void ProcessAvgStop(int SignalID, int SysID, color ClrBuy, color ClrSell)
{
//	double lots = AccountFreeMargin()*0.1*0.00001; //íà÷àëüíûé ëîò = 100 ó.å. ïðè 100000 ó.å. (ñîîòíîøåíèå 1/1000)
	double lots = AccountFreeMargin()*0.1*0.00001; //íà÷àëüíûé ëîò
	lots = NormalizeDouble(lots, LotDigit); //îêðóãëèëè äî çíàêîâ ìèíèìàëüíîãî ëîòà
	if (MinLot>lots) lots = MinLot;// åñëè òåêóùèé ëîò ìåíüøå ìèíèìàëüíîãî äîïóñòèìîãî
//	lots = MinLot;
	
	double price = 0.0;
	int total, i, Signal, pos;

//---- òåïåðü äëÿ íîâûõ ïîçèöèé
	Signal = CheckSignal(true, SignalID);
//	if (Signal == -1) return; // åñëè íåò ñèãíàëà òî ïðîñòî íè÷åãî íå äåëàåì
//	if (Signal == OP_BUY)
	{
		total = CreatTicketArray(OP_BUY, SysID);
		if (total<=0)	//---- åñëè íåò, òî ïîêóïàåì
			OrderSend(Symbol(), OP_BUY, lots, Ask, 2, Ask-SysPar[SysID][_SL]*Point, Ask+SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrBuy);
		else // èíà÷å äîëèâàåì
		{	// íàõîäèì ñàìûé ïåðâûé îðäåð	
			OrderSelect(Ticket[1], SELECT_BY_TICKET); price=OrderOpenPrice(); pos = 1;
			for (i=2; i<=total; i++)
			{	OrderSelect(Ticket[i], SELECT_BY_TICKET);	if (OrderOpenPrice()>price)	{	price=OrderOpenPrice(); pos = i; }	}
			OrderSelect(Ticket[pos], SELECT_BY_TICKET);  lots = OrderLots(); 	lots = NormalizeDouble(lots, LotDigit);
			if (OrderOpenPrice()<Ask-100*Point)
				OrderSend(Symbol(), OP_BUY, lots, Ask, 2, Ask-SysPar[SysID][_SL]*Point, Ask+SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrBuy);
		}
	}

//----- äëÿ ñîâåðøåíèÿ ïðîäàæè àíàëîãè÷íî
//	if(Signal == OP_SELL)
	{
		total = CreatTicketArray(OP_SELL, SysID); 
		if (total<=0)	//åñëè íåò, òî îòêðûâàåì
			OrderSend(Symbol(), OP_SELL, lots, Bid, 2, Bid+SysPar[SysID][_SL]*Point, Bid-SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrSell);
		else // èíà÷å äîëèâàåì
		{ // íàõîäèì ñàìûé ïåðâûé îðäåð	
			OrderSelect(Ticket[1], SELECT_BY_TICKET); price=OrderOpenPrice(); pos = 1;
			for (i=2; i<=total; i++)
			{	OrderSelect(Ticket[i], SELECT_BY_TICKET);	if (OrderOpenPrice()<price)	{	price=OrderOpenPrice(); pos = i; }	}
			OrderSelect(Ticket[pos], SELECT_BY_TICKET);  lots = OrderLots(); 	lots = NormalizeDouble(lots, LotDigit);
			if (OrderOpenPrice()>Bid+100*Point)
				OrderSend(Symbol(), OP_SELL, lots, Bid, 2, Bid+SysPar[SysID][_SL]*Point, Bid-SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrBuy);
		}
	}
}

void ProcessTurn(int SignalID, int SysID, color ClrBuy, color ClrSell)
{
//	double lots = AccountFreeMargin()*0.1*0.00001; //íà÷àëüíûé ëîò = 100 ó.å. ïðè 100000 ó.å. (ñîîòíîøåíèå 1/1000)
	double lots = AccountFreeMargin()*0.1*0.00001; //íà÷àëüíûé ëîò
	lots = NormalizeDouble(lots, LotDigit); //îêðóãëèëè äî çíàêîâ ìèíèìàëüíîãî ëîòà
	if (MinLot>lots) lots = MinLot;// åñëè òåêóùèé ëîò ìåíüøå ìèíèìàëüíîãî
	
	int ticket, total, i, cbuy, csell, Signal;
	
	Signal = CheckSignal(false, SignalID);//---- ñíà÷àëà äëÿ îòêðûòûõ ïîçèöèé
   if(Signal != -1)	CloseAllOrders(Signal, SysID, ClrBuy, ClrSell);

	cbuy = CountAllOrders(OP_BUY, SysID); csell = CountAllOrders(OP_SELL, SysID); 
	//----çà÷èñòèëè îðäåðà STOP
	if (cbuy<=0) {	total = CreatTicketArray(OP_SELLSTOP, SysID); for (i=1; i<=total; i++) OrderDelete(Ticket[i], ClrSell);}
	if (csell<=0) { total = CreatTicketArray(OP_BUYSTOP, SysID); for (i=1; i<=total; i++) OrderDelete(Ticket[i], ClrBuy);}

	Signal = CheckSignal(true, SignalID);//---- òåïåðü äëÿ íîâûõ ïîçèöèé
	if (Signal == -1) return; // åñëè íåò ñèãíàëà òî ïðîñòî íè÷åãî íå äåëàåì

	if(Signal==OP_BUY)//----- äëÿ ñîâåðøåíèÿ ïîêóïêè
	{
		if (cbuy>0)	return; //---- åñëè åñòü óæå îòêðûòûé íà ïîêóïêó, òî íè÷åãî íå äåëàåì
		//---- èíà÷å çà÷èñòèëè îðäåðà STOP
		total = CreatTicketArray(OP_SELLSTOP, SysID); for (i=1; i<=total; i++) OrderDelete(Ticket[i], Red);
		OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Ask-SysPar[SysID][_SL]*Point, Ask+SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrBuy);
		OrderSend(Symbol(), OP_SELLSTOP, lots, Ask-SysPar[SysID][_SL]*Point, 3, Ask, Ask-2*SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrSell);
		return; 
	}
	if(Signal==OP_SELL)//----- äëÿ ñîâåðøåíèÿ ïðîäàæè
	{
		if (csell>0)	return; //---- åñëè åñòü óæå îòêðûòûé íà ïðîäàæó, òî íè÷åãî íå äåëàåì
		total = CreatTicketArray(OP_BUYSTOP, SysID); for (i=1; i<=total; i++) OrderDelete(Ticket[i], Red);
		OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Bid+SysPar[SysID][_SL]*Point, Bid-SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrSell);
		OrderSend(Symbol(), OP_BUYSTOP, lots, Bid+SysPar[SysID][_SL]*Point, 3, Bid, Bid+2*SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrSell);
		return;
	}
//----
}

void ProcessSimple(int SignalID, int SysID, color ClrBuy, color ClrSell)
{
//	double lots = AccountFreeMargin()*0.1*0.00001; //íà÷àëüíûé ëîò = 100 ó.å. ïðè 100000 ó.å. (ñîîòíîøåíèå 1/1000)
	double lots = AccountFreeMargin()*0.1*0.00001; //íà÷àëüíûé ëîò
	lots = NormalizeDouble(lots, LotDigit); //îêðóãëèëè äî çíàêîâ ìèíèìàëüíîãî ëîòà
	if (MinLot>lots) lots = MinLot;// åñëè òåêóùèé ëîò ìåíüøå ìèíèìàëüíîãî
	
	int ticket, total, i, cbuy, csell, Signal;
	
//---- ñíà÷àëà äëÿ îòêðûòûõ ïîçèöèé
	Signal = CheckSignal(false, SignalID);
   if(Signal != -1)	TryCloseAllOrders(Signal, SysID, ClrBuy, ClrSell);

//---- òåïåðü äëÿ íîâûõ ïîçèöèé
	cbuy = CountAllOrders(OP_BUY, SysID); csell = CountAllOrders(OP_SELL, SysID); 

	Signal = CheckSignal(true, SignalID);
	if (Signal == -1) return; // åñëè íåò ñèãíàëà òî ïðîñòî íè÷åãî íå äåëàåì
	
//----- äëÿ ñîâåðøåíèÿ ïîêóïêè
   if(Signal == OP_BUY)
	{
		if (cbuy>0)	return; //---- åñëè åñòü óæå îòêðûòûé íà ïîêóïêó, òî íè÷åãî íå äåëàåì
		//---- îòêðûâàåì îðäåð íà BUY
		ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Ask-SysPar[SysID][_SL]*Point, Ask+SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrBuy);
		if (ticket==-1) { i=GetLastError();	Print("error(",i,"): ",ErrorDescription(i));}
		return; 
	}

//----- äëÿ ñîâåðøåíèÿ ïðîäàæè
	if(Signal == OP_SELL)
	{
		if (csell>0)	return; //---- åñëè åñòü óæå îòêðûòûé íà ïðîäàæó, òî íè÷åãî íå äåëàåì
		ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Bid+SysPar[SysID][_SL]*Point, Bid-SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrSell);
		if (ticket==-1) { i=GetLastError();	Print("error(",i,"): ",ErrorDescription(i));}
		return;
	}
//----
}

void ProcessMultiOpen(int SignalID, int SysID, color ClrBuy, color ClrSell)
{
//	double lots = AccountFreeMargin()*0.1*0.00001; //íà÷àëüíûé ëîò = 100 ó.å. ïðè 100000 ó.å. (ñîîòíîøåíèå 1/1000)
	double lots = AccountFreeMargin()*0.1*0.00001; //íà÷àëüíûé ëîò
	lots = NormalizeDouble(lots, LotDigit); //îêðóãëèëè äî çíàêîâ ìèíèìàëüíîãî ëîòà
	if (MinLot>lots) lots = MinLot;// åñëè òåêóùéè ëîò ìåíüøå ìèíèìàëüíîãî
	
	int ticket, total, i, cbuy, csell, Signal;
//---- ïðîâåðÿåì ñîñòîÿíèå ñíà÷àëà äëÿ îòêðûòûõ ïîçèöèé
	cbuy = CreatTicketArray(OP_BUY, SysID); csell = CreatTicketArray(OP_SELL, SysID); 
	
//---- òåïåðü äëÿ íîâûõ ïîçèöèé
	Signal = CheckSignal(true, SignalID);
	if (Signal == -1) return; // åñëè íåò ñèãíàëà òî ïðîñòî íè÷åãî íå äåëàåì
	
//----- äëÿ ñîâåðøåíèÿ ïîêóïêè
   if(Signal == OP_BUY)
		{
			if (cbuy>0)	//íàõîäèì ïîñëåäíèé îðäåð
				for (i=1; i<=cbuy; i++)//åñëè îí îòêðûò íà ýòîì áàðå, òî íè÷åãî íå äåëàåì
				{	OrderSelect(Ticket[i], SELECT_BY_TICKET); if (OrderOpenTime()>=Time[0]) return; } 
			//---- îòêðûâàåì îðäåð íà BUY
			ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Ask-3000*Point, Ask+SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrBuy);
			if (ticket==-1) { i=GetLastError();	Print("error(",i,"): ",ErrorDescription(i));}
			return; 
		}
//----- äëÿ ñîâåðøåíèÿ ïðîäàæè àíàëîãè÷íî
	if(Signal == OP_SELL)
		{
			if (csell>0)	 for (i=1; i<=csell; i++) {	OrderSelect(Ticket[i], SELECT_BY_TICKET); if (OrderOpenTime()>=Time[0]) return; } 
			ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Bid+3000*Point, Bid-SysPar[SysID][_TP]*Point, SysParName[SysID], SysID, 0, ClrSell);
			if (ticket==-1) { i=GetLastError();	Print("error(",i,"): ",ErrorDescription(i));}
			return;
     }
//----
}
int init()  
{   
	InitSystemParam(); 
	
	SysParName[BLACKSYS] = "BLACKSYS";
	SysPar[BLACKSYS][_TP] = 1000.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[BLACKSYS][_NullTP] = 20.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[BLACKSYS][_TS] = 50.0; // ðàññòîÿíèå òðåéëèíã ñòîïà 
	SysPar[BLACKSYS][_NullSL] = 20.0;// óðîâåíü, ïðè äîñòèæåíèè êîòîðîãî ïåðåâîäèì îæèäàåìûé ïðîôèò â òî÷êó îòêðûòèÿ
	SysPar[BLACKSYS][_SL] = 70;//èçìåíåíèå ñòîïëîññà äëÿ ñèñòåìû, îñíîâàííîé íàñèãíàëàõ BLACKSYS

	SysParName[BLACKSYS+1] = "BLACKSYS+1";
	SysPar[BLACKSYS+1][_NullTP] = 20.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[BLACKSYS+1][_TS] = 50.0; // ðàññòîÿíèå òðåéëèíã ñòîïà 
	SysPar[BLACKSYS+1][_NullSL] = 20.0;// óðîâåíü, ïðè äîñòèæåíèè êîòîðîãî ïåðåâîäèì îæèäàåìûé ïðîôèò â òî÷êó îòêðûòèÿ
	SysPar[BLACKSYS+1][_SL] = 8000;//èçìåíåíèå ñòîïëîññà äëÿ ñèñòåìû, îñíîâàííîé íàñèãíàëàõ BLACKSYS

	SysParName[ENVELOP] = "ENVELOP";
	SysPar[ENVELOP][_TP] = 2000.0;// óðîâåíü ïðîôèòà
	SysPar[ENVELOP][_NullTP] = 20.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[ENVELOP][_TS] = 40.0; // ðàññòîÿíèå òðåéëèíã ñòîïà 
	SysPar[ENVELOP][_NullSL] = 20.0;// óðîâåíü, ïðè äîñòèæåíèè êîòîðîãî ïåðåâîäèì îæèäàåìûé ïðîôèò â òî÷êó îòêðûòèÿ
	SysPar[ENVELOP][_SL] = 70;//èçìåíåíèå ñòîïëîññà äëÿ ñèñòåìû, îñíîâàííîé íà ñèãíàëàõ
	SysPar[ENVELOP][_dSL] = 35;//íà÷àëüíûé øàã ïî óðîâíþ îòêðûòèþ ñëåäóþùåãî îðäåðà â ïîääåðæêó ïîçû

	SysParName[CSPLINE] = "CSPLINE";
	SysPar[CSPLINE][_TP] = 180.0;// óðîâåíü ïðîôèòà 
	SysPar[CSPLINE][_NullTP] = 30.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[CSPLINE][_TS] = 50.0; // ðàññòîÿíèå òðåéëèíã ñòîïà 
	SysPar[CSPLINE][_NullSL] = 70.0;// óðîâåíü, ïðè äîñòèæåíèè êîòîðîãî ïåðåâîäèì îæèäàåìûé ïðîôèò â òî÷êó îòêðûòèÿ
	SysPar[CSPLINE][_SL] = 45;//ñòîïëîññ

	SysParName[MACROSS3] = "MACROSS3";
	SysPar[MACROSS3][_TP] = 200.0;// óðîâåíü ïðîôèòà 
	SysPar[MACROSS3][_NullTP] = 30.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[MACROSS3][_TS] = 50.0; // ðàññòîÿíèå òðåéëèíã ñòîïà 
	SysPar[MACROSS3][_NullSL] = 70.0;// óðîâåíü, ïðè äîñòèæåíèè êîòîðîãî ïåðåâîäèì îæèäàåìûé ïðîôèò â òî÷êó îòêðûòèÿ
	SysPar[MACROSS3][_SL] = 45;//ñòîïëîññ

	SysParName[KRIVETKA] = "KRIVETKA";
	SysPar[KRIVETKA][_TP] = 1000.0;// óðîâåíü ïðîôèòà 
	SysPar[KRIVETKA][_NullTP] = 100.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[KRIVETKA][_TS] = 150.0; // ðàññòîÿíèå òðåéëèíã ñòîïà 
	SysPar[KRIVETKA][_NullSL] = 210.0;// óðîâåíü, ïðè äîñòèæåíèè êîòîðîãî ïåðåâîäèì îæèäàåìûé ïðîôèò â òî÷êó îòêðûòèÿ
	SysPar[KRIVETKA][_SL] = 450;//ñòîïëîññ
	SysPar[KRIVETKA][_dSL] = 50;//èçìåíåíèå ñòîïëîññà äëÿ ñèñòåìû, îñíîâàííîé íà ñèãíàëàõ

	SysParName[BORCHAN] = "BORCHAN";
	SysPar[BORCHAN][_TP] = 1000.0;// óðîâåíü ïðîôèòà 
	SysPar[BORCHAN][_NullTP] = 50.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[BORCHAN][_TS] = 50.0; // ðàññòîÿíèå òðåéëèíã ñòîïà 
	SysPar[BORCHAN][_NullSL] = 210.0;// óðîâåíü, ïðè äîñòèæåíèè êîòîðîãî ïåðåâîäèì îæèäàåìûé ïðîôèò â òî÷êó îòêðûòèÿ
	SysPar[BORCHAN][_SL] = 57;//ñòîïëîññ

	SysParName[FORCE] = "FORCE";
	SysPar[FORCE][_TP] = 1000.0;// óðîâåíü ïðîôèòà 
	SysPar[FORCE][_NullTP] = 40.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[FORCE][_NullTP2] = 20.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[FORCE][_TS] = 50.0; // ðàññòîÿíèå òðåéëèíã ñòîïà 
	SysPar[FORCE][_NullSL] = 50.0;// óðîâåíü, ïðè äîñòèæåíèè êîòîðîãî ïåðåâîäèì îæèäàåìûé ïðîôèò â òî÷êó îòêðûòèÿ
	SysPar[FORCE][_SL] = 50;//ñòîïëîññ
	SysPar[FORCE][_dSL] = 40;//èçìåíåíèå ñòîïëîññà äëÿ ñèñòåìû, îñíîâàííîé íà ñèãíàëàõ

	SysParName[GRID] = "GRID";
	SysPar[GRID][_TP] = 2000.0;// óðîâåíü ïðîôèòà 
	SysPar[GRID][_NullTP] = 50.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[GRID][_NullTP2] = 15.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê ïó÷îê îðäåðîâ
	SysPar[GRID][_TS] = 40.0; // ðàññòîÿíèå òðåéëèíã ñòîïà 
	SysPar[GRID][_NullSL] = 100.0;// óðîâåíü, ïðè äîñòèæåíèè êîòîðîãî ïåðåâîäèì îæèäàåìûé ïðîôèò â òî÷êó îòêðûòèÿ
	SysPar[GRID][_SL] = 2000;//ñòîïëîññ

	SysParName[BUYFOREVE] = "BUYFOREVE";
	SysPar[BUYFOREVE][_TP] = 2000.0;// óðîâåíü ïðîôèòà 
	SysPar[BUYFOREVE][_NullTP] = 25.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[BUYFOREVE][_NullTP2] = 15.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê ïó÷îê îðäåðîâ
	SysPar[BUYFOREVE][_TS] = 50.0; // ðàññòîÿíèå òðåéëèíã ñòîïà 
	SysPar[BUYFOREVE][_NullSL] = 60.0;// óðîâåíü, ïðè äîñòèæåíèè êîòîðîãî ïåðåâîäèì îæèäàåìûé ïðîôèò â òî÷êó îòêðûòèÿ
	SysPar[BUYFOREVE][_SL] = 2000;//ñòîïëîññ

	SysParName[SELLFOREVE] = "SELLFOREVE";
	SysPar[SELLFOREVE][_TP] = 2000.0;// óðîâåíü ïðîôèòà 
	SysPar[SELLFOREVE][_NullTP] = 25.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê 
	SysPar[SELLFOREVE][_NullTP2] = 15.0;// óðîâåíü ïðîôèòà, ïîñëå êîòîðîãî ñòàâèì â áåçóáûòîê ïó÷îê îðäåðîâ
	SysPar[SELLFOREVE][_TS] = 50.0; // ðàññòîÿíèå òðåéëèíã ñòîïà 
	SysPar[SELLFOREVE][_NullSL] = 60.0;// óðîâåíü, ïðè äîñòèæåíèè êîòîðîãî ïåðåâîäèì îæèäàåìûé ïðîôèò â òî÷êó îòêðûòèÿ
	SysPar[SELLFOREVE][_SL] = 2000;//ñòîïëîññ
//	HideTestIndicators(true);
	
	return(0);  
}
int deinit()  {  	HideTestIndicators(false); return(0);  }

void start()
{
//---- ïðîâåðèòü ìîæíî ëè òîðãîâàòü ýêñïåðòó
//   if(IsTradeAllowed()==false) {Comment("!!!!ÒÎÐÃÎÂËß ÍÅÂÎÇÌÎÆÍÀ!!!!!"); return; }

	ProcessAvgLim(BUYFOREVE, BUYFOREVE, Black, Plum);	TrailingAvgLim(BUYFOREVE, Black, Plum);
	ProcessAvgLim(SELLFOREVE,SELLFOREVE, SkyBlue, Wheat);	TrailingAvgLim(SELLFOREVE, SkyBlue, Wheat);

//	ProcessAvgStop(GRID, GRID, Black, Plum);	TrailingAvgStop(GRID, Black, Plum);

/*ñóïåð õîðîøî*/
//	ProcessAvgLim(FORCE, FORCE, Green, Red);	TrailingAvgLim(FORCE, Green, Red);
//	ProcessAvgLim(ENVELOP, ENVELOP, Green, Red);	TrailingAvgLim(ENVELOP, Green, Red);
//	ProcessSimple(BLACKSYS, BLACKSYS, Green, Red);	TrailingSimple(BLACKSYS, Green, Red);// åâðî 4Í
//	ProcessSimple(MACROSS3, MACROSS3, Green, Red);	TrailingSimple(MACROSS3, Green, Red);//

/*õîðîøî*/
//	ProcessTurn(BORCHAN, BORCHAN, Green, Red);	TrailingSimple(BORCHAN, Green, Red);
//	ProcessSimple(KRIVETKA, KRIVETKA, Green, Red);	TrailingSimple(KRIVETKA, Green, Red);//
//	ProcessSimple(CSPLINE, CSPLINE, Green, Red);	TrailingSimple(CSPLINE, Green, Red);//
//	ProcessSimple(MACD, MACD, Black, Plum);	TrailingSimple(MACD, Black, Plum);
//	ProcessAvgLim(BLACKSYS, BLACKSYS+1, Green, Red);	TrailingAvgLim(BLACKSYS+1, Green, Red); //
}
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains open prices of each bar
Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
It automatically opens orders when conditions are reached

Other Features: