初学者的问题 MQL4 MT4 MetaTrader 4 - 页 71 1...646566676869707172737475767778...261 新评论 Renat Akhtyamov 2017.03.19 17:23 #701 Vitalie Postolache: 从什么时候起,句号成了双倍类型?这就是我所说的,字符串+int是一个错误。但如果你按我上面写的方法做,就不会有错误。 Vitalie Postolache 2017.03.19 17:33 #702 Renat Akhtyamov:这就是我所说的:字符串+int是一个错误。但如果你按照我上面写的方法做,就不会有错误。IntegerToString?没有,没有听说;) Renat Akhtyamov 2017.03.19 17:39 #703 Vitalie Postolache: IntegerToString?没有,没有听说;) 无论哪种方式都很好,我不觉得有什么问题。 funnyrain8 2017.03.20 08:27 #704 大家好我是编程新手,但正在努力学习)我在根据指标读数关闭订单时遇到了一个小问题我应该直接告诉你开仓和平仓的条件:我按照指标读数开仓,按照指标读数平仓,但方向相反,没有任何止损和盈利。如果(r > 50 && p > m)//买入订单 的开仓条件{ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //开启买入订单}我写的订单关闭条件正确吗?如果(r < 50 && p < m) --- 这是一个卖出条件和一个关闭条件{OrderClose(ticketB,0.1,Bid,5,Red)。}并打印出可能使用的未初始化变量'ticketB'和'OrderClose'的返回值,应该检查一下。你们能告诉我,我哪里写错了吗? 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 Questions from Beginners MQL4 Any questions from newcomers Renat Akhtyamov 2017.03.20 08:55 #705 funnyrain8:大家好我是编程新手,但正在努力学习)我在根据指标读数关闭订单时遇到了一个小问题我可以通过指标读数直接判断出开仓和平仓的条件,并在没有任何止损和盈利的情况下以相反的方向关闭订单如果(r > 50 && p > m)//买入订单 的开仓条件{ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //开启买入订单}我写的订单关闭条件正确吗?如果(r < 50 && p < m) --- 这是一个卖出条件和一个关闭条件{OrderClose(ticketB,0.1,Bid,5,Red)。}并打印出可能使用的未初始化变量'ticketB'和'OrderClose'的返回值,应该检查一下。你们能告诉我,我哪里写错了吗?ticketB变量没有被初始化,也就是说,它的类型还不知道。在这种情况下,它是Int第二个错误是,我们必须检查关闭订单的结果是否有错误。在论坛中搜索 "错误处理功能"。 funnyrain8 2017.03.20 14:29 #706 Renat Akhtyamov:ticketB变量没有被初始化,也就是不知道其类型。在这种情况下,它是Int。第二个错误是关于检查订单关闭的结果是否有错误。在论坛中搜索 "错误处理功能"。我不太明白其中的逻辑,或者说我很茫然),但我该怎么做呢? 起初我想用OrderSelect来做,但它是错误的)我需要一些这方面的信息。 Renat Akhtyamov 2017.03.20 16:09 #707 funnyrain8:是GetLastError 吗? 我不明白其中的逻辑,或者说我有点笨)但如何设置呢? 起初我试图用OrderSelect做所有的事情,但这是不一样的)我需要一些这方面的信息。是的。查看代码库--大量的实施例子。 Irina Tarakanova 2017.03.20 18:54 #708 你好,我是一个信号卖家,我想知道你如何推广你的信号,让人们订阅它们? Arseniy Barudkin 2017.03.20 23:35 #709 Vitalie Postolache: 逻辑在哪里?你为第一笔订单设定最大允许手数,然后为以后的每笔订单增加。你不觉得这样做,说句不好听的,不是很明智吗?此外,你用一些完全无法理解的方法减少循环中第一个订单的手数,而之前 "计算 "过的其他订单的手数保持不变,这些数值没有超出这个函数的极限。那么,他们是怎么做的呢?更不用说增量循环不能是一个实数,它必须是一个计数器,一个整数。但你把批价设置为一个计数器,每次迭代时从里面减去一个。这是一个重大的错误,一个非常严重的错误。首先在你的头脑中明确逻辑,然后尝试将其实现在你的代码中。 为了确定乘法后的最终手数而没有取出的数值,它应该是可能的最大开仓手数,事实上,这些手数的订单可能不会开仓,因为EA开仓的间隔很小,但概率是存在的,这就是为什么我想计算可能的最大初始手数。我听从了你的建议,这就是我的成果。你对这个功能有什么看法?我想我遗漏了什么,或者规定得不正确;测试器挂了一下,获得一个小的输出批次。//Функция расчета торгового лота double GetLots() { double lots = 0.0; double L9 = MarketInfo(Symbol(),MODE_MAXLOT); double L8 = L9 / Multipler; double L7 = L8 / Multipler; double L6 = L7 / Multipler; double L5 = L6 / Multipler; double L4 = L5 / Multipler; double L3 = L4 / Multipler; double L2 = L3 / Multipler; double cl = L2 / Multipler; double balance = AccountFreeMarginCheck(Symbol(),OP_BUY,L9); if(balance <= AccountFreeMargin()) { for(int risk = 100;balance > 0 && risk > 0;risk--) { if(!IsStopped()) { if(risk >= 1) { lots = (cl/100)*risk; } if(risk < 1) { for(int risk2 = 100;balance > 0 && risk2 >= 1;risk2--) { lots = (cl/100)*(risk2*0.01); } } } } } double clots = NormalizeDouble(MathMax(lots,MarketInfo(Symbol(),MODE_MINLOT)),2); return(clots); } Vitalie Postolache 2017.03.20 23:47 #710 Arseniy Barudkin: 你怎么看这个问题? 我也要这么说。你不擅长逻辑。根据可用资金和风险值(我想写的是3%),立即计算出初始手数,有什么问题?为什么你必须在一个地方做所有事情?取自由保证金的数值,乘以风险,再除以100,即为1手的保证金数值--这里是最简单的计算公式,即用自由保证金的指定百分比来计算手数。另外,你需要考虑到换手的步骤,防止超过经纪公司允许的最小/最大手数。input double risk = 3; //процент свободной маржи для расчёта лота double GetLots() { double margin = MarketInfo(Symbol(),MODE_MARGINREQUIRED); double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP); double rsk = MathMin(100.0,risk); double lotmax = MarketInfo(Symbol(), MODE_MAXLOT); double lotmin = MarketInfo(Symbol(), MODE_MINLOT); double clots = NormalizeDouble(lotstep*MathRound(AccountFreeMargin()*rsk/100/margin/lotstep),2); if(clots < lotmin) clots = lotmin; if(clots > lotmax) clots = lotmax; return(clots); } 1...646566676869707172737475767778...261 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
从什么时候起,句号成了双倍类型?
这就是我所说的,字符串+int是一个错误。
但如果你按我上面写的方法做,就不会有错误。
这就是我所说的:字符串+int是一个错误。
但如果你按照我上面写的方法做,就不会有错误。
IntegerToString?没有,没有听说;)
IntegerToString?没有,没有听说;)
大家好
我是编程新手,但正在努力学习)
我在根据指标读数关闭订单时遇到了一个小问题
我应该直接告诉你开仓和平仓的条件:我按照指标读数开仓,按照指标读数平仓,但方向相反,没有任何止损和盈利。
如果(r > 50 && p > m)//买入订单 的开仓条件
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //开启买入订单
}
我写的订单关闭条件正确吗?
如果(r < 50 && p < m) --- 这是一个卖出条件和一个关闭条件
{
OrderClose(ticketB,0.1,Bid,5,Red)。
}
并打印出可能使用的未初始化变量'ticketB'和'OrderClose'的返回值,应该检查一下。
你们能告诉我,我哪里写错了吗?
大家好
我是编程新手,但正在努力学习)
我在根据指标读数关闭订单时遇到了一个小问题
我可以通过指标读数直接判断出开仓和平仓的条件,并在没有任何止损和盈利的情况下以相反的方向关闭订单
如果(r > 50 && p > m)//买入订单 的开仓条件
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //开启买入订单
}
我写的订单关闭条件正确吗?
如果(r < 50 && p < m) --- 这是一个卖出条件和一个关闭条件
{
OrderClose(ticketB,0.1,Bid,5,Red)。
}
并打印出可能使用的未初始化变量'ticketB'和'OrderClose'的返回值,应该检查一下。
你们能告诉我,我哪里写错了吗?
ticketB变量没有被初始化,也就是说,它的类型还不知道。在这种情况下,它是Int
第二个错误是,我们必须检查关闭订单的结果是否有错误。在论坛中搜索 "错误处理功能"。
ticketB变量没有被初始化,也就是不知道其类型。在这种情况下,它是Int。
第二个错误是关于检查订单关闭的结果是否有错误。在论坛中搜索 "错误处理功能"。
我不太明白其中的逻辑,或者说我很茫然),但我该怎么做呢? 起初我想用OrderSelect来做,但它是错误的)
我需要一些这方面的信息。
是GetLastError 吗? 我不明白其中的逻辑,或者说我有点笨)但如何设置呢? 起初我试图用OrderSelect做所有的事情,但这是不一样的)
我需要一些这方面的信息。
是的。
查看代码库--大量的实施例子。
逻辑在哪里?你为第一笔订单设定最大允许手数,然后为以后的每笔订单增加。你不觉得这样做,说句不好听的,不是很明智吗?
此外,你用一些完全无法理解的方法减少循环中第一个订单的手数,而之前 "计算 "过的其他订单的手数保持不变,这些数值没有超出这个函数的极限。那么,他们是怎么做的呢?
更不用说增量循环不能是一个实数,它必须是一个计数器,一个整数。但你把批价设置为一个计数器,每次迭代时从里面减去一个。这是一个重大的错误,一个非常严重的错误。
首先在你的头脑中明确逻辑,然后尝试将其实现在你的代码中。
你怎么看这个问题?
我也要这么说。你不擅长逻辑。根据可用资金和风险值(我想写的是3%),立即计算出初始手数,有什么问题?为什么你必须在一个地方做所有事情?
取自由保证金的数值,乘以风险,再除以100,即为1手的保证金数值--这里是最简单的计算公式,即用自由保证金的指定百分比来计算手数。另外,你需要考虑到换手的步骤,防止超过经纪公司允许的最小/最大手数。