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

 
Roll:

ICH DANKE IHNEN VIELMALS!

Ihre Version des Indikators funktioniert!

Ich habe versucht, sie mit dem MQL4-Tutorial und den Beispielen von Indikatoren zu lösen, aber nichts hat funktioniert.

Wenn Sie den Wunsch, die Zeit und die Neigung haben, mir zu helfen, herauszufinden, warum:

1. Bei der Installation des Indikators Zeile erhält einen Wert von 0 (Null) und nur mit der Ankunft des ersten Tick nimmt den Wert der Variablen oben, oder sollte das Parameter-Fenster öffnen und sofort schließen;

2. Der Parameter top wird bis zum 4. Zeichen berechnet, obwohl es in init() folgende Zeile gibt

IndikatorZiffern(Ziffern+1);

und die Linie

top=WindowPriceMax(win_idx);

Ich ersetzte sie durch

top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1);

Das hilft nicht! Die numerischen Werte der Skala des Anzeigefensters sind 5-stellig.

3. Durch das Entfernen des Indikators wird der Kommentar nicht aus dem Diagramm entfernt.



Code

--------

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],
ExtMapBuffer2[];
//--------------------------------
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min_v2");

IndicatorDigits(Digits+1);

return(0);
}
//--------------------------------
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),limit,win_idx;
double top;

if(counted_bars>0)counted_bars--;
limit=Bars-counted_bars;
win_idx=WindowFind("MACD_max-min_v2");

for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
}

// top=WindowPriceMax(win_idx);
top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1);
Comment( "\n"," top = ",top);
ObjectDelete("max");

if(ObjectFind("max")!=win_idx)
{
ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
}

return(0);
}
//+------------------------------------------------------------------+


Dateien:
 
MK07:

Technische Korrektur: Verwenden Sie die SRC-Schaltfläche im oberen Bereich, um Code einzufügen, wie es Ihre Berater tun. Es wird viel leichter zu lesen sein.

P.S.
um die Kommentarzeile zu löschen, fügen Sie Comment(") in deinit() ein;
 
granit77:
Technische Korrektur: Verwenden Sie die SRC-Schaltfläche im oberen Bereich, um Code einzufügen, wie es Ihre Berater tun. Es wird viel leichter zu lesen sein.

P.S.
Um die Kommentarzeile zu löschen, fügen Sie Comment(") in deinit() ein;
Vielen Dank für die Informationen, ich bin zum ersten Mal im Forum und möchte mich besonders für das Code-Snippet bedanken.
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],ExtMapBuffer2[];
int init(){SetIndexStyle(0,DRAW_LINE);SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min");return(0);}
int deinit(){Comment("");return(0);}
//+------------------------------------------------------------------+
int start(){int counted_bars=IndicatorCounted(),limit,win_idx;double top;
if(counted_bars>0)counted_bars--;limit=Bars-counted_bars;win_idx=WindowFind("MACD_max-min");
for(int i=0;i<limit;i++){ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
  ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);}
  top=WindowPriceMax(win_idx);ObjectDelete("max");
  if(ObjectFind("max")!=win_idx){ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
  ObjectSet("max",OBJPROP_COLOR,Yellow);ObjectSet("max",OBJPROP_WIDTH,0);}
  Comment( "\n"," top = ",DoubleToStr(top,5));return(0);}
//+------------------------------------------------------------------+
 
https://docs.mql4.com/ru/common/Comment
void Kommentar(. ...)
Die Funktion druckt einen benutzerdefinierten Kommentar in die obere linke Ecke des Diagramms. Die Parameter können von beliebigem Typ sein. Die Anzahl der Parameter darf 64 nicht überschreiten.
Arrays können nicht an Comment() übergeben werden. Arrays müssen Element für Element gedruckt werden.
Daten vom Typ double werden mit 4 Dezimalstellen nach dem Punkt gedruckt. Um Zahlen mit höherer Genauigkeit auszugeben, verwenden Sie DoubleToStr().
Die Typen bool, datetime und color werden als Zahlen gedruckt.
Um Datumsdaten als String auszugeben, verwenden Sie die Funktion TimeToStr().

Um die Ausgabe in mehrere Zeilen aufzuteilen, können Sie das Zeilenvorschubzeichen "\n" oder "\r\n" verwenden.
Siehe auch Alert() und Print().
 
Können Sie mir sagen, wie man schreibt:
Preis hat die horizontale Linie nach oben überschritten....
Und wie sollte diese Linie beschrieben werden?
 
Roll:
Vielen Dank für die Wissenschaft.
 

Hallo,

Hier ist das Problem, das ich habe.

Arbeiten an PERIOD_H1.

Am Ende der Stunde mache ich Folgendes:

   for(j = OrdersTotal()-1; j >= 0; j--){ 
       if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
          if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber){
            OpenTime= OrderOpenTime();          
          if(OrderType() == OP_BUY){
            if(TimeCurrent()>Time[0]+3580){ 
             OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),0,Red);}
             }
           else 
          if(OrderType() == OP_SELL){
            if(TimeCurrent()>Time[0]+3580){
             OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),0,Blue);}
             }
           }
         }
Um eine Position zu Beginn der vollen Stunde zu eröffnen, gehe ich wie folgt vor
   if(TimeCurrent()<Time[0]+3500 && HaveBuy==false && HaveSell==false)
     if(Ask <= EnBuy && IsFreeLevel==true){
          ticket = OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),0,0,forecast-5*MyPoint,"",MagicNumber,0,Blue);
         }
     if(Bid >= EnSel && IsFreeLevel==true){
          ticket = OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),0,0,forecast+5*MyPoint,"",MagicNumber,0,Red);
         }

Für den Test sieht das so aus

Ich kann nicht herausfinden, was ich falsch mache.

Es funktioniert nicht immer so, aber es gibt solche Momente.

Danke an alle, die antworten werden :).

 
alsu:
Das sage ich nicht, ich sage nur, welchen Unterschied es macht, wo der EA angebracht ist. Wenn es richtig geschrieben ist, spielt es keine Rolle, wo es platziert wird - platzieren Sie es einfach auf einem Chart der mongolischen Börse, aber wenn es so eingestellt ist, dass es auf EURUSD 1 Minute funktioniert, wird es das tun. Und es ist nicht schwer, es zu programmieren, es müssen nur ein paar Zeilen geändert werden.

Vielen Dank für die Klarstellung!

Ich mache mir nur Sorgen darüber, dass das Prüfgerät Ein-Minuten-Balken simuliert, um Änderungen zu Beginn jedes Ein-Minuten-Balkens vorzunehmen.

Ich werde versuchen, Open[0] in iOpen(NULL,1,0) zu ändern und eine Funktion hinzuzufügen, die die Öffnung des einminütigen Balkens überprüft.

Es vergingen einige Minuten, in denen ich den Code überarbeitete und ihn mit dem Tester bei M5 ausprobierte und mich vergewisserte, dass der Tester in diesem Fall keine 1-Minuten-Balken öffnet, obwohl dies vorgeschrieben ist, und ihn nur alle 5 Minuten ändert, was ich befürchtet hatte. Im Modus "Alle Ticks" ist er etwas besser, weil er sich häufiger ändert. Aber auf M1 nur auf Bar öffnen es funktioniert das gleiche, sowohl mit Open[0] und mit iOpen(NULL,1,0), für die ich immer noch dankbar bin!

Jetzt werde ich immer grünes iOpen verwenden, da ich sehe, dass ich auf rotes Open verzichten kann. Grüner Gewinn ist schöner als roter Verlust. (:))

 
mario065:

Hallo,

Hier ist das Problem, das ich habe.

Arbeiten an PERIOD_H1.

Am Ende der Stunde mache ich Folgendes:

Um eine Position zu Beginn der Stunde zu eröffnen, gehe ich wie folgt vor
Für den Test sieht das so aus

Ich kann nicht herausfinden, was ich falsch mache.

Es funktioniert nicht immer so, aber es gibt solche Momente.

Danke, wer antwortet :)


Ein Freund hat mir einen Tipp gegeben:
Anstelle von TimeCurrent()

TimeSeconds(TimeCurrent())

Und es hat funktioniert.

Grund der Beschwerde: