ROSH I write a EA ues your Custom Indicator "AMA_optimized.mq4",BUT IT DO NOT WORK! can you help me?
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!
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
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);
}
}
}
}
}