//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
/*
On every tick program checks what the value of myTrades is
by calling (executing) the CountTrades() function and asign the value
returned to myTrades..
*/int myTrades = CountTrades();
/*
Comment() function will display the words in quotes and the value of
myTrades variable.
*/Comment("You have "+myTrades+" open trades.");
}
//+------------------------------------------------------------------+int CountTrades()
{
int count=0;// we start counting from zeroint trade; // define a variable that will hold the total number of trades that are open// Get the number of trades from OrdersTotal() and asign that value to trade variable.for(trade=OrdersTotal()-1;trade>=0;trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES); // Select orders by position (OP_BUY and OP_SELL) - orders can be selected by position or by ticket// select from Open or pending orders = MODE_TRADES or select from History = MODE_HISTORYif(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)// if the order has a different symbol or magic number, skip to next ordercontinue;
if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)// if symbol is right and magic number is right, that is my order ,thenif(OrderType()==OP_SELL// if it's an open sell do this.....
|| OrderType()==OP_BUY) // if it's an open buy do this......
count++; // in this example increase the counter since I'm counting all my orders
}
return(count); // When finished counting, return the result
}
if(Time[0]==previousTime) return(0); //EA will not go past this point unless it is a new bar
previousTime=Time[0]; // If it was a new bar , it's old now but continue to the end
谢谢threwdel,我会研究你的编码。你真的是太客气了。再次感谢
如果你的意思是这不是关闭订单的最佳方式,我同意,但如果这个人不想使用订单选择(或不知道如何使用),并且不在市场上留下任何未平仓的订单,那就可以了。
我们试图在这里互相帮助,而你的回答没有起到一点作用,你没有告诉他如何使用订单选择功能,他的EA现在也没有因为你的评论而有任何改善。
下次你想帮忙的时候,要用正确的方式,把正确的代码放在那里,这样别人才可能真正学到东西。
谢谢大家对我的问题发表意见。我的目的是在bar2满足某些条件时进入交易。 我正在测试GBPJPY,一次只开一笔交易,因为我对MQL4非常陌生。只有一笔交易,我就能在Orderclose()中使用票据。我仍然不熟悉OrderSelect。因此,如果bar3满足某些条件,交易就会关闭。 我想问一个问题,有没有办法把程序的执行情况存储在一个文件里,以便调试?因为我发现,当程序执行时,我不知道哪部分的执行出了问题。
不客气,Chuale,我也从这个论坛上的其他人那里学到了很多东西,所以没问题。你其实不需要把程序的执行情况保存到文件中,有几种方法可以观察你的变量值和可能出现的错误。我主要使用Comment()函数 和Print()函数。如果你需要,我可以把例子发给你。正如我之前提到的,GBPJPY没有给我带来积极的结果,但是USDJPY有。我只做了一个月的回测(2014年1月21日-2015年2月25日),在我的设置下,回报率略高于400美元。我一有时间就会测试其他货币对,并让你知道。另外,如果你需要帮助,如何使用Print()或Comment()来实时查看屏幕上的数值,请告诉我。之前附上的图片是你一个月内的EA表现图。到目前为止,看起来并不坏。
亲爱的thedel。
谢谢你
是的,我正在使用Print()。我需要知道,如果有更多的未完成交易,如何使用OrderSelect()。对于单笔交易,如果我使用SELECT_BY_POS,索引的值应该是多少(OrderSelect (int index, in select, int pool=MODE_TRADES)?是1吗?
还是什么值?
谢谢所有回答我问题的人。我的目的是在bar2满足特定条件时进入交易。 我正在测试GBPJPY,一次只开一笔交易,因为我对MQL4非常陌生。只有一笔交易,我就能在Orderclose()中使用票据。我仍然不熟悉OrderSelect。因此,如果bar3满足某些条件,交易就会关闭。 我想问一个问题,有没有办法把程序的执行情况存储在一个文件里,以便调试?因为我发现,当程序执行时,我不知道哪部分的执行出了问题。
下面是一个如何使用Order Select函数的例子。
在这个例子中,CountTrades函数检查所有的开仓和挂单,丢弃那些没有匹配的符号和魔法号码的订单,只计算我们需要的订单。
在这个例子中,它将从最近的订单到第一个订单进行选择。
如果你需要更多帮助,请告诉我。
如果你的意思是这不是关闭订单的最佳方式,我同意,但如果这个人不想使用OrderSelect(或不知道如何使用),并且不在市场上留下任何未平仓的订单,那么它是有效的。
我们试图在这里互相帮助,而你的回答没有起到一点作用,你没有告诉他如何使用订单选择功能,他的EA现在也没有因为你的评论而有任何改善。
下次你想帮助别人时,请用正确的方式,把正确的代码放在那里,这样别人才可能真正学到东西。
如果你想帮忙,那就正确解释吧
你说
首先你用OrdersTotal()计算订单。
total=OrdersTotal();
你给的例子不好......
如果这个人不想使用OrderSelect(),那么他就必须停止EA的编程。
你在这里说的是大胡话,https://www.mql5.com/en/forum/149958/page2#915413
我评论了你的示例代码,并告诉你该怎么做。
有很多例子我已经给出了如何做...
如果你想找到它们,可以用谷歌搜索
你有几件事做错了。我假设你想让这个EA在M1时间框架的日元对上工作。你是想只在新条上下单,只在新条上平仓,还是想在新条上进场,如果满足条件就出场?这是我的想法。
首先,你用OrdersTotal()计算订单。
然后计算你的变量
如果市场上有订单,检查它们是否必须被关闭
如果市场上没有订单,检查是否满足进入条件。
如果你有任何问题,请告诉我。
当编译以下内容时:它说Time函数没有定义。请指示。
好的,我把它修好了,因为我把Time的括号打错了,应该是[]而不是()。谢谢