请使用SRC按钮来显示你的代码,以便更好地阅读 :)
你的OrderSelect()的编码方式是错误的。把你的代码和这个比较一下。 然后,如果你还有问题,请回信 :)
for(int cnt=0; cnt<OrdersTotal(); cnt++) { if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) == true && OrderSymbol()==Pair && OrderType()==OP_BUY) { // code to close } }
你好,朋友们。
我需要你的帮助。
我建立了一个EA,其过程的一部分是使用一个函数来关闭一个交易。这里是相关的kod的行数。
有人能帮助我吗,为什么EA没有关闭交易?谢谢你。
当你有一个循环,并且你正在关闭或删除(待定)订单时,你必须 倒数,而不是 上升。
为什么你在Close_Single_P函数里有一个循环? 它不是用来关闭一个订单的吗? 当你调用该函数时,你传递符号、票号、订单类型 和头寸大小 ...... 这就是你关闭订单所需要的 ...... 几乎,你需要关闭的价格,为此你可以使用OrderClosePrice() ,然后你不需要担心它是买还是卖 ...... 事实上,只要摆脱这个函数,使用这一行来代替函数调用 ......
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow);
顺便问一下,你是在哪里设置滑点的?
当你使用订单函数时,它们会返回一个值 ......这个返回值告诉你函数是否起作用 ......学会使用这个返回值,如果它告诉你有一个问题,使用打印语句将相关信息报告给日志 ......那么你将知道什么地方出了问题,而不是猜测 ......
你是否验证了这一点 . . .
if ( MarketInfo(Pair,MODE_BID) >= Open_P_BUY + MarketInfo(Pair,MODE_POINT)*factor*TP )
. . .是真的吗?
为什么不添加一个打印语句,如果该行是真的,就执行该语句 ......那么你就会知道它是或不是 ......
if ( MarketInfo(Pair,MODE_BID) >= Open_P_BUY + MarketInfo(Pair,MODE_POINT)*factor*TP ) { Print("Trying to close Order: ", OrderTicket()); // <---- tells you that the if returned true if (!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow) Print("OrderClose failed, error # ", GetLastError()); // <------- reports the error if the OrderClose failed . . }
请使用SRC按钮来显示你的代码,以便更好地阅读 :)
那么GetLastError()的回报是什么?
这段代码大约有4000行...
总之,我没有得到任何错误按摩。
当你有一个循环,并且你正在关闭或删除(挂单)订单时,你必须 倒数,而不是 上升。
为什么你在Close_Single_P函数里有一个循环? 它不是用来关闭一个订单的吗? 当你调用该函数时,你传递符号、票号、订单类型和头寸大小 ......这就是你关闭订单所需要的全部 ......好吧,你几乎需要关闭的价格,为此你可以使用OrderClosePrice() ,然后你不需要担心它是买还是卖 ...... 事实上,只要摆脱该函数,使用这一行来代替函数调用 ... .
.......顺便问一下,你是在哪里设置滑点的?
当你使用订单函数时,它们会返回一个值 ......这个返回值告诉你函数是否起作用 ......学会使用这个返回值,如果它告诉你有一个问题,使用打印语句将相关信息报告给日志 ......那么你将知道什么地方出了问题,而不是猜测 ......
你的订单是否应该被关闭?
....是真的吗?
为什么不添加一个打印语句,如果该行是真的,就执行该语句 ... ...那么你就会知道它是或不是 ... ...。
谢谢Raptor的明智提议。你总是明智地、清晰地帮助我。
我将尝试你刚才的建议。
最好的祝愿。
好了,朋友们,谢谢你们的努力。
我做了一些修改,但没有任何帮助,直到我看到WHRoeder的评论。
你是个天才,我认为你是对的。
我将在周一尝试修改后的EA。
祝你周末愉快。
好吧,我的朋友们。
我做了你所有的建议 - 但EA失败了。
还有什么想法吗?
让我们再做一次
#include "..\libraries\stdlib.mq4" // drag and drop from libraries to very top of your code for(int cnt = OrdersTotal(); cnt >= 0; cnt--) // from RaptorUK, count it down to zero { if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) == true && OrderSymbol() == Pair) // this is how to write OrderSelect() { if(OrderType()== OP_BUY) // the code below is to close buy position only { //--- if(MarketInfo(Pair,MODE_BID) >= Open_P_BUY + MarketInfo(Pair,MODE_POINT) * factor * TP) // from RaptorUK, is this statemement true ? { //CLOSE_Single_P(Pair,"LONG",OrderTicket(),OrderLots()) // From RaptorUK & WHRoeder, you don't have to do OrderSelect() twice Print("Trying to close buy position : ", OrderTicket()); if (!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow)) // From Raptor UK, are you doing the slippage correctly ? Print("failed to close buy position ", ErrorDescription(GetLastError()) ); } else { Print ("Not qualify to close buy position ", OrderTicket()); // from RaptorUK, is this statemement true ?, if not this print will tell you } //--- } /* else { if (OrderType() == OP_SELL) { } } */ } }
当我还在读瓦伦蒂诺-罗西的MotoGP勒芒赛第二次领奖时,我希望我写得正确 :)
让我们再做一次
当我还在读瓦伦蒂诺-罗西的MotoGP勒芒赛第二次领奖时,我希望我写得正确 :)
谢谢onewithzachy。
首先,我认为你有一个小错误,那就是。
for(int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)
你必须添加绿色和粗体的修正。
但是,我不明白下面这一行对我们有什么帮助?
#include "...\libraries\stdlib.mq4"
谢谢,Y。
你好,朋友们。
我需要你的帮助。
我建立了一个EA,其过程的一部分是使用一个函数来关闭一个交易。这里是相关的kod的行数。
有人能帮助我吗,为什么EA没有关闭交易?谢谢你。
(也许,因为我在主要部分使用了ORDERSELECT ,但它不能在函数中使用ORDERSELECT,也就是????)
for(int cnt=0; cnt < OrdersTotal(); cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。
如果( OrderSymbol() == Pair && OrderType() == OP_BUY )
{
如果 ( MarketInfo(Pair,MODE_BID) >= Open_P_BUY + MarketInfo(Pair,MODE_POINT) *factor*TP )
{
CLOSE_Single_P(Pair, "LONG", OrderTicket(), OrderLots())。
}
}
}
...
...
...
//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
int Code, sig;
双PRC。
如果 ( TREN == "LONG" )
Code = 0;//OP_BUY
否则
如果 ( TREN == "SHORT" )
代码 = 1;//OP_SELL
for ( int k=0; k < OrdersTotal(); k++ )
{
OrderSelect(k, SELECT_BY_POS, MODE_TRADES)。
if( OrderSymbol() == SYMB && OrderType() == Code && OrderLots() == LOTT && OrderTicket() == TICKET )
{
如果 ( OrderType() == OP_BUY )
PRC = MarketInfo(OrderSymbol(),MODE_BID)。
否则
如果 ( OrderType() == OP_SELL )
PRC = MarketInfo(OrderSymbol(),MODE_ASK)。
OrderClose(TICKET,LOTT,PRC,Slippage,Yellow)。
休息。
}
}
返回。
}