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

 
gyfto:

Wie kann ich diesen Ausdruck vereinfachen?

ist vom ADX-Algorithmus von MetaQuotes. MetaQuotes selbst verwenden diesen Ausdruck:

- wie kann man es vereinfachen?


Warum passt Ihnen die einfachste Option nicht?

z=0;
if(y>x && y>0) z=y;
 
Roger:


Warum ist die einfachste Option für Sie nicht gut genug?


Ich denke, manchmal muss man ein Problem aus einem anderen Blickwinkel betrachten. Gut, danke.
 
gyfto:

hoz, unter habe ich mich gefragt, wie man das Wenn noch weiter verkürzen kann.Siehe: Wenn wir eine Variable

ist cnt=cnt+step, wobei

Aber 1=cnt/cnt, a -cnt=cnt/(-1), der einzige Unterschied ist der Nenner. Erinnern wir uns nun daran, dass x^0=1, x^1=x ist, d.h. wir können unsere boolesche Variable _if in den Exponenten setzen, d.h.step=cnt/a*(cnt^_if); wobei

Aber ±a ist angeblich 2*_if-1, d. h.

Oder wir vereinfachen


Wow, Sie haben die Dinge vereinfacht. Ich verstehe Ihre Logik nicht.
 
Ich dachte, wir gehen runter, wenn... :-)))
 
zoritch:
Ich dachte, wir gehen runter, wenn... :-)))

Ich habe auch verstanden, dass ich nichts verstanden habe. Nicht einmal diese Ikonen des Unverständlichen... :)
 
hoz:

Balken mit einem Vorzeichen steigen an, d.h. sie sind bullisch.

int LastCandlesType(int trend)
{
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)     // Если бар соответствует требуемым признакам..
          cnt++;                                                                     // .. прибавим 1 к счётчику

      if (Close[i] < Open[i])                                                        // Если бар, не соответствует основному признаку..
          cnt = 0;                                                                   // .. счётчик обнуляем
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

Wie kann man erreichen, dass bei der Übergabe eines Trendparameters an diese Funktion, die für die Übergabe des vermeintlichen Haupttrends im Moment verantwortlich ist, die Berechnung auf diesem Parameter basiert?

D.h. wenn Trend == abwärts, war die Funktion in der Schleife wie jetzt, und wennTrend == aufwärts, wurden Open[i] und Close[i] in der Schleife vertauscht, so dass die Bedingungen eingehalten wurden. In diesem Fall ist der Schlusskurs des Balkens niedriger als der Eröffnungskurs und die Differenz wird als Minus ausgewiesen.

int LastCandlesType(bool trend)//trend равен 1 (бычий) или 0 (медвежий)
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if ((2*trend-1)*(Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)     // Если бар соответствует требуемым признакам..
          cnt++;                                                                     // .. прибавим 1 к счётчику

      if ((2*trend-1)*(Close[i] - Open[i]) < i_sizeOfSequentialCorrectionBar * pt)    // Если бар, не соответствует основному признаку..
          cnt = 0;                                                                   // .. счётчик обнуляем
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

Oder um es noch weiter zu vereinfachen

int LastCandlesType(bool trend)//trend равен 1 (бычий) или 0 (медвежий)
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      bool _if=((2*trend-1)*(Close[i] - Open[i])>=i_sizeOfSequentialCorrectionBar * pt); cnt=cnt+cnt/((2*_if-1)*MathPow(cnt, _if));
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

Δ ist die Differenz, d. h.Close[i] - Open[i], ^ ist das Potenzzeichen. const - Konstante in diesem Ausdruck, d.h.i_sizeOfSequentialCorrectionBar * pt, mathematische Standardschreibweise, ich habe nichts erfunden. 2*bVar-1 ist ähnlich wie±1, bVar ist hier eine beliebige bool-Variable. Und der Ausdruck 2*bVar-1 nimmt nicht die Werte 0 und 1 an, sondern -1 und +1.≥ ist MQL4 >=, ebenfalls eine mathematische Standardschreibweise.step ist ein Schritt, d. h. bei cnt++ ist step 1, und bei cnt=0 ist step -cnt. Was war sonst noch unklar in den Schreibweisen?

 
Ich weiß nicht, wie man Protokolle erstellt. Wie kann ich MT4 dazu bringen, freie Protokolle automatisch zu löschen (oder sie überhaupt nicht zu erstellen)? Ein paar Maklerunternehmen mit 5 Ziffern, diese Protokolle für den Tag wachsen zu erschreckenden Größe (1,6 gb), und der Platz auf dem vps ist begrenzt. Vielen Dank im Voraus.
 
M2012K:
Was kann ich vorschlagen - wie kann ich MT4 dazu bringen, freie Logs automatisch zu löschen (oder sie überhaupt nicht zu erstellen)? Ich muss einige Maklerfirmen mit 5 Ziffern verwenden, diese Protokolle beginnen an einem Tag zu wachsen (um 1,6 gb), und der Platz auf vps ist begrenzt. Vielen Dank im Voraus.

Sie können es selbst tun:

Bibliothek1, Bibliothek2.

==============

Allerdings wird die letzte (aktuelle) Datei vom Terminal geöffnet. Es ist nicht einfach, sie zu löschen. Sie können aber den Inhalt löschen, der am Anfang geschrieben wird.

Die Erstellung von Protokollen ist nicht deaktiviert.

==============

1. Erstellen Sie einen Symlink (library1) zum Ordner logs im Ordner files.

2. Löschen Sie alle unnötigen Dateien mit den MQL4-Tools.

Öffnen Sie die aktuelle Datei mit MQL4. Bearbeiten Sie sie nach Bedarf.

4. Schließen Sie die Datei.

5. Sie können den Link löschen. Das müssen Sie nicht. Das wird sich später als nützlich erweisen.

==============

Sie können auch eine Skriptdatei (BAT) erstellen und sie im Expert Advisor ausführen. Das Skript ist das gleiche wie oben. Nur ohne einen Link zu erstellen. Arbeiten mit Dateien, natürlich mit Windows-Tools.

 
M2012K:

Was kann ich tun, um freie Protokolle automatisch zu löschen (oder sie gar nicht erst zu erstellen)?

Denn bei einigen DCs mit 5 Stellen wachsen diese Protokolle für einen Tag auf eine erschreckende Größe an (um 1,6 gb), und der Platz auf dem VPS ist begrenzt. Vielen Dank im Voraus.

Was protokolliert?

Was ist der Fehler?

 

Hallo! Ich brauche Hilfe bei der Verfeinerung meines primitiven Roboters. Zu Beginn werde ich meine einfache Strategie erläutern, um zu verdeutlichen, wo und zu welchem Zweck Hilfe benötigt wird.

Die Essenz von TS:

1. Wenn der Eröffnungskurs unter dem MA liegt und der Schlusskurs höher ist, kaufen wir.

2. Wenn der Eröffnungskurs über dem MA liegt und der Schlusskurs darunter, sollten wir verkaufen.

Wenn sich der Kurs um X% vom günstigsten Kurs entfernt hat, schließen wir den Auftrag. Dies ist ähnlich wie ein Trailing-Stop, aber anstelle von Pips X% des Eröffnungsabstands der Order und des besten Preises. Wie auf dem Bild zu sehen ist:

AB - Abstand von der Ordereröffnung bis zum günstigsten Preis; BC=X% von AB; C - Orderabschluss.

Die Punkte 1 und 2 habe ich in das Programm geschrieben:

extern int period=50;
extern int ma_shift=0;
extern int Magic=666;
extern double lot=0.1;
extern int SL=150;


//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int kolpos=0;
  double ma=iMA (NULL,0,period,ma_shift,MODE_SMMA,PRICE_MEDIAN,0);
//----
   for (int pos=0; pos<OrdersTotal(); pos++)
   {
   OrderSelect (pos, SELECT_BY_POS, MODE_TRADES);
   if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
   kolpos++;
   }
   if (kolpos==0)
   {
 
   if(Open[1]>ma && Close[1]<ma)  
   OrderSend(Symbol(),OP_SELL,lot,Bid,10,Bid+SL*Point,0,NULL,Magic,0,Red);
   if(Open[1]<ma && Close[1]>ma)  
   OrderSend(Symbol(),OP_BUY,lot,Ask,10,Ask-SL*Point,0,NULL,Magic,0,Green);
   
   }
   
   
  
//----
   return(0);
  }

Generell benötige ich Hilfe beim Schreiben einer Funktion zum Schließen von Aufträgen für meinen TS (Punkt 3) und beim Anpassen von bestehendem Code an die Funktion.

P.S. Und ich weiß, dass der TS nicht gut ist.