如果你的意思是一个ea只开一张订单, 平仓可再开。。可以把开单单独写成一个函数,这样比较严谨,不容易出错,,循环一下是否有你设定的魔术数和注译的订单,,没有就开单有了就不开
//开单函数 多
int buy(double buy手数,int buy滑点,double buy止损,double buy止盈,string buy注译 ,int buy魔术数) // 下单手数 滑点 止损 止盈 注译 魔术数
{
int a=0;
//a= OrderSend(Symbol(),OP_BUY,buy手数,Ask,buy滑点,0,0,buy注译,buy魔术数,0,clrRed);
bool zhaodan=false;
for(int i=0;i<OrdersTotal();i++) //循环所有订单,从0号开始
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES )==true) //选中订单
{
string 注释1 =OrderComment();
int 魔术数1=OrderMagicNumber();
if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && 注释1==buy注译 && 魔术数1==buy魔术数)
{
zhaodan=true;
break;
}
}
}
if(zhaodan==false)
{
if(buy止损==0 && buy止盈!=0)
{
a= OrderSend(Symbol(),OP_BUY,buy手数,Ask,buy滑点,0,Ask+buy止盈*Point,buy注译,buy魔术数,0,clrRed);//printf("11111");
}
if(buy止损!=0 && buy止盈==0)
{
a= OrderSend(Symbol(),OP_BUY,buy手数,Ask,buy滑点,Ask-buy止损*Point,0,buy注译,buy魔术数,0,clrRed);//printf("22222");
}
if(buy止损==0 && buy止盈==0)
{
a= OrderSend(Symbol(),OP_BUY,buy手数,Ask,buy滑点,0,0,buy注译,buy魔术数,0,clrRed);//printf("33333");
}
if(buy止损!=0 && buy止盈!=0)
{
a= OrderSend(Symbol(),OP_BUY,buy手数,Ask,buy滑点,Ask-buy止损*Point,Ask+buy止盈*Point,buy注译,buy魔术数,0,clrRed);//printf("44444");
}
if(a<0)
{
Print("OrderSend 失败错误 # +++++++++++++++++++++++++++++++++++++",GetLastError());
//return(0);
}
}
return(a);
}
//开单函数 空
int sell(double sell手数,int sell滑点,double sell止损,double sell止盈,string sell注译 ,int sell魔术数)
{
int a=0;
// a= OrderSend(Symbol(),OP_SELL,sell手数,Bid,sell滑点,0,0,sell注译,sell魔术数,0,clrAqua);
bool zhaodan=false;
for(int i=0;i<OrdersTotal();i++) //循环所有订单,从0号开始
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES )==true) //选中订单
{
string 注释1 =OrderComment();
int 魔术数1=OrderMagicNumber();
if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && 注释1==sell注译 && 魔术数1==sell魔术数)
{
zhaodan=true;
break;
}
}
}
if(zhaodan==false)
{
if(sell止损==0 && sell止盈!=0)
{
a= OrderSend(Symbol(),OP_SELL,sell手数,Bid,sell滑点,0,Bid-sell止盈*Point,sell注译,sell魔术数,0,clrAqua);//printf("55555");
}
if(sell止损!=0 && sell止盈==0)
{
a= OrderSend(Symbol(),OP_SELL,sell手数,Bid,sell滑点,Bid+sell止损*Point,0,sell注译,sell魔术数,0,clrAqua);//printf("666666");
}
if(sell止损==0 && sell止盈==0)
{
a= OrderSend(Symbol(),OP_SELL,sell手数,Bid,sell滑点,0,0,sell注译,sell魔术数,0,clrAqua);//printf("777777");
}
if(sell止损!=0 && sell止盈!=0)
{
a= OrderSend(Symbol(),OP_SELL,sell手数,Bid,sell滑点,Bid+sell止损*Point,Bid-sell止盈*Point,sell注译,sell魔术数,0,clrAqua);//printf("88888");
}
if(a<0)
{
Print("OrderSend 失败错误 # ------------------------------------",GetLastError());
//return(0);
}
}//空单手数(); */
return(a);
}
//=========================================================================================
把这个放到开单函数替代开单函数就行了
buy(格式化手数精度(比例下单手数),滑点,止损,止赢,注释,魔术数);// 下单手数 滑点 止损 止盈 注译 魔术数
sell(格式化手数精度(比例下单手数()),滑点,止损,止赢,注释,魔术数);// 下单手数 滑点 止损 止盈 注译 魔术数
能看懂吗?看不懂我就没办法了,只能帮到你这了
double stopLoss = 300; // 止损 double takeProfit = 200; // 止盈 double maPeriod = 14; // 均线周期 int slippage = 2; int Risk = 5; // 风险系数 double fibLevels[] = { 0.236, 0.382, 0.5, 0.618}; double sl,tp; //---------------------------------------------------------- void OnTick() { static double LastOrderTime = 0; if (Time[0]!= LastOrderTime) { double maValue = iMA(NULL, 0, maPeriod, 0, MODE_SMA, PRICE_CLOSE, 1); double mstep=MarketInfo(_Symbol,MODE_LOTSTEP); double lot=NormalizeDouble(AccountFreeMargin()*Risk/100.0/10000.0,log10(1/mstep)); for (int i = 0; i < ArraySize(fibLevels); i++) { double fibLevelPrice1 = maValue + (High[1] - Low[1]) * fibLevels[i]; double fibLevelPrice2 = maValue - (High[1] - Low[1]) * fibLevels[i]; if(Open[0] >= fibLevelPrice1) { sl=NormalizeDouble((Ask - stopLoss * Point),Digits); tp=NormalizeDouble((Ask + takeProfit * Point),Digits); // 下单 if(!OrderSend(Symbol(), OP_BUY, lot, Ask, slippage, sl, tp, "Fibonacci Trading", 0, 0, Green)) Print("BUY开仓失败! err=",GetLastError()); } else{ if(Open[0]<= fibLevelPrice2) { sl=NormalizeDouble((Bid+ stopLoss * Point),Digits); tp=NormalizeDouble((Bid- takeProfit * Point),Digits); // 下单 if(!OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, sl, tp, "Fibonacci Trading", 0, 0, Green)) Print("SELL开仓失败! err=",GetLastError()); } } } LastOrderTime = Time[0]; } }
就你原文档简单改了下,更多交易细节考虑,不在此啰嗦……
}
}
}
加入了时间限制代码也不行,还是开很多单,各位老大,我该怎么改?