[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 186

 
Vinin:


if (c % 2==0) //gerade


Ich würde nicht doppelt auf Gleichheit mit irgendetwas achten.
 
Können Sie mir bitte sagen, wie ich eine for-Schleife für bereits abgeschlossene verlustbringende Aufträge ausführen kann? Oder vielleicht hat jemand bereits eine Funktion: Wenn ein Verlustgeschäft geschlossen wird, multiplizieren Sie das Los?
 
tara:

Ich würde nicht doppelt auf Gleichheit mit irgendetwas achten.


Ich dachte, ich hätte vorher geschrieben, dass das nur für ganze Zahlen gilt. Oder lesen Sie es nicht richtig?

Vinin 18.09.2011 03:14 Uhr | löschen
NickXXX:

Frage für ein Rätsel).

Wie kann man programmatisch feststellen, ob eine Zahl gerade oder ungerade ist?

Zum Beispiel:

int a, b, c;

a=2;

b=3;

c=a+b

c ist gerade oder ungerade?



Wenn es sich bei den Zahlen um ganze Zahlen handelt, prüfen Sie, ob die Division durch 2 einen Rest ergibt.

if (c % 2==0) //четное

 

Code-Fehler klären


Avatar
2
Qwuyt 18.09.2011 11:56

Guten Tag!

Bitte, wer nicht faul ist, sich den Code anzusehen und mir mitzuteilen, was meine Fehler sind. Ich habe eine Reihe von Fehlern bei der Kompilierung. Dies ist mein erster EA, ich habe gerade erst angefangen, ihn zu verstehen. Die Idee des Expert Advisors ist folgende: Am Montag zu einem bestimmten Zeitpunkt platzieren wir schwebende Aufträge in beide Richtungen in einem Abstand von X Punkten zum Schlusskurs der Vorwoche. Am Freitag werden wir zu einem bestimmten Zeitpunkt die Marktaufträge schließen und die schwebenden Aufträge löschen. Das ist alles.

//+------------------------------------------------------------------+
//|                                                         Week.mq4 |
//|                                          Copyright © 2011, Qwuyt |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Qwuyt"
#property link      ""

//--- input parameters
extern double    lot=0.01;                                                 //размер лота 
extern int       tp=200;                                                   //тейк профит
extern int       sl=50;                                                    //стоплосс
extern int       move=100;                                                 //движение цены 
extern int       hc=22;                                                    //час закрытия 
extern int       ho=4;                                                     //час закрытия
double BP;                                                                 //цена открытия бай
double SP;                                                                 //цена открытия селл
int Ticket;                                                                
int Tip;                                                                   //тип ордера
int Curday;                                                                //день недели
bool Ans = false;                                                          //ответ сервера после закрытия ордера
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()                               
  {
  int Curday = DayOfWeek                                    
  double BP = iClose(NULL,10080,1)+NormalizeDouble(move*Point,Digits);     //      
  double SP = iClose(NULL,10080,1)-NormalizeDouble(move*Point,Digits);
    if (ho >= Hour && Curday=1)                                            //4 утра понедельника - открытие бай
    {
    OrderSend (Symbol(),OP_BUYSTOP,lot,BP,3,sl,tp,NULL,0,0,Red)
    }
    if (ho >= Hour && Curday=1)                                            //4 утра понедельника - открытие селл
    {
    OrderSend (Symbol(),OP_SELLSTOP,lot,SP,3,sl,tp,NULL,0,0,Red)
    }
    while(true)                                                           //цикл закрытия орд.
     {
      if (Tip==0 && hc >= Hour && Curday=6)                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates();                                                  // Обновление данных
         Ans=OrderClose(Ticket,lot,Bid,3);                                // Закрытие Buy
         return;                                                          // Выход из start()
        }
      if (Tip==1 && hc >= Hour && Curday=6)                               // Открыт ордер Sell, 22 часа пятницы закрыть
        {                                                                 //

         RefreshRates();                                                   // Обновление данных
         Ans=OrderClose(Ticket,lot,Bid,3);
         return;                                                          // Выход из start()
        }
      if (Tip==4||Tip==5 && hc >= Hour && Curday=6)                               // Открыт ордер Buy, 22 часа пятницы закрыть
        {                                                                 //
         RefreshRates();                                                  // Обновление данных
         Ans=OrderDelete(Ticket,CLR_NONE);                                // Закрытие Buy
         return;                                                          // Выход из start()
        }
      break;                                                               // Выход из while
     }
     Tip = OrderType();
return();
  }
Anhängende Dateien:
Woche_1.mq4 (4,52 KB)



929
abolk 18.09.2011 12:00 Uhr korrigieren | löschen

um damit zu beginnen:

1) ; am Ende eines jeden Operators einfügen

2) korrekte Funktionen verwenden, z. B. Hour()

 
Falmera:
Können Sie mir bitte sagen, wie ich eine for-Schleife für bereits abgeschlossene verlustbringende Aufträge ausführen kann? Oder vielleicht hat jemand bereits eine Funktion: Wenn ein Verlustgeschäft geschlossen wird, multiplizieren Sie das Los?

irgendwelche Tipps?
 
Falmera:

einen Tipp vorschlagen!


Zeigen Sie mir Ihre eigenen Versuche, diese Funktion zu implementieren - im Thread "Hilfe für Neulinge".

oder suchen Sie nach "Suche nach der letzten abgeschlossenen Bestellung" oder ähnlichem - das Thema ist schon lange bekannt

 
Falmera:

Nun, geben Sie mir einen Hinweis.

Sehen Sie die Eulen des Avalanche-Zweigs.
 

Ich lerne gerade eine Programmiersprache und habe Schwierigkeiten, das Verhalten des Programms zu verstehen. Ich habe einen EA geschrieben, der auf dem Lehrbuch basiert, aber ich habe ihn auf ein etwas anderes Funktionsprinzip umgestellt.

Der Expert Advisor basiert auf einer Mittelwertbildung über 2 Muwings. Die Idee ist einfach: Die gleitenden Durchschnitte kreuzen sich, der Auftrag wird geschlossen und der entgegengesetzte wird eröffnet. Ich habe einen EA geschrieben und er funktioniert gut. Das ist natürlich ein kleiner Nachteil, aber es entspricht der Idee. Das gesamte Problem lautet wie folgt (fett gedruckt):

A=iMA(NULL,0,Zeitraum_MA_1,0,MODE_SMA, PRICE_CLOSE,1); // A

B=iMA(NULL,0,Zeitraum_MA_2,0,MODE_SMA,PREIS_SCHLUSS,1); // B

C=iMA(NULL,0,Zeitraum_MA_1,0,MODE_SMA,PREIS_SCHLUSS,2); // C

D=iMA(NULL,0,Zeitraum_MA_2,0,MODE_SMA,PREIS_SCHLUSS,2); // D

Wenn ich die Art der Berechnung der gleitenden Durchschnitte ändere (es kann ein Pluszeichen angezeigt werden) und die exponentielle Methode( MODE_SMA) anstelle der einfachen(MODE_EEMA ) und einer weiteren(MODE_SMMA), der so genannten geglätteten Methode, einsetze, geht alles schief. Das Funktionsprinzip wird noch amüsanter (im Strategietester), da der EA eine Order ganz am Anfang des eingestellten Zeitraums öffnet und am Ende schließt. D.h. für ein Jahr wird ein einziger Handel am Anfang des Zeitraums eröffnet und am Ende geschlossen. Im Ergebnis hat mir der Expert Advisor ein Plus gezeigt, aber ich brauche ein solches Plus nicht. Ich kann selbst eine Münze werfen und entweder eine Kauf- oder Verkaufsorder eröffnen und schauen, ob ich in einem Jahr gewinne oder verliere. Übrigens, wenn ich MODE_SMA auf MODE_LWMA (Linear Weighted Moving Average) einstelle, funktioniert das Programm einwandfrei.

Bitte teilen Sie mir mit, was los ist? Das Prinzip ist dasselbe, nur die Art der Berechnung der gleitenden Durchschnitte wurde ein wenig verändert.

Der gesamte Code befindet sich in der angehängten Datei.


Ich habe hier Antworten erhalten, aber sie sind nicht kompetent und nicht sachlich. Angeblich verwende ich 4 gleitende Durchschnitte. Dies ist nicht wahr, es gibt zwei gleitende Durchschnitte, aber für jeden gleitenden Durchschnitt werden Werte für zwei Balken genommen (insgesamt 4 Array-Aufrufe, A, B, C, D): 1 und 2 . Darüber hinaus wurde geschrieben, dass wir die Anzahl der Aufträge insgesamt verringern sollten, wenn ein Auftrag geschlossen wird. Dies ist jedoch nicht notwendig, da die Aufträge mit der Funktion Odertotal gezählt werden, und wenn ich einen Auftrag schließe, ändert die Auftragssumme selbst ihren Wert bei der nächsten Iteration. Es wird auch vorgeschlagen, die so genannten magischen Zahlen zu verwenden, um die Aufträge zu verfolgen, aber ich bin noch nicht zu diesem Teil des Handbuchs gekommen. Ich sollte wiederholen, dass das Programm funktioniert, wenn MODE_SMA und MODE_LWMA verwendet werden, aber nicht, wenn MODE_EMA und MODE_SMMA verwendet werden. Wer weiß warum, schreibe mir bitte eine Antwort.

Dateien:
 
Falmera:

Bitte geben Sie mir einen Hinweis.
gehen Sie zum Thema Lawine, dort gibt es genug Berater mit jeder Menge Zuwachs... Suchen Sie im Forum oben rechts oder bei Google.
 
neisseria:

Ich lerne gerade eine Programmiersprache und habe Schwierigkeiten, das Verhalten des Programms zu verstehen. Ich habe einen EA geschrieben, der auf dem Lehrbuch basiert, aber ich habe ihn auf ein etwas anderes Funktionsprinzip umgestellt.

Der Expert Advisor basiert auf einer Mittelwertbildung über 2 Muwings. Die Idee ist einfach: Die gleitenden Durchschnitte kreuzen sich, der Auftrag wird geschlossen und der entgegengesetzte wird eröffnet. Ich habe einen EA geschrieben und er funktioniert gut. Das ist natürlich ein kleiner Nachteil, aber es entspricht der Idee. Das gesamte Problem lautet wie folgt (fett gedruckt):

A=iMA(NULL,0,Zeitraum_MA_1,0,MODE_SMA, PRICE_CLOSE,1); // A

B=iMA(NULL,0,Zeitraum_MA_2,0,MODE_SMA,PREIS_SCHLUSS,1); // B

C=iMA(NULL,0,Zeitraum_MA_1,0,MODE_SMA,PREIS_SCHLUSS,2); // C

D=iMA(NULL,0,Zeitraum_MA_2,0,MODE_SMA,PREIS_SCHLUSS,2); // D

Wenn ich die Art der Berechnung der gleitenden Durchschnitte ändere (es kann ein Pluszeichen angezeigt werden) und die exponentielle Methode( MODE_SMA) anstelle der einfachen(MODE_EEMA ) und einer weiteren(MODE_SMMA), der so genannten geglätteten Methode, einsetze, geht alles schief. Das Funktionsprinzip wird noch amüsanter (im Strategietester), da der EA eine Order ganz am Anfang des eingestellten Zeitraums öffnet und am Ende schließt. D.h. für ein Jahr wird ein einziger Handel am Anfang des Zeitraums eröffnet und am Ende geschlossen. Im Ergebnis hat mir der Expert Advisor ein Plus gezeigt, aber ich brauche ein solches Plus nicht. Ich kann selbst eine Münze werfen und entweder eine Kauf- oder Verkaufsorder eröffnen und schauen, ob ich in einem Jahr gewinne oder verliere. Übrigens, wenn ich MODE_SMA auf MODE_LWMA (Linear Weighted Moving Average) einstelle, funktioniert das Programm einwandfrei.

Bitte teilen Sie mir mit, was los ist? Das Prinzip ist dasselbe, aber die Art der Berechnung der gleitenden Durchschnitte wurde ein wenig geändert.

Der gesamte Code befindet sich in der angehängten Datei.


Ich habe hier Antworten erhalten, aber sie sind nicht kompetent und nicht sachlich. Angeblich verwende ich 4 gleitende Durchschnitte. Dies ist nicht wahr, es gibt zwei gleitende Durchschnitte, aber für jeden gleitenden Durchschnitt werden Werte für zwei Balken genommen (insgesamt 4 Array-Aufrufe, A, B, C, D): 1 und 2 . Darüber hinaus wurde geschrieben, dass wir die Anzahl der Aufträge insgesamt verringern sollten, wenn ein Auftrag geschlossen wird. Dies ist jedoch nicht notwendig, da die Aufträge mit der Funktion Odertotal gezählt werden und wenn ich einen Auftrag schließe, ändert die Auftragssumme selbst ihren Wert bei der nächsten Iteration. Es wird auch vorgeschlagen, die so genannten magischen Zahlen zu verwenden, um die Aufträge zu verfolgen, aber ich bin noch nicht zu diesem Teil des Handbuchs gekommen. Ich sollte wiederholen, dass das Programm funktioniert, wenn MODE_SMA und MODE_LWMA verwendet werden, aber nicht, wenn MODE_EMA und MODE_SMMA verwendet werden. Wer weiß warum, schreibe mir bitte eine Antwort.


Ich würde auch die Bedingungen zweimal überprüfen. Hier könnte es ein Problem geben
Grund der Beschwerde: