double MA,Price;
int UpDown;
void OnInit()
{
MA=iMA(NULL,0,period,0,3,0,0);
if(Bid>=MA) UpDown=1; //если текущая цена при первом запуске сова выше или равна текущего показания машки, то флаговой переменной присваиваем 1 - запоминаем положение графика относительно машки, как высшее
if(Bid<MA) UpDown=2; //запоминаем, как низшее относительно показаний машки
}
void OnTick()
{
MA=iMA(NULL,0,period,0,3,0,0);//period и 3-ка - это параметры машки, которые уже сам вставишь
if(IsNewBar)
{
if(UpDown==1 && MA<Bid) {Price=Bid; UpDown=2;}
if(UpDown==2 && MA>Bid) {Price=Bid; UpDown=1;}
}
//Далее уже имеем цену Price для торгов после последнего пересечения
Дополнительная функция для определения открытия нового бара:
bool IsNewBar()
{
static datetime Told;
datetime Tnew[1];
CopyTime(Symbol(),PERIOD_CURRENT,0,1,Tnew);
if(Tnew[0]!=Told)
{
Told=Tnew[0];
return(true);
}
return(false);
}