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

 
rosomah:

你能告诉我,如果使用标准库,在获得Ask和Bid时,是否有必要做mysymbol.RefreshRates()。

即更新或对于图书馆的数据你不需要更新吗?

如果你需要当前的价格,你不需要做任何事情

如果((Bid-Xprice)/Point>=Step)

 

我不明白的是,我已经在这个代码上工作了3个小时。这是一个网格的函数,在网格中打开一个新的订单时被调用,其目的是重新计算TP并改变网格中的所有订单。

但它只改变了网格中最古老的订单的TP。

我混了什么?))

void ModifyOrders()
  {
   double avg= 0;
   int count = 0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OP_SELL)
              {
               avg+=OrderOpenPrice();
               count++;
              }
           }
        }
     }
   int Tcount=count-1;        // Print("204");
   avg=(Tcount*Step*0.4);
//     avg=NormalizeDouble(avg/count,Digits);
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               double Bprice=FindLastBuyPrice();//Print("215");
               TP=NormalizeDouble(Bprice+avg*Point,Digits); //Print("216");
               bool res=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0,Blue);// Print("217");
               if(!res)
                  Print(" Error modification. Error code = ",DoubleToString(GetLastError(),0));
              }

            if(OrderType()==OP_SELL)
              {
               double Sprice=FindLastSellPrice();
               TP=NormalizeDouble(Sprice-avg*Point,Digits);
               bool res=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0,Red);
               if(!res)
                  Print(" Error modification. Error code = ",DoubleToString(GetLastError(),0));
              }
           }
        }
     }

  }
 
Leanid Aladzyeu:

我不明白的是,我已经在这个代码上工作了3个小时。这是一个网格的函数,在网格中打开一个新的订单时被调用,其目的是重新计算TP并改变网格中的所有订单。

但它只改变了网格中最古老的订单的TP。

我混了什么?))

你打算什么时候更换浏览器?就像一个孩子。
 
Karputov Vladimir:
你什么时候会改变你的浏览器?就像一个孩子。

这是该网站的一个问题,他们没有根据我的浏览器调整网站。服务台像往常一样,没有帮助。 我的浏览器很好。

 
Leanid Aladzyeu:

这是该网站的一个问题,他们没有根据我的浏览器调整网站。服务台像往常一样,没有帮助。 我的浏览器很好。

你总是可以使用IE浏览器来粘贴代码--它将准确地粘贴代码。想想你周围的人--把代码看成是你粘贴的文本,这很令人尴尬。
 

你能告诉我MT4的代码吗。如果一个新的条形图 已经到来,那么重新绘制图表指标。

我想我找到了代码,并把它放到了开始的地方

if(IsNewBar())
   {
    Print("Новый бар");
    RefreshRates();
    WindowRedraw();

   }

// функция за кодом

 bool IsNewBar()

{

   static datetime BARflag = 0;

   datetime now = Time[0];

   if(BARflag < now)

   {

      BARflag = now;         

      return(1);

   }

   

   else

   {

      return(0);

   }

}


打印出来了,但图表却没有重绘=()

 
twiling1983:

你能告诉我MT4的代码吗。如果一个新的条形图 已经到来,那么重新绘制图表指标。

我想我找到了代码,并把它放到了开始的地方


打印出来了,但图表却没有重绘=()

可能是因为RefreshRates和WindowRedraw对指标没有影响。你需要挖掘指标。
 

如何确定我们在当前的图表上买什么,买什么(歪果仁,对不起)。例如,在欧元兑美元的图表上,基础货币(我们购买的东西)是欧元,报价货币(我们购买的东西)是美元。它们可以被识别。

string first = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_BASE);
string second = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_PROFIT);

例如,黄金呢?在GOLD图表中,两个数值都是美元。而我需要确定的是,我们购买黄金是为了美元。分析符号名称字符串是不合适的。

 
Alexey Viktorov:
可能吧,因为RefreshRates和WindowRedraw对指标没有影响。你必须对指标进行挖掘。

好吧,如果你按下终端的刷新按钮,一切都会重新计算。

你如何在代码中按下同一个按钮?=)

这就是我的看法。

ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT)。

 

开始研究数组。

我写了一个带数组的亲笔订单函数,3个数组=0买入,1=卖出,2= 买入和卖出交易

然后我写了一个买入条件,如果(第一个条件&&数组[0]==0),那么我们就开盘买入。

在出售时,如果(第一个条件&&数组[1]==0),那么我们就建立一个卖出头寸。

但测试人员抛出一个错误,测试停止,问题出在哪里?( error " array exit " )