[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 145

 

Vielen Dank für die Ratschläge. Alles funktioniert, aber wenn Sie den Indikator installieren, wird er seltsam gezeichnet (siehe Chart). Der Einzug (in Balken) vom linken Rand des Chart-Fensters bis zur vertikalen gelben Linie ist immer UNSTOPPED für JEDE Anzahl sichtbarer Balken im Fenster und entspricht acht Balken. Sobald diese acht Balken über die linke Fenstergrenze hinausgehen, erscheinen sofort ALLE Linien im Chart und dann ist alles normal. Kann das behoben werden und wie?


#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Aqua
#property indicator_color4 DarkOrange
#property  indicator_width1  2
#property  indicator_width3  2
//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,Signal2Buffer);
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {   
      double max1=-0.01,min1=0.01,
             max2=-0.01,min2=0.01,
             max_M1=-0.01,min_M1=0.01,
             max_M2=-0.01,min_M2=0.01,
             max_S1=-0.01,min_S1=0.01,
             max_S2=-0.01,min_S2=0.01;
             
       
 
   int bars_counted=WindowBarsPerChart()-1,
       limit;  
       limit=bars_counted;       


      
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
   
   { 
     Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i);
     Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
      
           max_M1=MathMax(Macd1Buffer[i],max_M1);
           min_M1=MathMin(Macd1Buffer[i],min_M1);
           
           max_M2=MathMax(Macd2Buffer[i],max_M2);
           min_M2=MathMin(Macd2Buffer[i],min_M2);
   }
   
   for( i=0; i<limit; i++)
           
   {
      Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i);
      Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i);
      
           
           max_S1=MathMax(Signal1Buffer[i],max_S1);
           min_S1=MathMin(Signal1Buffer[i],min_S1);
           
           max_S2=MathMax(Signal2Buffer[i],max_S2);
           min_S2=MathMin(Signal2Buffer[i],min_S2);         
   }          
           max1=MathMax(max_M1,max_S1);
           min1=MathMin(min_M1,min_S1);
             
           
            
      

//---- done 
   
 
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1,
               "\n"," max_M1 = ",max_M1,
               "\n"," min_M1 = ",min_M1,
               "\n"," max_S1 = ",max_S1,
               "\n"," min_S1 = ",min_S1,
               "\n"," max_M2 = ",max_M2,
               "\n"," min_M2 = ",min_M2,
               "\n"," max_S2 = ",max_S2,
               "\n"," min_S2 = ",min_S2,
               "\n"," max1 = ",max1,
               "\n"," min1 = ",min1,    
               "\n"," max2 = ",max2,
               "\n"," min2 = ",min2);
         
             
         
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MK07:

Vielen Dank für die Hinweise. Es funktioniert, aber wenn Sie den Indikator installieren, wird er seltsam gezeichnet (siehe Chart). Der Einzug (in Balken) vom linken Rand des Chart-Fensters bis zur vertikalen gelben Linie ist immer UNSTOPPED für JEDE Anzahl sichtbarer Balken im Fenster und entspricht acht Balken. Sobald diese acht Balken über den linken Fensterrand hinausgehen, erscheinen sofort ALLE Chart-Linien und dann ist alles normal. Kann das behoben werden und wie?


versuchen Sie es so

   int limit;
   int counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
 
Ich brauche, um einen Indikator auf ALLE Bars SEEN im Fenster zu bauen, und dann finden Sie seine max und min an dieser Stelle! Helfen Sie mir, das Problem zu lösen, in meinem vorherigen Beitrag erwähnt, ich habe ein Beispiel, aber ich verstehe nicht alles, kann jemand erklären, diese drei Zeilen einer nach dem anderen?
 // обработка видимых баров.
   int bars_count=WindowBarsPerChart();
   int bar=WindowFirstVisibleBar();
   for(int i=0; i<bars_count; i++,bar--)
     {
      // номера баров уменьшаются, так как нумерация идет в обратном порядке.
      // ...
     } 
 
MK07:
Diese Code-Konstruktion erlaubt es, bei jedem neuen Tick den Indikator nur am Nullpunkt und am ersten (zur Kontrolle) Balken neu zu berechnen, anstatt den bereits berechneten Indikator neu zu berechnen. Aber ich muss einen Indikator nach ALLEN im Fenster sichtbaren Balken erstellen und dann seinen Max und Min an diesem Punkt finden! Helfen Sie mir, das Problem zu lösen, das ich in meinem vorherigen Beitrag erwähnt habe. es gibt ein Beispiel, aber nicht alles ist mir klar. kann jemand diese drei Zeichenfolgen Zeile für Zeile erklären?

Nicht ganz klar, was Sie brauchen, wenn Sie die MAX und MIN der sichtbaren Balken des Indikators finden müssen, zeichnen Sie zuerst den Indikator und suchen Sie dann danach.

Vielleicht ist es besser, WindowPriceMax(), WindowPriceMin() zu verwenden.

 
r772ra:

Stepan2

Werke


Bei Arrays gibt es doch einen Fehler, aber bei while

c für für funktioniert ohne Probleme

))

 

Guten Tag.

Leute, sagt mir, womit ich EAs testen soll. Denn das eingebaute MT bietet im Durchschnitt eine Simulationsqualität von 50 %, und die Leute geben mehr als 90 % auf Screenshots an.

 
jusser:

Guten Tag.

Leute, sagt mir, womit ich EAs testen soll. Denn das eingebaute MT liefert im Durchschnitt nur 50 % Simulationsqualität, aber auf Screenshots werden mehr als 90 % angegeben.


Wenn Sie den gesamten Minutenverlauf haben, werden es 90 % sein. 99 % werden erreicht, indem Sie selbst einen Zeckenverlauf erstellen. Dies geschieht in der Regel mit Hilfe von Dukaskadenanführungszeichen. Google-Skripte zum Thema 99% Qualitätstests

 
Guten Tag, können Sie mir sagen, ob es einen Indikator im MT4 gibt, der das offene Interesse anzeigt? Wenn nicht, kann sie durch etwas Ähnliches ersetzt werden?
 
Hallo, wie kann man eine Bedingung im Code des Expert Advisors implementieren, um die gleiche Art von Aufträgen 50 Pips nach dem letzten Auftrag zu setzen
 
Armen63:
Hallo, wie kann man eine Bedingung im Code des Expert Advisors implementieren, um die gleiche Art von Aufträgen 50 Pips nach dem letzten Auftrag zu setzen
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}