Diskussion zum Artikel "Besser Programmieren (Teil 02): Hören Sie auf, diese 5 Dinge zu tun, um ein erfolgreicher MQL5-Programmierer zu werden"

 

Neuer Artikel Besser Programmieren (Teil 02): Hören Sie auf, diese 5 Dinge zu tun, um ein erfolgreicher MQL5-Programmierer zu werden :

Dieser Artikel ist ein Muss für alle, die ihre Programmierkarriere verbessern wollen. Diese Artikelserie zielt darauf ab, Sie zum besten Programmierer zu machen, der Sie sein können, unabhängig davon, wie erfahren Sie sind. Die besprochenen Ideen eignen sich sowohl für MQL5-Programmierneulinge als auch für Profis.

Ich verwende in dieser Artikelserie häufig das Wort noob (Neuling), um jemanden mit weniger Erfahrung in der MQL5-Programmierung zu beschreiben (nehmen Sie mir das nicht übel). Das macht es einfach, sich darauf zu beziehen. Das bedeutet aber nicht, dass dieser Artikel nur für Anfänger geeignet ist. Ganz und gar nicht! Er ist für alle gedacht, unabhängig von der Programmiererfahrung, die Sie haben, denn was Sie zu einem Anfänger macht oder nicht, sind Ihre Programmiergewohnheiten und Ihr Verhalten... nicht die Jahre des Programmierens.

noobs_vs_professionelle Programmierer 


Der erste Artikel ist hier für diejenigen, die ihn nicht gelesen haben, also lasst mich diese Mission fortsetzen, Noobs zu Profis zu machen.

Autor: Omega J Msigwa

 
Danke für Ihren Artikel ...
 

Hallo Leute,

ich bin ein Neuling. Ich habe viel Programmiererfahrung, aber ich fange gerade erst an, in MQL5 zu programmieren - es ist meine erste Sprache ähnlich wie C++. Ich habe mich durch die Referenzdokumente gelesen, kann aber meinen Fehler nicht finden - der Wert, den ich erwarte, von expoMA zurückgegeben zu werden, wird in meinem Diagramm als 0,0 gedruckt/kommentiert - mache ich eine Art Syntaxfehler? Ich erhalte keine Probleme/Fehler beim Kompilieren. Jeder Beitrag, den Sie haben, wäre großartig

void OnTick(
  {   
   int days = 3; 
   
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
  
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   
   double movingAverageValues[];
   
   double bidAskAverage = (Ask + Bid)/2;
   
   int exponentialMovingAverage = iMA(_Symbol,_Period,MA_Period,0,MODE_EMA,PRICE_CLOSE);
      
   ArraySetAsSeries(movingAverageValues,true);
   
   CopyBuffer(exponentialMovingAverage,0,0,3,movingAverageValues);

   double alpha = expoMA(days);
   
   double dEMA = bidAskAverage - movingAverageValues[1]; // Der Index 1 steht hier für den EMA des Wertes t - 1
      
   Comment("The ask price is: " +     DoubleToString(Ask,5) + "\n"
           "The bid price is: " + DoubleToString(Bid,5) + "\n" 
           "The average price is: " + DoubleToString(bidAskAverage,5) + "\n"
           "The custom expoMA value is: " + DoubleToString(alpha,5) + "\n"
           "The dEMA value is: " + DoubleToString(dEMA,5)) ;   
   }

double expoMA(int days=2)
   {   
    double alpha = 2 / (days + 1);   
    NormalizeDouble(alpha,5);
    return(alpha);
   }
 
spinner461:

Hallo Leute,

ich bin ein Neuling. Ich habe viel Programmiererfahrung, aber ich fange gerade erst an, in MQL5 zu programmieren - es ist meine erste Sprache ähnlich wie C++. Ich habe mich durch die Referenzdokumente gelesen, kann aber meinen Fehler nicht finden - der Wert, den ich erwarte, von expoMA zurückgegeben zu werden, wird in meinem Diagramm als 0,0 gedruckt/kommentiert - mache ich eine Art Syntaxfehler? Ich erhalte keine Probleme/Fehler beim Kompilieren. Jeder Beitrag, den Sie haben, wäre großartig

double expoMA(int days=2)
   {   
    double alpha = 2.0 / (days + 1);

    //...
   }

Du teilst 2/4 in Ganzzahlen (0), und das wird dann in einen Double geparst. Stattdessen sollte einer der beiden Werte Dividend oder Divisor ein Double sein (damit die Division im "detailliertesten" Datentyp durchgeführt wird)

Andere Optionen könnten sein (wobei Tage ein int):

double alpha = double(2) / (days + 1);
double alpha = 2 / (days + 1.0);
double alpha = 2 / double(days + 1);
Das ist wahrscheinlich ein Python-Fehler heheh
 

Manuel Alejandro Cercos Perez:

Du teilst 2/4 in Ganzzahlen (0), und das wird dann in einen Double geparst. Stattdessen sollten Sie eine zwischen Dividende oder Divisor ein Double sein (so dass die Division in der "detailliertesten" Datentyp durchgeführt wird)

Andere Optionen könnten sein (wobei Tage ein int):

Das ist wahrscheinlich ein Python-Fehler heheh


Hallo Manuel,

vielen Dank! Der obige Tipp funktionierte wie ein Zauber. Du hast mich davor bewahrt, viele weitere Stunden mit der Suche nach der Ursache zu verbringen.

 
OH je, echt jetzt!!
 
Wie kann ich eine Funktion erstellen, die nur 1 Handel oder eine offene Position pro Kerze erlaubt, nicht nur zu Beginn der Kerze, sondern bis sich eine neue Kerze bildet. Die newbar Funktion erlaubt nur zu Beginn der neuen Kerze nur
 
Es gibt eine Menge Betrugstüten
 
Wenn es MQL5 ist, sollten Sie die iMA in OnInit initiieren.

Andernfalls werden Sie es bei jedem empfangenen Tick tun.

Ihre letzte Frage: Nehmen Sie die Eröffnungszeit und addieren Sie
Periode Sekunden()/2 dazu, dann sind Sie auf halbem Weg in die Periode.





 
Dominik Egert:
Wenn es MQL5 ist, sollten Sie die iMA in OnInit initiieren.

Andernfalls werden Sie es bei jedem empfangenen Tick tun.

Ihre letzte Frage: Nehmen Sie die Eröffnungszeit und addieren Sie
Periode Sekunden()/2 dazu, dann sind Sie auf halbem Weg in der Periode.





Jede Frage zur Codierungshilfe sollte im Forum als eigenständiges Thema gepostet werden
 

Großes Lob an die Übersetzer.

Nach dem ersten Artikel hatte ich Zweifel, aber jetzt bin ich sicher, dass der Autor den schwachsinnigen Programmierern erklären will, dass sie Schwachköpfe sind. Autor, nehmen Sie es mir nicht übel, aber der Artikel ist für Sie geschrieben. Außerdem macht die Arroganz, mit der Sie sich an Ihre Leser wenden, Ihre Arbeit zunichte.