Pregunta sobre el asesor multidivisa - página 7

 
¡Bien! Lo investigaré ahora. Pero el probador no sabe a qué instrumento está vinculado el EA.
 

datetime iTime( string symbol, int timeframe, int shift)

Devuelve el valor del tiempo de la barra abierta del gráfico correspondiente (símbolo, marco temporal). En caso de error la función devuelve 0. Para más información sobre el error llame a GetLastError(). La información sobre la hora de apertura de cada barra para el gráfico actual se encuentra en el array predefinido Time[]. Parámetros: símbolo - nombre del símbolo del instrumento. NULL significa símbolo actual. timeframe - Periodo. Puede ser uno de los períodos del gráfico. 0 significa el período del gráfico actual. shift - Índice del valor del marco temporal (desplazamiento relativo a la barra actual por el número especificado de períodos hacia atrás).

---------------------------------------------------------------------------------------------------------------------

Por lo que tengo entendido, primero hay que poner, por ejemplo:

static int prevtimeEURUSD = 0;

y luego insertarlo en el código del par necesario

double TTTTTT=iTime("EURUSD",60,0); 
if(TTTTTT == prevtimeEURUSD) 
       return(0);
   prevtimeEURUSD = TTTTTT
 
rid:

...

Por lo que tengo entendido, primero hay que poner, por ejemplo:

static int prevtimeEURUSD = 0;

y luego insertarlo en el código del par que necesitamos

double TTTTTT=iTime("EURUSD",60,0); 
if(TTTTTT == prevtimeEURUSD) 
       return(0);
   prevtimeEURUSD = TTTTTT

Sí. Vea cómo se hace en ProtoType (Rosh). Intenté insertar un enlace, algo no pasó (lo encontré buscando en CodeBase). La función isNewBar() tiene una matriz bidimensional para esto - ¡el orden es un gran poder!
 
Gracias. Tengo este experto. Ahora le echaré un vistazo.
 
¡Querido Klerk!
Quiero hacer un indicador multidivisa, por ejemplo, dos pares. En primer lugar, habría que llevar las cotizaciones de estos pares a una forma única (por ejemplo, convertirlas a cambio porcentual, es decir, (Cierre[i]-Cierre[i+1])/100% - ¿es correcto?), y luego, si quiero ver la dinámica de la diferencia entre ellas, debería introducirlas en el indicador. ¿Cómo hacerlo?
 

Si quieres la dinámica de la diferencia, no necesitas convertirla en un porcentaje, puedes hacerlo así:

int start(){
 
 double Point1 = MarketInfo("GBPUSD",MODE_POINT);
 double Point2 = MarketInfo("USDJPY",MODE_POINT);
 
 
 MacdBuffer[0] = iMACD("GBPUSD",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point1
              + iMACD("USDJPY",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point2;
     Comment("MACD "+MacdBuffer[0]);         
 
return(0);
}
 
¡¡¡¡Muchas gracias, Xeon!!!! Lo intentaré.
 
¡Xeon! Si no te importa soltar lo que necesitas encima desde el principio... Porque, ¡¡¡sigo siendo un tonto!!!
 
nido:
¡Xeon! Si no eres duro, suelta lo que necesites desde el principio... ¡¡Porque todavía soy un tonto!!


En realidad esto fue escrito en un par de minutos en un script de prueba (para probar bloques de código)

Tenía que dibujar un indicador para usted :-)

//+------------------------------------------------------------------+
//|                                                    MultyMACD.mq4 |
//|                                           Copyright © 2007, xeon |
//|                                                       xeon@nm.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, xeon"
#property link      "xeon@nm.ru"
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1  2
//---- buffers
double MacdBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,MacdBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,SignalBuffer);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");
   IndicatorShortName("MultyMACD");
     
 
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
 
   if(IsOptimization()==true || IsTesting()==true){Comment("В тестере будет ошибка деления на 0. описано - в справке по MarketInfo");return(0);}
//----
 double Point1 = MarketInfo("GBPUSD",MODE_POINT);
 double Point2 = MarketInfo("USDJPY",MODE_POINT);
 
 
 MacdBuffer[0] = iMACD("GBPUSD",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point1
              + iMACD("USDJPY",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point2;
 
 for(int i=9;i>=0;i--){
     SignalBuffer[0]=iMAOnArray(MacdBuffer,0,9,0,MODE_SMA,i);
 }
  
//----
   return(0);
  }
//+------------------------------------------------------------------+

Espero que lo descubras

p.s. tenga en cuenta que este indicador sólo funcionará en línea, en el historial tendrá que crear un bucle

 
xeon:
nido:
¡Xeon! Si no eres duro, suelta lo que necesites desde el principio... ¡¡Porque todavía soy un tonto!!


En realidad esto fue escrito en un par de minutos en un script de prueba (para probar bloques de código)

Tenía que dibujar un indicador para usted :-)

//+------------------------------------------------------------------+
//|                                                    MultyMACD.mq4 |
//|                                           Copyright © 2007, xeon |
//|                                                       xeon@nm.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, xeon"
#property link      "xeon@nm.ru"
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1  2
//---- buffers
double MacdBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,MacdBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,SignalBuffer);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");
   IndicatorShortName("MultyMACD");
     
 
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
 
   if(IsOptimization()==true || IsTesting()==true){Comment("В тестере будет ошибка деления на 0. описано - в справке по MarketInfo");return(0);}
//----
 double Point1 = MarketInfo("GBPUSD",MODE_POINT);
 double Point2 = MarketInfo("USDJPY",MODE_POINT);
 
 
 MacdBuffer[0] = iMACD("GBPUSD",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point1
              + iMACD("USDJPY",0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)/Point2;
 
 for(int i=9;i>=0;i--){
     SignalBuffer[0]=iMAOnArray(MacdBuffer,0,9,0,MODE_SMA,i);
 }
  
//----
   return(0);
  }
//+------------------------------------------------------------------+

Espero que lo descubras

p.d. tenga en cuenta que este indicador sólo funcionará en línea, en el historial tendrá que crear un bucle

¡¡¡GRACIAS, Xeon!!! ¿Puedo escribirle un mensaje privado sobre la idea de un EA? Mi correo electrónico: ni_do@mail.ru