Preguntas de un "tonto" - página 187

 
G001:
Estoy completamente agotado. No se abre correctamente.

Por favor, ayúdame. ¿Dónde está el error?

Prueba esto:
MqlTradeRequest request={0};
MqlTradeResult result={0};
MqlTradeCheckResult check={0};
 
fyords:
Pruébalo así:
Gracias.
Se abre, sólo que no lee correctamente las señales del indicador.
¿Ayuda eso?
 
G001:
Gracias.
Se abre, sólo que no lee correctamente las señales del indicador.
¿Ayudará esto?
ArraySetAsSeries(Bull,true);

Se hace una vez en OnInit.

CopyBuffer(Indicator,1,0,3,Bull);
¿No te has equivocado con los números del buffer?
 
fyords:

Esto se hace una vez en OnInit.

¿Son correctos los números del buffer?
No lo creo. El indicador está en la página anterior.
 
G001:
Se abre, sólo que no lee correctamente las señales del indicador.

¿A qué se refiere con "mal"?

Puedes imprimir el valor del indicador para comprobar: "¿qué obtenemos?"

 
fyords:

¿A qué se refiere con "mal"?

Puedes imprimir el valor del indicador para comprobar: "¿qué obtenemos?"

He comprobado el EA con otros indicadores y funciona.
¿Tal vez haya un problema con el indicador?
Se abre en el primer tick con este indicador.

Lo siento, no sé dónde añadir la impresión.

Ejemplo para BUY_STOP, pasa de rojo a gris.

//+------------------------------------------------------------------+ 
//|                                                      MACDATR.mq5 | 
//|                                      Copyright © 2011, Svinozavr | 
//+------------------------------------------------------------------+ 
//---- Indicator settings
#property indicator_separate_window 
#property indicator_buffers 4 
#property indicator_plots   4
#property indicator_level1 +0.0005
#property indicator_level2 -0.0005
#property indicator_levelcolor DimGray
#define RESET 0
//-----
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_color1 Gray
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
#property indicator_label1 "MACD"
//-----
#property indicator_type2 DRAW_HISTOGRAM
#property indicator_color2 Green
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
#property indicator_label2 "Bull"
//-----
#property indicator_type3 DRAW_HISTOGRAM
#property indicator_color3 Red
#property indicator_style3 STYLE_SOLID
#property indicator_width3 1
#property indicator_label3 "Bear"
//-----
#property indicator_type4 DRAW_LINE
#property indicator_color4 Olive
#property indicator_style4 STYLE_SOLID
#property indicator_width4 1
#property indicator_label4 "ATR"
//-----
//----- Indicator parameters
//+------------------------------------------------------------------+
input uint FastEMA      = 12;
input uint SlowEMA      = 26;
input uint SignalEMA = 9;
input int  ATRG         = 0;
input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE;
//+------------------------------------------------------------------+
//-----
double ATRmin=0;
double kATR=1;
int min_rates_total;
int ATRHandle,MACDHandle;
double MACDBuffer[],ATRBuffer[],Bull[],Bear[];
//+------------------------------------------------------------------+    
//| MACD indicator initialization function                           | 
//+------------------------------------------------------------------+  
void OnInit()
{
//-----
  if(ATRG) min_rates_total=int(MathMax(FastEMA,SlowEMA)+ATRG);
  else min_rates_total=2*int(MathMax(FastEMA,SlowEMA));
//-----
  int ATR;
  if(!ATRG) ATR=int(SlowEMA); 
  else ATR=ATRG;
  ATRmin*=_Point;
//-----
  ATRHandle=iATR(NULL,0,ATR);
  if(ATRHandle==INVALID_HANDLE)Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà ATR");
//-----
  MACDHandle=iMACD(NULL,0,FastEMA,SlowEMA,SignalEMA,AppliedPrice);
  if(MACDHandle==INVALID_HANDLE)Print(" Íå óäàëîñü ïîëó÷èòü õåíäë èíäèêàòîðà MACD");
//-----
  SetIndexBuffer(0,MACDBuffer,INDICATOR_DATA);
  PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
  ArraySetAsSeries(MACDBuffer,true);
//-----
  SetIndexBuffer(1,Bull,INDICATOR_DATA);
  PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
  ArraySetAsSeries(Bull,true);
//-----
  SetIndexBuffer(2,Bear,INDICATOR_DATA);
  PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
  ArraySetAsSeries(Bear,true);
//-----
  SetIndexBuffer(3,ATRBuffer,INDICATOR_DATA);
  PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
  ArraySetAsSeries(ATRBuffer,true);
//-----
  string shortname;
  StringConcatenate(shortname,"MACDATR (",FastEMA,", ",SlowEMA,", ",SignalEMA,", ",EnumToString(AppliedPrice),")");
//-----
  IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//-----
  IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//-----
}
//+------------------------------------------------------------------+  
//| MACD iteration function                                          | 
//+------------------------------------------------------------------+  
int OnCalculate(
                const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]
                )
  {
//----- Check for data
  if(rates_total<min_rates_total) return(0);
//-----
  int to_copy,limit,i;
  double atr,Atr[];
  datetime Time[1];
//-----
  if(prev_calculated>rates_total || prev_calculated<=0)
  {
    limit=rates_total-min_rates_total;
  }
  else limit=rates_total-prev_calculated;
//----- 
  ArraySetAsSeries(Atr,true);
//-----
  to_copy=limit+1;
//-----
  if(CopyBuffer(ATRHandle,0,0,to_copy,Atr)<=0) return(RESET);
  if(CopyBuffer(MACDHandle,MAIN_LINE,0,to_copy,MACDBuffer)<=0) return(RESET);
//-----
  for(i=limit; i>=0 && !IsStopped(); i--)
  {
    atr=kATR*Atr[i]; // ATR
    atr=MathMax(atr,ATRmin);
//-----
    if(MACDBuffer[i]>0) {ATRBuffer[i]=MACDBuffer[i]-atr;}
    if(MACDBuffer[i]<0) {ATRBuffer[i]=MACDBuffer[i]+atr;}
  }
//-----
  for(i=limit; i>=0 && !IsStopped(); i--)
  {
//-----
    Bear[i]=0;
    Bull[i]=0;
//-----
    if(MACDBuffer[i]>0 && MACDBuffer[i+1]<MACDBuffer[i] && ATRBuffer[i]>=0) {Bull[i]=MACDBuffer[i];}
    if(MACDBuffer[i]<0 && MACDBuffer[i+1]>MACDBuffer[i] && ATRBuffer[i]<=0) {Bear[i]=MACDBuffer[i];}
  }
//+------------------------------------------------------------------+
//----- Done
  return(rates_total);
}
//+------------------------------------------------------------------+

 
G001:
Probado el EA con otros indicadores y funciona.
¿Tal vez el indicador es el problema?
Con este indicador se abre al primer tick.

Lo siento, no sé dónde añadir la impresión.

Ejemplo para BUY_STOP, pasa de rojo a gris.

No he encontrado ningún problema, todo funciona. Tomé los códigos de la página 189.

 

Pregunta sobre la propiedad del programa#property tester_file "" .

Necesito conectar muchos archivos a mi EA para hacer pruebas, 3800 para ser exactos .

Niveles diarios de opciones para varios instrumentos sólo para este año .

¿Cuál es la solución?

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Основы языка / Препроцессор / Свойства программ (#property) - Документация по MQL5
 
Karlson: Pregunta sobre la propiedad del programa#property tester_file "" .

Necesito conectar muchos archivos al EA para hacer pruebas, 3800 para ser exactos. Niveles diarios de opciones para varios instrumentos sólo para este año. ¿cuál es la solución?

Si para las pruebas, resulta que toda la información de estos archivos debe ser inmodificable (archivada). Yo probaría a escribir dos funciones: una reagrupa todos los datos de cientos de archivos en un solo archivo, y la otra lee ese archivo según reglas bien definidas. ¿Lo has probado así?
 
Yedelkin:
Si para las pruebas, resulta que toda la información de estos archivos debe ser inmodificable (archivada). Intentaría escribir dos funciones: una restablece todos los datos de cientos de archivos en un solo archivo, y la otra lee este archivo según reglas bien definidas. ¿Lo has probado así?
Todavía no lo he probado, pero la idea de recoger en un solo archivo es comprensible. Tal vez los desarrolladores indicarán una opción - una manera de conectar los datos sin cambios de una carpeta.