新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 950 1...943944945946947948949950951952953954955956957...1953 新评论 Yevhenii Levchenko 2019.08.30 19:48 #9491 Rustam Bikbulatov:这个函数在每个订单上写一个数字,或者说是批量*100。现在我们需要一个反函数,显示最后一个数字是什么 试试吧。 double value = StringToDouble(ObjectGetString(0,object_name,OBJPROP_TEXT)); 如果对象包含文本(不是数字),你需要添加StringSubstr()。 double value = StringToDouble( StringSubstr(ObjectGetString(0,object_name,OBJPROP_TEXT),begin_index,length)); begin_index - 字符串中的索引,从零开始,length - 数字值的长度(该数字占据多少个字符)...我想是的 Rustam Bikbulatov 2019.08.30 19:56 #9492 Yevhenii Levchenko: 试试这个。 如果该对象有文本(而不是数字),则添加StringSubstr()。 begin_index - 字符串中的索引,从0开始,length - 数字的长度(该数字占据多少个字符)...我想是的 那么,最初你将不得不在图上寻找这些所有的数字。它只是不会那样工作。这就是问题所在,已经检查过了。 Rustam Bikbulatov 2019.08.30 19:59 #9493 Yevhenii Levchenko: 试试这个。 如果对象有文本(不是数字),则添加StringSubstr()。 begin_index - 字符串中的索引,从0开始,length - 数字值的长度(该数字占据多少个字符)...我想是的 bool name; for(int i=0; i<ObjectsTotal(0,"LOTB"+OrderTicket(),OBJ_TEXT); i++) { name = ObjectSetString(0,"LOTB"+OrderTicket(),OBJ_TEXT,0); Comment(" ",name); } 与这个类似,但它不起作用。 它显示为零。 Yevhenii Levchenko 2019.08.30 20:21 #9494 Rustam Bikbulatov: 像这个,但它不工作。 它显示为零。 你想设置一个值还是取一个值?ObjectSetString()函数 设置一个文本 值并返回 一个bool 值。这不是它。而在循环头中,我认为它不是正确的......在ObjectsTotal()中......我是以mt4为参考的。或者是mt5代码? Rustam Bikbulatov 2019.08.31 05:10 #9495 Yevhenii Levchenko: 你需要设置一个值还是取一个值?ObjectSetString()函数 设置一个文本 值并返回 一个bool 值。这不是它。而在循环头,我认为它的框架不正确,ObjectsTotal()在哪里。我是以mt4为参考的。或者是mt5代码? 这就是MT4。 MrBrooklin 2019.08.31 05:10 #9496 再一次,大家好! 我对我上面提出的问题仍然不满意,但我要求在代码方面给予帮助。 这是一个关于交易、自动交易系统和策略测试的论坛。 关于MQL4和MQL5的任何新手问题,关于算法和代码的帮助和讨论 布鲁克林先生, 2019.08.30 14:15 大家好!!!!!。 这里是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(m_symbol.LotsMin(),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(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_bid),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } } } 脚本应该在离卖出价和买入价一定距离的地方放置待定限价单,或者放置止损单。 限价挂单 的设置没有任何问题,但止损挂单 却没有。请帮助我理解为什么买入止损和卖出止损的挂单没有被设置。 你真诚的,弗拉基米尔。 只是想追问一下:有没有办法在市场关闭时(比如周末)测试脚本? 真诚的,弗拉基米尔。 Rustam Bikbulatov 2019.08.31 07:12 #9497 Artyom Trishkin: 从哪个名单中? 并请使用编辑器中的样式器(Ctrl+<)。 哪些东西应该从哪里取? 你能给我一个提示吗? Artyom Trishkin 2019.08.31 07:43 #9498 MrBrooklin: 再一次,大家好! 没有人回应我之前提出的问题,但我仍在寻求代码方面的帮助。 还有一个问题:有没有办法在市场关闭时(如周末)测试该脚本? 真诚的,弗拉基米尔。 不,该脚本不会在封闭的市场中工作 - 它不会下订单。 为了理解这些错误,试着把你计算设置水平的相对价格值和你发送给交易订单 的所有价格水平值打印到日志中。 Rustam Bikbulatov 2019.08.31 07:45 #9499 嗨,伙计们。在一个开放的订单旁边写了很多。for(int no1=0; no1<OrdersTotal(); no1++) { if(OrderSelect(no1,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderType()== OP_BUY) { ObjectCreate("LOTB"+OrderTicket(),OBJ_TEXT,0,TimeCurrent(),OrderOpenPrice()); ObjectSetText("LOTB"+OrderTicket(),OrderLots()*100,20,"Arial",clrWheat); ObjectSetInteger(0,"LOTB"+OrderTicket(),OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER); } } } 你能告诉我如何在代码的另一部分从这个列表中提取最后的文本吗? Artyom Trishkin 2019.08.31 07:47 #9500 Rustam Bikbulatov: 你能给我一个提示吗? 你需要找到最后打开的订单。找到它的票。然后使用对象名称的列表来寻找子串的出现,并在对象名称行中找到最后一个订单的票。只要在对象名称中找到最后订单的票据,这就是必要的图形对象。剩下的就是要从这个图形对象中提取你需要的东西。 1...943944945946947948949950951952953954955956957...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这个函数在每个订单上写一个数字,或者说是批量*100。
现在我们需要一个反函数,显示最后一个数字是什么
试试吧。
如果对象包含文本(不是数字),你需要添加StringSubstr()。
begin_index - 字符串中的索引,从零开始,length - 数字值的长度(该数字占据多少个字符)...我想是的
试试这个。
如果该对象有文本(而不是数字),则添加StringSubstr()。
begin_index - 字符串中的索引,从0开始,length - 数字的长度(该数字占据多少个字符)...我想是的
那么,最初你将不得不在图上寻找这些所有的数字。它只是不会那样工作。这就是问题所在,已经检查过了。
试试这个。
如果对象有文本(不是数字),则添加StringSubstr()。
begin_index - 字符串中的索引,从0开始,length - 数字值的长度(该数字占据多少个字符)...我想是的
与这个类似,但它不起作用。 它显示为零。
像这个,但它不工作。 它显示为零。
你想设置一个值还是取一个值?ObjectSetString()函数 设置一个文本 值并返回 一个bool 值。这不是它。而在循环头中,我认为它不是正确的......在ObjectsTotal()中......我是以mt4为参考的。或者是mt5代码?
你需要设置一个值还是取一个值?ObjectSetString()函数 设置一个文本 值并返回 一个bool 值。这不是它。而在循环头,我认为它的框架不正确,ObjectsTotal()在哪里。我是以mt4为参考的。或者是mt5代码?
这就是MT4。
再一次,大家好!
我对我上面提出的问题仍然不满意,但我要求在代码方面给予帮助。
这是一个关于交易、自动交易系统和策略测试的论坛。
关于MQL4和MQL5的任何新手问题,关于算法和代码的帮助和讨论
布鲁克林先生, 2019.08.30 14:15
大家好!!!!!。
这里是Metatrader5的部分脚本代码。
脚本应该在离卖出价和买入价一定距离的地方放置待定限价单,或者放置止损单。 限价挂单 的设置没有任何问题,但止损挂单 却没有。请帮助我理解为什么买入止损和卖出止损的挂单没有被设置。
你真诚的,弗拉基米尔。
只是想追问一下:有没有办法在市场关闭时(比如周末)测试脚本?
真诚的,弗拉基米尔。
从哪个名单中?
并请使用编辑器中的样式器(Ctrl+<)。
哪些东西应该从哪里取?
你能给我一个提示吗?
再一次,大家好!
没有人回应我之前提出的问题,但我仍在寻求代码方面的帮助。
还有一个问题:有没有办法在市场关闭时(如周末)测试该脚本?
真诚的,弗拉基米尔。
不,该脚本不会在封闭的市场中工作 - 它不会下订单。
为了理解这些错误,试着把你计算设置水平的相对价格值和你发送给交易订单 的所有价格水平值打印到日志中。
你能给我一个提示吗?
你需要找到最后打开的订单。找到它的票。然后使用对象名称的列表来寻找子串的出现,并在对象名称行中找到最后一个订单的票。只要在对象名称中找到最后订单的票据,这就是必要的图形对象。剩下的就是要从这个图形对象中提取你需要的东西。