Pregunta sobre el asesor multidivisa - página 2

 

alexjou, he mirado la ayuda y he encontrado:

"La clase de memoria externa define una variable externa. El modificador extern se especifica antes del tipo de datos. Las variables externas definen los parámetros de entrada de un programa, son accesibles desde la ventana de propiedades del programa. Las matrices no pueden actuar como variables externas. "

Aquí está todo el código del indicador personalizado.

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_minimum 0
#property indicator_maximum 100
//---- input parameters
//extern string    st="---Параметры Stochastic---";
extern int       KPeriod =12;
extern int       DPeriod =3;
extern int       Slowing =2;
//extern string    en="---Параметры Envelopes---";
extern int       EnvPeriod=17;
extern int       Deviation=15;
extern int       Shift=1;
//---- buffers
double Stochastic[];
double UP[];
double LOW[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Stochastic);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,UP);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,LOW);
//----
   return(0);
  }
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int limit;
     int counted_bars=IndicatorCounted();
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars--;
     limit=Bars-counted_bars;
  //---- основной цикл
     for(int i=0; i<limit; i++)
 
{
Stochastic[i]=iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i);
}
     for( i=0; i<limit; i++)
{
UP[i] =iMAOnArray(Stochastic,0, EnvPeriod, Shift,MODE_SMA,i)+Deviation;
LOW[i]=iMAOnArray(Stochastic,0, EnvPeriod, Shift,MODE_SMA,i)-Deviation;
)
 
  return(0);
  }

Como variables externas puse el EA

extern int     K__period        =6;
extern int     Env_period      =10; 
extern double  Env_deviation    =12;
 
//---------------------------------------------
int start()
  {
 
... ...
double Env_low[2];
//
double Stochastic[2];
 
Env_low[0]    = iCustom("USDJPY",0,"i-StochEnv",K__period,3,3,Env_period, Env_deviation,1,2,0);
Stochastic[0] = iCustom("USDJPY",0,"i-StochEnv",K__period,3,3,Env_period, Env_deviation,1,0,0);
Stochastic[1] = iCustom("USDJPY",0,"i-StochEnv",K__period,3,3,Env_period, Env_deviation,1,0,1);
En el probador, este par funciona. ¿Cuál puede ser el error aquí?

 
Muchas gracias, no diré que no. :-) Te escribo mi dirección de correo electrónico en ICQ, dame el número.
Te diré esto: yo sólo respondí primero, otros vinieron a ver la respuesta y no añadieron nada. Así que no pienses que todo el mundo aquí está tan enfadado y no quiere compartir conocimientos.
 
Эксперт: iCustom("USDJPY", ...


А индикатор откуда об этом знает? Лучше добавить в секцию extern индикатора строковую переменную вроде


extern string SymbolName = "USDJPY"; // инструмент по умолчанию 

и вызывать стохастик так 

Stochastic[i]=iStochastic(SymbolName, 0, ...

(Опять какие-то глюки форума. В Лисе стрелки не работают, оттго и пишу не по-людски) 
 
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_minimum 0
#property indicator_maximum 100
//---- input parameters
//extern string    st="---Параметры Stochastic---";
extern string    SymbolName = "USDJPY"; 
extern int       TimeFrame = 0; 
extern int       KPeriod =12;
extern int       DPeriod =3;
extern int       Slowing =2;
//extern string    en="---Параметры Envelopes---";
extern int       EnvPeriod=17;
extern int       Deviation=15;
extern int       Shift=1;
//---- buffers
double Stochastic[];
double UP[];
double LOW[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Stochastic);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,UP);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,LOW);
//----
   return(0);
  }
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int limit;
     int counted_bars=IndicatorCounted();
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars--;
     limit=Bars-counted_bars;
  //---- основной цикл
     for(int i=limit-1; i>=0; i--) // индикаторы лучше рассчитывать слева направо
 
{
Stochastic[i]=iStochastic(SymbolName, TimeFrame,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i);
}
     for(i=limit-1; i>=0; i--) // см. примечание
{
UP[i] =iMAOnArray(Stochastic,0, EnvPeriod, Shift,MODE_SMA,i)+Deviation;
LOW[i]=iMAOnArray(Stochastic,0, EnvPeriod, Shift,MODE_SMA,i)-Deviation;
)
 
  return(0);
  }


Вызов из эксперта:

iCustom("USDJPY", 0, ...

С iMAOnArray вообще надо обращаться аккуратно. Например, поэкспериментировать с порядком ее расчета. 
А лучше всего такие вещи делать самому. Кстати, для мультивалютного эксперта может потребоваться везде 
явно задавать имя символа и рабочий тайм-фрейм, чтобы избежать умолчательных сюрпризов вроде этого.
 

¡alexjou !

¿Te he entendido bien? ??????????

En un EA multidivisa cuando se llama al indicador iCustom para un símbolo específico, es mejor proporcionar lo siguiente en el propio indicador

extern string SymbolName = "USDJPY"; // símbolo por defecto

Esto es además de la configuración en el Asesor Experto :

iCustom("USDJPY", 60, ... ¡para este par!

¡Pero si llamo a este indicador personalizado para un par más con otros parámetros externos, significa que para este otro par debo introducir una copia del indicador personalizado con otro nombre y establecer el símbolo de otro par allí también!

¡Pero entonces es realmente más fácil de calcular iMAOnArray dentro del Asesor de Expertos por sí mismo sin ningún indukes personalizado!

 
Así es. Aunque, es un negocio amateur. Mi práctica, por ejemplo, es el uso de indicadores personalizados para probar una idea y luego transferir el código del indicador al Asesor Experto si la idea demuestra que funciona. Este enfoque prácticamente garantiza que no se produzcan valores indicadores "vacíos", que son difíciles de detectar y pueden ser muy molestos si se programan de forma descuidada.
 

Gracias por las explicaciones. Me pondré a ello...

klerk, tengo problemas con mi correo electrónico los fines de semana.

Esta es mi dirección de correo electrónico para el asesor.

rid200549@ya.ru

 
alexjou:
(Опять какие-то глюки форума. В Лисе стрелки не работают, оттго и пишу не по-людски) 
Los fallos estaban en el conector de mi teclado en la placa base. El foro no tiene absolutamente nada que ver. Perdón por la falsa alarma.
 

klerk, por favor confirma aquí o en el correo si has recibido mi mensaje.

Y otra pregunta para los expertos (perdón si es muy tonta):

En el Asesor Experto multidivisa -

double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

Y en las curvas finales de cada par, ¿también hay que introducir y sustituir estos valores?

.... ...
if (OrderType()==OP_BUY)                                            {
       if (!Profit_Trailing || (Bid-OrderOpenPrice())>Trailing_Stop*Point) {
        if (OrderStopLoss()<Bid-(Trailing_Stop+Trailing_Step-1)*Point)      {
.... ....
¿o se puede dejar como está?
 
rid:

Y en los pares finales, ¿hay que introducir y sustituir también estos valores?

Por supuesto.