布林线交易总出问题

 

我是很新的新手,写的第一个交易出问题很多,请高手帮我改改!

我的思路是:在5分钟图上,在布林线中轨买入,在上轨平仓。 编译没问题,测试时出现以下问题: 1》不管测试时间选多长,只会在6月18日买进,不会平仓;设置止损止盈也不平仓; 2》买进点不是我想要的 请高手多多指点,我想早日入门!

附加的文件:
ball.mq4  4 kb
 
//| MACD Sample.mq4 |
//| Copyright ?2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

extern double TakeProfit = 500;
extern double Lots = 0.1;
extern double TrailingStop = 300;
double B1,B2,B3,IB1,IB2;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total;

if(Bars<100)
{Print("bars less than 100");
return(0);}
if(TakeProfit<100)
{Print("TakeProfit less than 100");
return(0);}
B1=iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1);
B2=iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,5);
B3=iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,2);
IB1=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_UPPER,0);
IB2=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_LOWER,0);
total=OrdersTotal();//orderstotal为订单总数函数
if(total<1)
{
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
//当前20个周期的平均値大于前一个20个周期的平均值//当前20个周期的平均値大于向前第5个20个周期的平均值//以上判断现在金价是上升趋势//当前买价跌破20个周期(5分钟)的平均值;
if(B1>B2&&B1>B3&&Ask<B1)
{ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,7,Ask-300*Point,0,"",16348,0,Red);return(0);}
if(B1<B2&&B1<B3&&Bid>B1)
{ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,7,Bid+300*Point,0,"",16348,0,Blue);return(0);}
return(0);
}
//下面是平仓条件

for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// should it be closed?
if(Ask>IB1)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
return(0); // exit
}
// check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// should it be closed?
if(Bid<IB2)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
return(0); // exit
}
// check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
// the end.
 

新人2号前来支援!自己摸索的,发现ORDERSEND 命令不成功,于是将入场条件修改了下,把楼主的原代码中iMA(NULL,PERIOD_M5,20,0,MODE_SMMA,PRICE_CLOSE,0)修改为前1跟柱线的值,这样当前柱线才有机会入场。

另外,根据楼主的思路,把MA和BANDS 两个指标的参数修改后得到重叠曲线(红字部分)。使EA实现价格上穿布林带中轨买,价格下穿布林带中轨卖。

 
复盘了机次,发现EA并不是按价格上穿和下穿中轨来买卖的,只是单纯的比较大小来作为条件。寻找思路中。。。。。。。。。。。。。。。
原因: