专家顾问 - 杂项问题 - 页 16

 

市场关闭!

#1- 我从未通过OnTick()、Start()调用Button对象这正常吗?
#2
- 我可以将 "ANCHOR_RIGHT_UPPER "应用于Button对象吗?
#3 - 所以,我仍然需要帮助我的这个问题#145,请。

谢谢!

 

#1 - I never call Button Object by OnTick(), Start(), so is it normal?

#2- 我可以应用于按钮对象'ANCHOR_RIGHT_UPPER'吗?

不,锚点被固定在ANCHOR_LEFT_UPPER。

#3 - 所以,我仍然需要帮助来解决我的这个问题#145,谢谢。

是的,你是正确的 - EventSetMillisecondTimer(250)

 
honest_knave:


不,锚点被固定在ANCHOR_LEFT_UPPER。
是的,你是正确的 - EventSetMillisecondTimer(250)

非常感谢。非常感谢。
 




它给了我不同的值。

我真的失去了理智。我尝试了一些方法,也研究了很多,但没有好的结果。
请帮助我,如果有可能的话,请解释一下利润计算的 问题,非常感谢。

我希望我很快就能得到好的答案。

void profitcalcfnc()
{
    double trueprofit = 0;
    for ( int i = OrdersTotal() - 1; i >= 0; i-- )
    {
        if  ( ! OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) ) continue;
        if  ( closeothers == false && OrderSymbol() != Symbol() ) continue;
        trueprofit = OrderProfit() + OrderSwap() + OrderCommission();
        if  ( trueprofit >= 0 )
        {
            Print( "Profit: ", trueprofit );
            ObjectSetString  ( 0, "all profit counting object", OBJPROP_TEXT, DoubleToString( trueprofit, 2 ) );
        }
    }
    //---
    return;
}

谢谢你的帮助。

 
trueprofit = OrderProfit() + OrderSwap() + OrderCommission();

你在循环的每一次迭代中都覆盖了trueprofit的值,而不是增加该值。

请记住这一点。

profit = OrderProfit();

被改成了这样。

profit_buy += OrderProfit();
你需要清楚你想在循环的每个迭代中发生什么(每个订单)和你想在循环后发生什么(在你检查了 所有订单后)。
 
honest_knave:
你需要明确你想在循环的每个迭代中发生什么(每个订单)和你想在循环后发生什么(在你检查完所有订单后)。

谢谢你的快速回复。
也许我太累了,非常抱歉。( 只是我不明白我可以 什么。)

我需要多描述一下我关心的问题(我有多少能力)。
所以,我有两个功能。

  1. 我使用其中第一个按钮功能--当我点击它时,所有有利可图的头寸将关闭。到目前为止,它运行良好。(我无法测试它--我的经纪人禁止交易)
  2. 我使用其中第二个标签功能--它可以在一个 标签对象中显示所有 盈利的价值。( 但我做不到 )

最后,我希望这个 我的最新评论代码) 利润计算功能可以计算两种类型的订单"OP_SELL和OP_BUY "都是盈利的。

先谢谢你了。

 

你是如何在一个标签中显示所有的盈利值的?

你是指所有加起来的AcountProfit()还是每个单独的OrderProfit()。

如果你需要这样的东西。


请看这篇文章。

https://www.mql5.com/en/articles/2723

Graphical Interfaces X: Updates for Easy And Fast Library (Build 3)
Graphical Interfaces X: Updates for Easy And Fast Library (Build 3)
  • 2016.10.17
  • Anatoli Kazharski
  • www.mql5.com
The next version of the Easy And Fast library (version 3) is presented in this article. Fixed certain flaws and added new features. More details further in the article.
 

谢谢你的评论。
抱歉造成了混乱。

不,我想我需要的是与之不同的东西。
我将尝试澄清我的问题。

我有3个欧元兑美元的头寸。其中两个是盈利头寸,一个是亏损头寸。所以我只需要计算其中两个是盈利的。
例如:如果每个仓位+1.00(2个盈利仓位=+2.00),我就需要得到所有盈利仓位的价值。

Print( "Profit: ", 2.00 ); // absolutely no separately - I just need - could adds profitable values 1.00 + 1.00 = 2.00

我只是快速制作了以下标签,以帮助我了解我想说的。( 在这个评论的图片文件下面 )
(英语不是我的母语--有时我很纠结)

一切顺利。

贸易面板标签图像文件

 
double totalprofit=0;

// in your orderselect loop put
if(OrderProfit()>0)
{
  totalprofit=totalprofit+OrderProfit();
}
 

#盈利订单计数--关闭

Marco vd Heijden:
if(OrderProfit()>0)
{
  totalprofit=totalprofit+OrderProfit();
}

在你的伟大示例代码之后,我解决了我的问题。
伟大的人,非常感谢!



Honest_knave:

你在循环的每一次迭代中都覆盖了trueprofit的值,而不是添加到该值中。
请记住:
你需要明确你想在循环的每个迭代中发生什么(每个订单)和你想在循环后发生什么(在你检查完所有订单后)。

就在完成下面的代码脚本之后。
我再次检查了 你的评论,然后我知道你向我解释了。但我的英语无法理解它。

祝你们每个人都有好运气。

void calc()
{
    double trueprofit  = 0;
    double totalprofit = 0;

    for ( int i = OrdersTotal() - 1; i >= 0; i-- )
    {
        if  ( ! OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) ) continue;
        if  ( closeothers != true && OrderSymbol() != Symbol() ) continue;

        trueprofit = OrderProfit() + OrderSwap() + OrderCommission();
        if  ( trueprofit >= 0 )
        {
            totalprofit += OrderProfit() + OrderSwap() + OrderCommission();
            Print( "Profit: ", DoubleToString( totalprofit, 2 ) );
            ObjectSetString  ( 0, _Checkthisout_name_Label, OBJPROP_TEXT, "Total Profit: " + DoubleToString( totalprofit, 2 ) );
        }
    }
    //---
    return;
}

我希望这个代码脚本能够很好的工作。如果上面的代码有什么问题,请让我知道。
谢谢你的帮助。

原因: