关闭订单的利润计算 "HELP" - 页 4 123456789 新评论 [删除] 2016.12.11 16:53 #31 Renat Akhtyamov:不,这一行被删除。这是一个利润计算,不会有这样的效果。 代码中的关闭命令在哪里--有//+----------------------------------------------------------------------------+// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |//+----------------------------------------------------------------------------+double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция) double LastProfit=0; for(i=OrdersHistoryTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) { if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue; if (op<0 || OrderType()==op){if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();} } return(LastProfit); }并在结束条件中{CloseOrder(OrderTicket());t=TimeCurrent();} {DeleteAll();t=TimeCurrent();}1不计,2正确计数,3不计0。 如何编码? 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 KimIV的有用功能 Renat Akhtyamov 2016.12.11 16:59 #32 Natashe4ka://+----------------------------------------------------------------------------+// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |//+----------------------------------------------------------------------------+double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция) double LastProfit=0; for(i=OrdersHistoryTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) { if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue; if (op<0 || OrderType()==op){if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();} } return(LastProfit); }并在结束条件中{CloseOrder(OrderTicket());t=TimeCurrent();} {DeleteAll();t=TimeCurrent();}1不计数,2正确计数,3不计数 0就这样了。{t=TimeCurrent();CloseOrder(OrderTicket());} {DeleteAll();}还有一件事。您的订单是否根据票据关闭?所以你需要记住开始的时间,以便更早地结束这个系列。也就是说,如果关闭一个系列的决定刚刚形成,那么它是否真的会关闭并不重要。 Vitaly Muzichenko 2016.12.11 17:02 #33 Natashe4ka: //+----------------------------------------------------------------------------+我理解你的坚持,但我给了你一个工作版本,具有为真实交易关闭一系列头寸的良好功能,在测试器中不工作。它计算并记住一切,即使终端被重新启动。这里有一个测试,只需在测试器中运行它,并将结果与历史交易 进行比较PS。忘了写代码了--这里是修正版 附加的文件: e-info.mq4 10 kb [删除] 2016.12.11 17:13 #34 Vitaly Muzichenko:我理解你的坚持,但我给了你一个工作版本,具有为真实交易关闭一系列头寸的良好功能,在测试器中不工作。它计算并记住一切,即使终端被重新启动。这里有一个测试,只需在测试器中运行它,并将结果与历史交易 进行比较我怎样才能将其应用于我的代码?LastProfitCL 的值决定了我的进一步行动 [删除] 2016.12.11 17:15 #35 Renat Akhtyamov:但除此之外{t=TimeCurrent();CloseOrder(OrderTicket());} {DeleteAll();}还有一件事。你的订单是否在票据上关闭?因此,你需要记住该系列关闭的时间甚至更早也就是说,如果关闭一个系列的决定刚刚形成,那么它是否真的会关闭并不重要。 如果订单被止损关闭,那么{t=TimeCurrent();CloseOrder(OrderTicket());}{DeleteAll();}将已经错过了利润的价值。 Vitaly Muzichenko 2016.12.11 17:17 #36 Natashe4ka:我如何将其应用于我的代码?我有LastProfitCL 值,它决定了进一步的行动所以很清楚,只要按照你的需要以这种形式应用就可以了 double LastProfit = LastProfitCL(-1, (datetime)GlobalVariableGet(GetGlobalVariableName("LastProfit"))); Comment(" Последний: ",DoubleToString(LastProfit,1) ," Профит: ", DoubleToString(Profit,1) );声明一次"LastProfit",并在需要时使用它。 Renat Akhtyamov 2016.12.11 17:17 #37 Natashe4ka: 如果订单被止损关闭,那么{t=TimeCurrent();CloseOrder(OrderTicket();}{DeleteAll();}将已经错过了利润的值是的,会的。你可以检查每一个刻度,看看还剩下多少个实时订单。如果是相同的,那么你应该记住前一次打钩的时间。然后你会得到你所需要的东西。但停止通常不会发生在自动机上 Vitaly Muzichenko 2016.12.11 17:18 #38 Natashe4ka: 如果它在停止时收盘,{t=TimeCurrent();CloseOrder(OrderTicket();}{DeleteAll();}将已经错过了利润值。它只计算那些在时间上最后关闭的,而不取决于关闭金额。一般来说,任务并不完全清楚,所以没有进一步讨论。//---------------------------------------------------------在这里你看到了描述,我不明白这个问题了。 附加的文件: e_info.mq4 10 kb [删除] 2016.12.11 17:38 #39 Vitaly Muzichenko:在这里,这一切都被布置好了,我不明白这个任务了。 好的,谢谢你。 [删除] 2016.12.11 18:31 #40 如果 "cnt "被设置为零,这也是正确的,但这样一来,数值又无法理解了,如截图3(应该是利润值4.27)。double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция) int cnt=0; double LastProfit=0; for(i=0;i<OrdersHistoryTotal();i++) if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) { if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue; if ((op<0 || OrderType()==op) && cnt==0) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++;} else {cnt=0;} } return(LastProfit); } Profit calculation of closed 如何编码? [警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不,这一行被删除。这是一个利润计算,不会有这样的效果。
代码中的关闭命令在哪里--有
// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
if (op<0 || OrderType()==op){if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
并在结束条件中
{CloseOrder(OrderTicket());t=TimeCurrent();}
{DeleteAll();t=TimeCurrent();}1不计,2正确计数,3不计0。
// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
if (op<0 || OrderType()==op){if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
并在结束条件中
{CloseOrder(OrderTicket());t=TimeCurrent();}
{DeleteAll();t=TimeCurrent();}1不计数,2正确计数,3不计数 0
就这样了。
{DeleteAll();}
还有一件事。
您的订单是否根据票据关闭?
所以你需要记住开始的时间,以便更早地结束这个系列。
也就是说,如果关闭一个系列的决定刚刚形成,那么它是否真的会关闭并不重要。
我理解你的坚持,但我给了你一个工作版本,具有为真实交易关闭一系列头寸的良好功能,在测试器中不工作。
它计算并记住一切,即使终端被重新启动。
这里有一个测试,只需在测试器中运行它,并将结果与历史交易 进行比较
PS。忘了写代码了--这里是修正版
我理解你的坚持,但我给了你一个工作版本,具有为真实交易关闭一系列头寸的良好功能,在测试器中不工作。
它计算并记住一切,即使终端被重新启动。
这里有一个测试,只需在测试器中运行它,并将结果与历史交易 进行比较
我怎样才能将其应用于我的代码?
LastProfitCL 的值决定了我的进一步行动
但除此之外
{DeleteAll();}
还有一件事。
你的订单是否在票据上关闭?
因此,你需要记住该系列关闭的时间甚至更早
也就是说,如果关闭一个系列的决定刚刚形成,那么它是否真的会关闭并不重要。
我如何将其应用于我的代码?
我有LastProfitCL 值,它决定了进一步的行动
所以很清楚,只要按照你的需要以这种形式应用就可以了
Comment(" Последний: ",DoubleToString(LastProfit,1) ," Профит: ", DoubleToString(Profit,1) );
声明一次"LastProfit",并在需要时使用它。
如果订单被止损关闭,那么{t=TimeCurrent();CloseOrder(OrderTicket();}{DeleteAll();}将已经错过了利润的值
是的,会的。
你可以检查每一个刻度,看看还剩下多少个实时订单。
如果是相同的,那么你应该记住前一次打钩的时间。
然后你会得到你所需要的东西。
但停止通常不会发生在自动机上
如果它在停止时收盘,{t=TimeCurrent();CloseOrder(OrderTicket();}{DeleteAll();}将已经错过了利润值。
它只计算那些在时间上最后关闭的,而不取决于关闭金额。
一般来说,任务并不完全清楚,所以没有进一步讨论。
//---------------------------------------------------------
在这里你看到了描述,我不明白这个问题了。
在这里,这一切都被布置好了,我不明白这个任务了。
如果 "cnt "被设置为零,这也是正确的,但这样一来,数值又无法理解了,如截图3(应该是利润值4.27)。
int cnt=0;
double LastProfit=0;
for(i=0;i<OrdersHistoryTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
if ((op<0 || OrderType()==op) && cnt==0) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++;} else {cnt=0;}
}
return(LastProfit);
}