# 请指点，这个均线的写法是否正确？？？

bool 金叉() //5根K线范围内是否出现金叉
{
double ma10,ma20,ma101,ma201;
for(int i=0;i<5;i++)
{
ma10=iMA(NULL,0,10,0,MODE_EMA,PRICE_OPEN,i);
ma20=iMA(NULL,0,20,0,MODE_EMA,PRICE_OPEN,i);
ma101=iMA(NULL,0,10,0,MODE_EMA,PRICE_OPEN,i+1);
ma201=iMA(NULL,0,20,0,MODE_EMA,PRICE_OPEN,i+1);
if(ma10>ma20 && ma101<ma201)return(true);
}
return(false);
}

```int Crossed()
{
double EmaLongPrevious=iMA(NULL,0,LongEma,0,MODE_EMA, PRICE_CLOSE, CurrentBar+1);
double EmaLongCurrent=iMA(NULL,0,LongEma,0,MODE_EMA, PRICE_CLOSE, CurrentBar);
double EmaShortPrevious=iMA(NULL,0,ShortEma,0,MODE_EMA, PRICE_CLOSE, CurrentBar+1);
double EmaShortCurrent=iMA(NULL,0,ShortEma,0,MODE_EMA, PRICE_CLOSE, CurrentBar);
//----
if (EmaShortPrevious<EmaLongPrevious && EmaShortCurrent>EmaLongCurrent)    return(1); //up trend
if (EmaShortPrevious>EmaLongPrevious && EmaShortCurrent<EmaLongCurrent)    return(2); //down trend
//----
return(0); //elsewhere
}```

1、使用PRINT打印显示iMA（）的数值，和MT4电脑上鼠标提示的数值，完全不同。

2、测试不同的时间周期，发现有的金叉可以正确显示，有的死叉也显示成金叉。有的超过了5根K线还是显示金叉。

3、因为这个数值不同，造成回测的时候开单不正常。

void OnTick()
{
Print("金叉:"+金叉());
Print("死叉:"+死叉());
}

bool 金叉()//5根K线范围内出现是否出现金叉
{
double ma10,ma20,ma101,ma201;
for(int i=0;i<5;i++)
{
ma10=iMA(NULL,0,10,0,MODE_EMA,PRICE_OPEN,i);
ma20=iMA(NULL,0,20,0,MODE_EMA,PRICE_OPEN,i);
ma101=iMA(NULL,0,10,0,MODE_EMA,PRICE_OPEN,i+1);
ma201=iMA(NULL,0,20,0,MODE_EMA,PRICE_OPEN,i+1);
Print(i);
Print("ma10:"+ma10);
if(ma10>ma20 && ma101<ma201)return(true);
}
return(false);
}

bool 死叉()
{
double ma10,ma20,ma101,ma201;
for(int i=0;i<5;i++)
{
ma10=iMA(NULL,0,10,0,MODE_EMA,PRICE_OPEN,i);
ma20=iMA(NULL,0,20,0,MODE_EMA,PRICE_OPEN,i);
ma101=iMA(NULL,0,10,0,MODE_EMA,PRICE_OPEN,i+1);
ma201=iMA(NULL,0,20,0,MODE_EMA,PRICE_OPEN,i+1);
Print(i);
Print("ma10:"+ma10);
if(ma10<ma20 && ma101>ma201)return(true);
}
return(false);
}