Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 410

 
rosomah:

Me pueden decir si usando la Biblioteca Estándar, cuando se obtiene el Ask y el Bid, es necesario hacer mysymbol.RefreshRates();

es decir, actualizar o para los datos de la Biblioteca no es necesario actualizar?

o

si necesitas los precios actuales, no necesitas hacer nada

if((Oferta-Xprecio)/Punto>=Paso)

 

No entiendo algo) he estado trabajando en este código durante 3 horas. es una función para una rejilla. se llama al abrir una nueva orden en la rejilla, su propósito es recalcular TP y cambiarlo para todas las órdenes en la rejilla

Pero sólo cambia el TP del orden más antiguo de la parrilla.

¿Qué estoy mezclando?)

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:

No entiendo algo) he estado trabajando en este código durante 3 horas. es una función para una rejilla. se llama al abrir una nueva orden en la rejilla, su propósito es recalcular TP y cambiarlo para todas las órdenes en la rejilla

Pero sólo cambia el TP del orden más antiguo de la parrilla.

¿Qué estoy mezclando?)

¿Cuándo vas a cambiar el navegador? Como un niño.
 
Karputov Vladimir:
¿Cuándo vas a cambiar de navegador? Como un niño.

Es un problema del sitio que no han adaptado el sitio a mi navegador. Service Desk como siempre, 0 ayuda. Estoy bien con mi navegador.

 
Leanid Aladzyeu:

Es un problema del sitio que no han adaptado el sitio a mi navegador. Service Desk como siempre, 0 ayuda. Estoy bien con mi navegador.

Siempre puedes usar Internet Explorer para pegar el código - pegará el código exactamente. Piensa en la gente que te rodea: es vergonzoso leer el código como texto que pegas.
 

Me puedes decir el código para MT4. Si ha llegado una nueva barra, entonces redibuja el indicador del gráfico.

Creo que he encontrado el código y lo he puesto para empezar

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

   }

}


La impresión sale pero el gráfico no lo redibuja =(

 
twiling1983:

Me puedes decir el código para MT4. Si ha llegado una nueva barra, entonces redibuja el indicador del gráfico.

Creo que he encontrado el código y lo he puesto para empezar


La impresión sale pero el gráfico no lo redibuja =(

Probablemente porque RefreshRates y WindowRedraw no tienen efecto sobre los indicadores. Hay que cavar los indicadores.
 

Cómo determinar qué estamos comprando en el gráfico actual y para qué (ruso torcido, lo siento). Por ejemplo, en el gráfico del EURUSD, la moneda base (lo que estamos comprando) es el EUR y la moneda cotizada (lo que estamos comprando) es el USD. Se pueden identificar:

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

¿Y el oro, por ejemplo? En un gráfico GOLD ambos valores serán USD. Y necesito determinar que estamos comprando oro por USD. Analizar la cadena del nombre del símbolo no es apropiado.

 
Alexey Viktorov:
Probablemente, porque RefreshRates y WindowRedraw no tienen efecto sobre los indicadores. Hay que indagar en los indicadores.

Pues bien, si se pulsa el botón de actualización en el terminal, todo se recalcula.

¿cómo se pulsa el mismo botón en el código? =)

Así es como yo lo veo.

ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT);

 

Empezó a estudiar las matrices .

He escrito una función pro-orden con arrays , 3 arrays = 0 compra, 1= venta, 2= total de operaciones de compra y venta.

Luego escribí una condición de compra si ( la primera condición && array [0] == 0 )entonces abrimos una compra

y en la venta si ( la primera condición && array [1]== 0) entonces abrimos una posición de Venta.

Pero el probador arroja un error y la prueba se detiene, ¿cuál es el problema? ( error " array exit " )