[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 768 1...761762763764765766767768769770771772773774775...1145 新评论 Alexey 2010.07.30 14:10 #7671 FoxUA: 我只需要调用函数,我只需要一行 "如果有多于一个的订单....而这就是全部"--而你为我提供了一个完整的功能 下面是我如何存储我的订单数据 这是个简单的问题,把它放在图书馆里。 要计算的订单类型和它的主人被作为输入,它返回未结订单或已结订单的数量。 int ChPos( int TypePos,int Magic) { // возвращает кол-во позицй которые открыты или выставленн отложками с магиком Magic int i; int count=0 ; for( i=0; i < OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && TypePos==OP_BUY && Magic==OrderMagicNumber()){count++;} if(OrderType()==OP_SELL && TypePos==OP_SELL && Magic==OrderMagicNumber()){count++;} if(OrderType()==OP_BUYLIMIT && TypePos==OP_BUYLIMIT && Magic==OrderMagicNumber()){count++;} if(OrderType()==OP_BUYSTOP && TypePos==OP_BUYSTOP && Magic==OrderMagicNumber()){count++;} if(OrderType()==OP_SELLLIMIT && TypePos==OP_SELLLIMIT && Magic==OrderMagicNumber()){count++;} if(OrderType()==OP_SELLSTOP && TypePos==OP_SELLSTOP && Magic==OrderMagicNumber()){count++;} } } return(count); } 你可以通过以下方式使用它 如果((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition) FoxUA 2010.07.30 15:26 #7672 ivandurak: 这并不复杂,把它放在图书馆里。 输入的是要统计的订单类型和它的主控人,它返回未平仓或已平仓订单的数量。 这可以按以下方式使用 如果((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition) 我有这样的功能,我不需要它,我只需要 只有一行 "如果有超过一个的订单,....然后",就这样了 我对你所展示的同一函数的数据存储在这里 int total_order; // переменная в которой хранится общее количество открытых ордеров в терминале int my_total_order; // переменная в которой хранится общее количество открытых ордеров с нашим Magic 这里是它的样子 void Myorders(){ int cnt; total_order = OrdersTotal(); my_total_order = 0; HaveBuyOrder = false; HaveSellOrder = false; HaveBuyStopOrder = false; HaveSellStopOrder = false; HaveBuyLimitOrder = false; HaveSellLimitOrder = false; HaveBuyLimitOrderEnd = false; HaveSellLimitOrderEnd = false; for(cnt = total_order - 1; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) {HaveBuyOrder = true; my_total_order++;} if (OrderType() == OP_SELL) {HaveSellOrder = true; my_total_order++;} if (OrderType() == OP_BUYSTOP) {HaveBuyStopOrder = true; my_total_order++;} if (OrderType() == OP_SELLSTOP) {HaveSellStopOrder = true; my_total_order++;} if (OrderType() == OP_BUYLIMIT) {HaveBuyLimitOrder = true; my_total_order++;} if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;} if (OrderType() == OP_BUYLIMIT) {HaveBuyLimitOrderEnd = true; my_total_order++;} if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;} } } } Alexey 2010.07.30 16:00 #7673 我想我已经得到了。 static int aaa = OrdersHistoryTotal()+OrdersTotal( ) 如果(你的条件 &&aaa < OrdersHistoryTotal()+ OrdersTotal() ) { 经营者 aaa=OrdersHistoryTotal()+OrdersTotal()。 } 如果是这样的话,还是把它放到一个考虑到魔术师的功能里比较好.你能告诉我们你在做什么工作吗?如果我没有理解错的话,逻辑有点奇怪,当多开一个订单时,不是更容易开出不大于OpenPosition的订单吗? 你的函数返回未平仓订单和挂单的总数。 有多少订单OP_BUY,如果有OP_BUYLIMIT OP_SELLLIMIT OP_SELL等等,它没有显示。 FoxUA 2010.07.30 16:32 #7674 ivandurak: 我已经弄明白了,现在if函数的问题是,我无法弄清楚问题出在哪里。 if(bt==1&&bl==7) {OpenBuyStopOrder(Lot,PRBidS); OpenBuyLimitOrder(Lot*3,PRAskL); if (HaveBuyLimitOrderEnd== true) {ModifyBuyStopOrder(PRAskS); // Выбираем } } 重点是,第一个值被执行。 如果(HaveBuyLimitOrderEnd==true),这一条就不起作用。 {ModifyBuyStopOrder(PRAskS); //选择 } } 换句话说,如果有一个订单HaveBuyLimitOrderEnd,就用一个价格变化来修改它 PRAskS 我不知道哪里出了问题。 HaveBuyLimitOrderEnd的值取自上述代码中的void Myorders()。 if(bt==1&&bl==7)的值是主要的,所以如果它是真的,就使用以下所有的方法 最有可能的是haveBuyLimitOrderEnd==true,因为我已经设置了OrderLots()==3*Lot,所有的工作只有它修改了0.3手的订单。 Alexey 2010.07.30 16:46 #7675 void Myorders(){ int cnt; total_order = OrdersTotal(); my_total_order = 0; HaveBuyOrder = false; HaveSellOrder = false; HaveBuyStopOrder = false; HaveSellStopOrder = false; HaveBuyLimitOrder = false; HaveSellLimitOrder = false; HaveBuyLimitOrderEnd = false; HaveSellLimitOrderEnd = false; for(cnt = total_order - 1; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Curr_symb && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) {HaveBuyOrder = true; my_total_order++;} if (OrderType() == OP_SELL) {HaveSellOrder = true; my_total_order++;} if (OrderType() == OP_BUYSTOP) {HaveBuyStopOrder = true; my_total_order++;} if (OrderType() == OP_SELLSTOP) {HaveSellStopOrder = true; my_total_order++;} if (OrderType() == OP_BUYLIMIT) {HaveBuyLimitOrder = true; my_total_order++;} if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrder = true; my_total_order++;} if (OrderType() == OP_BUYLIMIT) {HaveBuyLimitOrderEnd = true; my_total_order++;} if (OrderType() == OP_SELLLIMIT) {HaveSellLimitOrderEnd = true; my_total_order++;} } } } 请注意,它是用红色突出显示的。交易订单的类型是相同的,而管道中的变量设置是不同的,这应该是这样的。 FoxUA 2010.07.30 16:58 #7676 ivandurak: 请注意用红色标出的内容。交易订单的类型是相同的,而管道中的变量设置是不同的,这应该是这样的。 是的,应该是这样的,因为有不同的打开功能,我没有对OrderType()提出请求,并要求提供是否打开的标志,但问题不在这个功能上,因为其他请求也不工作,这是我第一次抛出的,而且在相同的功能上正常打开。 所以问题出在操作员的请求上。 Victor Nikolaev 2010.07.30 17:21 #7677 问题似乎出在其他地方。但你也许应该看看这些代码。 FoxUA 2010.07.30 17:32 #7678 Vinin: 问题似乎出在其他地方。但我想我需要看到代码。 这肯定不是在其他地方,其他的都可以,问题是请求(HaveBuyLimitOrderEnd==true)是错误的,所以我在想还能怎么告诉它修改和删除。 或查询本身有误 如果(bs==1&&bl==3) {OpenBuyLimitOrderEnd(Lot*15,PRAskL); 如果(HaveBuyLimitOrderEnd==true) {ModifyBuyStopOrder(PRAskS); } } Alexey 2010.07.30 17:43 #7679 FoxUA: 是的,应该是这样,因为有不同的打开功能,我没有对OrderType()提出请求,并要求提供是否打开的标志,但问题很可能不在这个功能上,因为其他请求也不工作,这是我第一次抛出,而且在相同的功能上正常打开。 所以问题出在操作者的查询上。 if(bt==1&&bl==7) {OpenBuyStopOrder(Lot,PRBidS); OpenBuyLimitOrder(Lot*3,PRAskL); if (HaveBuyLimitOrderEnd== true) {ModifyBuyStopOrder(PRAskS); // Выбираем } } 我不知道在标红的函数中,HaveBuyLimitOrderEnd是否在管道中被设置。 如果不是,你需要在if之前调用Myorders()。否则你就不知道那里有什么。而为了以防万一,标志(变量)是指 HaveBuyOrder = false。 HaveSellOrder = false。 HaveBuyStopOrder = false。 HaveSellStopOrder = false。 HaveBuyLimitOrder = false。 HaveSellLimitOrder = false。 HaveBuyLimitOrderEnd = false。 HaveSellLimitOrderEnd = false。 必须在全局层面进行定义。 FoxUA 2010.07.30 17:48 #7680 ivandurak: 我不知道HaveBuyLimitOrderEnd标志在管道中是否被设置成红色。 如果不是,你需要在if之前调用Myorders()。否则你就不知道那里有什么。而为了以防万一,标志(变量)是指 HaveBuyOrder = false。 HaveSellOrder = false。 HaveBuyStopOrder = false。 HaveSellStopOrder = false。 HaveBuyLimitOrder = false。 HaveSellLimitOrder = false。 HaveBuyLimitOrderEnd = false。 HaveSellLimitOrderEnd = false。 必须全局定义。 它是在一个冰冷的水平 bool HaveBuyOrder; // 标志着是否有公开市场的买单。 bool HaveSellOrder; // 标志着公开市场订单的出售。 bool HaveBuyStopOrder; // 未执行的买入订单的标志。 bool HaveSellStopOrder; // 未执行的卖出订单的标志。 bool HaveBuyLimitOrder; // 未执行的买入订单的标志。 bool HaveSellLimitOrder; // 未执行的卖出订单的标志。 bool HaveBuyLimitOrderEnd; // 标志着是否存在未完成的买入订单。 bool HaveSellLimitOrderEnd; // 标志着待定的卖出订单打开它是在订单开放功能中。 ticket = OrderSend(Curr_symb,OP_BUYSTOP, Lot, PRAskS, Slippage, SL, TP, 0, Magic, 0,CLR_NONE) 。 如果(ticket > 0) { HaveBuyStopOrder = true。 如果(OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))打印("下买入止损单的功能:", OrderOpenPrice()) } else Print("错误#", GetLastError(), " 下买入止损单的函数",MarketInfo(Curr_symb,MODE_ASK))。 return(ticket)。 } 因此,其他一切都能正常工作 [WARNING CLOSED!] Any newbie 初学者的问题 MQL4 MT4 MetaTrader MTS "Universum" 1...761762763764765766767768769770771772773774775...1145 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我只需要调用函数,我只需要一行 "如果有多于一个的订单....而这就是全部"--而你为我提供了一个完整的功能
下面是我如何存储我的订单数据
这是个简单的问题,把它放在图书馆里。
要计算的订单类型和它的主人被作为输入,它返回未结订单或已结订单的数量。
你可以通过以下方式使用它
如果((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)
这并不复杂,把它放在图书馆里。
输入的是要统计的订单类型和它的主控人,它返回未平仓或已平仓订单的数量。
这可以按以下方式使用
如果((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)
我有这样的功能,我不需要它,我只需要
只有一行 "如果有超过一个的订单,....然后",就这样了
我对你所展示的同一函数的数据存储在这里
这里是它的样子
我想我已经得到了。
static int aaa = OrdersHistoryTotal()+OrdersTotal( )
如果(你的条件 &&aaa < OrdersHistoryTotal()+ OrdersTotal() )
{
经营者
aaa=OrdersHistoryTotal()+OrdersTotal()。
}
如果是这样的话,还是把它放到一个考虑到魔术师的功能里比较好.你能告诉我们你在做什么工作吗?如果我没有理解错的话,逻辑有点奇怪,当多开一个订单时,不是更容易开出不大于OpenPosition的订单吗?
你的函数返回未平仓订单和挂单的总数。 有多少订单OP_BUY,如果有OP_BUYLIMIT OP_SELLLIMIT OP_SELL等等,它没有显示。
我已经弄明白了,现在if函数的问题是,我无法弄清楚问题出在哪里。
重点是,第一个值被执行。
如果(HaveBuyLimitOrderEnd==true),这一条就不起作用。
{ModifyBuyStopOrder(PRAskS); //选择
} }
换句话说,如果有一个订单HaveBuyLimitOrderEnd,就用一个价格变化来修改它 PRAskS
我不知道哪里出了问题。 HaveBuyLimitOrderEnd的值取自上述代码中的void Myorders()。
if(bt==1&&bl==7)的值是主要的,所以如果它是真的,就使用以下所有的方法
最有可能的是haveBuyLimitOrderEnd==true,因为我已经设置了OrderLots()==3*Lot,所有的工作只有它修改了0.3手的订单。
请注意用红色标出的内容。交易订单的类型是相同的,而管道中的变量设置是不同的,这应该是这样的。
是的,应该是这样的,因为有不同的打开功能,我没有对OrderType()提出请求,并要求提供是否打开的标志,但问题不在这个功能上,因为其他请求也不工作,这是我第一次抛出的,而且在相同的功能上正常打开。
所以问题出在操作员的请求上。
问题似乎出在其他地方。但你也许应该看看这些代码。
问题似乎出在其他地方。但我想我需要看到代码。
这肯定不是在其他地方,其他的都可以,问题是请求(HaveBuyLimitOrderEnd==true)是错误的,所以我在想还能怎么告诉它修改和删除。
或查询本身有误
如果(bs==1&&bl==3)
{OpenBuyLimitOrderEnd(Lot*15,PRAskL);
如果(HaveBuyLimitOrderEnd==true)
{ModifyBuyStopOrder(PRAskS);
} }
是的,应该是这样,因为有不同的打开功能,我没有对OrderType()提出请求,并要求提供是否打开的标志,但问题很可能不在这个功能上,因为其他请求也不工作,这是我第一次抛出,而且在相同的功能上正常打开。
所以问题出在操作者的查询上。
我不知道在标红的函数中,HaveBuyLimitOrderEnd是否在管道中被设置。 如果不是,你需要在if之前调用Myorders()。否则你就不知道那里有什么。而为了以防万一,标志(变量)是指
HaveBuyOrder = false。
HaveSellOrder = false。
HaveBuyStopOrder = false。
HaveSellStopOrder = false。
HaveBuyLimitOrder = false。
HaveSellLimitOrder = false。
HaveBuyLimitOrderEnd = false。
HaveSellLimitOrderEnd = false。
必须在全局层面进行定义。
我不知道HaveBuyLimitOrderEnd标志在管道中是否被设置成红色。 如果不是,你需要在if之前调用Myorders()。否则你就不知道那里有什么。而为了以防万一,标志(变量)是指
HaveBuyOrder = false。
HaveSellOrder = false。
HaveBuyStopOrder = false。
HaveSellStopOrder = false。
HaveBuyLimitOrder = false。
HaveSellLimitOrder = false。
HaveBuyLimitOrderEnd = false。
HaveSellLimitOrderEnd = false。
必须全局定义。
它是在一个冰冷的水平
bool HaveBuyOrder; // 标志着是否有公开市场的买单。
bool HaveSellOrder; // 标志着公开市场订单的出售。
bool HaveBuyStopOrder; // 未执行的买入订单的标志。
bool HaveSellStopOrder; // 未执行的卖出订单的标志。
bool HaveBuyLimitOrder; // 未执行的买入订单的标志。
bool HaveSellLimitOrder; // 未执行的卖出订单的标志。
bool HaveBuyLimitOrderEnd; // 标志着是否存在未完成的买入订单。
bool HaveSellLimitOrderEnd; // 标志着待定的卖出订单打开
它是在订单开放功能中。
ticket = OrderSend(Curr_symb,OP_BUYSTOP, Lot, PRAskS, Slippage, SL, TP, 0, Magic, 0,CLR_NONE) 。
如果(ticket > 0) {
HaveBuyStopOrder = true。
如果(OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))打印("下买入止损单的功能:", OrderOpenPrice())
}
else Print("错误#", GetLastError(), " 下买入止损单的函数",MarketInfo(Curr_symb,MODE_ASK))。
return(ticket)。
}
因此,其他一切都能正常工作