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

 

Welche Art von Konstanten: MA_TALKING_LONG , MA_TALKING_SHORT ?

Wie melden Sie sie an?

 
Vinin:

Berücksichtigung der Sichtbarkeit von Variablen und Arrays


Ich habe sie auf global gesetzt... Derselbe Fehler.

FAQ:

Welche Art von Konstanten: MA_TALKING_LONG , MA_TALKING_SHORT ?

Wie melden Sie sie an?

#define MA_TALKING_LONG                         0                             // Машки расположены к покупке
#define MA_TALKING_SHORT                        1                             // Машки расположены к продаже
#define MA_TALKING_FLAT                        -1                             // Машки указывают на флет
 

zeigen Sie die Kopfzeile (Deklaration) dieser Funktion GetStateMa() - das Problem ist dort

ändern in GetStateMa(int signal){} sollte das Problem beheben

 
FAQ:

zeigen Sie die Kopfzeile (Deklaration) dieser Funktion GetStateMa() - das Problem ist dort

Ändern Sie es in GetStateMa(int signal){} sollte das Problem beheben

Wie auch immer, hier ist das Wesentliche. Ein Profi hier hat meinen Expert Advisor korrigiert, es hat gut funktioniert. Meine Aufgabe war es, 4 verschiedene Signale mit nur einem Auftrag zu öffnen und die Berechnungen der einzelnen Signale zu trennen. Er hat meinen Expert Advisor repariert, aber seine Logik durcheinander gebracht.

Ich begann, seinen Code zu analysieren. Sein Schreiben ist brutal, ich habe es mir schon den zweiten Tag angesehen.

Früher war es so:

am Anfang:

   int signal[4];
   CalcSignals(signal);

   if (!Trade(signal))
      return (0);

Und hier sind die Funktionen, um zu verdeutlichen, was was ist:

//+-------------------------------------------------------------------------------------+
//| Получение значений МА на двух соседних барах                                        |
//+-------------------------------------------------------------------------------------+
double GetCurAndPrevMA(int maPeriod, double& prevMA)
{
   prevMA = iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 1);
   return (iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 0));
}
//+-------------------------------------------------------------------------------------+
//| Получение положения машек между собой                                               |
//+-------------------------------------------------------------------------------------+
void CalcSignals(int& signal[])
{
   double ema365_1;
   double ema365_0 = GetCurAndPrevMA(365, ema365_1);

   for (int i = 0; i < 4; i++)
   {
      double ema1;
      double ema0 = GetCurAndPrevMA(g_maPeriod[i], ema1);
      signal[i] = SIGNAL_NO;

      if (ema1 < ema365_1 && ema0 > ema365_0)
         signal[i] = SIGNAL_BUY;
      if (ema1 > ema365_1 && ema0 < ema365_0)
         signal[i] = SIGNAL_SELL;
   }
}

Im Allgemeinen ist es komisch zu sehen, dass eine Funktion als void per Definition nichts zurückgeben sollte, aber dennoch gibt sie den Wert eines Elements des Arrays signal[i] zurück.

Ich frage mich, ob erfahrene Programmierer dies oft verwenden? Oder ist es zu viel?

Jetzt versuche ich zu schreiben, was ich brauche, wenn ich die Tricks sehe, die in diesem Expert Advisor vorhanden sind. Denn wir können dort nicht auf Arrays verzichten.

 
Тhoz:

Wie auch immer, hier ist das Wesentliche. Mein Expert Advisor, der bei mir gut funktioniert hat, wurde von einem Profi korrigiert. Meine Aufgabe war es, nur 1 Auftrag mit 4 verschiedenen Signalen zu eröffnen, und jedes Signal wurde separat generiert und berechnet. Er hat meinen Expert Advisor repariert, aber seine Logik durcheinander gebracht.

Ich begann, seinen Code zu analysieren. Sein Schreiben ist brutal, ich habe es mir schon den zweiten Tag angesehen.

Früher war es so:

am Anfang:

Und hier sind die Funktionen, um zu verdeutlichen, was was ist:

Im Allgemeinen ist es komisch zu sehen, dass eine Funktion als void per Definition nichts zurückgeben sollte, aber dennoch gibt sie den Wert eines Elements des Arrays signal[i] zurück.

Ich frage mich, ob erfahrene Programmierer dies oft verwenden? Oder ist es zu viel?

Jetzt versuche ich zu schreiben, was ich brauche, wenn ich die Tricks sehe, die in diesem Expert Advisor vorhanden sind. Denn ohne Arrays geht es dort nicht.

Häufig verwendet, geheim in int& , double&
 
Mislaid:
Es wird oft verwendet, das Geheimnis inint& ,double&

Das habe ich bereits herausgefunden, aber ich denke, es ist bereits eine Perversion. Warum dann eine ungültige Funktion erstellen? Das ist nicht logisch. Sie müssen etwas zurückgeben... geben Sie es durch eine Funktion vom Typ int, double... zurück.

 
Beim Debuggen des Druckers ist ein Fehler aufgetreten:
2013.01.06 21:06:32     2011.11.28 00:20  Base150 EURUSD,M5: not enough stack for parameter

Was ist zu tun?

 
hoz:

Das habe ich bereits herausgefunden, aber ich denke, es ist bereits eine Perversion. Warum dann eine ungültige Funktion erstellen? Das ist nicht logisch.

Das ist logisch.

Diese Funktion gibt nichts zurück, sondern führt Operationen mit den Elementen des übergebenen Arrays durch.

 
hoz:

Hier ist meine Funktion zum Ändern ausstehender Aufträge. Beim Ändern setze ich einen neuen Preis und einen neuen Stoploss. Die Funktion funktioniert teilweise, aber aus irgendeinem Grund erhält der Prüfer Fehler 1.

Ist meine Funktion richtig geschrieben?

if((b_mod) && (PreisB > Ask)) OrderModify(b_ticket,priceB,priceS,0,0,Brown);
if((s_mod) && (priceS < Bid)) OrderModify(s_ticket,priceS,priceB,0,0,Brown);


Hier sollten wir MarketInfo(Symbol(),MODE_STOPLEVEL) berücksichtigen, d.h.

priceB >= Ask+ MarketInfo(Symbol(),MODE_STOPLEVEL)*Point

priceS < =Bid- MarketInfo(Symbol(),MODE_STOPLEVEL)*Point

 
PapaYozh:

Das macht Sinn.

Diese Funktion gibt nichts zurück, sondern arbeitet mit den Elementen des übergebenen Arrays.


Wenn Sie also Elemente an eine Funktion vom Typ double oderint übergeben, kann diese die gleichen Operationen durchführen, allerdings ohne jegliche Perversionen. Warum sollte man sein Leben verkomplizieren?
Grund der Beschwerde: