MetaTrader 4 Build 529 beta lançado com novo compilador - página 98

 
evillive:
Que horrores estão escritos aqui, por enquanto vou me abster de atualizar acima de 553...

Comecei a ter problemas com a saída de objetos gráficos. Em um ponto do código, uma função

//+----------------------------------------------------------------------------+
void SetTLine(color cl, int wnd, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              bool ry=False, int st=0, int wd=1) {
   if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, wnd, 0,0, 0,0);
   ObjectSet(nm, OBJPROP_TIME1 , t1);
   ObjectSet(nm, OBJPROP_PRICE1, p1);
   ObjectSet(nm, OBJPROP_TIME2 , t2);
   ObjectSet(nm, OBJPROP_PRICE2, p2);
   ObjectSet(nm, OBJPROP_COLOR , cl);
   ObjectSet(nm, OBJPROP_RAY   , ry);
   ObjectSet(nm, OBJPROP_STYLE , st);
   ObjectSet(nm, OBJPROP_WIDTH , wd);
}
//+----------------------------------------------------------------------------+

chamado da seguinte forma:

//==============================================================================
// --------------------------------- Данные -----------------------------------+
//==============================================================================
   if(DrawGraphics) {                           // если рисуем графические объекты
      wnd=WindowFind("i_StdDev("+sdperiod+")"); // номер окна индикатора
      if(wnd>0) {                               // если индикатор на графике, нарисуем метку
         nm=Prefix+"_Текущий бар";
         p1=WindowPriceMax(wnd); p2=WindowPriceMin(wnd);
         SetTLine(Blue,wnd,nm,Time[0],p1,Time[0],p2,false,2);
         }
      }
//-----------------------------------------------------------------------------+   

produz uma linha de tendência vertical na janela indicadora sem problemas (marco a barra zero para facilitar a percepção visual dos pontos indicadores durante a depuração):


Quando eu chamo a mesma função de outro lugar no código como este:

   if(op==OP_SELLSTOP) {
      pp=MathMin(Low[x],Low[x-1])-distanceSetOrders*PointX;
      b=iLowest(sy,tf,MODE_LOW,2,(x-1));
      if(pb-level*Point>pp) {
         ll=LotsS;
         if(StopLoss==0) sl=0;
         else sl=NormalizeDouble(MathMax(pp+StopLoss*PointX, pp+(level+1)*Point),dg);
         if(TakeProfit==0) tp=0;
         else tp=NormalizeDouble(MathMin(pp-TakeProfit*PointX, pp-(level+1)*Point),dg);
         co="Отложенный";
         Message("Кто звал? Чё..., ставить? Ставлю SellStop относительно бара "+b+
                 ", от "+DoubleToStr(pp,dg)+" до "+DoubleToStr(Low[b],dg)+" рисую линию");
         SetOrder(sy, OP_SELLSTOP, ll, pp, sl, tp, mn1, co);
         if(DrawGraphics) {
            nm=Prefix+"_Наименьшая цена_"+TimeToStr(Time[b]);
            SetTLine(FireBrick,0,nm,Time[b],Low[b],Time[b],pp,false,3);
            }
         }
      }

ele marca no gráfico a barra a partir da qual o nível de ordem pendente é calculado, então, por estranho que pareça, os parâmetros passados a ele mostram valores verdadeiros e corretos; o tempo da barra é escrito no nome da linha de tendência, mas a própria linha tem todos os valores zero e além disso é exibida como um "Ray", embora eu passe "falso" para o parâmetro de função, responsável por esta opção - não um raio:


Não vejo um erro no código. Poderia ser uma falha?
 
Os gráficos parecem ter sido completamente destruídos. Nenhum botão aparecendo na tela. Eu não fiz nada, apenas recarreguei o terminal, e os EAs que estavam pairando nos gráficos e desenhando todos os objetos gráficos normalmente morriam. Esperando alguns dias para consertar os objetos gráficos.... hmmm.... Esperando por.... Portanto, acho que vou ter que sofrer o mesmo destino. :) Terá que esperar pela nova construção.
 
Você já recompilou os programas com a nova construção?
 
artmedia70:

Comecei a ter problemas com a saída de objetos gráficos. Em um ponto do código, uma função

chamado da seguinte forma:

produz uma linha de tendência vertical na janela indicadora sem problemas (marco a barra zero para facilitar a percepção visual dos pontos indicadores durante a depuração):


Quando eu chamo a mesma função de outro lugar no código como este:

Posso usá-la para marcar a barra no gráfico, a partir da qual o nível de ordem pendente é calculado, por mais estranho que seja, os parâmetros passados a ele mostram valores verdadeiros e corretos, o tempo da barra é escrito no nome da linha de tendência, mas a própria linha tem todos os valores zero e é exibida como um "Ray", embora eu passe falso - não um raio para parâmetro de função, que é responsável por esta opção:


Não vejo um erro no código. Poderia ser uma falha?
Adicione uma impressão de todos os parâmetros dentro da função SetTLine.
 

E mais uma vez, uma pergunta sobre o momento... Quando o Mercado será totalmente lançado ??? Quando haverá uma atualização global ???

Falou-se de um mês de testes no final de novembro, mas dezembro já está em pleno andamento ....

 

Renat,

Existem planos no futuro próximo para o novo ME4 para apoiar

ENUM_ANCHOR_POINT e ENUM_LINE_STYLE ?

Obrigado.

 
Wahoo:

Renat,

existem planos para um novo apoio ME4 num futuro próximo

ENUM_ANCHOR_POINT e ENUM_LINE_STYLE ?

Sim, eles são. O modelo gráfico será o mesmo que na MQL5.

Acrescentamos e melhoramos as funções gráficas com cada construção.

 

Um dos corretores (pelo menos um) quando novas construções MT4 são lançadas, especialmente com inovações significativas, primeiro experimente-as em uma demonstração, e depois as implemente em uma conta real.

Devido ao fato de que alguns beta-testers atualizam semiautomaticamente os terminais vizinhos, podemos ter certeza de que a demonstração e os terminais reais, estando em um computador (ou VPS), serão capazes de observar essas táticas durante a introdução dessas mudanças? Ou uma pasta, que é usada para gerenciar atualizações de todos os terminais do sistema e que é recomendada a ser removida "para evitar", deixa apenas duas opções: tudo ou nada?

 

Não executar testes ou atualizações em computadores com cópias de trabalho dos terminais.

Todos eles serão atualizados automaticamente assim que pelo menos uma cópia no computador receber uma atualização.

Razão: