Ayuda para actualizar a MetaTrader 5 sin pérdidas - página 13

 
mario065:

Hola,

No podía hacer lo que quería.

El par que tengo en la cabeza es diferente al que tenía en la cabeza.

[code]
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots   2
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_type2   DRAW_COLOR_LINE
#property indicator_color1  clrBlue
#property indicator_color2  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_style2  STYLE_SOLID

input int period_1 = 20;
input int period_2 = 100;
input ENUM_MA_METHOD ma_method = MODE_SMA;
input ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE;

double ExtMapBuffer1[];
double ExtMapBuffer2[];
int EMHandle1=0;
int EMHandle2=0;
int EMHandle11=0;
int EMHandle22=0;
MqlParam params[];      // Структура за съхранение  параметрите на индикатора
double ma1[],ma2[],ma3[],ma4[];//Временни буфери

int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0, ExtMapBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, ExtMapBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, ma1, INDICATOR_DATA);
   SetIndexBuffer(3, ma2, INDICATOR_DATA);
   SetIndexBuffer(4, ma3, INDICATOR_DATA);
   SetIndexBuffer(5, ma4, INDICATOR_DATA);
  
   PlotIndexSetInteger(0, PLOT_SHIFT, 0);
   PlotIndexSetInteger(1, PLOT_SHIFT, 0);
  
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID);
//---
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrBlue);
   PlotIndexSetInteger(1,PLOT_LINE_COLOR,clrRed);

   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
   IndicatorSetString(INDICATOR_SHORTNAME,"2_2_MA");
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,4);  
//---
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_1;
   // Смещение
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   // Метод расчета: простое усреднение
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   // Тип цен для рассчета: цены закрытия
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle1 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_2;
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle2 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_1;
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle11 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
   ArrayResize(params,4);
   params[0].type         =TYPE_INT;
   params[0].integer_value=period_2;
   params[1].type         =TYPE_INT;
   params[1].integer_value=0;
   params[2].type         =TYPE_INT;
   params[2].integer_value=MODE_SMA;
   params[3].type         =TYPE_INT;
   params[3].integer_value=PRICE_CLOSE;
  
   EMHandle22 = IndicatorCreate(_Symbol, 0, IND_MA, 4, params);
     
   return(0);
}
int OnCalculate (const int rates_total,    // размер массива price[];
                 const int prev_calculated,// количество доступных баров ;на предыдущем вызове;
                 const int begin,// с какого индекса в массиве  price[] начинаются достоверные данные;
                 const double &price[]) // массив, по которому и будет считаться индикатор;
  {
   int i;
   ArraySetAsSeries(ma1, true);
   ArraySetAsSeries(ma2, true);
   ArraySetAsSeries(ma3, true);
   ArraySetAsSeries(ma4, true);
  
   if(CopyBuffer(EMHandle1, 0, 0, 1, ma1) < 0){Print("CopyBuffer ma1 error =", GetLastError());}
   if(CopyBuffer(EMHandle2, 0, 0, 1, ma2) < 0){Print("CopyBuffer ma2 error =", GetLastError());}
   if(CopyBuffer(EMHandle11, 0, 0, 1, ma3) < 0){Print("CopyBuffer ma3 error =", GetLastError());}
   if(CopyBuffer(EMHandle22, 0, 0, 1, ma4) < 0){Print("CopyBuffer ma4 error =", GetLastError());} 
   int limit;
   //if(prev_calculated<1)
      //limit=period_1;
      limit=prev_calculated-1;
   for( i=0; i<limit; i++)
   ExtMapBuffer1[0]=вычисление;
   ExtMapBuffer2[0]=вычисление;

      Comment(
      "\n=====================",
      "\n ma1[0]     :   ",DoubleToString(ma1[0],5),
      "\n ma2[0]     :   ",DoubleToString(ma2[0],5),
      "\n ma3[0]     :   ",DoubleToString(ma3[0],5),
      "\n ma4[0]     :   ",DoubleToString(ma4[0],5),
      "\n ExtMapBuffer1[0] : ",DoubleToString(ExtMapBuffer1[0],4),
      "\n ExtMapBuffer2[0] : ",DoubleToString(ExtMapBuffer2[0],4)
      );
       return(rates_total);
  }
void OnDeinit(const int reason)
  {
   Comment("");      
  }
[/code] 

Cuando 0 en lugar de i (para una barra) veo el resultado, cuando la barra (corriente = i) muestra que no puedo encontrar datos para el segundo par.

El gráfico del par está abierto, en la Ventana de Mercado no sé dónde confundo las cosas.

Dos pares diferentes en un indicador: ¿dónde está mi error?

Intento poner 0 y ver el resultado como un comentario, pero no tengo una línea.

Para aclarar: puse ma1 y ma2 en un par y ma3 y ma4 en el otro par.

Gracias.

Primero estás contando desde 0----->prev_calculated-1 y necesitas desde la última barra contada hasta rates_total

esto:

      limit=prev_calculated-1;
   for( i=0; i<limit; i++)
   ExtMapBuffer1[0]=вычисление;

cámbialo por esto:

   
   for(int i=prev_calculated-1>=0?prev_calculated-1:0; i<rates_total; i++)
       ExtMapBuffer1[i]=вычисление;

Lo segundo no lo entiendo muy bien, ¿quieres obtener muwings de diferentes instrumentos o de diferentes timeframes, no he podido encontrar ninguno de los dos en el código.

 

¡Buenos días, señores!

¿Quién puede ayudarme a adaptar los siguientes indicadores para la MT5 (pre-files).

Te daré 10 dólares para una cerveza por el trabajo.

Archivos adjuntos:
 
master_kiln:

¡Buenos días, señores!

¿Quién puede ayudarme a adaptar los siguientes indicadores para la MT5 (pre-files).

Te daré 10 dólares para una cerveza por el trabajo.

https://www.mql5.com/ru/job
MQL5 работа
MQL5 работа
  • www.mql5.com
Заказы на разработку программ для трейдинга
 

Urain,

Gracias por su atención.

No puedo hacer el sorteo. Si puedes, ponlo aquí.

Creo que es genial hacer diferentes pares y diferentes marcos en xpert.

//+------------------------------------------------------------------+
//|2_2_v2.mq5 |
//|Yuriy Tokman |
//| yuriytokman@gmail.com|
//+------------------------------------------------------------------+
#property copyright "Yuriy Tokman"
#enlace de propiedad"yuriytokman@gmail.com"
#versión de la propiedad "1.00"
#property indicador_separar_ventana
#property indicator_buffers 6
#property indicator_plots 2
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_type2 DRAW_COLOR_LINE
#property indicator_color1 clrAzul
#property indicator_color2 clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_SOLID
//#property indicator_label1 "EURUSD"
//#property indicator_label2 "GBPUSD"

input int periodo_1 = 13 ;
entrada int periodo_2 = 55 ;;
input ENUM_MA_METHOD ma_method = MODE_SMA;
input ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE;

doble ExtMapBuffer1[];
doble ExtMapBuffer2[];
int EMHandle1;
int EMHandle2;;
int MangoEm11;
int EMHandle22;
double ma1[],ma2[],ma3[],ma4[];//buffer de tiempos
double p1 = SymbolInfoDouble("EURUSD",SYMBOL_POINT);
double p2 = SymbolInfoDouble("GBPUSD",SYMBOL_POINT);
//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int OnInit()
{
//--- mapeo de buffers indicadores
SetIndexBuffer(0, ExtMapBuffer1, INDICATOR_DATA);
SetIndexBuffer(1, ExtMapBuffer2, INDICATOR_DATA);
SetIndexBuffer(2, ma1, INDICATOR_DATA);
SetIndexBuffer(3, ma2, INDICATOR_DATA);
SetIndexBuffer(4, ma3, INDICATOR_DATA);
SetIndexBuffer(5, ma4, INDICATOR_DATA);

PlotIndexSetInteger(0, PLOT_SHIFT, 0);
PlotIndexSetInteger(1, PLOT_SHIFT, 0);

PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID);
//---
PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrBlue);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,clrRed);

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,1);
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,1);

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);

//--- nombre para DataWindow
IndicatorSetString(INDICATOR_SHORTNAME, "2_2_MA");
//---
//--- establecer la precisión
IndicadorSetInteger(INDICATOR_DIGITS,4);

EMHandle1 = iMA("EURUSD", 0, period_1, 0, ma_method, applied_price);
EMHandle2 = iMA("EURUSD", 0, period_2, 0, ma_method, applied_price);
EMHandle11 = iMA("GBPUSD", 0, period_1, 0, ma_method, applied_price);
EMHandle22 = iMA("GBPUSD", 0, period_2, 0, ma_method, applied_price);

ArraySetAsSeries(ExtMapBuffer1,true);
ArraySetAsSeries(ExtMapBuffer2,true);
ArraySetAsSeries(ma1,true);
ArraySetAsSeries(ma2,true);
ArraySetAsSeries(ma3,true);
ArraySetAsSeries(ma4, true);

//---
return(0);
}
//+------------------------------------------------------------------+
//| Función de iteración de indicadores personalizada |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,// tamaño del array price[];
const int prev_calculado,// número de barras disponibles ;en la llamada anterior;
const int begin,// qué índice de la matriz price[] iniciará los datos válidos;
const double &price[]) // matriz, sobre la que se calculará el indicador;
{
if(CopyBuffer(EMHandle1, 0, 0, 1, ma1) < 0){Print("CopyBuffer ma1 error =", GetLastError());}
if(CopyBuffer(EMHandle2, 0, 0, 1, ma2) < 0){Print("CopyBuffer ma2 error =", GetLastError());}
if(CopyBuffer(EMHandle11, 0, 0, 1, ma3) < 0){Print("CopyBuffer ma3 error =", GetLastError());}
if(CopyBuffer(EMHandle22, 0, 0, 1, ma4) < 0){Print("CopyBuffer ma4 error =", GetLastError());}

ExtMapBuffer1[0]=(ma1[0]-ma2[0])/p1;
ExtMapBuffer2[0]=(ma3[0]-ma4[0])/p2;

Comentario(
"\n=====================",
"\n ma1[] : ",DoubleToString(ma1[0],5),
"\n ma2[] : ",DoubleToString(ma2[0],5),
"\n ma3[] : ",DoubleToString(ma3[0],5),
"\n ma4[] : ",DoubleToString(ma4[0],5),
"\n ExtMapBuffer1[] : ",DoubleToString(ExtMapBuffer1[0],4),
"\n ExtMapBuffer2[] : ",DoubleToString(ExtMapBuffer2[0],4)
);
//---

//--- devuelve el valor de prev_calculado para la siguiente llamada
return(rates_total);
}
void OnDeinit(const int reason)
{
Comentario(");
}
//+------------------------------------------------------------------+

 

Buenos días a todos.

Tengo una solicitud para rehacer este indicador para MT5 porque sólo lo uso en el comercio.

Archivos adjuntos:
 

No se donde escribir, pero tal vez me puedan ayudar a resolver esta duda: En MT4 solo se copia un EA a la carpeta experts y se ejecuta el strategy tester, todo se ve bien y funciona, pero en MT5 no puedo entender como probar un EA, lo tiro en la carpeta experts, con la extensión .Los he copiado y pegado en otro sitio, ¿me podéis decir cómo se copia un EA y dónde se pega correctamente?

 
ZahvatkiN:

No se donde escribir, pero tal vez me puedan ayudar a resolver este problema: En MT4 solo se copia un EA a la carpeta experts y se ejecuta el strategy tester, todo se ve bien y funciona, pero en MT5 no puedo entender como probar un EA, lo tiro en la carpeta experts, con la extensión .Los he copiado y pegado en otro sitio, ¿me podéis decir cómo se copia un EA correctamente y dónde se pega?

Puede ejecutar tanto en el probador como en tiempo real, sólo puede ejecutar un EA con la extensión ex5 o la versión compilada,

Si abres un archivo mq5 en el MetaEditor, pulsa F7 y serás feliz. El código fuente con extensión mq5, esto es sólo información de prueba, para obtener el código de bytes (código ejecutable) de él, es necesario compilarlo.

 

Urain gracias por la respuesta, solo conozco lo básico, compilé e hice todo de acuerdo a las instrucciones, aunque lo sabía, pero una vez más lo leí, no sé qué puede estar mal, aquí hay 2 skins adjuntos. He descargado MT5 de este sitio.

Archivos adjuntos:
1__17.jpg  420 kb
2__10.jpg  117 kb
 
ZahvatkiN:

Urain gracias por la respuesta, solo conozco lo básico, compilé e hice todo de acuerdo a las instrucciones, aunque lo sabía, pero una vez más lo leí, no sé qué puede estar mal, aquí hay 2 skins adjuntos. He descargado MT5 de este sitio.

Quiero colocar mi copia de grr-al.ex5 en la carpeta correcta y volver a cargar MT5 después de asegurarme de que está en la carpeta correcta.

Por cierto, ¿es la MT5 la única en el ordenador?

 

Urain por fin lo solucionó, lo que pasa es que los EAs se copian no en la carpeta C:\Archivos de Programa\MT5\MQL5\Expertos sino en C:\Users\Dyma\AppData\Roaming\MetaQuotes\Terminal\8B052D0699A0083067EBF3A36123603B\MQL5\Expertos, no sé por qué esta molestia, estos malditos programadores)))