Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 153

 

tengo un código con clases con panel de información!!
PERO tengo un problema!
tengo una etiqueta en ella y puedo reaccionar a través de la configuración remota.... cuando cambias la configuración 2-3 veces, el propio panel se mueve en diferentes direcciones!!! y cuando cambias el marco de tiempo 2-3 veces!!! ¿cómo puedo deshacerme de esto?


un poco más de información:
Encontré que si en el archivo Dialog.mqh en la función CAppDialog::Destroy(const int reason) para comentar las líneas
if(m_deinit_reason!=WRONG_VALUE)
volver;
entonces el panel se destruirá normalmente y se reiniciará al cambiar de horario.

Archivos adjuntos:
TradePanel.mq4  15 kb
 

Hola. Estoy escribiendo un indicador de MT4 que sólo funciona con objetos gráficos y que también rastrea la posición de los objetos gráficos creados por el mismo indicador trabajando en un período diferente. Cuando muevo manualmente la línea vertical del periodo mayor se redibujan las líneas de tendencia desde la nueva posición de la línea vertical del periodo mayor, y también se redibuja la línea vertical del periodo menor. Todo esto se maneja en el evento OnChartEvent. El problema es que al mover la línea vertical de un periodo alto a veces los objetos de un periodo bajo no se redibujan de inmediato, sino que sólo cuando hago doble clic en la línea vertical de un indicador, trabajando en un periodo alto, se redibujan. Y en otro PC más potente esto ocurre con menos frecuencia. Aplico la función ChartRedraw() en el código después de redibujar los objetos.

¿Puede ocurrir debido a la falta de recursos del PC?

Quiero intentar ejecutar los indicadores en diferentes gráficos y utilizar EventChartCustom para generar un evento personalizado del indicador que trabaja en un periodo superior al segundo indicador. ¿Quizás esto acelere el funcionamiento del programa?

 

¿Cómo puedo poner a cero (borrar) rápidamente todos los elementos de una estructura?


La estructura es global. En determinados momentos hay que despejarla para rellenarla con nuevos datos más adelante.

Entiendo que se puede equiparar elemento por elemento todo a cero. ¿Hay alguna otra manera?


struct ABC{

int a1;

int a2;

int a3;

};

ABC a;

Necesitamos algo así

a = 0; // todos los elementos de la estructura de acero son cero

 
Sergey Likho:

¿Cómo puedo poner a cero (borrar) rápidamente todos los elementos de una estructura?


La estructura es global. En determinados momentos hay que despejarla para rellenarla con nuevos datos más adelante.

Entiendo que se puede equiparar elemento por elemento todo a cero. ¿Hay alguna otra manera?


struct ABC{

int a1;

int a2;

int a3;

};

ABC a;

Necesitamos algo así

a = 0; // todos los elementos de la estructura de acero son cero

ZeroMemory(a);
 
¿alguien tiene una operación de seguimiento que se activa después de N pips y luego va después del precio?
Tengo uno, pero se activa después de N pips y se detiene en breakeven....
¡¡¡arreglenlo por favor, estoy fuera de mi cabeza!!!
void TrailingSL()
{
int    er;
if(shagtrala==0) return;
for(int i = 0; i < OrdersTotal(); i++)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY && NormalizeDouble(Ask-OrderOpenPrice(), Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(Ask-OrderStopLoss(), Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() + (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
         if(OrderType()==OP_SELL && NormalizeDouble(OrderOpenPrice()-Bid,Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(OrderStopLoss()-Bid, Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() - (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
        }
     }
  }
return;
}
 
ponochka:
¿alguien tiene una red de arrastre que se activa después de N pips y luego va después del precio?
Tengo uno, pero funciona después de N pips y se detiene en breakeven....
¡¡¡arreglenlo por favor, estoy fuera de mi cabeza!!!

aquí mi red de arrastre funciona, funciona:

//____________________________________________________________________________________
bool trailingpos(int magic_,int trail_p){
   string sym=Symbol(); bool res = true; double sl,slnew,tpips = trail_p*Point; int i,k=OrdersTotal();
   for(i=0;i<k;i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==sym && OrderMagicNumber()==magic_){
            switch(OrderType()){
               case OP_BUY:
                           slnew = NormalizeDouble(Ask - tpips,Digits);
                           sl = OrderStopLoss();
                           if(OrderOpenPrice() <slnew)
                              if((sl < slnew) || (sl == 0.0)){
                                    if(!OrderModify(OrderTicket(),OrderOpenPrice(),slnew,OrderTakeProfit(),OrderExpiration(),clrNONE))
                                                   {res = false; Print(__FUNCTION__,"OrderModify завершилась с ошибкой № ",GetLastError());}
                           }
                           break;
               case OP_SELL:
                           slnew = NormalizeDouble(Bid + tpips,Digits);
                           sl = OrderStopLoss();
                           if(OrderOpenPrice()> slnew)
                              if((sl > slnew) || sl ==0.0){
                                    if(!OrderModify(OrderTicket(),OrderOpenPrice(),slnew,OrderTakeProfit(),OrderExpiration(),clrNONE))
                                                   {res = false; Print(__FUNCTION__,"OrderModify завершилась с ошибкой № ",GetLastError());}
                           }
                           break;
              }
           }
        }
     }
return(res);}
//____________________________________________________________________________________

llamar a la función 2 parámetros número mágico y arrastre np

 
Sergey Likho:

¿Cómo puedo poner a cero (borrar) rápidamente todos los elementos de una estructura?


La estructura es global. En determinados momentos hay que despejarla para rellenarla con nuevos datos más adelante.

Entiendo que se puede equiparar elemento por elemento todo a cero. ¿Hay otra manera?

// Обнуляет любую простую структуру
template <typename T>
void SetNull( T &Value )
{
  static T NullValue = {0};
  
  Value = NullValue;
}
 

Hola, ¿hay algún código para ganar el total de los pedidos en un día?

Yo tengo uno:

double getProfitFromTime(datetime time)
  {
   double profit = 0;
   
   for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
        {
         if(OrderCloseTime() < time)
            break;
         
         profit += OrderProfit() + OrderCommission() + OrderSwap();
        }
   
   return(profit);
  }

Se refiere así:

getProfitFromTime(iTime(NULL, PERIOD_D1, 0);

¿Puedo modificarlo de alguna manera, para poder ver el beneficio de un par de divisas en un día y el beneficio total de todos los pares de divisas?

 
ponochka:

¿y el total de todos los pares de divisas?

EliminarOrderSymbol() == Symbol() de la condición:

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
entonces esta parte del código sólo contará todos los pedidos en el historial de la terminal por número mágico si el número mágico para las diferentes monedas es el mismo; si eliminaOrderMagicNumber() == magic entonces todos los pedidos se contarán sin considerar el número mágico
 

Hola a todos. Un consejo para un recién llegado. Quiero investigar un poco sobre el comportamiento de la propagación. Tengo un código que calcula la extensión total. Todo está escrito, todo funciona bien.

void ModifySpread()
{
  int Spread = (Ask - Bid) / Point;
  
    
  Sumsp = SumSp + Spread;
  Vol++;
  
  PrevTime = Time[0];
  
  return;
}

Quiero eliminar los momentos en los que el spread no realiza ningún movimiento, es decir, la oferta y la demanda no cambian.
Yo hago esto:

void ModifySpread()
{
  int Spread = (Ask - Bid) / Point;
  if ((prevsbid == Bid)) && (prevsask == Ask))return;
   
  SumSp = SumSp + Spread;
  Vol++;
  
  

  prevsask = Ask;
  prevsbid = Bid;
  PrevTime = Time[0];
  return;
}

Pero nada cambia. ¿Dónde voy a ir despacio?

Razón de la queja: