设置好止盈止损空间,为何所有的单子止盈止损都是同样的价格? 新评论 Kun Wang 2018.11.11 16:58 可以看到图上,订单很多,但所有订单的止盈止损是同样的价格。 而我在EA代码里,设置了止盈500点,止损1800点。而这个简单的EA代码,也是从mql5编程文档里复制过来的。请问这个问题是代码错误还是bug? 如果您有多两分钟的时间 ,请看一下代码: #define EXPERT_MAGIC 102600int vol=350; //最大单量int sl=1800; //止损int tp=500; //止盈double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);datetime ot;int OnInit() { return(INIT_SUCCEEDED); }void OnDeinit(const int reason) { }void OnTick() { MqlTradeRequest request={0}; MqlTradeResult result={0}; request.action =TRADE_ACTION_DEAL; request.symbol =Symbol(); request.volume =0.01; request.price =ask; // 持仓价格 request.type_filling=ORDER_FILLING_IOC; request.deviation=50; request.type =ORDER_TYPE_BUY; request.sl=ask-sl*Point(); //这里是按空间计算的,而不是固定的价格 request.tp=ask+tp*Point(); //这里是按空间计算的,而不是固定的价格 MqlTradeRequest kongrq={0}; MqlTradeResult kongrs={0}; kongrq.action =TRADE_ACTION_DEAL; kongrq.symbol =Symbol(); kongrq.volume =0.01; kongrq.price =bid; // 持仓价格 kongrq.type_filling=ORDER_FILLING_IOC; kongrq.deviation=50; kongrq.type =ORDER_TYPE_SELL; kongrq.sl=bid+sl*Point(); //这里是按空间计算的,而不是固定的价格 kongrq.tp=bid-tp*Point(); //这里是按空间计算的,而不是固定的价格 datetime time[]; ArraySetAsSeries(time,true); CopyTime(Symbol(),0,0,1,time); if(ot!=time[0] && PositionsTotal()<=vol) { OrderSend(request,result); OrderSend(kongrq,kongrs); ot=time[0]; } double 余额=AccountInfoDouble(ACCOUNT_BALANCE); double 净值=AccountInfoDouble(ACCOUNT_EQUITY); double 盈亏=AccountInfoDouble(ACCOUNT_PROFIT); Comment(StringFormat("当前余额为 %G\n当前净值为 %G\n当前盈亏为 %G",余额,净值,盈亏)); } 求市价成交时自动添加止盈止损的脚本 下单问题,哪位大哥可以指点一下 今天遇到一个奇怪的问题,不知道是什么原因,大家来看看。 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
可以看到图上,订单很多,但所有订单的止盈止损是同样的价格。
而我在EA代码里,设置了止盈500点,止损1800点。而这个简单的EA代码,也是从mql5编程文档里复制过来的。请问这个问题是代码错误还是bug?
如果您有多两分钟的时间 ,请看一下代码:
#define EXPERT_MAGIC 102600
int vol=350; //最大单量
int sl=1800; //止损
int tp=500; //止盈
double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
double bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
datetime ot;
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
request.action =TRADE_ACTION_DEAL;
request.symbol =Symbol();
request.volume =0.01;
request.price =ask; // 持仓价格
request.type_filling=ORDER_FILLING_IOC;
request.deviation=50;
request.type =ORDER_TYPE_BUY;
request.sl=ask-sl*Point(); //这里是按空间计算的,而不是固定的价格
request.tp=ask+tp*Point(); //这里是按空间计算的,而不是固定的价格
MqlTradeRequest kongrq={0};
MqlTradeResult kongrs={0};
kongrq.action =TRADE_ACTION_DEAL;
kongrq.symbol =Symbol();
kongrq.volume =0.01;
kongrq.price =bid; // 持仓价格
kongrq.type_filling=ORDER_FILLING_IOC;
kongrq.deviation=50;
kongrq.type =ORDER_TYPE_SELL;
kongrq.sl=bid+sl*Point(); //这里是按空间计算的,而不是固定的价格
kongrq.tp=bid-tp*Point(); //这里是按空间计算的,而不是固定的价格
datetime time[];
ArraySetAsSeries(time,true);
CopyTime(Symbol(),0,0,1,time);
if(ot!=time[0] && PositionsTotal()<=vol)
{
OrderSend(request,result);
OrderSend(kongrq,kongrs);
ot=time[0];
}
double 余额=AccountInfoDouble(ACCOUNT_BALANCE);
double 净值=AccountInfoDouble(ACCOUNT_EQUITY);
double 盈亏=AccountInfoDouble(ACCOUNT_PROFIT);
Comment(StringFormat("当前余额为 %G\n当前净值为 %G\n当前盈亏为 %G",余额,净值,盈亏));
}