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

 
Max Enrik:


if
(id==CHARTEVENT_OBJECT_CLICK && (StringFind(sparam,Button_1,0)>=0 || StringFind(sparam,Button_2,0)>=0))
  {
   ticketnumber=(int) StringSubstr(sparam,1);

   Print(ticketnumber);

打印你的票号 - 确保它看起来正确。

-----

Max Enrik:

if(id==CHARTEVENT_OBJECT_CLICK && (StringFind(sparam,Button_1,0)>=0 || StringFind(sparam,Button_2,0)>=0))
  {
   ticketnumber=(int) StringSubstr(sparam,1);

   if(OrderSelect(ticketnumber,SELECT_BY_TICKET))
     {
      if(StringFind(sparam,Button_1,0)>=0)
        {
         // ...
        }

      if(StringFind(sparam,Button_2,0)>=0)
        {
         //...
        }

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

         update_1();
         update_2();
         update_3();
        }
     }
   else printf("OrderSelect failed for %i",ticketnumber); 

}

检查 OrderSelect是否工作。

-----

Max Enrik:
if(id==CHARTEVENT_OBJECT_CLICK && (StringFind(sparam,Button_1,0)>=0 || StringFind(sparam,Button_2,0)>=0))
  {
   ticketnumber=(int) StringSubstr(sparam,1);

   if(OrderSelect(ticketnumber,SELECT_BY_TICKET))
     {
      if(StringFind(sparam,Button_1,0)>=0)
        {
         // ...
        }

      if(StringFind(sparam,Button_2,0)>=0)
        {
         //...
        }

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

         update_1();
         update_2();
         update_3();

        }
     }
  }

我不明白这一点。

你知道这将通过每个具有相同符号的订单,并运行update_1() update_2() update_3()?而不仅仅是你发现的有ticketnumber的订单。

 
honest_knave:

打印你的票号 - 确保它看起来是正确的。
-----
检查OrderSelect是否工作。
-----
我不明白这一点。
你知道这将通过每个具有相同符号的订单,并运行update_1() update_2() update_3()?而不仅仅是你发现的有ticketnumber的订单。

谢谢你的及时评论。
在你的评论之后,我又检查了一次。它看起来不错。

#1 - Ticket number - 正确。
#2 - OrderSelect()工作。
#3 - 是的!你是对的,但如果我不使用它,update_*()的就不会工作。

我把这个方法用于拖曳,这个方法效果很好。但该方法对CHARTEVENT_OBJECT_CLICK 的效果不好。(在单一订单中,它确实工作良好,当我打开相反的订单时,它确实工作。)

我真的需要帮助,请。

 
给我看一张你想发生什么的截图。我不清楚这个问题。
 
honest_knave:
给我看一张你想发生什么的截图。我不太清楚这个问题。

当我在做截图的时候,我发现了解决方案,真让人吃惊!(我已经花了2个多小时来做)。(我已经花了2个多小时来解决这个问题)
所以,到目前为止看起来还不错,如果有什么问题,我会写更清楚的评论。

谢谢你的时间。

( 这真的很神奇。)

 
Max Enrik:

当我在做截图时,我发现了解决方案,真是令人惊叹!(我已经花了2个多小时来做这个)。(我已经花了2个多小时了)
所以,到目前为止看起来还不错,如果有什么问题,我会写更清楚的评论。

谢谢你的时间。

(这真的很神奇。)

我很高兴你把它修好了
 

#盈利货币计算 - 打开

我刚刚开始寻找解决方案,如何计算货币的利润

问: 请问如何将订单利润(点数)转换成订单利润(货币)?

(我只是担心在市场收盘前我无法找到解决方案)

任何明确的评论将是更好的,请。

谢谢。

//----第二次编辑

我发现很多类似的论坛,但我找不到这种类型的主题。

 

如何达到以点为单位的利润?

OrderProfit()

返回的值。

所选订单 的净利润值(不含掉期或佣金)。

对于未结订单,它是当前未实现的利润。

对于已关闭的订单,它是固定的利润。

 
Marco vd Heijden:

如何达到以点为单位的利润?

OrderProfit()

返回的值。

所选订单 的净利润值(不含掉期或佣金)。

对于未结订单,它是当前未实现的利润。

对于已关闭的订单,它是固定的利润。

谢谢你的评论。

对不起,马可,我没有更清楚地描述我的问题。
我可以通过以下代码轻松获得点数和货币的订单利润值。

DoubleToString( OrderProfit(), 2 )
DoubleToString( change_to_points( Bid - OrderOpenPrice() ), 0 );

但我试图为货币的止损和止盈找到解决方案。

我正在努力,我仍然需要帮助,谢谢。

谢谢。

 
Max Enrik: 我试图找到货币止损和止盈的解决方案。
OrderStopLoss 代替其中之一。
  • 你把止损放在它需要的地方--交易的理由不再有效的地方。例如,交易一个支撑位的反弹时,止损要低于支撑位。
  • 帐户余额*百分比/100=风险=订单手数*(|订单开盘价-订单止损|*DeltaPerLot+佣金PerLot)(注意OOP-OSL包括SPREAD,DeltaPerLot通常为10美元/点左右,但它考虑到了货币对与您帐户货币的汇率。
  • 不要单独使用TickValue -DeltaPerLot
  • 你必须正确规范手数,并检查最小和最大
  • 你还必须检查FreeMargin以避免止损
 
whroeder1:
OrderStopLoss 代替其中之一。
  • 你把止损放在它需要的地方--交易的理由不再有效的地方。例如,交易一个支撑位的反弹时,止损要低于支撑位。
  • 帐户余额*百分比/100=风险=订单手数*(|订单开盘价-订单止损|*DeltaPerLot+佣金PerLot)(注意OOP-OSL包括SPREAD,DeltaPerLot通常为10美元/点左右,但它考虑了货币对与您帐户货币的汇率)。
  • 不要单独使用TickValue -DeltaPerLot
  • 你必须正确规范手数,并检查最小和最大
  • 你还必须检查FreeMargin以避免止损

谢谢你提供的更多信息的评论。
我正在研究它...

//----第二次编辑

也许缺乏代码知识并不允许我理解你的计算方法。
但我认为我已经接近解决了。我尝试了以下代码,我得到了(买入订单)货币的止损。
然后我得到了这样的结果(我知道我通过了什么...因为我不能暗示他们...),例如。利润。7.67美元 - 点数。1001 / USDCAD。但实际上利润:7.69美元。(我已经检查了(掉期和佣金))

double  tickvalue               = MarketInfo( Symbol(), MODE_TICKVALUE ) / MarketInfo( Symbol(), MODE_TICKSIZE ),
        buy_stoploss_incurrency = OrderOpenPrice() - OrderStopLoss();
string  stoploss_incurrency     = DoubleToString( OrderLots() * buy_stoploss_incurrency * tickvalue + OrderCommission(), 2 );

Print( "stop loss in currency: ", stoploss_incurrency );

所以,我需要建议,请。

提前感谢。

//---- 第三次编辑

请编码员或程序员告诉我上述代码是否正确?因为现在我看到GBPCHF的货币止损是正确的,但USDCAD的止损不正确。我不知道什么是错的?(注意:USDCAD是开仓的,但GBPCHF是挂单的。)

现在一切都很好。所以,非常感谢威廉先生。

原因: