Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1838

 
EVGENII SHELIPOV #:

Por favor, ajude-me a reescrever o código para que

Se vocêpode ajudar, o que exatamente você não pode fazer?

 
Andrey Sokolov #:

Se vocêpode ajudar, o que exatamente você não pode fazer?

Não sejamos rudes. Se eu soubesse como fazer isso, não teria vindo aqui.

A pergunta é muito simples, você precisa conhecer as coordenadas da inscrição com referência à linha horizontal, pois não sei como calculá-la.


 
EVGENII SHELIPOV #:

Não sejamos rudes. Se eu soubesse como fazer isso, não teria vindo aqui.

A questão é muito simples: a necessidade de conhecer as coordenadas da inscrição com referência à linha horizontal, pois não sei como calculá-la.


O que você quer dizer com "não vamos ser rudes"? Eu escrevi "ajuda" e não "me faça".

 
EVGENII SHELIPOV #:

Boa tarde!!! Feliz Ano Novo a todos!!!

Código de água removendo a linha horizontal

Obrigado pela ajuda.

Isto é mais do que suficiente.

//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену
   if(CountTrade() == 0)
     {
      ObjectsDeleteAll(0,"AveragePriceLine");
     }
EVGENII SHELIPOV #:

A pergunta é muito simples: você precisa conhecer as coordenadas da inscrição com referência à linha horizontal, pois eu não sei como calculá-la.

Aqui você pode ajudar

ChartTimePriceToXY

ChartXYToTimePreço

 
Tretyakov Rostyslav #:

Isso é mais do que suficiente.

Aqui é onde você pode obter ajuda.

ChartTimePriceToXY

ChartXYToTimePreço

Obrigado pela dica Rostislav, mas estou fazendo algo errado.

Preciso mudar apenas o eixo 0Y, mas a inscrição não quer se casar com a linha horizontal.

Estou anexando o código e a captura de tela, favor informar onde está o erro?

//+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell ()-all                                |
//+----------------------------------------------------------------------------+
double GetAveragePrice(int ot=-1)
  {
   double order_lots = 0, order_price = 0, avg_price = 0;
   int x = 0, y = 0;
     {
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType()==ot||ot<0)
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble(order_price / order_lots, Digits);

   if(ObjectFind(0,"AveragePriceLine"+IntegerToString(ot))!=0)
      ObjectCreate(0,"AveragePriceLine"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price);
   else
      ObjectSetDouble(0,"AveragePriceLine"+IntegerToString(ot),OBJPROP_PRICE,avg_price);
   if(ot==0)
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrLime);
   ObjectCreate("signal4",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal4",OBJPROP_XDISTANCE,500);
   ChartTimePriceToXY(0, 0, 0,avg_price, x, y);
   ObjectSet("signal4",OBJPROP_YDISTANCE, y + 10);
   ObjectSetText("signal4","- Средняя цена сетки ордеров на покупку",14,"Times New Roman", clrLime);
   if(ot==1)
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrRed);
   ObjectCreate("signal3",OBJ_LABEL,0, 0, 0, 0, 0);
   ObjectSet("signal3",OBJPROP_XDISTANCE, 500);
   ChartTimePriceToXY(0, 0, 0, avg_price, x, y);
   ObjectSet("signal3",OBJPROP_YDISTANCE, y + 10);
   ObjectSetText("signal3","- Средняя цена сетки ордеров на продажу", 14, "Times New Roman", clrRed);
   return(avg_price);
  }


 
EVGENII SHELIPOV #:

Obrigado pela dica, Rostislav, mas estou fazendo algo errado.

Preciso mudar apenas o eixo 0Y, mas a inscrição não quer se casar com a linha horizontal.

Estou anexando o código e uma captura de tela, você pode me dizer onde está o erro?

Não se esqueça dos parênteses.

//+----------------------------------------------------------------------------+
//| Расчет среденй цены (0)-buy (1)-sell ()-all                                |
//+----------------------------------------------------------------------------+
double GetAveragePrice(int ot=-1)
  {
   double order_lots = 0, order_price = 0, avg_price = 0;
   int x = 0, y = 0;
     {
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType()==ot||ot<0)
                 {
                  order_lots += OrderLots();
                  order_price += OrderOpenPrice() * OrderLots();
                 }
              }
           }
        }
     }
   avg_price = NormalizeDouble(order_price / order_lots, Digits);

   if(ObjectFind(0,"AveragePriceLine"+IntegerToString(ot))!=0)
      ObjectCreate(0,"AveragePriceLine"+IntegerToString(ot),OBJ_HLINE, 0, 0, avg_price);
   else
      ObjectSetDouble(0,"AveragePriceLine"+IntegerToString(ot),OBJPROP_PRICE,avg_price);
   if(ot==0)
     {
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrLime);
      ObjectCreate("signal4",OBJ_LABEL,0,0,0,0,0);
      ObjectSet("signal4",OBJPROP_XDISTANCE,500);
      ChartTimePriceToXY(0, 0, 0,avg_price, x, y);
      ObjectSet("signal4",OBJPROP_YDISTANCE, y + 10);
      ObjectSetText("signal4","- Средняя цена сетки ордеров на покупку",14,"Times New Roman", clrLime);
     }
   if(ot==1)
     {
      ObjectSet("AveragePriceLine"+IntegerToString(ot),OBJPROP_COLOR, clrRed);
      ObjectCreate("signal3",OBJ_LABEL,0, 0, 0, 0, 0);
      ObjectSet("signal3",OBJPROP_XDISTANCE, 500);
      ChartTimePriceToXY(0, 0, 0, avg_price, x, y);
      ObjectSet("signal3",OBJPROP_YDISTANCE, y + 10);
      ObjectSetText("signal3","- Средняя цена сетки ордеров на продажу", 14, "Times New Roman", clrRed);
     }
   return(avg_price);
  }
 
Tretyakov Rostyslav #:

Não se esqueça dos parênteses.

Não, falta algo mais.

 
EVGENII SHELIPOV #:

Não, algo mais está faltando

Deve haver erros no diário de bordo
 

Copiando para uma matriz

MqlRates CopySymb[];  
if(CopyRates(mSymbol,PERIOD_CURRENT,0,6,CopySymb)<0) return;
Print( ArrayMaximum(???) );

Como posso obter o máximo em uma matriz?

 
Vitaly Muzichenko #:

Copiando para uma matriz

Como obter o máximo em uma matriz?

Além disso, copie CopyHigh e obtenha o máximo desta matriz. Entendo que através.... mas a única outra maneira é tentar novamente no loop.

Razão: