文章 "使用限价订单替代止盈且无需修改 EA 的原始代码" - 页 5

 
这就是我想要的一切,非常感谢。爱你
 

亲爱的

我的 TP 平面是:当在图表中设置例如买入,并且趋势正确并获利时,TP 值会移动到最大获利 点,因此当趋势转为直线下降时,TP 值会放置在最大获利的 70%。

double BuyPipsProfit,SellPipsProfit,BuyProfitLevel,SellProfitLevel;
double TP_Buy=0;
double TP_Sell=0;

for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
BuyPipsProfit= Ask-(double)OrderOpenPrice();
SellPipsProfit= (double)OrderOpenPrice()-Bid;
BuyProfitLevel= BuyPipsProfit*.7;
SellProfitLevel= SellPipsProfit*.7;
TP_Buy = (50*Point)+ ((OrderOpenPrice()+ BuyProfitLevel)*Point);
TP_Sell= (50*Point)+ ((OrderOpenPrice()+ SellProfitLevel)*Point);
}
}

 

你好、

不工作。

LimitTakeProfit.mqh 错误:

unresolved static variable 'CLimitTakeProfit::i_Magic' LimitTakeProfit.mqh 29 43
unresolved static variable 'CLimitTakeProfit::b_OnlyOneSymbol' LimitTakeProfit.mqh 32 52
unresolved static variable 'CLimitTakeProfit::i_TakeProfit' LimitTakeProfit.mqh 507 14
unresolved static variable 'CLimitTakeProfit::d_TakeProfit' LimitTakeProfit.mqh 512 17
unresolved static variable 'CLimitTakeProfit::c_Symbol' LimitTakeProfit.mqh 160 9

谢谢。

附加的文件:
 

@MetaQuotes,谢谢你的代码!

我在这个函数中发现了一个错误,并给出了拙见:

bool CLimitTakeProfit::SetTakeProfits(ulong position_ticket, double new_tp=0)


如果我们有 2 个 TP,并且第一个已经关闭,那么第二个在这里将被错误关闭:

if(CheckLimitOrder(tp_request))
  {
   if(tp_request.volume>=0)
     {
      closed+=tp_request.volume;
      closed_perc=closed/position_volume*100;
     }
   else
     {
      fix_closed_per-=tp_request.volume/(position_volume-tp_request.volume)*100;
     }
   continue;
  }


为什么?因为在这个函数中搜索第一个 TP 时:

CheckOrderInHistory(PositionGetInteger(POSITION_IDENTIFIER),request.comment, request.type, request.volume);

我们改变了选择的位置,因此,在循环中:

   for(int i=0;i<total;i++)
     {

      tp_request.comment="TP"+IntegerToString(i)+"_"+IntegerToString(position_ticket);
      
      if(i_TakeProfit.At(i)<tp_int && d_TakeProfit.At(i)>0)

我们在这里使用错误的位置来评估第二个 TP:

switch((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE))


导致第二个 TP 关闭!我的解决方案是

for(int i=0;i<total;i++)
   {
      /****** 新行 **************/
      PositionSelectByTicket(position_ticket);
      /****** 新行 **************/

      tp_request.comment="TP"+IntegerToString(i)+"_"+IntegerToString(position_ticket);
      
      if(i_TakeProfit.At(i)<tp_int && d_TakeProfit.At(i)>0)


再次感谢!

 
Roco Deodato Giaculi #: 你好,不工作。LimitTakeProfit.mqh 错误: 谢谢。

您是使用了原始代码,还是将代码添加到了您的顾问中?

 

我从没成功过。

 

下午好@Dmitriy Gizlyk,您能帮我解决这个问题吗?我已经试了很多办法,但还是无法摆脱这个错误。如果您能帮忙,谢谢。


 
您能帮帮我吗?我不知道如何编程等。我只想把我的利润 绘制成有限订单(如果您能说明如何使用您的文件,我将非常感激)。
 
FalconGhost2 : 您能帮帮我吗?我不知道如何编程等。我只想让我的利润 显示为限价订单(如果您能说明如何使用您的文件,我将非常感激)。

您好,如果您使用手动交易,则无法使用此文件。它只能在 EA 中使用。

致敬,德米特里。

 
Dmitriy Gizlyk #: 您好,如果您使用手动交易,则无法使用此文件。它是供 EA 使用的。致以最崇高的敬意,德米特里。

感谢您回复 Dmitriy!您知道还有其他手动交易的方法吗?