初学者的问题 MQL5 MT5 MetaTrader 5 - 页 672

 
fxsaber:
谢谢你!!!。
 

我正在编写一个在马丁格尔基础上工作的EA。

我怎样才能让它在达到一个货币对的最大允许损失点数时关闭它所开的所有订单?

 
RichLux:

我正在编写一个在马丁格尔基础上工作的EA。

我怎样才能让它在达到一个货币对的最大允许损失点数时关闭它所开的所有订单?


double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }


该函数返回未平仓头寸的利润,可以通过符号、类型、Magik过滤。

然后你关闭所有头寸

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }
 
Vladislav Andruschenko:

...

该函数返回以十月为单位的利润,可以通过符号、类型、Magik进行过滤。

然后关闭所有仓位

谢谢,但我有兴趣在亏损时关闭。如何实现这一点?
 

我的意思是,我给了你上述内容。

因此,利润是一个通用术语。

-20是-20

如果(GetProfitinCurrency(Symbol(),-1,-1)<-20)CPD(Symbol(),-1,-1)

 
Vladislav Andruschenko:

double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }

谢谢,现在我明白了。

代码中仍不清楚的是:(order_type<0||OrderType()==order_type) THIS可以读作 "和卖出或买入的订单"?

 
RichLux:

yesorder_type= OP_BUY OP_SELL -1

 

编译器还抱怨了ClosePosBySelect

这个函数是否需要单独编写?

 
与本主题无关的评论已被移至"将当前时间放在图表上"。
 

弗拉迪斯拉夫-安德鲁申科

RichLux:

编译器还抱怨了ClosePosBySelect

这个函数是否需要单独编写?

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }