初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1116 1...110911101111111211131114111511161117111811191120112111221123...1503 新评论 Grigori.S.B 2019.08.24 07:54 #11151 Artyom Trishkin: 那你如何检查在这一栏中是否还没有建仓? 也许我们应该修改一下Aleksey Vazhmikin的功能,并添加一个结构,以控制在新条形上的开仓,以这种方式。 struct open_bar { bool IsPositionOpened; // Flag int bn; // Bar Number datetime bot; // Bar Open Time double bop; // Bar Open Price }; open_bar BarOpen; //+------------------------------------------------------------------------------------------------------------------+ //| Возвращает TRUE, если появился новый бар на текущем ТФ //+------------------------------------------------------------------------------------------------------------------+ bool isNewBar() { datetime tm[]; static datetime prevBarTime=0; if(CopyTime(_Symbol,0,0,1,tm)<0) { Print("%s CopyTime error = %d",__FUNCTION__,GetLastError()); } else { if(prevBarTime!=tm[0]) { prevBarTime=tm[0]; BarOpen.IsPositionOpened=false; BarOpen.bn++; BarOpen.bot=iTime(NULL,PERIOD_CURRENT,0); BarOpen.bop=iOpen(NULL,PERIOD_CURRENT,0); return true; } return false; } return true; } 然后在成功开仓时提高专家顾问的控制标志。 BarOpen.IsPositionOpened=true; 并在打开另一个仓位前控制它。它是否更可靠? fxsaber 2019.08.24 20:59 #11152 Grigori.S.B: 第二个仓位在第一个仓位之后立即开仓,在同一秒内,刻度线相差一个。 https://www.mql5.com/en/forum/271445 https://www.mql5.com/en/forum/308940 Grigori.S.B 2019.08.25 06:49 #11153 fxsaber: https://www.mql5.com/en/forum/271445 https://www.mql5.com/en/forum/308940 谢谢你的帮助。我已经详细地研究了一切。我在每个交易请求后都有5秒的延迟,但仍然没有帮助。这个问题只是在ICMarkets的模拟MT5对冲。我将添加检查并输出状态轮询的结果。由于我自己无法重现这个问题,而客户却经常出现这个问题,即使我们连接到同一台服务器,情况就更糟糕了。 Олег Юдин 2019.08.25 21:12 #11154 先生们,你们好!有来自辛菲罗波尔的人吗? Vladimir Karputov 2019.08.26 04:07 #11155 Олег Юдин: 女士们、先生们,大家好有来自辛菲罗波尔的人吗? 所以你认为这对你学习MQL5有一定的帮助 :) 。这是一个MQL5编程论坛,不是一个约会俱乐部。 Олег Юдин 2019.08.26 06:21 #11156 Vladimir Karputov: 所以你认为这对你学习MQL5有一定的帮助 :) 。这是一个MQL5编程论坛,不是一个约会俱乐部。 我自己对mql5编程有很好的理解,不是很完美,但也不坏 BlackTomcat 2019.08.29 17:31 #11157 Grigori.S.B: 谢谢你的帮助。我已经详细地研究了一切。我在每个交易请求后都有5秒的延迟,但仍然没有帮助。这个问题只是在ICMarkets的模拟MT5对冲。我将添加检查并输出状态轮询的结果。由于我自己无法重现这个问题,而客户却经常出现这个问题,即使我们连接到同一台服务器,情况就更糟糕了。 我认为这与客户的连接质量有关,比如说,高ping。你确实有一个5秒的延迟,但它就是不存在,我从你的代码中理解。m_trade类的回报是什么?票号?或真或假?你有一个对这个对象返回的结果的检查,但想象一下,由于与服务器连接的延迟,还没有收到一个肯定的响应。 执行if语句的结果将是什么?很可能是假的,因此你的循环将在5秒后进入第二次迭代。而在最后,服务器将最终回复,但第二次迭代已经开始,将发送第二个请求,以打开一个类似的位置。 两个订单在图表中都有移动,这意味着它们在不同的时间和价格被执行,这表明订单开仓时间 存在一些偏差。 Konstantin Nikitin 2019.08.29 18:04 #11158 Grigori.S.B: 使情况更加严重的是,我自己无法重现这个问题,但在客户那里却经常发生,即使我们连接到同一台服务器。 在条形图上检查,每个符号一个位置。很可能你会摆脱这个问题。 fxsaber 2019.08.29 18:13 #11159 Konstantin Nikitin: 在条形图上检查,每个符号一个位置。你可能会摆脱这个问题。 那里还有一个小插曲。在这种情况下,重写成MT4风格比想出一个拐杖更容易。 MrBrooklin 2019.08.31 05:59 #11160 大家好! 这里是Metatrader5的部分脚本代码。 #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //---- показывать входные параметры #property script_show_inputs //--- #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> CTrade m_trade; // trading object CSymbolInfo m_symbol; // symbol info object //+------------------------------------------------------------------+ //| Enum Stop or Limit | //+------------------------------------------------------------------+ enum ENUM_STOP_OR_LIMIT { stop=0, // Buy stop and Sell stop limit=1 // Buy limit and Sell limit }; //--- input parameters input ushort InpUpGap = 15; // Gap for pending orders UP from the current price (in points) input ushort InpUpStep = 30; // Step between orders UP (in points) input ushort InpDownGap = 15; // Gap for pending orders DOWN from the current price (in points) input ushort InpDownStep = 30; // Step between orders DOWN (in points) input ENUM_STOP_OR_LIMIT InpPending = stop; // Type of pending orders input uchar InpUpQuantity = 1; // UP quantity orders input uchar InpDownQuantity = 1; // DOWN quantity orders input double InpLots = 0.01; // Lots input ushort InpStopLoss = 50; // Stop Loss (in points) input ushort InpTakeProfit = 50; // Take Profit (in points) //--- ulong m_slippage=30; // slippage double ExtUpGap=0.0; double ExtUpStep=0.0; double ExtDownGap=0.0; double ExtDownStep=0.0; double ExtStopLoss=0.0; double ExtTakeProfit=0.0; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- if(InpLots<=0.0) { Print("The \"Lots\" can't be smaller or equal to zero"); return; } //--- if(!m_symbol.Name(Symbol())) // sets symbol name return; if(!RefreshRates()) return; string err_text=""; if(!CheckVolumeValue(InpLots,err_text)) { Print(err_text); return; } //--- if(IsFillingTypeAllowed(SYMBOL_FILLING_FOK)) m_trade.SetTypeFilling(ORDER_FILLING_FOK); else if(IsFillingTypeAllowed(SYMBOL_FILLING_IOC)) m_trade.SetTypeFilling(ORDER_FILLING_IOC); else m_trade.SetTypeFilling(ORDER_FILLING_RETURN); //--- m_trade.SetDeviationInPoints(m_slippage); m_trade.SetAsyncMode(true); //--- ExtUpGap = m_symbol.Point() * InpUpGap; ExtUpStep = m_symbol.Point() * InpUpStep; ExtDownGap = m_symbol.Point() * InpDownGap; ExtDownStep = m_symbol.Point() * InpDownStep; ExtStopLoss = m_symbol.Point() * InpStopLoss; ExtTakeProfit = m_symbol.Point() * InpTakeProfit; //--- start work double start_price_ask=m_symbol.Ask()-ExtUpGap; double start_price_bid=m_symbol.Bid()+ExtDownGap; //--- set pending orders for(int i=0; i<InpUpQuantity; i++) { double price_ask = start_price_ask+i*ExtUpStep; double price_bid = start_price_bid+i*ExtUpStep; if(InpPending==stop) { double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit; m_trade.BuyStop(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } else { double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit; m_trade.SellLimit(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } } for(int i=0; i<InpDownQuantity; i++) { double price_ask = start_price_ask-i*ExtDownStep; double price_bid = start_price_bid-i*ExtDownStep; if(InpPending==limit) { double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit; m_trade.BuyLimit(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } else { double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit; m_trade.SellStop(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } } } 问题出现了。 1.脚本应该是在离卖出价和买入价一定距离的地方设置挂单限价,或者设置止损单。 限价挂单 的设置没有任何问题,但止损挂单 却没有。请帮助我找出为什么买入止损和卖出止损的挂单没有被设置。 2.有没有可能在市场关闭时(如周末)测试该脚本? 真诚的,弗拉基米尔。 1...110911101111111211131114111511161117111811191120112111221123...1503 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
那你如何检查在这一栏中是否还没有建仓?
也许我们应该修改一下Aleksey Vazhmikin的功能,并添加一个结构,以控制在新条形上的开仓,以这种方式。
然后在成功开仓时提高专家顾问的控制标志。
BarOpen.IsPositionOpened=true;
并在打开另一个仓位前控制它。它是否更可靠?
第二个仓位在第一个仓位之后立即开仓,在同一秒内,刻度线相差一个。
https://www.mql5.com/en/forum/271445
https://www.mql5.com/en/forum/308940
https://www.mql5.com/en/forum/271445
https://www.mql5.com/en/forum/308940
谢谢你的帮助。我已经详细地研究了一切。我在每个交易请求后都有5秒的延迟,但仍然没有帮助。这个问题只是在ICMarkets的模拟MT5对冲。我将添加检查并输出状态轮询的结果。由于我自己无法重现这个问题,而客户却经常出现这个问题,即使我们连接到同一台服务器,情况就更糟糕了。
女士们、先生们,大家好有来自辛菲罗波尔的人吗?
所以你认为这对你学习MQL5有一定的帮助 :) 。这是一个MQL5编程论坛,不是一个约会俱乐部。
所以你认为这对你学习MQL5有一定的帮助 :) 。这是一个MQL5编程论坛,不是一个约会俱乐部。
谢谢你的帮助。我已经详细地研究了一切。我在每个交易请求后都有5秒的延迟,但仍然没有帮助。这个问题只是在ICMarkets的模拟MT5对冲。我将添加检查并输出状态轮询的结果。由于我自己无法重现这个问题,而客户却经常出现这个问题,即使我们连接到同一台服务器,情况就更糟糕了。
我认为这与客户的连接质量有关,比如说,高ping。你确实有一个5秒的延迟,但它就是不存在,我从你的代码中理解。m_trade类的回报是什么?票号?或真或假?你有一个对这个对象返回的结果的检查,但想象一下,由于与服务器连接的延迟,还没有收到一个肯定的响应。 执行if语句的结果将是什么?很可能是假的,因此你的循环将在5秒后进入第二次迭代。而在最后,服务器将最终回复,但第二次迭代已经开始,将发送第二个请求,以打开一个类似的位置。 两个订单在图表中都有移动,这意味着它们在不同的时间和价格被执行,这表明订单开仓时间 存在一些偏差。
使情况更加严重的是,我自己无法重现这个问题,但在客户那里却经常发生,即使我们连接到同一台服务器。
在条形图上检查,每个符号一个位置。很可能你会摆脱这个问题。
在条形图上检查,每个符号一个位置。你可能会摆脱这个问题。
那里还有一个小插曲。在这种情况下,重写成MT4风格比想出一个拐杖更容易。
大家好!
这里是Metatrader5的部分脚本代码。
问题出现了。
1.脚本应该是在离卖出价和买入价一定距离的地方设置挂单限价,或者设置止损单。 限价挂单 的设置没有任何问题,但止损挂单 却没有。请帮助我找出为什么买入止损和卖出止损的挂单没有被设置。
2.有没有可能在市场关闭时(如周末)测试该脚本?
真诚的,弗拉基米尔。