ROSH I write a EA ues your Custom Indicator "AMA_optimized.mq4",BUT IT DO NOT WORK! can you help me?

 

your Custom Indicator "AMA_optimized.mq4 rename to "AMA"

THE ERROR IS"2008.03.18 00:10:17 2008.01.25 21:14 EA-AMA01 EURUSD,M15: OrderSend error 138"

//+------------------------------------------------------------------+
//| AAA 改编 http://hi.baidu.com/shangwuju |
//+------------------------------------------------------------------+
#property copyright "Copyright 2007, Dxd, China."
#property link ""
#define MAGICMA 200610011231
//+------------------------------------------------------------------+
//| 注意没有指标文件那些property |
//+------------------------------------------------------------------+
//extern int d=10;
extern double TakeProfit = 500; //止赢点数
extern double StopLoss = 500; //止损点数
extern double TrailingStop =50; //跟踪止赢点数设置
extern int maxOpen = 5; //最多开仓次数限制
extern int bb = 0; //非零就允许跟踪止赢
//extern double MATrendPeriod=30;//使用30均线 开仓条件参数 本例子
extern double lots=0.1; //一次下单手数

int i, p2, res; //时间控制, 仅当一个时间周期完成才检查条件
int init() //初始化
{

return(0);
}
int deinit() { return(0); } //反初始化
//主程序
int start()
{
CheckForOpen(); //开仓 平仓 条件检查 和操作
if (bb>0) CTP(); //跟踪止赢
return(0);
}
//+------下面是各子程序--------------------------------------------+
//
//
//平仓持有的买单
void CloseBuy()
{
if (OrdersTotal( ) > 0 )
{
for(i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
Sleep(5000);
}
}
}
}
//平仓持有的卖单
void CloseSell()
{
if (OrdersTotal( ) > 0 )
{
for(i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
Sleep(5000);
}
}
}
}
//判断是否买或卖或平仓
int buyorsell() //在这个函数计算设置你的交易信号
{

double AMA1,AMA2,AMA3;

//EURGBP
AMA1=iCustom(NULL, 0, "AMA",10,2.0,30.0,2.0,2.0,4,1, 0, 1) ;
AMA2=iCustom(NULL, 0, "AMA",10,2.0,30.0,2.0,2.0,4,1, 1, 1) ;
AMA3=iCustom(NULL, 0, "AMA",10,2.0,30.0,2.0,2.0,4,1, 2, 1) ;

//if (MACDBuffer[i+0]>SignalBuffer[i+0] && MACDBuffer[i+1]<SignalBuffer[i+1]) UP[i]=SignalBuffer[i];
if ( AMA1==AMA2 )
return (1);//平卖仓
//
if ( AMA1==AMA3 )
return (-1);//平买仓
//
return (0); //不交易
}
int nowbuyorsell = 0;
void CheckForOpen()
{
//if (Time[0] == lasttime ) return; //每时间周期检查一次 时间控制
//lasttime = Time[0];
nowbuyorsell = buyorsell(); //获取买卖信号

if (nowbuyorsell == 1) //买 先结束已卖的
CloseSell();
if (nowbuyorsell == -1) //卖 先结束已买的
CloseBuy();
//
if (OrdersTotal( ) > maxOpen) return ;
if (OrdersTotal( ) >=1)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)

if(TimeCurrent()-OrderOpenTime()<1800) return ;
}
//如果已持有开仓次数达到最大,不做
if (nowbuyorsell==0) return; //不交易
TradeOK(); //去下单交易
}
void TradeOK() //去下单交易
{
int error ;
if (nowbuyorsell == 1) //买
{
//OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,Slippage,StopLoss,TakeProfit,Comment,MagicNumber,0,Color);
res=OrderSend(Symbol(),OP_BUY,lots,Ask-10*Point,4,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
Sleep(5000);
return ;
}
if (nowbuyorsell == -1) //卖op_buylimit
{
res=OrderSend(Symbol(),OP_SELL,lots,Bid+10*Point,4,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
Sleep(5000);
}
return ;
}
void CTP() //跟踪止赢
{
bool bs = false;
for (int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if (OrderType() == OP_BUY)
{
if ((Bid - OrderOpenPrice()) > (TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT))) //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置
{
if (OrderStopLoss() < Bid - TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT))
{
bs = OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(),0, Green);
}
}
}
else if (OrderType() == OP_SELL)
{
if ((OrderOpenPrice() - Ask) > (TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT))) //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置

{
if ((OrderStopLoss()) > (Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT)))
{
bs = OrderModify(OrderTicket(), OrderOpenPrice(),
Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(),0, Tan);
}
}
}
}
}

Files:
ama.mq4  7 kb
 
Why do you compare two double values ?
f ( AMA1==AMA2 )
return (1);//平卖仓
//
if ( AMA1==AMA3 )
return (-1);//平买仓
It isn't correct. Use search engine for compare double. See for example 'int x = double y ?'
 
thank you very mach! I'll try it!