[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 406

 
Roman.:

1. Da mesma forma.

2. Saiba como usar o Google!

Muito obrigado! Parece ter funcionado.

 
Vinin:


Você já tentou lidar com os erros?

Há várias condições.

1. O segundo instrumento deve estar aberto na visão geral do mercado. E ainda melhor, se um gráfico com o tempo certo estiver aberto (embora não necessariamente)

2) O erro 4066 deve estar ausente.

3) Todo o código, e não apenas uma parte dele, na qual você acha que o problema está localizado, deve ser submetido para revisão.

Obrigado pela resposta. há muitos erros. eu lhe dei uma seção de código, porque sem ela a compilação é bem sucedida. aqui está o código na íntegra:
//+------------------------------------------------------------------+
//|                                                   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:
Eu lhe dei um fragmento de código, porque a compilação é bem sucedida sem ele. Aqui está o código na íntegra:


Por que você decidiu que a MQL4 suporta o aninhamento de funções?

//+------------------------------------------------------------------+
//|                                                   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:


O que o faz pensar que a MQL4 suporta funções de aninhamento

Obrigado. Mas poderia explicar qual função foi aninhada e também comentar sobre seu 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:

posso falar russo? sou um principiante.

por favor, comente uma parte do 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);
 

Saudações!

Pode me dizer o que há de errado com o código... há um erro no preço do pedido pendente. não entendo o que exatamente está errado. como corrigi-lo?

Arquivos anexados:
thsayn.mq4  15 kb
 
Olá" Eu não posso adicionar uma função personalizada a um EA! Se alguém sabe onde ler como adicionar e em geral sobre funções personalizadas, por favor escreva!
 
lowech:
Olá" Eu não posso adicionar uma função personalizada a um EA! Se alguém sabe onde ler como adicionar e em geral sobre funções personalizadas, por favor escreva!

Socorro! F1 !