[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 406

 
Roman.:

1. Igualmente.

2. Aprende a utilizar Google.

¡Muchas gracias! Parece que ha funcionado.

 
Vinin:


¿Ha intentado solucionar los errores?

Hay varias condiciones.

1. El segundo instrumento debe estar abierto en la visión general del mercado. Y aún mejor, si se abre un gráfico con el marco temporal adecuado (aunque no necesariamente)

2) El error 4066 debe estar ausente.

3) Se debe presentar para su revisión todo el código, no sólo una parte de él, en la que usted cree que se encuentra el problema.

Gracias por la respuesta. hay muchos errores. le di una sección de código, porque sin ella la compilación tiene éxito. aquí está el código en su totalidad:
//+------------------------------------------------------------------+
//|                                                   PriseRatio.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
//для часовиков aud/usd (прикрепляется) и nzd/usd
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DarkViolet
//--- input parameters
extern int       ProcessDeep=1000;
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
 //----расчет отношения цен
    double a, b;
    int i;
    double Ratio(double a, double b) 
    {a = iClose(NULL, PERIOD_H1, i);
     b = iClose("NZDUSD",PERIOD_H1,i);
    return (a/b);
    }
    
 
 //----оптимизация
    int counted_bars=IndicatorCounted(),
       limit;
 
    if(counted_bars>0)
      counted_bars--;
   
    limit=Bars-counted_bars;
   
    if(limit>ProcessDeep)
      limit=ProcessDeep;
  
    for(int i=0;i<limit;i++)
    {
      ExtMapBuffer1[i]=Ratio(а,b);
    }
//----
   

   return(0);
  }
 
eternal2:
Le he dado un fragmento de código, porque la compilación es exitosa sin él. Aquí está el código completo:


¿Por qué han decidido que MQL4 soporte el anidamiento de funciones?

//+------------------------------------------------------------------+
//|                                                   PriseRatio.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+

#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DarkViolet
//--- input parameters
extern int       ProcessDeep=1000;
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),
       limit;
 
    if(counted_bars>0)
      counted_bars--;
   
    limit=Bars-counted_bars;
   
    if(limit>ProcessDeep)
      limit=ProcessDeep;
  
    for(int i=0;i<limit;i++)
    {
      ExtMapBuffer1[i]=Ratio("NZDUSD",i);
    }
//----
   

   return(0);
  }
  
double Ratio(string lsSymbol, int lnPos) {
   double res=0;
   int shift=iBarShift(lsSymbol, 0, Time[lnPos]);
   double a = iClose(NULL, 0, lnPos);
   double b = iClose(lsSymbol,0,shift);
   if (b>0) res=a/b;
   return (res);
}
  
 
Vinin:


¿Qué te hace pensar que MQL4 soporta funciones de anidamiento

Gracias, pero podrías explicar qué función se ha anidado y también comentar tu código.
 
//+------------------------------------------------------------------+
//|                                                      _Symbol.mq4 |
//|           Copyright © 2012. XrustSolution. mail:xrustx@gmail.com |
//|          https://www.youtube.com/user/opmlv http://forexrust.info |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012. XrustSolution. mail:xrustx@gmail.com"
#property link      "https://www.youtube.com/user/opmlv http://forexrust.info"
//+------------------------------------------------------------------+
//| Super Global Variables                                           |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_width1 0
#property indicator_width2 0
//+------------------------------------------------------------------+
//| Extern Variables                                                 |
//+------------------------------------------------------------------+
extern   color    Chart_Color                             = Teal     ;
extern   string   SYMBOL                                  = "USDCHF" ;
extern   bool     Mirror                                  = false    ; 
extern   bool     Sinshronise_Daily_Weekly                = true     ;
extern   double   Scale_Multyplier                        = 1        ; 
extern   int      Bars_Back                               = 2000     ;       
//+------------------------------------------------------------------+
//|   Defines & Global variavles                                     |
//+------------------------------------------------------------------+
#define empty  EMPTY_VALUE
//+------------------------------------------------------------------+
string _sy;
int    _per;
//--- buffers
double hi[];
double lo[];
double op[];
double cl[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init(){_sy = StringUpper(SYMBOL);
   if(StringLen(_sy)<4){_sy = Symbol();}
   IndicatorShortName(_sy);
   IndicatorDigits(MarketInfo(_sy,MODE_DIGITS));
   if(Sinshronise_Daily_Weekly){
      _per = PERIOD_D1;
   }else{
      _per = PERIOD_W1;
   }
   if(Scale_Multyplier==0){
      Scale_Multyplier=1;
   }
   if(Scale_Multyplier > 1000){
      Scale_Multyplier=1000;
   }
    //---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,0,Chart_Color);
   SetIndexBuffer(0,hi);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexLabel(0,_sy);
   SetIndexStyle(1,DRAW_HISTOGRAM,EMPTY,0,Chart_Color);
   SetIndexBuffer(1,lo);
   SetIndexEmptyValue(1,EMPTY_VALUE);
   SetIndexLabel(1,_sy);
   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,1,Chart_Color);
   SetIndexBuffer(2,op);
   SetIndexEmptyValue(2,EMPTY_VALUE);
   SetIndexLabel(2,_sy);
   SetIndexStyle(3,DRAW_HISTOGRAM,EMPTY,1,Chart_Color);
   SetIndexBuffer(3,cl);
   SetIndexEmptyValue(3,EMPTY_VALUE);
   SetIndexLabel(3,_sy);
    //----
return;}
//+------------------------------------------------------------------+
void deinit(){return;}
//+------------------------------------------------------------------+
void start(){    
    //---- Стандартный набор переменых 
    static int pretime=0;
    static double prerp = 0;     
   int i, ii = 0, counted = IndicatorCounted();
   if (counted > 0) counted--;
   int limit = Bars - counted;
   int per   = Period();
   string sy = Symbol();
   string txt="";
   //---- Предварительные расчеты и объявления
   double op_1,op_2,_hi,_lo,_op,_cl;
   double ss = iOpen(sy,_per,0)/iOpen(_sy,_per,0);
   if(ss<1){ss=ss*MathPow(10,(Digits-MarketInfo(_sy,MODE_DIGITS)));}
   double sm, mno = (Point/MarketInfo(_sy,MODE_POINT))*ss*Scale_Multyplier;
   if(Bars_Back!=0){limit=Bars_Back;}
   if(limit < 5){limit=5;}
   //---- Масштабирование ширины гистограммы
    int width = GetChartScale();
    SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,0);
    SetIndexStyle(1,DRAW_HISTOGRAM,EMPTY,0);
   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,width);
   SetIndexStyle(3,DRAW_HISTOGRAM,EMPTY,width);
    //---- Основной расчет индикатора
   for(i=0;i<limit;i++){
      //---- Пропускаем отсутвующие бары (синхронизация)
      while(iBarShift(_sy,per,iTime(sy,per,ii),true)<0){
         ii++;
         continue;
      }
      //---- Вычисляем смещение для точки синхронизации цены
      op_1 = iOpen(sy ,_per,iBarShift(sy ,_per,iTime(sy,per,ii)));
      op_2 = iOpen(_sy,_per,iBarShift(_sy,_per,iTime(_sy,per,i))); 
      sm = op_1 - op_2 * mno;    
      //---- Читаем данные символа  
      _hi = sm + iHigh(_sy,per,i)*mno;
      _lo = sm + iLow(_sy,per,i)*mno;
      _op = sm + iOpen(_sy,per,i)*mno;
      _cl = sm + iClose(_sy,per,i)*mno;
      //---- Переворачиваем чарт
      if(Mirror){
         _hi += 2 * (op_1-_hi);
         _lo += 2 * (op_1-_lo); 
         _op += 2 * (op_1-_op); 
         _cl += 2 * (op_1-_cl);       
      }
      //---- Отображаем график
      hi[ii] = _hi;
       lo[ii] = _lo;
      op[ii] = _op;
       cl[ii] = _cl;
       //---- Обработка дожи
       if(op[ii]==lo[ii]){op[ii]+=Point;}
       ii++;
   }
    //----
return;}
//+------------------------------------------------------------------+
//|   includes                                                       |
//+------------------------------------------------------------------+
#import "user32.dll"
    bool GetWindowRect(int h, int& pos[4]);
#import
//+------------------------------------------------------------------+
//|          Function  : int GetChartScale()[1,2,4,6,13]             |
//|          Copyright © 2012, XrustSolution.  mail:xrustx@gmail.com |
//|          https://www.youtube.com/user/opmlv http://forexrust.info |
//+------------------------------------------------------------------+
//|          Description: Return bar width in current chart scale    |
//+------------------------------------------------------------------+
int GetChartScale(){
    int h = WindowHandle(Symbol(), Period());
    int rect[4];
    if(h==0) return(1);
    GetWindowRect(h, rect);
    int wW  = rect[2] - rect[0]; // ширина окна
    int bpc = WindowBarsPerChart();
    if(bpc==0) return(1);
    int scale = MathFloor((wW-48)/bpc);
    switch(scale){
        case  1 :    return(0);
        case  2 :    return(1);
        case  4 :    return(2);
        case  8 :    return(4);
        case 16 :    return(7);
        case 32 :    return(14);
        default :   return(1);
    }
    return(1);
}
//+------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru         |
//+------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                           |
//|  Описание : Возвращает строку в ВЕРХНЕМ регистре                 |
//+------------------------------------------------------------------+
string StringUpper(string s) {
  int c, i, k=StringLen(s), n;
  for (i=0; i<k; i++) {
    n=0;
    c=StringGetChar(s, i);
    if (c>96 && c<123) n=c-32;    // a-z -> A-Z
    if (c>223 && c<256) n=c-32;   // а-я -> А-Я
    if (c==184) n=168;            //  ё  ->  Ё
    if (n>0) s=StringSetChar(s, i, n);
  }
  return(s);
}
//+------------------------------------------------------------------+
 
FAQ:

¿puedo hablar ruso? soy principiante.

por favor, comente una parte del código:

double Ratio(string lsSymbol, int lnPos) {
   double res=0;
   int shift=iBarShift(lsSymbol, 0, Time[lnPos]);
   double a = iClose(NULL, 0, lnPos);
   double b = iClose(lsSymbol,0,shift);
   if (b>0) res=a/b;
   return (res);
 

¡Saludos!

¿Puedes decirme qué pasa con el código... hay un error en el precio de la orden pendiente. no entiendo qué es exactamente lo que está mal. ¿cómo lo arreglo?

Archivos adjuntos:
thsayn.mq4  15 kb
 
Hola" No puedo añadir una función personalizada a un EA! Si alguien sabe dónde leer cómo añadir y en general sobre las funciones personalizadas por favor escriba!
 
lowech:
Hola" No puedo añadir una función personalizada a un EA! Si alguien sabe dónde leer cómo añadir y en general sobre las funciones personalizadas por favor escriba!

¡Ayuda! ¡F1 !