初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1098 1...109110921093109410951096109710981099110011011102110311041105...1503 新评论 Igor Makanu 2019.07.21 12:55 #10971 嗯,奇怪的情况,就像我提出的话题中的活动一样,我有一个问题,从我的角度来看是具体的,但到目前为止我得到的不是答案,而是 "你为什么需要它? 我想用SB CTrade 来做,这里有一个例子(由我的两个例子汇编而成):我们在9 TF的每一个新条形图 上用一个订单打开,我们记住票据,并通过票据号码确定一个平仓订单的方向。 在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 input int TP = 100; input int SL = 100; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CNewbar { private: datetime mnewtime; ENUM_TIMEFRAMES mperiod; public: CNewbar() { mperiod=PERIOD_CURRENT; mnewtime=TimeCurrent(); } CNewbar(ENUM_TIMEFRAMES period) { mperiod=period; mnewtime=TimeCurrent(); } bool NewBar(){ datetime t=iTime(NULL,mperiod,0); if(mnewtime<t){ mnewtime=t; return(true); } return(false); } }; ENUM_TIMEFRAMES TF[9]={PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1}; CNewbar *BAR[9]; int ticket[9]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { for(int i=0;i<9;i++) BAR[i]=new CNewbar(TF[i]); ArrayInitialize(ticket,-1); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { for(int i=0;i<9;i++) delete BAR[i]; } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { for(int i=0;i<9;i++) if(BAR[i].NewBar()) { if(ticket[i]<0) ticket[i]=OrderSend(_Symbol,OP_BUY,0.1,Ask,30,Ask-SL*_Point,Ask+TP*_Point); if(OrderSelect(ticket[i],SELECT_BY_TICKET) && OrderCloseTime()>0) { int cmd=1-OrderType(); double open=cmd ? Bid : Ask; double tp = open - (cmd ? 1 : -1) * TP * _Point; double sl = open + (cmd ? 1 : -1) * SL * _Point; ticket[i]=OrderSend(_Symbol,cmd,0.1,open,30,sl,tp); } } } 我们需要一个测试员的代码,即在优化器中检查的数量最少,工作速度最快。 如何用SB CTrade在MQL5中编写这段代码? Vladimir Karputov 2019.07.21 12:57 #10972 Igor Makanu: 嗯,奇怪的情况,就像我提出的话题中的活动一样,我有一个问题,从我的角度来看是具体的,但到目前为止我得到的不是答案,而是 "你为什么需要它? 我想用SB CTrade 来做,这里有一个例子(由我的两个例子汇编而成):我们在9 TF的每一个新条形图 上用一个订单打开,我们记住票据,并通过票据号码来确定一个平仓订单的方向。 在MQL4中,测试人员的代码看起来是这样的 如何使用SB CTrade在MQL5中编写此代码? 关于交易、自动交易系统和策略测试的论坛 初学者的常见问题 MQL5 MT5 MetaTrader 5 Vladimir Karputov, 2019.07.21 12:56 所以,基础是POSITION_IDENTIFIER,但不是位置票。 这很重要,只是因为有了网 子。 位置标识符 职位标识符是一个唯一的数字,它被分配给每个新开的职位,并且在其整个生命周期内不会改变。它与开仓时的订单票相对应。 仓位标识符在每个订单(ORDER_POSITION_ID)和每个开启、改变或关闭它的交易(DEAL_POSITION_ID)中被指定。使用此属性来搜索与头寸相关的订单和交易。 当一个头寸在净值模式下被逆转(一个单一的进出交易),头寸的POSITION_IDENTIFIER标识符不会改变。然而,POSITION_TICKET被改变为导致逆转的订单票。在对冲模式下,不存在头寸逆转。 长 因此,我们必须跟踪位置标识符(POSITION_IDENTIFIER)。 现在,一个更准确的任务:在第一次运行时,我们打开一个买入仓位并记住它(警告:我们应该记住仓位ID,而不是票据)。如果该仓位已被关闭,我们就开一个相反的仓位:例如,从前有一个买入仓位,后来被关闭,这意味着我们马上开一个卖出仓位。 现在要解决这个问题就容易多了。 Igor Makanu 2019.07.21 13:01 #10973 Vladimir Karputov: 也就是说,CTrade 不知道如何独立检测一个订单是开放还是关闭? 最后一个关闭的订单的类型是什么? 我应该使用哪个图书馆来实现这一目的? Vladimir Karputov 2019.07.21 13:27 #10974 Igor Makanu: 即CTrade不知道如何独立检测一个订单是开放还是关闭,最后关闭的订单是什么类型? 为此,我们应该使用哪个图书馆? 我已经告诉过你一百次了,所以请把 "秩序 "这个词从你的词汇中删除。除非你这样做,否则你将无法继续前进。总之,我可能无法帮助你。这真是太糟糕了。 [删除] 2019.07.21 13:35 #10975 Vladimir Karputov: 好吧,我已经告诉过你一百次了--把 "授权 "这个词从你的词汇中删除。除非你做到这一点,否则你就无法继续前进。总之,我可能帮不了你。这真是太糟糕了。 好吧,告诉我你说的是什么意思。 GN 0 16:24:14.030 Core 1 2018.06.06 08:00:00 Sell market. Ticket = 20 JF 0 16:24:14.030 Core 1 2018.06.06 08:00:00 Sell market. Identifier = 0 FQ 0 16:24:14.030 Core 1 2018.06.19 16:00:00 ======closePosition====== HG 0 16:24:14.030 Core 1 2018.06.19 16:00:00 market buy 0.10 AUDUSD, close #20 (0.73633 / 0.73637 / 0.73633) PH 0 16:24:14.030 Core 1 2018.06.19 16:00:00 deal #21 buy 0.10 AUDUSD at 0.73637 done (based on order #21) KJ 0 16:24:14.030 Core 1 2018.06.19 16:00:00 deal performed [#21 buy 0.10 AUDUSD at 0.73637] IL 0 16:24:14.030 Core 1 2018.06.19 16:00:00 order performed buy 0.10 at 0.73637 [#21 buy 0.10 AUDUSD at 0.73637] RN 0 16:24:14.030 Core 1 2018.06.19 16:00:00 CTrade::OrderSend: market buy 0.10 position #20 AUDUSD [done at 0.73637] HN 0 16:24:14.030 Core 1 2018.06.19 16:00:00 Позиция с магиком 2544113114312914, тикетом 20 и лотом 0.1 успешно закрыта. LO 0 16:24:14.030 Core 1 2018.06.19 16:00:00 Очистка данных произведена. CH 0 16:24:14.030 Core 1 2018.06.19 16:00:00 ======checkMargin====== OF 0 16:24:14.030 Core 1 2018.06.19 16:00:00 market buy 0.10 AUDUSD (0.73633 / 0.73637 / 0.73633) DS 0 16:24:14.030 Core 1 2018.06.19 16:00:00 deal #22 buy 0.10 AUDUSD at 0.73637 done (based on order #22) RM 0 16:24:14.030 Core 1 2018.06.19 16:00:00 deal performed [#22 buy 0.10 AUDUSD at 0.73637] DS 0 16:24:14.030 Core 1 2018.06.19 16:00:00 order performed buy 0.10 at 0.73637 [#22 buy 0.10 AUDUSD at 0.73637] FF 0 16:24:14.030 Core 1 2018.06.19 16:00:00 CTrade::OrderSend: market buy 0.10 AUDUSD [done at 0.73637] MJ 0 16:24:14.030 Core 1 2018.06.19 16:00:00 magic = 2544113114312914 RR 0 16:24:14.030 Core 1 2018.06.19 16:00:00 balance = 11308.94 JK 0 16:24:14.030 Core 1 2018.06.19 16:00:00 lot = 0.10 HQ 0 16:24:14.030 Core 1 2018.06.19 16:00:00 Buy market. Ticket = 22 CJ 0 16:24:14.030 Core 1 2018.06.19 16:00:00 Buy market. Identifier = 20 HR 0 16:24:14.030 Core 1 2018.07.04 08:00:00 ======closePosition====== FI 0 16:24:14.030 Core 1 2018.07.04 08:00:00 market sell 0.10 AUDUSD, close #22 (0.74021 / 0.74025 / 0.74021) RF 0 16:24:14.030 Core 1 2018.07.04 08:00:00 deal #23 sell 0.10 AUDUSD at 0.74021 done (based on order #23) ID 0 16:24:14.030 Core 1 2018.07.04 08:00:00 deal performed [#23 sell 0.10 AUDUSD at 0.74021] GM 0 16:24:14.030 Core 1 2018.07.04 08:00:00 order performed sell 0.10 at 0.74021 [#23 sell 0.10 AUDUSD at 0.74021] NQ 0 16:24:14.030 Core 1 2018.07.04 08:00:00 CTrade::OrderSend: market sell 0.10 position #22 AUDUSD [done at 0.74021] PO 0 16:24:14.030 Core 1 2018.07.04 08:00:00 Позиция с магиком 2544113114312914, тикетом 22 и лотом 0.1 успешно закрыта. FO 0 16:24:14.030 Core 1 2018.07.04 08:00:00 Очистка данных произведена. CH 0 16:24:14.030 Core 1 2018.07.04 08:00:00 ======checkMargin====== OI 0 16:24:14.030 Core 1 2018.07.04 08:00:00 market sell 0.10 AUDUSD (0.74021 / 0.74025 / 0.74021) JO 0 16:24:14.030 Core 1 2018.07.04 08:00:00 deal #24 sell 0.10 AUDUSD at 0.74021 done (based on order #24) LM 0 16:24:14.030 Core 1 2018.07.04 08:00:00 deal performed [#24 sell 0.10 AUDUSD at 0.74021] ND 0 16:24:14.030 Core 1 2018.07.04 08:00:00 order performed sell 0.10 at 0.74021 [#24 sell 0.10 AUDUSD at 0.74021] LI 0 16:24:14.030 Core 1 2018.07.04 08:00:00 CTrade::OrderSend: market sell 0.10 AUDUSD [done at 0.74021] OJ 0 16:24:14.030 Core 1 2018.07.04 08:00:00 magic = 2544113114312914 RR 0 16:24:14.030 Core 1 2018.07.04 08:00:00 balance = 11335.85 DK 0 16:24:14.030 Core 1 2018.07.04 08:00:00 lot = 0.10 PN 0 16:24:14.030 Core 1 2018.07.04 08:00:00 Sell market. Ticket = 24 QE 0 16:24:14.030 Core 1 2018.07.04 08:00:00 Sell market. Identifier = 22 NR 0 16:24:14.030 Core 1 2018.07.19 00:00:00 ======closePosition====== NF 0 16:24:14.030 Core 1 2018.07.19 00:00:00 market buy 0.10 AUDUSD, close #24 (0.73968 / 0.73989 / 0.73968) JI 0 16:24:14.030 Core 1 2018.07.19 00:00:00 deal #25 buy 0.10 AUDUSD at 0.73989 done (based on order #25) QK 0 16:24:14.030 Core 1 2018.07.19 00:00:00 deal performed [#25 buy 0.10 AUDUSD at 0.73989] MM 0 16:24:14.030 Core 1 2018.07.19 00:00:00 order performed buy 0.10 at 0.73989 [#25 buy 0.10 AUDUSD at 0.73989] PN 0 16:24:14.030 Core 1 2018.07.19 00:00:00 CTrade::OrderSend: market buy 0.10 position #24 AUDUSD [done at 0.73989] DO 0 16:24:14.030 Core 1 2018.07.19 00:00:00 Позиция с магиком 2544113114312914, тикетом 24 и лотом 0.1 успешно закрыта. LP 0 16:24:14.030 Core 1 2018.07.19 00:00:00 Очистка данных произведена. KK 0 16:24:14.030 Core 1 2018.08.08 16:00:00 ======checkMargin====== RI 0 16:24:14.030 Core 1 2018.08.08 16:00:00 market sell 0.10 AUDUSD (0.73933 / 0.73937 / 0.73933) GO 0 16:24:14.030 Core 1 2018.08.08 16:00:00 deal #26 sell 0.10 AUDUSD at 0.73933 done (based on order #26) OM 0 16:24:14.030 Core 1 2018.08.08 16:00:00 deal performed [#26 sell 0.10 AUDUSD at 0.73933] JD 0 16:24:14.030 Core 1 2018.08.08 16:00:00 order performed sell 0.10 at 0.73933 [#26 sell 0.10 AUDUSD at 0.73933] QI 0 16:24:14.030 Core 1 2018.08.08 16:00:00 CTrade::OrderSend: market sell 0.10 AUDUSD [done at 0.73933] HN 0 16:24:14.030 Core 1 2018.08.08 16:00:00 Sell market. Ticket = 26 CF 0 16:24:14.030 Core 1 2018.08.08 16:00:00 Sell market. Identifier = 0 Igor Makanu 2019.07.21 13:43 #10976 Vladimir Karputov: 好吧,我已经告诉过你一百次了--把 "授权 "这个词从你的词汇中删除。除非你做到这一点,否则你就无法继续前进。总之,我可能帮不了你。这真是太糟糕了。 好吧,让我重新表述一下这个问题。 如何用CTrade::ResultOrder()使用记忆中的票据? 来了解一下。 1.位置是否关闭? 2.被关闭的职位有什么类型的交易? 3.我们需要同时处理9个职位、订单或票据,或...套期保值账户上的任何术语 在这样的表述中,我的问题是明确的吗?(上面发布的MQl4下的可重复的例子) ZS:我不能忘记词序,不幸的是这个词在帮助中与其他术语一起使用:https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade/ctraderequestorder fxsaber 2019.07.21 14:09 #10977 Igor Makanu: 嗯,这是一个奇怪的情况,我似乎提出了这个话题,我的问题从我的角度来看是具体的,但我得到的不是答案,而是 "你为什么需要它? 原因是如此应对者的无能。我花了五分钟写完它,又花了一次尝试来检查它。 MT4 关于交易、自动交易系统和策略测试器的论坛 初学者的问题 MQL5 MT5 MetaTrader 5 fxsaber, 2019.07.21 12:54 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); } } MT5 #include <Trade\Trade.mqh> #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) void OnTick() { static CTrade Trade; // Не стал возиться с Deviation. static ulong ticket1 = 0; if (!ticket1) ticket1 = Trade.PositionOpen(_Symbol, ORDER_TYPE_BUY, 0.1, Ask, Ask - 100 * _Point, Ask + 100 * _Point) ? Trade.ResultOrder() : 0; else if (!PositionSelectByTicket(ticket1) && HistorySelectByPosition(ticket1)) { ENUM_ORDER_TYPE cmd = (ENUM_ORDER_TYPE)HistoryOrderGetInteger(HistoryOrderGetTicket(HistoryOrdersTotal() - 1), ORDER_TYPE); double open = cmd ? Bid : Ask; double tp = open - (cmd ? 1 : -1) * 100 * _Point; double sl = open + (cmd ? 1 : -1) * 100 * _Point; ticket1 = Trade.PositionOpen(_Symbol, cmd, 0.1, open, sl, tp) ? Trade.ResultOrder() : 0; } } 你不需要是一个强大的精通者来写这个,你只需要知道MT5的基础知识。 ZS 在确定封闭位置的类型方面,有一点细微的差别。但它在这里并没有起到作用。 Igor Makanu 2019.07.21 14:18 #10978 fxsaber: 你不需要很强壮来写这个,你只需要知道MT5的基本知识。 谢谢你! 是的,我正在寻找一个解决方案,如果我不能用SB写成五行的话 但我是如何理解的,一个SB CTrade不能解决我的问题? 我还必须使用CPositionInfo?- 如果我想在同一时间由几个TF陪伴9个位置? ZS:我坐在MQL5的帮助下与智能电视 - 相当好的描述贸易功能,SatB的使用是在一个问题....我认为将SB用于原始策略是有意义的,有点复杂--功能不足或使用不明显,也许我需要更多的练习--我将尝试 "扭曲 "SB。 再次感谢! Artyom Trishkin 2019.07.21 16:12 #10979 fxsaber: 原因是无能,所以回答。我花了五分钟来写,并尝试检查了一次。 MT4 MT5 你不需要是一个强大的精通者来写这个,你只需要知道MT5的基础知识。 你不需要知道基础知识,你只需要知道基本的MT5基础知识。但这在这里并不重要。 这是在 ENUM_ORDER_TYPE cmd = (ENUM_ORDER_TYPE)HistoryOrderGetInteger(HistoryOrderGetTicket(HistoryOrdersTotal() - 1), ORDER_TYPE); 有一个潜在的陷阱。 在历史清单中,认股权证并没有按照它们在该清单中出现的顺序排列。在开发图书馆时偶然发现了这个问题。 我依靠的是它。但事实证明,这并不那么简单。试着按以下顺序依次设置限价单 和止损单:限价->止损->限价->止损->限价->止损,并在任何订单中分别删除,看看哪个订单是历史列表中的最后记录。你将会感到惊讶。 fxsaber 2019.07.21 16:14 #10980 Artyom Trishkin: 这是在 有一个潜在的错误。 在历史列表中,订单没有按照它们在列表中出现的顺序排列。我在开发这个库的时候遇到了这个问题。 我依靠的是它。但事实证明,这并不那么简单。试着按以下顺序依次设置限价单 和止损单:限价->止损->限价->止损->限价->止损,并在任何订单中分别删除,看看哪个订单是历史列表中的最后记录。你将会感到惊讶。 那里没有错误,因为列表是通过HistorySelectByPosition生成的。 1...109110921093109410951096109710981099110011011102110311041105...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
嗯,奇怪的情况,就像我提出的话题中的活动一样,我有一个问题,从我的角度来看是具体的,但到目前为止我得到的不是答案,而是 "你为什么需要它?
我想用SB CTrade 来做,这里有一个例子(由我的两个例子汇编而成):我们在9 TF的每一个新条形图 上用一个订单打开,我们记住票据,并通过票据号码确定一个平仓订单的方向。
在MQL4中,测试人员的代码看起来是这样的
我们需要一个测试员的代码,即在优化器中检查的数量最少,工作速度最快。
如何用SB CTrade在MQL5中编写这段代码?
嗯,奇怪的情况,就像我提出的话题中的活动一样,我有一个问题,从我的角度来看是具体的,但到目前为止我得到的不是答案,而是 "你为什么需要它?
我想用SB CTrade 来做,这里有一个例子(由我的两个例子汇编而成):我们在9 TF的每一个新条形图 上用一个订单打开,我们记住票据,并通过票据号码来确定一个平仓订单的方向。
在MQL4中,测试人员的代码看起来是这样的
如何使用SB CTrade在MQL5中编写此代码?
关于交易、自动交易系统和策略测试的论坛
初学者的常见问题 MQL5 MT5 MetaTrader 5
Vladimir Karputov, 2019.07.21 12:56
所以,基础是POSITION_IDENTIFIER,但不是位置票。 这很重要,只是因为有了网 子。
位置标识符
职位标识符是一个唯一的数字,它被分配给每个新开的职位,并且在其整个生命周期内不会改变。它与开仓时的订单票相对应。
仓位标识符在每个订单(ORDER_POSITION_ID)和每个开启、改变或关闭它的交易(DEAL_POSITION_ID)中被指定。使用此属性来搜索与头寸相关的订单和交易。
当一个头寸在净值模式下被逆转(一个单一的进出交易),头寸的POSITION_IDENTIFIER标识符不会改变。然而,POSITION_TICKET被改变为导致逆转的订单票。在对冲模式下,不存在头寸逆转。
长
因此,我们必须跟踪位置标识符(POSITION_IDENTIFIER)。
现在,一个更准确的任务:在第一次运行时,我们打开一个买入仓位并记住它(警告:我们应该记住仓位ID,而不是票据)。如果该仓位已被关闭,我们就开一个相反的仓位:例如,从前有一个买入仓位,后来被关闭,这意味着我们马上开一个卖出仓位。
现在要解决这个问题就容易多了。
也就是说,CTrade 不知道如何独立检测一个订单是开放还是关闭? 最后一个关闭的订单的类型是什么?
我应该使用哪个图书馆来实现这一目的?
即CTrade不知道如何独立检测一个订单是开放还是关闭,最后关闭的订单是什么类型?
为此,我们应该使用哪个图书馆?
我已经告诉过你一百次了,所以请把 "秩序 "这个词从你的词汇中删除。除非你这样做,否则你将无法继续前进。总之,我可能无法帮助你。这真是太糟糕了。
好吧,我已经告诉过你一百次了--把 "授权 "这个词从你的词汇中删除。除非你做到这一点,否则你就无法继续前进。总之,我可能帮不了你。这真是太糟糕了。
好吧,告诉我你说的是什么意思。
好吧,我已经告诉过你一百次了--把 "授权 "这个词从你的词汇中删除。除非你做到这一点,否则你就无法继续前进。总之,我可能帮不了你。这真是太糟糕了。
好吧,让我重新表述一下这个问题。
如何用CTrade::ResultOrder()使用记忆中的票据?
来了解一下。
1.位置是否关闭?
2.被关闭的职位有什么类型的交易?
3.我们需要同时处理9个职位、订单或票据,或...套期保值账户上的任何术语
在这样的表述中,我的问题是明确的吗?(上面发布的MQl4下的可重复的例子)
ZS:我不能忘记词序,不幸的是这个词在帮助中与其他术语一起使用:https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade/ctraderequestorder
嗯,这是一个奇怪的情况,我似乎提出了这个话题,我的问题从我的角度来看是具体的,但我得到的不是答案,而是 "你为什么需要它?
原因是如此应对者的无能。我花了五分钟写完它,又花了一次尝试来检查它。
MT4
关于交易、自动交易系统和策略测试器的论坛
初学者的问题 MQL5 MT5 MetaTrader 5
fxsaber, 2019.07.21 12:54
MT5
你不需要是一个强大的精通者来写这个,你只需要知道MT5的基础知识。
ZS 在确定封闭位置的类型方面,有一点细微的差别。但它在这里并没有起到作用。
你不需要很强壮来写这个,你只需要知道MT5的基本知识。
谢谢你!
是的,我正在寻找一个解决方案,如果我不能用SB写成五行的话
但我是如何理解的,一个SB CTrade不能解决我的问题? 我还必须使用CPositionInfo?- 如果我想在同一时间由几个TF陪伴9个位置?
ZS:我坐在MQL5的帮助下与智能电视 - 相当好的描述贸易功能,SatB的使用是在一个问题....我认为将SB用于原始策略是有意义的,有点复杂--功能不足或使用不明显,也许我需要更多的练习--我将尝试 "扭曲 "SB。
再次感谢!
原因是无能,所以回答。我花了五分钟来写,并尝试检查了一次。
MT4
MT5
你不需要是一个强大的精通者来写这个,你只需要知道MT5的基础知识。
你不需要知道基础知识,你只需要知道基本的MT5基础知识。但这在这里并不重要。
这是在
有一个潜在的陷阱。
在历史清单中,认股权证并没有按照它们在该清单中出现的顺序排列。在开发图书馆时偶然发现了这个问题。 我依靠的是它。但事实证明,这并不那么简单。试着按以下顺序依次设置限价单 和止损单:限价->止损->限价->止损->限价->止损,并在任何订单中分别删除,看看哪个订单是历史列表中的最后记录。你将会感到惊讶。
这是在
有一个潜在的错误。
在历史列表中,订单没有按照它们在列表中出现的顺序排列。我在开发这个库的时候遇到了这个问题。 我依靠的是它。但事实证明,这并不那么简单。试着按以下顺序依次设置限价单 和止损单:限价->止损->限价->止损->限价->止损,并在任何订单中分别删除,看看哪个订单是历史列表中的最后记录。你将会感到惊讶。
那里没有错误,因为列表是通过HistorySelectByPosition生成的。