//+------------------------------------------------------------------+
//|                                                      Bar2Csv.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Сергеев Алексей"

//------------------------------------------------------------------ IsHummer
bool IsHummer(int i)// функция определения молота или повешенного
{
	double Body = MathAbs(Open[i]-Close[i]);
	double ShadowHi = High[i]-MathMax(Open[i],Close[i]);
	double ShadowLo = MathMin(Open[i],Close[i])-Low[i];
	if (
	//1. Ищем свечку при нисходящем тренде
		Trend(i, 5)<0 &&
	//2. Нижняя тень в два раза длиннее тела.
		ShadowLo>=2*Body &&
	//3. Верхняя тень очень короткая или отсутствует.
		ShadowLo>=8*ShadowHi) 
		return(true);
	else return(false);
}
//------------------------------------------------------------------ Trend
double Trend(int i, int nPeriod)// функция определения тренда
{
	double t=iMA(NULL, 0, nPeriod, 0, MODE_LWMA, PRICE_WEIGHTED, i)-
						iMA(NULL, 0, nPeriod, 0, MODE_LWMA, PRICE_WEIGHTED, i+1);
	return(t);
}
//------------------------------------------------------------------ start
int start()
{
	string st;
	string FileName = Symbol()+"_hum.csv";
	int hFile = FileOpen(FileName, FILE_WRITE|FILE_CSV, ';');
	FileSeek(hFile, 0, SEEK_END);
	st = "SL;TP;rez";	FileWrite(hFile, st);	
	
	int i, k, TP, nTP, SL, nSL, rez;
	double OpenPrice;
	bool find;
	// проходим по диапазону значений профита и стоплоса
	TP=20.0;
	while (TP<200)
	{
		SL = 20.0;
		while (SL<200)
		{
			i=Bars-1; 
			nTP=0; nSL=0;
			while (i>=0)//проходим по всем барам и проверяем условия попадания на молот
			{
				if (IsHummer(i)) //если нашли молот
				{	
					FileSeek(hFile, 0, SEEK_END);
					//проверям это был бар профитный или убыточный
					k=i-1; OpenPrice=Open[k]; find=false;
					while (k>0 && !find) 
					{	
						if (Low[k]<=OpenPrice-SL*Point) { nSL++; find=true; }
						else if (High[k]>=OpenPrice+TP*Point) { nTP++; find=true; }
						k--;
					}
				}
				i--;
			}
			rez = (nTP*TP)-(nSL*SL);// вычислили результат по всем барам
			st = SL+";"+TP+";"+rez+";"; FileWrite(hFile, st);	// сохранили в файл
			Comment(st);
			SL = SL+5;
		}
		TP = TP+5;
	}
	FileClose(hFile);	
}

