初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1097 1...109010911092109310941095109610971098109911001101110211031104...1503 新评论 fxsaber 2019.07.21 10:12 #10961 Vladimir Karputov: 在执行交易订单 后,出现的是一个位置,而不是一个订单! 有一些服务器,你可以重现这样的情况 PositionGetTicket(0) = 73401069 PositionSelect(_Symbol) = true OrderGetTicket(0) = 73401069 PositionsTotal() = 1 OrdersTotal() = 1, ORDER_STATE_STARTED 也就是说,我们同时 在终端有以下订单 #73401069 2019.06.08 21:42:42 buy 1.00 BO Volatility 100 Index 0.5150 0.0000 0.0000 0.5150 0.00 0.00 0.00 Hello! 0 并从它的相同位置 #73401069 2019.06.08 21:42:42 buy 1.00 BO Volatility 100 Index 0.5150 0.0000 0.0000 0.5150 0.00 0.00 0.00 Hello! 0 Igor Makanu 2019.07.21 10:33 #10962 Vladimir Karputov: 因此,首先用语言描述你正在做什么,你想得到什么。使用 "买入交易指令 "和 "卖出交易指令 "代替ORDER。其结果是一个 "买入头寸 "或 "卖出头寸"。 好吧,让我们把讨论简化为代码中的例子。 这里是用MQL4编写的代码--我对测试者的版本感兴趣,即最小的检查等。 //+------------------------------------------------------------------+ //| tst__.mq4 | //| Copyright 2018, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict int ticket1=-1; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { ticket1=-1; return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(ticket1<0) ticket1=OrderSend(_Symbol,OP_BUY,0.1,Ask,30,NormalizeDouble(Ask-100*_Point,_Digits),NormalizeDouble(Ask+100*_Point,_Digits)); if(OrderSelect(ticket1,SELECT_BY_TICKET)) { if(OrderCloseTime()>0) { int cmd=OrderType()==OP_BUY ? OP_SELL : OP_BUY; double tp = cmd==OP_BUY ? NormalizeDouble(Ask+100*_Point,_Digits) : NormalizeDouble(Bid-100*_Point,_Digits); double sl = cmd==OP_BUY ? NormalizeDouble(Ask-100*_Point,_Digits) : NormalizeDouble(Bid+100*_Point,_Digits); ticket1=OrderSend(_Symbol,cmd,0.1,Ask,30,sl,tp); } } } //+------------------------------------------------------------------+ TS的本质:当你一开始打开一个买入订单,并记住订单的票据(在票据上工作),然后检查订单是否被关闭 - 看看是什么类型的订单,并把相反的订单,并记住票据,如此循环。 我需要在MQL5中使用SB CTrade复制一个类似的例子。 Alexey Viktorov 2019.07.21 10:43 #10963 Igor Makanu: 好吧,让我们把讨论简化为代码中的例子,这里是用MQL4编写的代码--我对测试人员的版本感兴趣,即最少的检查等。 TS的精髓:当你一开始打开一个买入订单,并记住订单的票据(在票据上工作),然后检查订单是否被关闭 - 看看什么类型的订单,并把相反的订单,并记住票据,等等。 我需要在MQL5中使用SB CTrade复制一个类似的例子。 在这里,小鼓手将说出他对你的看法)))) Igor Makanu 2019.07.21 10:51 #10964 Alexey Viktorov: 现在小鼓手将告诉你他对你的看法)))) 让它说话,但我们需要知道票号是开仓还是平仓,如果是平仓,我们需要知道平仓的交易订单 是什么类型。 (黑体字--反正是命令!--因为在TC的头条账户中) fxsaber 2019.07.21 10:54 #10965 Igor Makanu:好吧,让我们把讨论简化为代码中的例子。 我在MQL4中写了一段代码--我对Tester版本感兴趣,即检查的最小值等。 第二个OrderSend 包含一个错误。而正常化是没有必要的。在论坛上(不仅如此),代码越短越容易阅读。 void OnTick() { static int ticket1 = -1; if(ticket1<0) ticket1=OrderSend(_Symbol,OP_BUY,0.1,Ask,30,Ask-100*_Point,Ask+100*_Point); if(OrderSelect(ticket1,SELECT_BY_TICKET) && OrderCloseTime()) { int cmd=1-OrderType(); double open = cmd ? Bid : Ask; double tp = open - (cmd ? 1 : -1) * 100 * _Point; double sl = open + (cmd ? 1 : -1) * 100 * _Point; ticket1=OrderSend(_Symbol,cmd,0.1,open,30,sl,tp); } } 我需要一个类似的例子,在MQL5中使用CTrade SB重现。 我需要一个类似的例子,在MQL5中使用CTrade SB进行复制。 Vladimir Karputov 2019.07.21 10:56 #10966 所以,基本的是POSITION_IDENTIFIER,但不是位置票。这一点很重要,正是因为有了网线。 位置标识符 职位标识符是一个唯一的数字,它被分配给每个新开的职位,并且在其整个生命周期内不会改变。它与开仓时的订单票相对应。 仓位标识符在每个订单(ORDER_POSITION_ID)和每个开启、改变或关闭它的交易(DEAL_POSITION_ID)中被指定。使用此属性来搜索与头寸相关的订单和交易。 当一个头寸在净值模式下被逆转(一个单一的进出交易),头寸的POSITION_IDENTIFIER标识符不会改变。然而,POSITION_TICKET被改变为导致逆转的订单票。在对冲模式下,不存在头寸逆转。 长 因此,我们必须跟踪位置标识符(POSITION_IDENTIFIER)。 现在,一个更准确的任务:在第一次运行时,我们打开一个买入仓位并记住它(警告:我们应该记住仓位ID,而不是票据)。如果该仓位已被关闭,我们就开一个相反的仓位:例如,从前有一个买入仓位,然后被关闭,这意味着我们立即开一个卖出仓位。 现在要解决这个问题就容易多了。 fxsaber 2019.07.21 11:00 #10967 Vladimir Karputov: 现在要解决这个问题就容易多了。 在写例子的时候,要看得更远 一点。 Igor Makanu 2019.07.21 11:06 #10968 fxsaber: 第二个OrderSend包含一个错误。我不需要正常化。在论坛上(不仅如此),当代码较短时,更容易阅读。 是的,我明白了,我临时写的代码--在测试器中运行--它起作用了,把它复制到论坛上。 fxsaber: 你得再努力一点。 这就是我在论坛上寻求帮助的原因!- 我决定对SB CTrade的能力进行评估--我以一项初级任务为例,到目前为止,结果是否定的! 弗拉基米尔-卡尔普托夫。 现在解决这个问题将变得更加容易。 我知道你是论坛的活跃成员。 你能在MQL5下使用CTrade服务器重现我的,或者说更正的fxsaber 代码吗? fxsaber 2019.07.21 11:09 #10969 Igor Makanu: 是的,我明白了,我临时写的代码--在测试器中运行--它起作用了,把它复制到论坛上。 当我开始写EA时,我总是从一张白纸开始(我推荐这样做)。可能最常见的是以一个带有On-functions的标题开始。 fxsaber 2019.07.21 11:16 #10970 Igor Makanu: 这就是我在论坛上寻求帮助的原因!- 我决定评估CTrade的能力--我以一项初级任务为例,到目前为止,结果是负面的!我决定对其进行评估。 还有一个更短的例子。 关于交易、自动交易系统和交易策略测试的论坛 mql5语言的特点、微妙之处以及技巧 fxsaber, 2018.02.15 11:48 OrderCloseBy(OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0), OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0)); 如果不是在测试器中,在MT5中很难处理这个问题。 1...109010911092109310941095109610971098109911001101110211031104...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在执行交易订单 后,出现的是一个位置,而不是一个订单!
有一些服务器,你可以重现这样的情况
也就是说,我们同时 在终端有以下订单
并从它的相同位置
因此,首先用语言描述你正在做什么,你想得到什么。使用 "买入交易指令 "和 "卖出交易指令 "代替ORDER。其结果是一个 "买入头寸 "或 "卖出头寸"。
好吧,让我们把讨论简化为代码中的例子。 这里是用MQL4编写的代码--我对测试者的版本感兴趣,即最小的检查等。
TS的本质:当你一开始打开一个买入订单,并记住订单的票据(在票据上工作),然后检查订单是否被关闭 - 看看是什么类型的订单,并把相反的订单,并记住票据,如此循环。
我需要在MQL5中使用SB CTrade复制一个类似的例子。
好吧,让我们把讨论简化为代码中的例子,这里是用MQL4编写的代码--我对测试人员的版本感兴趣,即最少的检查等。
TS的精髓:当你一开始打开一个买入订单,并记住订单的票据(在票据上工作),然后检查订单是否被关闭 - 看看什么类型的订单,并把相反的订单,并记住票据,等等。
我需要在MQL5中使用SB CTrade复制一个类似的例子。
现在小鼓手将告诉你他对你的看法))))
让它说话,但我们需要知道票号是开仓还是平仓,如果是平仓,我们需要知道平仓的交易订单 是什么类型。
(黑体字--反正是命令!--因为在TC的头条账户中)
好吧,让我们把讨论简化为代码中的例子。 我在MQL4中写了一段代码--我对Tester版本感兴趣,即检查的最小值等。
我需要一个类似的例子,在MQL5中使用CTrade SB重现。
我需要一个类似的例子,在MQL5中使用CTrade SB进行复制。
所以,基本的是POSITION_IDENTIFIER,但不是位置票。这一点很重要,正是因为有了网线。
位置标识符
职位标识符是一个唯一的数字,它被分配给每个新开的职位,并且在其整个生命周期内不会改变。它与开仓时的订单票相对应。
仓位标识符在每个订单(ORDER_POSITION_ID)和每个开启、改变或关闭它的交易(DEAL_POSITION_ID)中被指定。使用此属性来搜索与头寸相关的订单和交易。
当一个头寸在净值模式下被逆转(一个单一的进出交易),头寸的POSITION_IDENTIFIER标识符不会改变。然而,POSITION_TICKET被改变为导致逆转的订单票。在对冲模式下,不存在头寸逆转。
长
因此,我们必须跟踪位置标识符(POSITION_IDENTIFIER)。
现在,一个更准确的任务:在第一次运行时,我们打开一个买入仓位并记住它(警告:我们应该记住仓位ID,而不是票据)。如果该仓位已被关闭,我们就开一个相反的仓位:例如,从前有一个买入仓位,然后被关闭,这意味着我们立即开一个卖出仓位。
现在要解决这个问题就容易多了。
现在要解决这个问题就容易多了。
在写例子的时候,要看得更远 一点。
第二个OrderSend包含一个错误。我不需要正常化。在论坛上(不仅如此),当代码较短时,更容易阅读。
是的,我明白了,我临时写的代码--在测试器中运行--它起作用了,把它复制到论坛上。
你得再努力一点。
这就是我在论坛上寻求帮助的原因!- 我决定对SB CTrade的能力进行评估--我以一项初级任务为例,到目前为止,结果是否定的!
现在解决这个问题将变得更加容易。
我知道你是论坛的活跃成员。 你能在MQL5下使用CTrade服务器重现我的,或者说更正的fxsaber 代码吗?
是的,我明白了,我临时写的代码--在测试器中运行--它起作用了,把它复制到论坛上。
当我开始写EA时,我总是从一张白纸开始(我推荐这样做)。可能最常见的是以一个带有On-functions的标题开始。
这就是我在论坛上寻求帮助的原因!- 我决定评估CTrade的能力--我以一项初级任务为例,到目前为止,结果是负面的!我决定对其进行评估。
还有一个更短的例子。
关于交易、自动交易系统和交易策略测试的论坛
mql5语言的特点、微妙之处以及技巧
fxsaber, 2018.02.15 11:48
如果不是在测试器中,在MT5中很难处理这个问题。