[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 406

 

Hat noch jemand eine solche Beschränkung für den Zugang zu Five.

Oder werde ich auf diese Weise wegen angeblicher "Mehrfachanmeldungen" für den Champion gehackt? :-)


 
Roman.:

1. Gleichermaßen.

2. Lernen Sie, Google zu benutzen!

Ich danke Ihnen vielmals! Es scheint funktioniert zu haben.

 
Vinin:


Haben Sie versucht, die Fehler zu beheben?

Es gibt mehrere Bedingungen.

1. Das zweite Instrument muss in der Marktübersicht geöffnet sein. Und noch besser ist es, wenn ein Diagramm mit dem richtigen Zeitrahmen geöffnet ist (obwohl das nicht unbedingt der Fall sein muss).

2) Der Fehler 4066 darf nicht vorhanden sein.

3) Der gesamte Code, nicht nur ein Teil davon, in dem Sie das Problem vermuten, sollte zur Überprüfung eingereicht werden.

Vielen Dank für die Antwort. Es gibt eine Menge Fehler. Ich gab Ihnen einen Code-Abschnitt, denn ohne sie die Kompilierung gelingt. hier ist der Code in voller Höhe:
//+------------------------------------------------------------------+
//|                                                   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:
Ich habe Ihnen ein Codefragment gegeben, da die Kompilierung auch ohne dieses erfolgreich ist. Hier ist der vollständige Code:


Warum haben Sie entschieden, dass MQL4 die Verschachtelung von Funktionen unterstützt?

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


Wie kommen Sie darauf, dass MQL4 die Verschachtelung von Funktionen unterstützt?

Vielen Dank, aber könnten Sie bitte erklären, welche Funktion verschachtelt wurde, und auch Ihren Code kommentieren?
 
//+------------------------------------------------------------------+
//|                                                      _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:

Kann ich Russisch sprechen? Ich bin Anfängerin.

bitte kommentieren Sie einige der Codes:

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);
 

Grüße!

Können Sie mir sagen, was mit dem Code nicht stimmt... Es gibt einen Fehler im Preis des schwebenden Auftrags. Ich verstehe nicht, was genau falsch ist. Wie kann ich es beheben?

Dateien:
thsayn.mq4  15 kb
 
Hallo" Ich kann keine benutzerdefinierte Funktion zu einem EA hinzufügen! Wenn jemand weiß, wo man nachlesen kann, wie man benutzerdefinierte Funktionen hinzufügt und allgemein über benutzerdefinierte Funktionen schreibt bitte!
 
lowech:
Hallo" Ich kann keine benutzerdefinierte Funktion zu einem EA hinzufügen! Wenn jemand weiß, wo man nachlesen kann, wie man benutzerdefinierte Funktionen hinzufügt und allgemein über benutzerdefinierte Funktionen schreibt bitte!

Hilfe! F1 !