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

 

Alexey, gracias por tus respuestas y tu ayuda.

Nueva pregunta, ¿es posible duplicar las pestañas de los gráficos en MT4? Es decir, no una plantilla para establecer los parámetros del gráfico cada vez, sino una copia completa de la ficha con la moneda, el marco temporal y los parámetros del gráfico seleccionados. ¿Existe algo así o no?

 
Rustam Bikbulatov:

Tratando)

Luchar, buscar, encontrar y volver a esconder.


ElenkaVladi:

Nueva pregunta.

Sí, de nada.

El más fácil es el patrón. ¿Por qué no te gusta? Ha establecido el marco temporal, la escala, el color de fondo, el color de las velas, ha establecido los indicadores necesarios y lo ha guardado como default.tpl. Ahora, cuando abra un nuevo gráfico, todo estará listo para usted.

 
Aleksei Stepanenko:


Lo más sencillo es la plantilla. ¿Por qué no te gusta? Establezca el marco de tiempo, la escala, el color de fondo, el color de las velas, dibuje los indicadores necesarios y guárdelo como default.tpl. Ahora, cuando abra un nuevo gráfico, todo estará listo para usted.

No, la cuestión parece ser diferente. Al abrir un gráfico e instalar el indicador, el usuario no conoce ni el TF ni el símbolo. El script debe seleccionar el símbolo y el TF. (Y el indicador puede ser cargado al mismo tiempo, o una plantilla puede ser seleccionada).

 
Aleksei Stepanenko:

¡Lucha, busca, encuentra y vuelve a esconderte!


Sí, de nada.

Lo más sencillo es el patrón. ¿Por qué no te gusta? Usted establece el marco de tiempo, la escala, el color de fondo, el color de las velas, establece los indicadores necesarios y lo guarda como default.tpl. Ahora, cuando abra un nuevo gráfico, todo estará listo para usted.

Ah, así es como funciona, no pensé en default.tpl. :))
 

@makssub en PM pidiendo el código MQL4, entonces este código

#property strict
//+------------------------------------------------------------------+
void OnStart()
{
   while(!IsStopped())
   {
      int ticket = -1;
      string ord_sym = "";
      int max_pips = INT_MIN;
      for(int i = OrdersTotal() - 1; i >= 0; i--)
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES) || OrderType() > OP_SELL) continue;
         string _sym      = OrderSymbol();
         double sym_point = SymbolInfoDouble(_sym, SYMBOL_POINT);
         double sym_price = OrderType() == OP_BUY ? SymbolInfoDouble(_sym, SYMBOL_BID) : SymbolInfoDouble(_sym, SYMBOL_ASK);
         int ord_pips     = fabs(PriceToInteger(OrderOpenPrice(), sym_point) - PriceToInteger(sym_price, sym_point));
         if(max_pips < ord_pips)
         {
            max_pips = ord_pips;
            ticket = OrderTicket();
            ord_sym = _sym;
         }
      }
      if(ticket < 0) Comment("");
      else Comment("Max pips in order = ", max_pips, " , Symbol = ", ord_sym, " , ticket = ", ticket);
      Sleep(123);
      RefreshRates();
   }
   Comment("");
}
//+------------------------------------------------------------------+
int PriceToInteger( const double Price, const double point )
{
   return((int)(Price / point + 0.1));
}
//+------------------------------------------------------------------+


cómo cerrar un pedido de entradas aquí busque:https://www.mql5.com/ru/forum/131859

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Alexey Viktorov:

Bueno, en palabras sencillas, es así:

Creamos una variable de tipo datetime y registramos en ella la hora de la vela D1 actual cuando cerramos la orden con beneficio. Y antes de abrir otra orden, comprobamos el valor de esta variable con el tiempo de la vela D1 actual. En consecuencia, si la hora actual es más alta, podemos abrir. Por lo demás, fumamos humo.

¿Puedes mostrarme un ejemplo, ya que no tengo suficiente experiencia para poner en práctica lo que has dicho?
 
Hola a todos. Por favor, aconsejar un tutorial MQL4, hasta la fecha.
 
Nikolay Grigoryev:
Hola a todos. Por favor, aconséjeme un tutorial de MQL4 relevante para hoy.

sólo hay un libro de texto, el viejo libro de Kovalev. Fue hasta el 2016 más o menos. Entonces muchas cosas de la 5 fueron transferidas a la 4. Gracias a Dios, se ha mantenido el sistema de pedidos. No hay más libros de texto (yo no encontré ninguno, y otros tampoco). Sólo artículos aquí y búsquedas en Internet.

 
Valeriy Yastremskiy:

sólo hay un libro de texto, el viejo libro de Kovalev. Fue hasta el 2016 más o menos. Entonces muchas cosas de la 5 fueron transferidas a la 4. Gracias a Dios, se ha mantenido el sistema de pedidos. No hay más libros de texto (yo no encontré ninguno, y otros tampoco). Sólo artículos aquí y una búsqueda en internet.

Gracias.

 

He escrito un indicador sencillo. Al cruzar el cero, no dibuja la línea, aunque los búferes tengan valores. Por favor, ¿puede decirme en qué me he equivocado?

#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 clrGreen
#property indicator_color2 clrRed

//---- input parameters
extern int    FastEMA=12;  
extern int    SlowEMA=26;  
extern int    Signal=9;  

//---- buffers
double DiffBuffer_up[];
double DiffBuffer_dn[];
//
double MainBuffer[];
double SignalBuffer[];

ENUM_TIMEFRAMES TimeFrame;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   int    draw_begin=MathMax(FastEMA,SlowEMA);
   string short_name="MACD Stephen";
   //---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,DiffBuffer_up);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,DiffBuffer_dn);
   short_name=StringConcatenate(short_name," ("+(string)FastEMA+","+(string)SlowEMA+","+(string)Signal+")");
   IndicatorShortName(short_name);
   SetIndexDrawBegin(0,draw_begin);
   SetIndexDrawBegin(1,draw_begin);
   SetIndexLabel(0,"Up");
   SetIndexLabel(1,"Down");
   IndicatorDigits(6);
   SetLevelValue(0,0);
   
   TimeFrame=GetTF();
   
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{

   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
  int limit, iChart, iTF, delta=0;
  datetime TimeArray[];
  //if(TimeFrame>Period()) delta=(int)MathCeil(TimeFrame/Period());
  int counted_bars=IndicatorCounted();
  //---- check for possible errors
  if(counted_bars<0) return(-1);
  //---- the last counted bar will be recounted
  if(counted_bars>0) counted_bars--;
  limit=Bars-counted_bars+delta;

  ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
  ArraySetAsSeries(MainBuffer,true);
  ArraySetAsSeries(SignalBuffer,true);
  ArrayResize(MainBuffer,  100000);
  ArrayResize(SignalBuffer,100000);
  
  iTF=0;
  for(iChart=0; iChart<limit; iChart++)
  {
      while(Time[iChart]<TimeArray[iTF]) iTF++;
      MainBuffer[iChart]=EMPTY_VALUE;
      SignalBuffer[iChart]=EMPTY_VALUE;
      MainBuffer[iChart]  =iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_MAIN,iTF);
      SignalBuffer[iChart]=iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_SIGNAL,iTF);
      double diff=MainBuffer[iChart]-SignalBuffer[iChart];
      
      if (diff>0) {
         DiffBuffer_up[iChart]=diff;
         DiffBuffer_dn[iChart]=EMPTY_VALUE;
      }
      else {
         DiffBuffer_dn[iChart]=diff;
         DiffBuffer_up[iChart]=EMPTY_VALUE;
      }
  }
  return(0);
}

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES GetTF() {

   switch (Period()) {
      case PERIOD_M1:  return PERIOD_M5;
      case PERIOD_M5:  return PERIOD_M15;
      case PERIOD_M15: return PERIOD_M30;
      case PERIOD_M30: return PERIOD_H1;
      case PERIOD_H1:  return PERIOD_H4;
      case PERIOD_H4:  return PERIOD_D1;
      case PERIOD_D1:  return PERIOD_W1;
      case PERIOD_W1:  return PERIOD_MN1;
   }
   
   return (ENUM_TIMEFRAMES)Period();

}
//+------------------------------------------------------------------+