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

 
Artyom Trishkin:

调整nnc_arr_in数组的大小,比其在结构数组0单元的大小多1。

谢谢你。

 

问题mql5

有两个敞口头寸 和一个信号(Flag==true)。

该信号只应关闭一个头寸,即有较大利润的头寸。

如何只关闭利润较高的那家?

处理这一事件的最佳方式是什么?

我正在尝试这样做。

if (invertStart == true) // получил событие, о том что есть две позиции и одну можно закрыть.
   {     
   int npos_L1=0;   NPos_L1(npos_L1);
   if(npos_L1==1)
   {
   int positions=PositionsTotal();
   for(int i=0;i<=positions;i++)
   {
   ulong ticket=PositionGetTicket(i);
   if(ticket!=0 && PositionGetInteger(POSITION_TYPE)== POSITION_TYPE_SELL && POSITION_PROFIT>=50) //  50  допустим...
   {
   m_trade.PositionClose(ticket); 
   i--;
   invertStart = false;
   return;  
   }
   }
   }
   }  

最后一个未结头寸将因此被关闭。

请告知如何正确操作,我希望有一个例子。 我读过参考书和入门书,但我并不总是理解其中的奥妙。

 
Vladpedro:

问题mql5

有两个敞口头寸 和一个信号(Flag==true)。

该信号只应关闭一个头寸,即有较大利润的头寸。

如何只关闭利润较高的那家?

处理这一事件的最佳方式是什么?

我正在尝试这样做。

最后一个未结头寸将因此被关闭。

请告知如何正确操作,我需要一个例子。 我读过参考书,但我并不总是了解细节。

代码。

   ulong ticket=ULONG_MAX;
   double profit=DBL_MIN;
   if(invertStart == true)  // получил событие, о том что есть две позиции и одну можно закрыть.
     {
      int positions=PositionsTotal();
      for(int i=PositionsTotal()-1; i>=0; i--)
        {
         ulong tmp_ticket=PositionGetTicket(i);
         if(ticket!=0)
           {
            double tmp_profit=PositionGetDouble(POSITION_PROFIT);
            if(tmp_profit>profit)
              {
               ticket=tmp_ticket;
               profit=tmp_profit;
              }
           }
        }
      //---
      if(ticket!=ULONG_MAX)
         m_trade.PositionClose(ticket);
     }
 
Vladimir Karputov:

代码。

非常感谢,似乎可以工作了。 只是抱怨票据,因为已经有这样一个局部变量

声明'ticket'隐藏了局部变量 Lim_Stop_03_Sell_pos_06.mq5 299 10

其中一些票可能需要藏在里面。

 
Vladpedro:

非常感谢你,它似乎在工作。 只是它抱怨门票,因为已经有这样一个局部变量

声明'ticket'隐藏了局部变量 Lim_Stop_03_Sell_pos_06.mq5 299 10

其中一些票可能需要藏在里面。

重命名该变量

ulong ticket=ULONG_MAX;

в

ulong close_ticket=ULONG_MAX;

当然,不要忘记在你的代码中重命名它。

 
Vladimir Karputov:

重命名该变量

в

当然,不要忘记在代码中也重命名它。

是的,谢谢,我已经把它整理好了......重新命名。

 

日安!

你能告诉我在哪里可以找到一个EA,如果价格高于顶线,或低于底线(该线是水平的或倾斜的,可以在图表上移动),可以发送电子邮件或推送信件。

也许有人有,请分享。

仅在MT5上

谢谢你!

 

如果我在EA中连接该指标

int OnInit()
{
   ind_handle = iCustom(_Symbol, indperiod, "MyInd", indParam);
   return(INIT_SUCCEEDED);
}

然后我用CopyBuffer(ind_handle, 0, 1, 3, buffer1)获得指标缓冲区。


我是否必须读取指标缓冲区 的每一个刻度?

我需要一个答案,最好是来源--文档、文章。

1.指标总是以平行方式计算自己

2.指标只在调用CopyBuffer()的时候计算。

 
Igor Makanu:

如果我在EA中连接该指标

然后我用CopyBuffer(ind_handle, 0, 1, 3, buffer1)获得指标缓冲区。


我是否必须读取指标缓冲区 的每一个刻度?

我需要一个答案,最好是来源--文档、文章。

1.指标总是以平行方式计算自己

2.指标只在调用CopyBuffer()的时候计算。

伊戈尔,如果指标写得正确,只能改变当前条形图的数值。因此,如果你需要当前值,你应该在使用这些新值之前马上使用CopyBuffer。而如果我们需要历史价值,它们不会改变,也没有理由重新阅读它们。

在某处有关于在每个刻度上计算指标的信息。据我所知,默认情况下,指标只有在被访问时才会被重新计算,但也有可能让它在每个tick上重新计算。如何做到这一点,你应该在文档中寻找。

 
Alexey Viktorov:
伊戈尔,如果指标写得正确,只能改变当前条形图的数值。因此,如果你需要当前值,你应该在使用这些新值之前马上使用CopyBuffer。而如果我们需要历史价值,它们不会改变,也没有理由重新阅读它们。

在某处有一些关于在每个刻度上计算指标的信息。在我的印象中,默认情况下,指标只有在被调用时才会重新计算,但也有可能使其在每一个刻度上都重新计算。如何做到这一点在文档中。

好吧,那么我将不得不测试它,无论如何

问题出在指标的重绘 上,我还不想重写指标。

原因: