Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 410

 
rosomah:

Pode dizer-me se é necessário fazer mysymbol.RefreshRates() ao receber o Ask and Bid, ao utilizar a Biblioteca Standard;

ou seja, actualização ou para dados da Biblioteca não precisa de actualizar?

ou

se precisar de preços actuais, não precisa de fazer nada

if((Bid-Xprice)/Ponto>=Passo)

 

não percebo nada) estou a trabalhar neste código há 3 horas. é uma função para uma grelha. é chamado a abrir uma nova ordem na grelha, o seu objectivo é recalcular TP e alterá-lo para todas as ordens na grelha

Mas apenas muda o TP da ordem mais antiga da grelha.

O que é que eu estou a misturar?))

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:

não percebo nada) estou a trabalhar neste código há 3 horas. é uma função para uma grelha. é chamado a abrir uma nova ordem na grelha, o seu objectivo é recalcular TP e alterá-lo para todas as ordens na grelha

Mas apenas muda o TP da ordem mais antiga da grelha.

O que é que eu estou a misturar?))

Quando é que vai mudar o navegador? Tal como uma criança.
 
Karputov Vladimir:
Quando irá mudar o seu navegador? Tal como uma criança.

É um problema com o site que eles não tenham adaptado o site ao meu navegador. Service Desk como de costume, 0 ajuda. Estou bem com o meu browser.

 
Leanid Aladzyeu:

É um problema com o site que eles não tenham adaptado o site ao meu navegador. Service Desk como de costume, 0 ajuda. Estou bem com o meu browser.

Pode sempre utilizar o Internet Explorer para colar o código - colará o código exactamente. Pense nas pessoas à sua volta - é embaraçoso ler o código à medida que o cola.
 

Pode dizer-me o código para MT4. Se uma nova barra tiver chegado, então redesenhar o indicador do gráfico.

Acho que encontrei o código e coloquei-o para começar

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);

   }

}


A impressão sai, mas o gráfico não o desenha de novo =(

 
twiling1983:

Pode dizer-me o código para MT4. Se uma nova barra tiver chegado, então redesenhar o indicador do gráfico.

Acho que encontrei o código e coloquei-o para começar


A impressão sai, mas o gráfico não o desenha de novo =(

Provavelmente porque o RefreshRates e o WindowRedraw não têm qualquer efeito sobre os indicadores. É preciso escavar os indicadores.
 

Como determinar o que estamos a comprar na tabela actual e para quê (russo torto, desculpe). Por exemplo, no gráfico do EURUSD, a moeda base (o que compramos) é o EUR e a moeda cotada (o que compramos por) é o USD. Podem ser identificados:

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

E o ouro, por exemplo? Num gráfico de OURO ambos os valores serão em USD. E preciso de determinar que estamos a comprar ouro por USD. A análise da cadeia de nomes dos símbolos não é apropriada.

 
Alexey Viktorov:
Provavelmente, porque o RefreshRates e o WindowRedraw não têm qualquer efeito sobre os indicadores. Tem de se aprofundar nos indicadores.

Bem, se carregar no botão de actualização no terminal, tudo é recalculado.

como apertar o mesmo botão no código? =)

É assim que eu vejo as coisas.

ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT);

 

Começou a estudar matrizes .

Escrevi uma função pró-ordem com matrizes , 3 matrizes = 0 compra, 1= venda, 2= total compra e venda de ofícios.

Depois escrevi uma condição para comprar se ( a primeira condição && matriz [0] == 0 )então abrimos uma compra

e à venda se ( a primeira condição && matriz [1]== 0) então abrimos uma posição de Venda.

Mas o testador atira um erro e o teste pára, qual é o problema? ( erro " saída da matriz " )