Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 533

 
      // AO
      if(ao) {
         CopyTime(symbol_name[st],ao_time_frame,1,1,time_buf);
         if(symbol_ao_timebar[st]!=time_buf[0]) {
            symbol_ao_timebar[st]=time_buf[0];
            double ao_buf[];
            CopyBuffer(symbol_ao_handle[st],0,enter_bar,2,ao_buf);
            if(ao_buf[1]>ao_buf[0]&&ao_buf[0]<0) symbol_ao_signal[st]=0;
            if(ao_buf[1]<ao_buf[0]&&ao_buf[0]>0) symbol_ao_signal[st]=1;
            }
         }else symbol_ao_signal[st]=2;
      
      // AC
      if(ac) {
         CopyTime(symbol_name[st],ac_time_frame,1,1,time_buf);
         if(symbol_ac_timebar[st]!=time_buf[0]) {
            symbol_ac_timebar[st]=time_buf[0];
            double ac_buf[];
            CopyBuffer(symbol_ac_handle[st],0,enter_bar,2,ac_buf);
            if(ac_buf[1]>ac_buf[0]&&ac_buf[0]<0) symbol_ac_signal[st]=0;
            if(ac_buf[1]<ac_buf[0]&&ac_buf[0]>0) symbol_ac_signal[st]=1;
            }      
         }else symbol_ac_signal[st]=2;
Hallo zusammen. Ich habe eine Frage. Es gibt einen Teil des Codes Dort steht. Ich meine, es sollte "kaufen" oder "verkaufen" heißen, aber nur, wenn AO und AC auf der gleichen Ebene liegen. Unter Null kaufen und über Null verkaufen.
Ist das so? Gurus, bitte helft mir.
Die Frage lautet im Grunde genommen wie folgt. Ist das ein normaler Code oder ein Blödsinn?
 
MASTERXAYS:
Hallo zusammen. Ich habe eine Frage. Es gibt einen Teil des Codes Dort steht. Ich meine, es sollte "kaufen" oder "verkaufen" heißen, aber nur, wenn AO und AC auf der gleichen Ebene liegen. Unter Null kaufen und über Null verkaufen.
Ist das so? Bitte, helfen Sie den Gurus.
Die Frage ist die folgende. Ist das ein normaler Code oder ein Blödsinn?

Ich würde das ganze Konzept als "Schwachsinn" bezeichnen .

Haben Sie schon einmal gesehen, dass der Preis einem Indikator folgt? Beachten Sie auch, dass dies die Indikatoren von B. Williams sind, und er, wie Sie wissen, nicht auf dem Forex-Markt gehandelt hat, und die Idee selbst ist veraltet.

 
-Aleks-:
Und wie, entschuldigen Sie, führen Sie diesen Nullabgleich durch?
Genau dasselbe wie bei der Nullsetzung einfacher Typen. Sobald Sie den erforderlichen Feldern den Wert 0 zugewiesen haben, verwenden Sie die umgekehrte Operation StructToTime().
 
MASTERXAYS:
Hallo zusammen. Ich habe eine Frage. Es gibt einen Teil des Codes Dort steht. Ich meine, es sollte "kaufen" oder "verkaufen" heißen, aber nur, wenn AO und AC auf der gleichen Ebene liegen. Unter Null kaufen und über Null verkaufen.
Ist das so? Bitte helfen Sie den Gurus.
Die Frage lautet im Wesentlichen wie folgt. Ist das ein normaler Code oder ein Blödsinn in grünem Öl?

Lesen Sie meinen Artikel, in dem die Signalbauvorschriften beschrieben sind. Aber ich persönlich schreibe Signalfunktionen auf diese Weise.

ENUM_ORDER_TYPE GetSignal(int i,ENUM_TIMEFRAMES tf)
  {
   double bbup[1];
   double bbdw[1];
   double rsi[1];
   double macd[2];
   double stoh[2];
   double Close[2];

   if(IND01[i]==INVALID_HANDLE || IND01[i]==0){IND01[i]=iBands(m_symbol,tf,BB_period,0,2,PRICE_CLOSE);return(WRONG_VALUE);}
   if(IND02[i]==INVALID_HANDLE || IND02[i]==0){IND02[i]=iRSI(m_symbol,tf,RSI_period,PRICE_CLOSE);return(WRONG_VALUE);}
   if(IND03[i]==INVALID_HANDLE || IND03[i]==0){IND03[i]=iMACD(m_symbol,tf,MACD_fast_ema_period,MACD_slow_ema_period,9,PRICE_CLOSE);return(WRONG_VALUE);}
   if(IND04[i]==INVALID_HANDLE || IND04[i]==0){IND04[i]=iStochastic(m_symbol,tf,ST_Kperiod,ST_Dperiod,ST_slowing,MODE_SMA,STO_LOWHIGH);return(WRONG_VALUE);}

   if(CopyBuffer(IND01[i],1,0,1,bbup)<1) return(WRONG_VALUE);
   if(CopyBuffer(IND01[i],2,0,1,bbdw)<1) return(WRONG_VALUE);
   if(CopyBuffer(IND02[i],0,0,1,rsi)<1) return(WRONG_VALUE);
   if(CopyBuffer(IND03[i],0,0,2,macd)<2) return(WRONG_VALUE);
   if(CopyBuffer(IND04[i],0,0,2,stoh)<2) return(WRONG_VALUE);
   if(CopyClose(m_symbol,tf,0,2,Close)<2) return(WRONG_VALUE);

   if(Close[0]<bbdw[0]&& Close[1]>bbdw[0]&&  stoh[1]>stoh[0]&&  stoh[0]<20  &&  rsi[0]<30  &&  macd[1]<macd[0]) return(ORDER_TYPE_BUY);
   if(Close[0]>bbup[0]&& Close[1]<bbup[0]&&  stoh[1]<stoh[0]&&  stoh[0]>80  &&  rsi[0]>70  &&  macd[1]>macd[0]) return(ORDER_TYPE_SELL);

   return(WRONG_VALUE);
  }
 
Aleksey Lebedev:

Es wird 1 sein, beide Zeiten werden zuerst auf einen ganzen Tag gerundet und dann subtrahiert.

Wie kommst du darauf, dass alle Zahlen in dem Ausdruck gerundet sind? Sie ist nicht abgerundet. Ich stimme zu, dass eine Variable gerundet werden muss.

Und wenn sie gerundet wären, ich habe ein Beispiel gezeigt - der aktuelle Balken von heute und der berechnete von gestern - 1-Stunden-TF - wäre ihre Differenz in allen Rundungen gleich Null ... Vielleicht, wenn wir immer aufrunden...

Alexey Kozitsyn:
Genau wie bei der Nullstellung von einfachen Typen. Sobald Sie den erforderlichen Feldern den Wert 0 zugewiesen haben, verwenden Sie die umgekehrte Operation StructToTime().

Danke - ich werde es noch einmal versuchen - die Beispiele in der Hilfe sind nicht gut...

 
-Aleks-:

Wie kommst du darauf, dass alle Zahlen in dem Ausdruck gerundet sind? Es wird nicht gerundet. Aber die Variable ist gerundet - da stimme ich zu.

Und wenn gerundet, ich zeigte ein Beispiel - aktuelle Bar von heute und geschätzte Bar von gestern - 1 Stunde TF - ihre Differenz wäre gleich Null in allen Rundungen ... Vielleicht, wenn wir immer aufrunden...

Bei der Division von Ganzzahlen (int, long, datetime usw.) ist das Ergebnis eine Ganzzahl, d. h. der Rest wird verworfen. 00:00 heute und 23:59:59 gestern, beträgt die Differenz 1 Tag.

 

Können Sie mir bitte sagen, MQL4...
Ich kann nicht herausfinden, Indikator arbeitet auf M5, wie man auf High oder Low der vorherigen Bar auf H1 in seinem Code beziehen?
Like iHigh(NULL,PERIOD_H1, i) ... Es geht darum, festzustellen (einen Aufwärts-/Abwärtspfeil auf dem M5-Chart zu setzen), ob die aktuelle M5-Kerze den Höchstkurs der vorangegangenen Stunde durchbrochen hat.


 
Ersetzen Sie im Code des MQL4-Indikators die Zeile
for(i=pos; i<rates_total; i++) 
mit
for(i=pos; i<rates_total-1; i++) 
führt dazu, dass der Indikator beim aktuellen (nicht beendeten) Takt nicht berücksichtigt wird - es gibt einfach keine Indikatorlinie unter diesem Takt.
In MQL5 hat der aktuelle Balken einige seltsame Indikatorwerte, manchmal nur 0,0000.
Was kann ich dagegen tun?
 
MikeZv:

Bitte geben Sie mir einen Hinweis, MQL4...
Ich kann nicht herausfinden, der Indikator funktioniert auf M5, wie man auf High oder Low des vorherigen Bar auf H1 beziehen?
Like iHigh(NULL,PERIOD_H1, i) ... Es geht darum, festzustellen (einen Aufwärts-/Abwärtspfeil auf dem M5-Chart zu setzen), ob die aktuelle M5-Kerze den Höchstkurs der vorangegangenen Stunde durchbrochen hat.


MikeZv:
Ersetzen Sie im Code des MQL4-Indikators die Zeile
mit
führt dazu, dass der Indikator nicht auf dem aktuellen (nicht abgeschlossenen) Balken berechnet wird - es gibt einfach keine Indikatorlinie unter diesem Balken.
In MQL5 hat der aktuelle Balken einige seltsame Indikatorwerte, manchmal nur 0,0000.
Was kann ich dagegen tun?

Es spielt keine Rolle, wie Sie die Indikatorpuffer dort drehen - hier kann nur Juna helfen.

Hinzugefügt:

Für die Zeit der Fehlersuche zu überprüfen - welcher Wert in time[i] Array ist - so dass Sie verstehen, von welchem Ende Sie beginnen, Bars zu zählen und wo Sie "Null" bar haben.

 
Karputov Vladimir

Ein wenig hast du die Indikatorpuffer dort verdreht - hier kann nur Juna helfen.
... An welchem Ende beginnen Sie die Taktzählung und wo haben Sie den "Null"-Balken.

Vladimir, danke für die Beantwortung der ersten Frage, ich habe diese Funktionen vermisst...

Ich habe den gleichen Indikator in MT4 und MT5 eingesetzt (natürlich ist der Code für jede Plattform angepasst).
Bis zur Nulllinie sind ihre Werte gleich, also offenbar von einem Ende ... :)
Und beim Deaktivieren der Berechnung auf dem aktuellen Balken in MT4 wird nichts unter dem aktuellen Balken gezeichnet, in MT5 - falsche Werte.

Dateien:
mvt_Vlt.mq4  5 kb
mvt_Vlt.mq5  5 kb