新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 56 1...495051525354555657585960616263...1953 新评论 Mickey Moose 2017.01.05 10:27 #551 我还在完善它。如果该条件为真开单1价格是否已达到应有的水平开单2LastLot=订单2(或更大的数字)。最后价格=订单2(或更大的数字)。如果价格已经或没有移动到它应该移动的地方...LastLot=订单3(或更大的数字)。LastPrice=订单3(或更大的数字)。问题是,最后一个(或不是)订单将总是在止损和止盈之间,这意味着当其他订单关闭时,它不会重置,因为订单本身仍在那里。如果我们不知道订单的数量,我们如何将其与其他订单绑定?事实证明,将最后的第一个或倒数第二个与其他的结合起来的机制是低效的,因为他们的数量随着数字的变化而变化。结果应该是这样的:"如果给定系列的任何订单已经关闭,则关闭所有其他订单"。系列检查--当前方向的第一个订单(另一个订单不会打开)--这里应该使用一个额外的标识符或一些其他绑定方法。关键是--第一个订单是根据条件打开的,其余的订单是辅助性的。有什么想法吗? Vitalie Postolache 2017.01.05 12:10 #552 trader781:我还在完善它。如果该条件为真开单1价格是否已达到应有的水平开单2LastLot=订单2(或更大的数字)。最后价格=订单2(或更大的数字)。如果价格已经或没有移动到它应该移动的地方...LastLot=订单3(或更大的数字)。LastPrice=订单3(或更大的数字)。问题是,最后一个(或不是)订单将总是在止损和止盈之间,这意味着当其他订单关闭时,它不会重置,因为订单本身仍在那里。如果我们不知道订单的数量,我们如何将其与其他订单绑定?事实证明,将最后的第一个或倒数第二个与其他的结合起来的机制是低效的,因为他们的数量随着数字的变化而变化。结果应该是这样的:"如果给定系列的任何订单已经关闭,则关闭所有其他订单"。系列检查--当前方向的第一个订单(另一个订单不会打开)--这里应该使用一个额外的标识符或一些其他绑定方法。关键是--第一个订单是根据条件打开的,其余的订单是辅助性的。有什么想法吗?这一点并不清楚。尝试更清楚地表达你的想法。这里我们有:"如果价格走势正确与否,我们应该打开订单2" - 我们应该如何理解在任何情况下我们应该打开订单2?而我们会得到越来越多的 "否则"。如果我们不希望出现诸如"当价格金额未知时,如何将其与其余订单联系起来"的问题,我们应该先找出金额。 Mickey Moose 2017.01.05 12:17 #553 Vitalie Postolache:这是混乱的,不可理解的。试着使你的想法更加清晰。这个"如果价格向正确的方向移动或不移动--打开订单2" - 你如何理解在任何情况下"打开订单2"?而我们会得到越来越多的 "否则"。如果我们不想陷入"如果我们不知道金额,如何将其与其余订单联系起来"这样的问题,我们应该首先找出金额。好了,有了数字欧元兑美元=1.10000根据TP开立买入订单的命令(已经写入)。如果欧元兑美元=1.10200,我们给出一个买入指令(已经写好)。如果EURUSD=1.09800就 "买入"(已经写好了)。以此类推,步幅为200如果任何订单被关闭(止损和接管被设置,但不是所有的订单都被关闭)。关闭整个网格 寻找一种方法来识别网格 Vitalie Postolache 2017.01.05 12:23 #554 trader781:好了,有了数字欧元兑美元=1.10000根据TP以当前价格开立买入订单的命令(已经写入)。如果欧元兑美元=1.10200,添加到买入订单(已经写好)。如果EURUSD=1.09800就 "买入"(已经写好了)。以此类推,步幅为200如果任何订单关闭(停止和接管已经被放置)。关闭整个网格 寻找一种方法来识别网格 您可以用订单号添加评论。而且,如果订单系列是同一类型的,我们可能只是重新计算它们并固定金额。 Mickey Moose 2017.01.05 12:29 #555 Vitalie Postolache: 可以添加带有订单号的注释。如果整个系列的订单都是一种类型 - 那么他们应该简单地重新计算并固定数量。我想的是评论,但从反馈来看,厨师认为这些评论不能吃,要么删除,要么改成自己的。至于计数,那么我在添加另一个数字时必须计数和记录? Vitalie Postolache 2017.01.05 12:36 #556 trader781:关于计数,当我再增加一个时,我是否必须计数并记录数量?是的,如果数量比上次有所减少--关闭所有剩余的。你也可以在历史中监控已关闭的订单。并在出现符合指定特征的新订单时关闭该系列。 你也可以不在订单中设置TP/SL,而是在专家顾问中计算整个系列的总TP/SL。用它们来结束这个系列。优点是--经纪公司看不到断点水平,如果一个订单触发了TP或SL,寻找系列的问题依然存在。 [删除] 2017.01.05 13:05 #557 问候......新年快乐......祝你一切顺利和繁荣......在这个代码中,请改变地段的计算是在最大可能的杠杆账户进行的。//+------------------------------------------------------------------+double volume(string symbol,double risk,double sl) { double lot=0.0; double procent=0.0; double balans=0.0; double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE); double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE); double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE); double point=SymbolInfoDouble(symbol,SYMBOL_POINT); if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE); if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY); if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN); procent=(balans/100.0)*risk; switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE)) { case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break; case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break; case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break; } return(NormalizeVolume(symbol,lot)); } Any questions from newcomers 初学者的问题 MQL5 MT5 MetaTrader 计算当日赢亏状况函数代码 [删除] 2017.01.05 14:01 #558 如何在专家顾问中规定自动计算手数,取决于杠杆......比如杠杆1:50的存款3000。 Vitaly Muzichenko 2017.01.05 14:32 #559 Movlat Baghiyev: 好吧,让我问你一个简单的问题。 我如何设置EA根据杠杆自动计算手数。 假设杠杆是1:50,存款是3000...像这样试试吧。void OnTick() { Comment( cLot(100) ); }//===============================================================================================//------------------------------------ Расчет лота по риску ------------------------------------+//===============================================================================================double cLot(double Percent=0) { double Free=AccountFreeMargin(), One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED), Min_Lot=MarketInfo(_Symbol,MODE_MINLOT), cStep=MarketInfo(_Symbol,MODE_LOTSTEP), Lots_New=0; if(Percent > 100) { Percent = 100; } if(Percent == 0) { Lots_New = 0; return(0); } else { Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep; } if(Lots_New < Min_Lot) { Lots_New = Min_Lot; } if(Lots_New*One_Lot > Free) { return(0); } return(NormalizeDouble(Lots_New,LotDigit())); }//===============================================================================================//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+//===============================================================================================int LotDigit(){ double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP); return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));} Any questions from newcomers 对市场的自动检查 需要编码方面的帮助 [删除] 2017.01.05 14:44 #560 对不起,我需要某种风险%的选择。 我只需要一次开出尽可能大的手数,增量不超过0.01。 1...495051525354555657585960616263...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我还在完善它。
如果该条件为真
开单1
价格是否已达到应有的水平
开单2
LastLot=订单2(或更大的数字)。
最后价格=订单2(或更大的数字)。
如果价格已经或没有移动到它应该移动的地方...
LastLot=订单3(或更大的数字)。
LastPrice=订单3(或更大的数字)。
问题是,最后一个(或不是)订单将总是在止损和止盈之间,这意味着当其他订单关闭时,它不会重置,因为订单本身仍在那里。如果我们不知道订单的数量,我们如何将其与其他订单绑定?
事实证明,将最后的第一个或倒数第二个与其他的结合起来的机制是低效的,因为他们的数量随着数字的变化而变化。
结果应该是这样的:"如果给定系列的任何订单已经关闭,则关闭所有其他订单"。
系列检查--当前方向的第一个订单(另一个订单不会打开)--这里应该使用一个额外的标识符或一些其他绑定方法。关键是--第一个订单是根据条件打开的,其余的订单是辅助性的。
有什么想法吗?
我还在完善它。
如果该条件为真
开单1
价格是否已达到应有的水平
开单2
LastLot=订单2(或更大的数字)。
最后价格=订单2(或更大的数字)。
如果价格已经或没有移动到它应该移动的地方...
LastLot=订单3(或更大的数字)。
LastPrice=订单3(或更大的数字)。
问题是,最后一个(或不是)订单将总是在止损和止盈之间,这意味着当其他订单关闭时,它不会重置,因为订单本身仍在那里。如果我们不知道订单的数量,我们如何将其与其他订单绑定?
事实证明,将最后的第一个或倒数第二个与其他的结合起来的机制是低效的,因为他们的数量随着数字的变化而变化。
结果应该是这样的:"如果给定系列的任何订单已经关闭,则关闭所有其他订单"。
系列检查--当前方向的第一个订单(另一个订单不会打开)--这里应该使用一个额外的标识符或一些其他绑定方法。关键是--第一个订单是根据条件打开的,其余的订单是辅助性的。
有什么想法吗?
这一点并不清楚。尝试更清楚地表达你的想法。
这里我们有:"如果价格走势正确与否,我们应该打开订单2" - 我们应该如何理解在任何情况下我们应该打开订单2?
而我们会得到越来越多的 "否则"。
如果我们不希望出现诸如"当价格金额未知时,如何将其与其余订单联系起来"的问题,我们应该先找出金额。
这是混乱的,不可理解的。试着使你的想法更加清晰。
这个"如果价格向正确的方向移动或不移动--打开订单2" - 你如何理解在任何情况下"打开订单2"?
而我们会得到越来越多的 "否则"。
如果我们不想陷入"如果我们不知道金额,如何将其与其余订单联系起来"这样的问题,我们应该首先找出金额。
好了,有了数字
欧元兑美元=1.10000
根据TP开立买入订单的命令(已经写入)。
如果欧元兑美元=1.10200,我们给出一个买入指令(已经写好)。
如果EURUSD=1.09800就 "买入"(已经写好了)。
以此类推,步幅为200
如果任何订单被关闭(止损和接管被设置,但不是所有的订单都被关闭)。
关闭整个网格
寻找一种方法来识别网格好了,有了数字
欧元兑美元=1.10000
根据TP以当前价格开立买入订单的命令(已经写入)。
如果欧元兑美元=1.10200,添加到买入订单(已经写好)。
如果EURUSD=1.09800就 "买入"(已经写好了)。
以此类推,步幅为200
如果任何订单关闭(停止和接管已经被放置)。
关闭整个网格
寻找一种方法来识别网格可以添加带有订单号的注释。如果整个系列的订单都是一种类型 - 那么他们应该简单地重新计算并固定数量。
我想的是评论,但从反馈来看,厨师认为这些评论不能吃,要么删除,要么改成自己的。
至于计数,那么我在添加另一个数字时必须计数和记录?
关于计数,当我再增加一个时,我是否必须计数并记录数量?
是的,如果数量比上次有所减少--关闭所有剩余的。
你也可以在历史中监控已关闭的订单。并在出现符合指定特征的新订单时关闭该系列。
你也可以不在订单中设置TP/SL,而是在专家顾问中计算整个系列的总TP/SL。用它们来结束这个系列。优点是--经纪公司看不到断点水平,如果一个订单触发了TP或SL,寻找系列的问题依然存在。double volume(string symbol,double risk,double sl)
{
double lot=0.0;
double procent=0.0;
double balans=0.0;
double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);
procent=(balans/100.0)*risk;
switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
{
case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
}
return(NormalizeVolume(symbol,lot));
}
好吧,让我问你一个简单的问题。 我如何设置EA根据杠杆自动计算手数。 假设杠杆是1:50,存款是3000...
像这样试试吧。
{
Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
Lots_New=0;
if(Percent > 100) {
Percent = 100;
}
if(Percent == 0) {
Lots_New = 0;
return(0);
} else {
Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
}
if(Lots_New < Min_Lot) {
Lots_New = Min_Lot;
}
if(Lots_New*One_Lot > Free) {
return(0);
}
return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}