新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 75 1...686970717273747576777879808182...1953 新评论 Alexey Viktorov 2017.01.16 13:09 #741 ilnur17021992: SELL_Lvl是卖出网格的膝盖(订单)数量,SELL_NoLossLevel 是这些订单的CU的总水平(价格)。好吧,想法是这样的:我们需要在买入线的水平上画一条线,并在新的线被打开时分别重画。我不知道该怎么做。不明白如何确定所有订单的BU线? Vitaly Muzichenko 2017.01.16 13:12 #742 你能告诉我如何写下它以节省资源并获得最新的价格吗? for(int i=OrdersTotal(); i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==symb) { if(OrderType()==OP_BUY) { tk=OrderTicket(); SymbolInfoTick(OrderSymbol(),Last_Tick); <<< ask=Last_Tick.ask; bid=Last_Tick.bid; ...还是像这样? SymbolInfoTick(symb,Last_Tick); <<< for(int i=OrdersTotal(); i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==symb) { if(OrderType()==OP_BUY) { tk=OrderTicket(); ask=Last_Tick.ask; bid=Last_Tick.bid; ... Sergey Gritsay 2017.01.16 13:21 #743 Vitaly Muzichenko:你能告诉我如何写下它以节省资源并获得最新的价格吗? for(int i=OrdersTotal(); i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==symb) { if(OrderType()==OP_BUY) { tk=OrderTicket(); SymbolInfoTick(OrderSymbol(),Last_Tick); <<< ask=Last_Tick.ask; bid=Last_Tick.bid; ...还是像这样? SymbolInfoTick(OrderSymbol(),Last_Tick); <<< for(int i=OrdersTotal(); i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==symb) { if(OrderType()==OP_BUY) { tk=OrderTicket(); ask=Last_Tick.ask; bid=Last_Tick.bid; ... 第一个选项比较正确。在第二个选项中,你应该写这一行SymbolInfoTick(symb,Last_Tick); <<<< Alexey Viktorov 2017.01.16 13:22 #744 Vitaly Muzichenko:你能告诉我如何写下它以节省资源并获得最新的价格吗? for(int i=OrdersTotal(); i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==symb) { if(OrderType()==OP_BUY) { tk=OrderTicket(); SymbolInfoTick(OrderSymbol(),Last_Tick); <<< ask=Last_Tick.ask; bid=Last_Tick.bid; ...还是像这样? SymbolInfoTick(OrderSymbol(),Last_Tick); <<< for(int i=OrdersTotal(); i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol()==symb) { if(OrderType()==OP_BUY) { tk=OrderTicket(); ask=Last_Tick.ask; bid=Last_Tick.bid; ...我想说这取决于OrdersTotal() 的大小和周期内价格变化的概率。在我看来,直接在循环中获得新鲜数据是更正确的。而且我认为额外的变量(在代码中强调)是绝对不必要的。 Aleksandr Egorov 2017.01.16 13:24 #745 Alexey Viktorov:文档中有一个例子。 也许更好的做法是在循环中浏览订单,只要下一个订单比上一个订单低,就选择它来进一步处理。因此,退出循环后,要删除的订单 将被选中。或者,你可以先保存它在循环中的订单列表中的位置,然后在退出循环后用循环中保存的索引选择它。 要同时设置高阶和低阶并不那么容易,如果 Vitaly Muzichenko 2017.01.16 13:24 #746 Sergey Gritsay: 第一个选项比较正确。 第二个选项应该写成SymbolInfoTick(symb,Last_Tick); <<<<是的,我只是复制了它,没有注意到。我想知道SymbolInfoTick 是否是放在循环里面的正确方式,如果需要放在那里,或者是否可以放在循环之前。用于追踪止损,可拉动网格达50个百分点。 Alexey Viktorov 2017.01.16 13:30 #747 Vitaly Muzichenko:是的,我只是复制了它,没有注意到。我在想,如果需要的话,SymbolInfoTick 是放在循环里面的正确方式,还是可以放在循环之前。用于追踪止损,可以拉动高达50个百分点的网格。 对于跟踪止损,当然最好是在周期前放一次。 ilnur17021992 2017.01.16 13:33 #748 Alexey Viktorov:搞不清楚如何确定所有订单的BU线? 我知道如何确定BU,我需要在这个水平上画线 Vitaly Muzichenko 2017.01.16 13:35 #749 Alexey Viktorov: 对于跟踪止损来说,当然是在周期前一次更好。我现在慢慢改写为5.我的意思是,价格可能变化很快,水平可能小于止损值,这将导致错误。我的意思是,价格可能会变化得非常快,水平会低于允许的止损水平,这将导致错误。我理解,这个"SymbolInfoTick"的帽子是需要用来获取实际价格的? Aleksandr Egorov 2017.01.16 13:56 #750 通过比较价格解决的问题 1...686970717273747576777879808182...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
SELL_Lvl是卖出网格的膝盖(订单)数量,SELL_NoLossLevel 是这些订单的CU的总水平(价格)。好吧,想法是这样的:我们需要在买入线的水平上画一条线,并在新的线被打开时分别重画。我不知道该怎么做。
不明白如何确定所有订单的BU线?
你能告诉我如何写下它以节省资源并获得最新的价格吗?
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
还是像这样?
for(int i=OrdersTotal(); i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
你能告诉我如何写下它以节省资源并获得最新的价格吗?
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
还是像这样?
for(int i=OrdersTotal(); i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
你能告诉我如何写下它以节省资源并获得最新的价格吗?
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
还是像这样?
for(int i=OrdersTotal(); i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol()==symb) {
if(OrderType()==OP_BUY) {
tk=OrderTicket();
ask=Last_Tick.ask;
bid=Last_Tick.bid;
...
我想说这取决于OrdersTotal() 的大小和周期内价格变化的概率。
在我看来,直接在循环中获得新鲜数据是更正确的。
而且我认为额外的变量(在代码中强调)是绝对不必要的。
文档中有一个例子。
也许更好的做法是在循环中浏览订单,只要下一个订单比上一个订单低,就选择它来进一步处理。因此,退出循环后,要删除的订单 将被选中。
或者,你可以先保存它在循环中的订单列表中的位置,然后在退出循环后用循环中保存的索引选择它。
第一个选项比较正确。 第二个选项应该写成SymbolInfoTick(symb,Last_Tick); <<<<
是的,我只是复制了它,没有注意到。
我想知道SymbolInfoTick 是否是放在循环里面的正确方式,如果需要放在那里,或者是否可以放在循环之前。用于追踪止损,可拉动网格达50个百分点。
是的,我只是复制了它,没有注意到。
我在想,如果需要的话,SymbolInfoTick 是放在循环里面的正确方式,还是可以放在循环之前。用于追踪止损,可以拉动高达50个百分点的网格。
搞不清楚如何确定所有订单的BU线?
对于跟踪止损来说,当然是在周期前一次更好。
我现在慢慢改写为5.我的意思是,价格可能变化很快,水平可能小于止损值,这将导致错误。我的意思是,价格可能会变化得非常快,水平会低于允许的止损水平,这将导致错误。
我理解,这个"SymbolInfoTick"的帽子是需要用来获取实际价格的?