初学者的问题 MQL4 MT4 MetaTrader 4 - 页 153

 

我有一个带有信息面板 的类的代码!!
,但我有一个问题。

,我有一个标签在上面,我可以通过远程设置进行反应....。因此,当你改变设置2-3次时,面板本身会向不同的方向移动!!当你改变时间框架2-3次时!!我怎样才能摆脱这种情况?


更多信息。
发现如果在Dialog.mqh文件中的函数CAppDialog::Destroy(const int reason)要注释掉几行
如果(m_deinit_reason!=WRONG_VALUE)
返回。
那么在切换时间段时,面板将被正常销毁并重新启动。

附加的文件:
TradePanel.mq4  15 kb
 

你好。我正在编写一个MT4指标,该指标只与图形对象一起工作,并且还跟踪由同一指标在不同时期工作的图形对象的位置。当我手动移动大周期的垂直线时,从大周期的垂直线的新位置开始的趋势线被重新绘制,小周期的垂直线也被重新绘制。所有这些都在OnChartEvent事件中处理。问题是,当移动高位周期的垂直线时,有时低位周期的对象不会立即重绘,但只有当我双击一个指标的垂直线,在高位周期上工作时,它们才会被重绘。而在另一台更强大的电脑上,这种情况就不太容易发生。我在重新绘制对象后,在代码中应用ChartRedraw()函数。

可能是由于PC资源的缺乏而发生的吗?

我想尝试在不同的图表上运行指标,并使用EventChartCustom来生成一个自定义事件,从在较高时期工作的指标到第二个指标。也许这将加速程序的运行?

 

如何快速清零(清除)一个结构的所有元素?


该结构是全球性的。在某些时候,它必须被清除,以便以后用新的数据来填补。

我明白,你可以逐个元素地将所有东西等同于零。还有别的办法吗?


结构ABC{

int a1;

int a2;

int a3;

};

ABC a;

我们需要这样的东西

a = 0; // 钢结构中的所有元素都是零

 
Sergey Likho:

如何快速清零(清除)一个结构的所有元素?


该结构是全球性的。在某些时候,它必须被清除,以便以后用新的数据来填补。

我明白,你可以逐个元素地将所有东西等同于零。还有别的办法吗?


结构ABC{

int a1;

int a2;

int a3;

};

ABC a;

我们需要这样的东西

a = 0; // 钢结构中的所有元素都是零

ZeroMemory(a);
 
有没有人有一个追踪交易,在N个点之后触发,然后追随价格?
我有一个,但它在N个点后触发,并在盈亏平衡处停止....
请解决这个问题,我已经失去理智了!!!!
void TrailingSL()
{
int    er;
if(shagtrala==0) return;
for(int i = 0; i < OrdersTotal(); i++)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY && NormalizeDouble(Ask-OrderOpenPrice(), Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(Ask-OrderStopLoss(), Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() + (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
         if(OrderType()==OP_SELL && NormalizeDouble(OrderOpenPrice()-Bid,Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(OrderStopLoss()-Bid, Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() - (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
        }
     }
  }
return;
}
 
ponochka:
有没有人有一个在N个点之后触发的拖网,然后再去追寻价格?
我有一个,但它在N个点之后发挥作用,并在收支平衡时停止....
请解决这个问题,我已经失去理智了!!!。

在这里,我的拖网工作,它的工作。

//____________________________________________________________________________________
bool trailingpos(int magic_,int trail_p){
   string sym=Symbol(); bool res = true; double sl,slnew,tpips = trail_p*Point; int i,k=OrdersTotal();
   for(i=0;i<k;i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==sym && OrderMagicNumber()==magic_){
            switch(OrderType()){
               case OP_BUY:
                           slnew = NormalizeDouble(Ask - tpips,Digits);
                           sl = OrderStopLoss();
                           if(OrderOpenPrice() <slnew)
                              if((sl < slnew) || (sl == 0.0)){
                                    if(!OrderModify(OrderTicket(),OrderOpenPrice(),slnew,OrderTakeProfit(),OrderExpiration(),clrNONE))
                                                   {res = false; Print(__FUNCTION__,"OrderModify завершилась с ошибкой № ",GetLastError());}
                           }
                           break;
               case OP_SELL:
                           slnew = NormalizeDouble(Bid + tpips,Digits);
                           sl = OrderStopLoss();
                           if(OrderOpenPrice()> slnew)
                              if((sl > slnew) || sl ==0.0){
                                    if(!OrderModify(OrderTicket(),OrderOpenPrice(),slnew,OrderTakeProfit(),OrderExpiration(),clrNONE))
                                                   {res = false; Print(__FUNCTION__,"OrderModify завершилась с ошибкой № ",GetLastError());}
                           }
                           break;
              }
           }
        }
     }
return(res);}
//____________________________________________________________________________________

调用函数的2个参数魔数和拖网np

 
Sergey Likho:

如何快速清零(清除)一个结构的所有元素?


该结构是全球性的。在某些时候,它必须被清除,以填充新的数据。

我明白,你可以逐个元素地将所有东西等同于零。是否有其他方法?

// Обнуляет любую простую структуру
template <typename T>
void SetNull( T &Value )
{
  static T NullValue = {0};
  
  Value = NullValue;
}
 

你好!有没有一天内所有订单的总收益的代码?

我有一个。

double getProfitFromTime(datetime time)
  {
   double profit = 0;
   
   for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
        {
         if(OrderCloseTime() < time)
            break;
         
         profit += OrderProfit() + OrderCommission() + OrderSwap();
        }
   
   return(profit);
  }

它是这样被提及的。

getProfitFromTime(iTime(NULL, PERIOD_D1, 0);

我可以以任何方式修改它,以便我可以看到一个货币对在一天内的利润和所有货币对的总利润?

 
ponochka:

和所有货币对的总数?

条件 中删除OrderSymbol() == Symbol()

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
那么这部分代码将只计算终端历史中的所有订单,如果不同货币的魔法数字是相同的;如果你删除OrderMagicNumber() == magic,那么所有订单将被计算,而不考虑魔法数字
 

大家好。给新来者的建议。我想对传播行为做一点研究。我有一些计算总价差的代码。一切都写好了,一切都运作良好。

void ModifySpread()
{
  int Spread = (Ask - Bid) / Point;
  
    
  Sumsp = SumSp + Spread;
  Vol++;
  
  PrevTime = Time[0];
  
  return;
}

我想删除点差没有进行任何运动的时刻,即买入和卖出没有变化。
我这样做。

void ModifySpread()
{
  int Spread = (Ask - Bid) / Point;
  if ((prevsbid == Bid)) && (prevsask == Ask))return;
   
  SumSp = SumSp + Spread;
  Vol++;
  
  

  prevsask = Ask;
  prevsbid = Bid;
  PrevTime = Time[0];
  return;
}

但没有任何变化。我在哪里走得慢?