Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1042

 
Добрый день. Прошу помощи. Уже пару недель безуспешно пытаюсь заставить индикатор круглых уровней заставить (см.код) передавать их для использования в эксперте через iCustom. Прошу помочь поправить код.




#property indicator_chart_window

extern string H                     = " --- Mode_Settings ---";
extern bool   Show_00_50_Levels     = true;
extern bool   Show_20_80_Levels     = true;
extern color  Level_00_Color        = Lime;
extern color  Level_50_Color        = Gray;
extern color  Level_20_Color        = Red;
extern color  Level_80_Color        = Green;

double dXPoint = 1;
double Div = 0;
double i = 0;
double HighPrice = 0;
double LowPrice = 0;
int iDigits;
  
int start() 
{
   HighPrice = MathRound((High[iHighest(NULL, 0, MODE_HIGH, Bars + 300, 2)]+1) * Div);
   LowPrice = MathRound((Low[iLowest(NULL, 0, MODE_LOW, Bars + 300, 2)]-1) * Div);
  
  if(Show_00_50_Levels)
  {
   for (i = LowPrice; i <= HighPrice; i++) 
   {
      if (MathMod(i, 5) == 0.0) {
         if (ObjectFind("RoundPrice " + DoubleToStr(i, 0)) != 0) {
            ObjectCreate("RoundPrice " + DoubleToStr(i, 0), OBJ_HLINE, 0, Time[1], i / Div);
            ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_STYLE, STYLE_DOT);
            if(MathMod(i, 10) == 0.0)
            {
            ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_COLOR, Level_00_Color);
            }
            else
            {
            ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_COLOR, Level_50_Color);
            }
         }
      }
   }
   
  }
  
  if(Show_20_80_Levels)
  {
  
   for (i = LowPrice; i <= HighPrice; i++) 
   {
         
        if (StringSubstr(DoubleToStr(i/Div,iDigits), StringLen(DoubleToStr(i/Div,iDigits))-2, 2)=="20") {
         if (ObjectFind("RoundPrice " + DoubleToStr(i, 0)) != 0) {
            ObjectCreate("RoundPrice " + DoubleToStr(i, 0), OBJ_HLINE, 0, Time[1], i / Div);
            ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_STYLE, STYLE_DOT); 
            ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_COLOR, Level_20_Color);
            
            }
         }
        
         
         if (StringSubstr(DoubleToStr(i/Div,iDigits), StringLen(DoubleToStr(i/Div,iDigits))-2, 2)=="80") {
         if (ObjectFind("RoundPrice " + DoubleToStr(i, 0)) != 0) {
            ObjectCreate("RoundPrice " + DoubleToStr(i, 0), OBJ_HLINE, 0, Time[1], i / Div);
            ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_STYLE, STYLE_DOT);
           
            ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_COLOR, Level_80_Color);
            }
         }
         
   }
   
  }
  
   return (0);
}

int init() 
{
   iDigits = Digits;
   if(Digits==5 || Digits==3)dXPoint=10;
   if(Digits==3)  iDigits=2;
   if(Digits==5)  iDigits=4;
   
   Div = 0.1 / (Point*dXPoint);
   return (0);
}

int deinit()
{
   HighPrice = MathRound((High[iHighest(NULL, 0, MODE_HIGH, Bars + 300, 2)]+1) * Div);
   LowPrice = MathRound((Low[iLowest(NULL, 0, MODE_LOW, Bars + 300, 2)]-1) * Div);
   for (i = LowPrice; i <= HighPrice; i++) ObjectDelete("RoundPrice " + DoubleToStr(i, 0));
   return (0);
 
Aleksey Mavrin:
Wenn du sagst, dass du praktisch keine Ahnung vom Programmieren hast, warum nimmst du dann solche untypischen Aufgaben an, vielleicht solltest du mit einfachen Aufgaben anfangen? Oder Ihr Wissen über die Grundlagen verbessern? Es ist einfacher, es für Sie zu erledigen, ja.

Ich habe nicht geschrieben: "Machen Sie mich zu einem Indikator". Ich habe um Hilfe gebeten. Ich versuche nicht, mql4 vollständig zu beherrschen. Ich überprüfe nur die Ideen. Ich habe bereits genug von Excel).

 
Oleg Bondarev:

Ich habe Sie gewarnt, dass ich ein "Hacker" bin)

Ich habe es folgendermaßen gemacht.

Jetzt wird ein Tick-Chart gezeichnet, aber es gibt einige Zeilenumbrüche.

Ich mache es in 4.

Unterbrochene Linien bedeuten, dass keine Werte in Label1Buffer[ХХХХ] vorhanden sind.

und die zweite, schrieb ich oben, ein weiteres Mal - der Indikator Puffer (Label1Buffer) wird durch das Terminal gesteuert, wenn Sie einen neuen Bar sehen, werden die Werte alle automatisch verschieben - führen Sie den Code auf M1 und beobachten

ZS: kein Hacker, sondern jemand, der versucht, auf eigene Faust zu lernen! ))))

 
Igor Makanu:

gestrichelte Linien bedeuten, dass sich keine Werte im Label1Buffer[XXX] befinden.

und die zweite, ich schrieb oben, ein weiteres Mal - der Indikator Puffer (Label1Buffer) wird durch das Terminal gesteuert, wenn ein neuer Bar erscheint, dann werden die Werte alle automatisch verschieben - führen Sie den Code auf M1 und beobachten

ZS: kein Hacker, sondern jemand, der versucht, auf eigene Faust zu lernen! ))))

Label1Buffer[XXX] - bedeutet das 3 zusammengesetzte Zahlen?


 
Oleg Bondarev:

Label1Buffer[XXX] - ist dies eine 3-Komponenten-Nummer?


Nein, ich habe die ersten Buchstaben geschrieben, an die ich mich erinnern konnte.

das ist die Nummer des Artikels.

Schauen Sie sich Ihren Code an, Sie haben Ihren Code ähnlich wie meine Schleife geschrieben, in der Sie den Indikatorpuffer Label1Buffer um ein Element verschieben - beachten Sie jeden Indikatoraufruf (jeden Tick)

und nachdem Sie den Inhalt des Label1Buffers verschoben haben, weisen Sie denneuen Wert Label1Buffer[0] zu

und welche Werte werden in den anderen Elementen stehen? beim ersten Start werden sie einen "leeren Wert" (EMPTY_VALUE) haben, dann verschiebt man sie einmal und weist.... einen neuen Wert zu und dann wird das Terminal selbst ALLE Wertevon Label1Buffer verschieben, wenn ein neuer Balken erscheint


Im Allgemeinen gibt es eine leichte Verschiebung in Ihrem Wissen, aber versuchen Sie einfach, den Schlusskurs des Balkens mit dem Indikator zu zeichnen, hier ist der Code

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot line1
#property indicator_label1  "line1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int      Input1=10;
//--- indicator buffers
double         line1Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,line1Buffer);
   IndicatorDigits(Digits);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
  int i,limit;
//--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории
   if(prev_calculated==0){
      limit=rates_total-1;
   }else
      limit=rates_total-prev_calculated+1; // или limit=rates_total-prev_calculated ; чтобы не перерисовывать бар №1
//--- Основной цикл расчета
//Print("limit = ",limit);
   for(i=limit; i>=0; i--){
      line1Buffer[i]=close[i];
    }
//---
  return(rates_total);

  }
//+------------------------------------------------------------------+
 
Ich verstehe Sie. Ich werde darüber nachdenken müssen. Ich danke Ihnen!
 

Wie erfasst man Daten in Excel? - MQL5.

Das Excel-Dateiformat ist xlsx, aber die Funktion FileOpen erstellt und bearbeitet auch txt- und csv-Dateien.


Nach dem Testen in OnTester muss ich die Daten aus den Puffern entladen, die die Geschichte der verschiedenen Daten zum Zeitpunkt der Öffnung jedes Ticks enthalten, und die Daten aller Geschäfte in einem Diagramm ausgeben
Wie Sie verstehen, werden die Daten selbst für einen Handel sehr umfangreich sein, ganz zu schweigen von allen - daher ist die Option der "manuellen Übertragung" nicht geeignet


Was empfehlen Sie?

 
Alexandr Sokolov:

Wie importiere ich Daten in Excel? - MQL5.

Das Excel-Dateiformat ist xlsx und die Funktion FileOpen erstellt und bearbeitet txt- und csv-Dateien.


Ich brauche nach dem Testen in OnTester, um die Daten aus Puffern zu entladen, die Geschichte der verschiedenen Daten im Moment enthalten, wenn Position auf jedem Tick geöffnet wurde, und dann alle Handelsdaten auf einem Diagramm anzeigen
Wie Sie verstehen, werden die Daten selbst für einen Handel sehr umfangreich sein, ganz zu schweigen von allen - daher ist die Option der "manuellen Übertragung" nicht geeignet


Was empfehlen Sie?

Nun, das Fazit ist einfach - Sie können mit MQL5 nicht direkt in Excel schreiben, aber Sie können Daten aus einer Textdatei in Excel unter "Daten" >>> Registerkarte "aus Text" importieren.

 
Hallo, ich erhalte eine Fehlermeldung über erfolglose Objekte nach Abschluss eines Explorer-Tests, und ich habe absolut alle Objekte, soweit ich verstehe, im Stapel erstellt, d.h. ohne new. Bitte erläutern Sie dieses Problem.
 
Alexandr Sokolov:

Was empfehlen Sie?

In .csv schreiben und in Excel öffnen

Grund der Beschwerde: