如何检查一个订单是否被选中 - 页 9

 
Vinin:


我没有特别问任何人。

但你对它的看法一定是正确的。

我不能说你是傻瓜,但你是聋子,这是肯定的。

你没有听到别人的声音。我不是在说我的言论,而是在说你所得到的建议。

你写过可互操作的程序吗?

Ant_TL 所要求的"互操作性",但它不能在MQL中实现。

 
PapaYozh:

你有没有写过一个可互操作的程序?

Ant_TL 所问的是 "互操作性",但这在MQL中是不可行的。


这并不难实现。而在原则上有一个解决方案。懒得再看下去了
 
这样的解决方案对封闭的职位 可能是可行的,因为这些职位 将不再改变。但对于公开的职位,不值得去做
 
Vinin:

这并不难实现。而且有一个解决方案。懒得再看下去了

你将无法用命令执行操作,并确保环境不受影响。

关于GetLastError()已经说过了,你将无法恢复应该由函数GetLastError() 返回的代码。

 
PapaYozh:

你将无法用命令执行操作,并确保环境不受影响。

关于GetLastError()已经说过了,你将无法恢复GetLastError()函数应该返回的代码。


如果你想,你可以,它只是有自己的函数(我是说GetLastError())。
 

这可能是一个解决方案 - OrderSelect() - MySelect() 封装器,用于按索引搜索订单的函数中

int last_select=0; // 把它放在init和start之前的某个地方。

// ...... 程序代码

bool MySelect(int i,int mode=MODE_TRADES){ //订单选择--如果订单被选中并属于EA,则返回True,否则返回False
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket(;)
如果(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true);
else
return(false);
}
return(false);
}

bool TickSelect(int tick){ // 直接按tick进行排序选择
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
else
return(false);
return(true);
}

void SomeFunc(){ // 一个可以破坏订单选择的函数模板,从而破坏程序逻辑,如果当前的订单选择没有得到照顾
int tick=last_select;

// ...执行所需动作

if(tick>0)
TickSelect(tick);
}

 
Ant_TL:

它不能,除非你自己在程序中改变这个状态。

假设订单状态 已经从MODE_TRADES变为MODE_HISTORY。而你的专家顾问并没有对该订单做任何处理。是相同的顺序还是不同的?

 
Mislaid:

假设订单状态从MODE_TRADES变为MODE_HISTORY。而你的EA并没有对该订单做任何处理。是相同的顺序还是不同的?

这是同一种秩序

 
我看不出有什么问题。而且有很多大惊小怪的事情发生...你需要在一个主函数A()中选择一个订单,并在另一个由主函数A()调用的函数B()中处理在函数A()中选择的订单。而我们应该在函数B()中确定知道订单是否仍然被选中...所以把在函数A()中选择的订单的票据 传给函数B()。在函数B()中,你可以检查从哪个列表中选择订单,然后决定去哪里和返回到函数A()。
 
Ant_TL:

这可能是一个解决方案 - OrderSelect() - MySelect() 封装器,用于按索引搜索订单的函数中

int last_select=0; // 把它放在init和start之前的某个地方。

// ...... 程序代码

bool MySelect(int i,int mode=MODE_TRADES){ //选择我们需要的订单--如果订单已经被选中并且属于智能顾问,则返回True;否则,返回False。
如果(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket()。
如果(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true)。
否则
return(false)。
}
return(false)。
}

bool TickSelect(int tick){ // 直接按tick进行选择。
如果(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick。
否则
return(false)。
return(true)。
}

void SomeFunc(){ // 一个可以破坏订单选择的函数模板,从而破坏程序逻辑,如果当前的订单选择没有得到照顾的话。
int tick=last_select;

// ...执行所需的行动

如果(tick>0)
TickSelect(tick)。
}

让我们想象一下,在终端重新启动后,last_select变量会发生什么变化(坏人关了灯)?