[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 10 1...34567891011121314151617...652 新评论 Alexey 2011.07.25 17:05 #91 tol64: 您能否告知,在开仓/设置挂单 时,是否可以通过程序确定立即设置止损/止盈的 可能性,还是事后? 事先检查止损和盈利水平。 MarketInfo() 函数中使用的请求标识符。可以是以下数值之一。 恒定. 价值 描述 MODE_LOW 1 每日最低价格 MODE_HIGH 2 每日最高价格 MODE_TIME 5 最后一次报价的时间 MODE_BID 9 最后收到的投标价格。对于当前的仪器,它被储存在预定义的变量Bid 中。 MODE_ASK 10 最后收到的询问价格。存储在预定义的变量中询问 当前的符号 模式_POINT 11 报价货币中的点尺寸。存储在当前符号的预定义变量Point 中 MODE_DIGITS 12 票据价格中小数点后的数字。存储在当前符号的预定义变量Digits 中 MODE_SPREAD 13 点差,以点计 MODE_STOPLEVEL 14 止损/止盈的最低允许水平,单位为点 MODE_LOTSIZE 15 以工具的基础货币为单位的合同规模 MODE_TICKVALUE 16 票据价格在存款货币中的最小变化规模 MODE_TICKSIZE 17 报价货币的工具价格变化的最小步骤 MODE_SWAPLONG 18 多头头寸的互换规模 MODE_SWAPSHORT 19 空头头寸的互换规模 MODE_STARTING 20 日历开始日期(通常用于期货)。 模式_失效 21 到期日(通常用于期货)。 允许交易的模式 22 允许交易指定的工具 MODE_MINLOT 23 最小地段面积 MODE_LOTSTEP 24 地段面积变化的步骤 MODE_MAXLOT 25 最大地段面积 MODE_SWAPTYPE 26 掉期计算方法。0--以点为单位;1--以工具基础货币为单位;2--以百分数为单位;3--以保证金货币为单位。 模式_性能校准模式 27 利润计算方式。0-外汇;1-差价合约;2-期货 mode_margincalcmode 28 计算保证金的方式。0-外汇;1-差价合约;2-期货;3-指数差价合约 mode_margininit 29 1手的初始保证金要求 模式_marginmaintenance 30 支持每1手未平仓合约所需的保证金金额 模式_保证金对冲 31 每1手重叠头寸收取的保证金 mode_marginrequired 32 自由资金的数量,需要打开1手购买 mode_freezelevel 33 以点为单位的订单冻结水平。如果执行价格在冻结水平定义的范围内,订单不能被修改、取消或关闭。 [ARCHIVE] Any rookie question, Current Price of an Update Ask/Bid Alexey 2011.07.25 17:26 #92 SeALALex: 我只是在学习如何编写EA,就像我在标准指标上的许多第一个EA一样,我刚刚编写了一个新的EA,但现在我的任务复杂了。在一般情况下,如何使,在出现的条件下打开一个位置,并在其关闭,例如,对于采取相同的条件,一个新的没有打开,并打开时,相反的条件,等等。谢谢!!!。 在帮助中,有一个现成的例子 int i,accTotal=OrdersHistoryTotal(); for(i=0;i<accTotal;i++) { //---- 检查选择结果 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error accessing historical database (",GetLastError()," ); break; } 我们需要记住订单关闭的时间,将订单关闭的时间与上一次迭代中的关闭时间进行比较,如果(关闭时间较高且交易操作类型为买入或卖出),那么我们应该记住当前订单的时间和交易操作类型//作为一个结果,在循环结束时我们知道最后关闭的订单类型 } 类似这样。 Anatoli Kazharski 2011.07.25 18:01 #93 ivandurak: 预先检查止损和利润设置水平 . 在这个列表中,某些账户类型没有检查。以下是《交易操作规程》中关于NDD账户的一段话。3.3 如果通过客户终端使用专家顾问开仓,客户不能指定止损和/或止盈订单。如果客户希望下这些订单,客户可以根据条款5.16-5.22和9.13-9.16修改现有头寸。 我想知道是否有可能以编程方式检查这个问题。根据我的理解,没有。你必须首先在程序中写入一个开仓/设置挂单的功能,同时考虑到经纪人设置的条件。 Alexey 2011.07.25 18:45 #94 tol64: 在这个列表中,某些账户类型没有检查。以下是《交易操作规程》中关于NDD账户的一段话。 我感兴趣的是,这是否可以通过编程来检查。根据我的理解,没有。你必须最初在程序中写入一个开仓/设置挂单的功能,并考虑到经纪人设置的条件。 我不太了解设置订单的规则,试着玩玩演示,看看你能做什么,不能做什么。据我所知,没有什么能阻止你以编程方式设置一个订单,然后再修改它。 对,这很奇怪,除非你在开仓后 切断连接,不留止损。 Роман 2011.07.25 19:05 #95 tol64: 在这个列表中,某些账户类型没有检查。以下是《交易操作规程》中关于NDD账户的一段话。 我感兴趣的是,这是否可以通过编程来检查。据我所知,没有。你必须首先在程序中写入一个开仓/设置挂单的函数,同时考虑到经纪人设置的条件。 根本就没有问题。甚至(如果不是个人使用,因为你知道在哪些账户上(交易条件和与谁)使用它),但如果你发送EA订单,而客户尚未决定在哪些账户上和在哪里使用,甚至在账户类型上有可能立即设置采取和停止,然后默认产生EA与这些水平的零值,当设置所有类型的订单,然后与他们修改(将在那里和那里工作),同时,当然,没有人取消检查要求和限制在P。 Anatoli Kazharski 2011.07.25 19:06 #96 ivandurak: 我不太理解设置订单的规则,试着用演示来玩,什么可以,什么不可以。据我所知,没有什么能阻止你以编程方式设置一个订单,然后修改它。 这似乎很奇怪,除非你在开仓后切断了连接,没有留下止损。 )))不,你完全误解了我的意思。我没有写 "用程序设置",我写的是用程序定义。在某些账户类型上,你不能立即 开仓 并设置止损/止赢,这对我来说是比较好的/安全的。在mql5 上,如果我没有弄错的话,似乎可以确定这一点。我希望能够确定这一点,并根据定义,选择使用哪个函数。 Anatoli Kazharski 2011.07.25 20:58 #97 Roman.: 根本就没有问题。甚至(如果不是为了个人使用,因为你知道在哪些账户上(交易条件和与谁)使用它),但如果你做一个EA来订购,而客户还没有决定在哪些账户上和在哪里使用它,甚至在账户类型上有可能立即设置采取和停止,那么你仍然做一个EA,在设置所有类型的订单时,这些水平的默认值为零,然后与他们修改(将在那里和那里工作),同时,当然,无人取消检查要求和限制在P 是的,有了解决方案就没有问题了。你只需要使用你所拥有的并正确地使用它)。 [删除] 2011.07.26 05:57 #98 Roman. 和 ivandurak 非常感谢你们的回答,但这对我来说还是很难理解。 我在另一个论坛上发现了一个关于如何做到这一点的建议,但到目前为止,我无法将其应用到我的常规代码中。 int BuyTrue, SellTrue;//定义将作为这些标志的变量 .... //---购买条件 如果(BuyTrue==0 && ... 加上你的其他条件)//开仓条件 { .... OrderSend(....); //开设订单的函数 BuyTrue=1; // 如果BuyTrue=1,开仓条件将不完全满足。 // 因此,在一个重复的买入信号下,交易将不会被打开。 SellTrue=0; // 在SellTrue=0时,开仓条件将得到完全满足。 // 因此,下一个交易将是只卖出 .... } //---卖出条件 如果(SellTrue==0 && ... 加上你的其他条件)//开仓条件 { .... OrderSend(....); //开设订单的函数 SellTrue=1; // 如果SellTrue=1,订单开仓的条件将不完全满足 // 因此,在第二个卖出信号时,将不会开仓。 BuyTrue=0; // 在BuyTrue=0时,开仓条件将得到完全满足。 // 因此,下一个交易将是买入。 .... } 我的开仓代码 total=OrdersTotal()。 如果(total<1) { // 没有发现已开的订单 如果(AccountFreeMargin()<(1000*Lots)) { Print("我们没有钱。Free Margin = ", AccountFreeMargin(); return(0); } // 检查多头头寸(买入)。 如果(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point)) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green); 如果(ticket>0) { 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY订单打开:",OrderOpenPrice())。 } else Print("错误打开BUY订单:",GetLastError())。 return(0); } // 检查空头头寸(卖出)。 如果(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point)) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red)。 如果(ticket>0) { 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("卖出订单开仓:",OrderOpenPrice()) } else Print("错误打开卖出订单:",GetLastError())。 return(0); } return(0); } 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. [ARCHIVE] Any rookie question, [存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. Роман 2011.07.26 06:16 #99 SeALALex: Roman. 和 ivandurak 非常感谢你们的回答,但这对我来说还是很难理解。 我在另一个论坛上发现了一个关于如何做到这一点的建议,但到目前为止,我无法将其应用到我的常规代码中。 int BuyTrue, SellTrue;//定义变量,这些变量将作为上述标志。 .... //---购买条件 如果(BuyTrue==0 && ... 加上你的其他条件)//开仓条件 { .... OrderSend(....); //开设订单的函数 BuyTrue=1; // 如果BuyTrue=1,开仓条件将不完全满足。 // 因此,在重复的买入信号下,将不会开仓。 SellTrue=0; // 在SellTrue=0时,开仓条件将得到完全满足。 // 因此,下一个交易将是只卖出 .... } //---卖出条件 如果(SellTrue==0 && ... 加上你的其他条件)//开仓条件 { .... OrderSend(....); //开设订单的函数 SellTrue=1; // 如果SellTrue=1,订单开仓的条件将不完全满足 // 因此,在一个重复的卖出信号下,将不会开仓。 BuyTrue=0; // 在BuyTrue=0时,开仓条件将得到完全满足。 // 因此,下一个交易将是买入。 .... } 我开启交易的代码。 total=OrdersTotal()。 如果(total<1) { // 没有发现已开的订单 如果(AccountFreeMargin()<(1000*Lots)) { Print("我们没有钱。Free Margin = ", AccountFreeMargin(); return(0); } // 检查多头头寸(买入)。 如果(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point)) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green); 如果(ticket>0) { 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY订单打开:",OrderOpenPrice())。 } else Print("错误打开BUY订单:",GetLastError())。 return(0); } // 检查空头头寸(卖出)。 如果(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point)) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red)。 如果(ticket>0) { 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("卖出订单开仓:",OrderOpenPrice()) } else Print("错误打开卖出订单:",GetLastError())。 return(0); } return(0); } 首先,通过Ctrl+Alt+M(或按菜单顶部的SRC)在编辑器中粘贴你的代码,否则就不好了,什么是清楚的--一切都融合在一起...:-)) 第二,阅读教程,特别是我推荐的链接上的信息,代码下面是它的描述,在描述的最后,精确地描述了--如何在MA之上/之下报告一次 价格(你将有一个类似于在给定的交易条件下的单一入口 --标志的使用和所有),在你的Wizard工作之前...:-)) P.S. or google search: How to properly insert code site:mql4.com [删除] 2011.07.26 06:57 #100 if (SellTrue==0 && A1<A2 && S1<30 && ADX1<ADX2) // Условие открытия позы { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"AO sample",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ||SellTrue==1)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); if (ticket > 0 && SellTrue==1) { SellTrue=1; BuyTrue=0; Alert("По данным условиям сделка уже открывалась"); // Сообщение } } return(0); 罗马人。 它不工作,怎么了? 1...34567891011121314151617...652 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
您能否告知,在开仓/设置挂单 时,是否可以通过程序确定立即设置止损/止盈的 可能性,还是事后?
事先检查止损和盈利水平。
MarketInfo() 函数中使用的请求标识符。可以是以下数值之一。
我只是在学习如何编写EA,就像我在标准指标上的许多第一个EA一样,我刚刚编写了一个新的EA,但现在我的任务复杂了。在一般情况下,如何使,在出现的条件下打开一个位置,并在其关闭,例如,对于采取相同的条件,一个新的没有打开,并打开时,相反的条件,等等。谢谢!!!。
在帮助中,有一个现成的例子
预先检查止损和利润设置水平 .
在这个列表中,某些账户类型没有检查。以下是《交易操作规程》中关于NDD账户的一段话。
3.3 如果通过客户终端使用专家顾问开仓,客户不能指定止损和/或止盈订单。如果客户希望下这些订单,客户可以根据条款5.16-5.22和9.13-9.16修改现有头寸。
我感兴趣的是,这是否可以通过编程来检查。根据我的理解,没有。你必须最初在程序中写入一个开仓/设置挂单的功能,并考虑到经纪人设置的条件。在这个列表中,某些账户类型没有检查。以下是《交易操作规程》中关于NDD账户的一段话。
我不太了解设置订单的规则,试着玩玩演示,看看你能做什么,不能做什么。据我所知,没有什么能阻止你以编程方式设置一个订单,然后再修改它。 对,这很奇怪,除非你在开仓后 切断连接,不留止损。
我感兴趣的是,这是否可以通过编程来检查。据我所知,没有。你必须首先在程序中写入一个开仓/设置挂单的函数,同时考虑到经纪人设置的条件。在这个列表中,某些账户类型没有检查。以下是《交易操作规程》中关于NDD账户的一段话。
根本就没有问题。甚至(如果不是个人使用,因为你知道在哪些账户上(交易条件和与谁)使用它),但如果你发送EA订单,而客户尚未决定在哪些账户上和在哪里使用,甚至在账户类型上有可能立即设置采取和停止,然后默认产生EA与这些水平的零值,当设置所有类型的订单,然后与他们修改(将在那里和那里工作),同时,当然,没有人取消检查要求和限制在P。
我不太理解设置订单的规则,试着用演示来玩,什么可以,什么不可以。据我所知,没有什么能阻止你以编程方式设置一个订单,然后修改它。 这似乎很奇怪,除非你在开仓后切断了连接,没有留下止损。
)))不,你完全误解了我的意思。我没有写 "用程序设置",我写的是用程序定义。在某些账户类型上,你不能立即 开仓 并设置止损/止赢,这对我来说是比较好的/安全的。在mql5 上,如果我没有弄错的话,似乎可以确定这一点。我希望能够确定这一点,并根据定义,选择使用哪个函数。
根本就没有问题。甚至(如果不是为了个人使用,因为你知道在哪些账户上(交易条件和与谁)使用它),但如果你做一个EA来订购,而客户还没有决定在哪些账户上和在哪里使用它,甚至在账户类型上有可能立即设置采取和停止,那么你仍然做一个EA,在设置所有类型的订单时,这些水平的默认值为零,然后与他们修改(将在那里和那里工作),同时,当然,无人取消检查要求和限制在P
是的,有了解决方案就没有问题了。你只需要使用你所拥有的并正确地使用它)。
Roman. 和 ivandurak 非常感谢你们的回答,但这对我来说还是很难理解。 我在另一个论坛上发现了一个关于如何做到这一点的建议,但到目前为止,我无法将其应用到我的常规代码中。
int BuyTrue, SellTrue;//定义将作为这些标志的变量
....
//---购买条件
如果(BuyTrue==0 && ... 加上你的其他条件)//开仓条件
{
....
OrderSend(....); //开设订单的函数
BuyTrue=1; // 如果BuyTrue=1,开仓条件将不完全满足。
// 因此,在一个重复的买入信号下,交易将不会被打开。
SellTrue=0; // 在SellTrue=0时,开仓条件将得到完全满足。
// 因此,下一个交易将是只卖出
....
}
//---卖出条件
如果(SellTrue==0 && ... 加上你的其他条件)//开仓条件
{
....
OrderSend(....); //开设订单的函数
SellTrue=1; // 如果SellTrue=1,订单开仓的条件将不完全满足
// 因此,在第二个卖出信号时,将不会开仓。
BuyTrue=0; // 在BuyTrue=0时,开仓条件将得到完全满足。
// 因此,下一个交易将是买入。
....
}
我的开仓代码
total=OrdersTotal()。
如果(total<1)
{
// 没有发现已开的订单
如果(AccountFreeMargin()<(1000*Lots))
{
Print("我们没有钱。Free Margin = ", AccountFreeMargin();
return(0);
}
// 检查多头头寸(买入)。
如果(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green);
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY订单打开:",OrderOpenPrice())。
}
else Print("错误打开BUY订单:",GetLastError())。
return(0);
}
// 检查空头头寸(卖出)。
如果(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red)。
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("卖出订单开仓:",OrderOpenPrice())
}
else Print("错误打开卖出订单:",GetLastError())。
return(0);
}
return(0);
}
Roman. 和 ivandurak 非常感谢你们的回答,但这对我来说还是很难理解。 我在另一个论坛上发现了一个关于如何做到这一点的建议,但到目前为止,我无法将其应用到我的常规代码中。
int BuyTrue, SellTrue;//定义变量,这些变量将作为上述标志。
....
//---购买条件
如果(BuyTrue==0 && ... 加上你的其他条件)//开仓条件
{
....
OrderSend(....); //开设订单的函数
BuyTrue=1; // 如果BuyTrue=1,开仓条件将不完全满足。
// 因此,在重复的买入信号下,将不会开仓。
SellTrue=0; // 在SellTrue=0时,开仓条件将得到完全满足。
// 因此,下一个交易将是只卖出
....
}
//---卖出条件
如果(SellTrue==0 && ... 加上你的其他条件)//开仓条件
{
....
OrderSend(....); //开设订单的函数
SellTrue=1; // 如果SellTrue=1,订单开仓的条件将不完全满足
// 因此,在一个重复的卖出信号下,将不会开仓。
BuyTrue=0; // 在BuyTrue=0时,开仓条件将得到完全满足。
// 因此,下一个交易将是买入。
....
}
我开启交易的代码。
total=OrdersTotal()。
如果(total<1)
{
// 没有发现已开的订单
如果(AccountFreeMargin()<(1000*Lots))
{
Print("我们没有钱。Free Margin = ", AccountFreeMargin();
return(0);
}
// 检查多头头寸(买入)。
如果(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green);
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY订单打开:",OrderOpenPrice())。
}
else Print("错误打开BUY订单:",GetLastError())。
return(0);
}
// 检查空头头寸(卖出)。
如果(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red)。
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("卖出订单开仓:",OrderOpenPrice())
}
else Print("错误打开卖出订单:",GetLastError())。
return(0);
}
return(0);
}
首先,通过Ctrl+Alt+M(或按菜单顶部的SRC)在编辑器中粘贴你的代码,否则就不好了,什么是清楚的--一切都融合在一起...:-))
第二,阅读教程,特别是我推荐的链接上的信息,代码下面是它的描述,在描述的最后,精确地描述了--如何在MA之上/之下报告一次 价格(你将有一个类似于在给定的交易条件下的单一入口 --标志的使用和所有),在你的Wizard工作之前...:-))
P.S. or google search: How to properly insert code site:mql4.com