[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 587

 
OK, wenn nicht, dann helfen Sie mir heute Abend, das zu klären.
 
Bitte sagen Sie mir, ob es möglich ist, den Wert von double, der das Ergebnis der Berechnung ist, als Ersatzwert für int für weitere Berechnungen zu verwenden.
Beispiel:
   ATR_Din=iATR(NULL,PERIOD_M5,14,1);
   Din_Per210= MathRound(6000*ATR_Din+210);
   Din_Per5  = MathRound(6000*ATR_Din+5);
   
   MA210_DIN  =iMA(NULL,PERIOD_M5,Din_Per210,0,MODE_SMA,PRICE_CLOSE,1);
   MA5_DIN    =iMA(NULL,PERIOD_H1,Din_Per5,0,MODE_SMA,PRICE_CLOSE,1);
   
Hier sind meine ausgewählten Variablen vom Typ double, aber in iMA wird ihr Wert dort verwendet, wo ein int-Wert benötigt wird (als Zeitraum von MA).
Die Frage ist: Ist diese Verwendung korrekt oder müssen die Werte in den Typ int umgewandelt werden ?
 
Hallo zusammen, könnten Sie mir bitte mitteilen, ob Sie wissen, ob es ein Skript gibt, das einen Expertentest für jedes der Optimierungsergebnisse durchführt und jedes Testergebnis in einer separaten Datei (htm-Bericht) speichert?
 
Craft:
Ich habe nichts dagegen, gibt es ein funktionierendes Beispiel oder einen Link?
Geben Sie mir den Code oder eine Aufgabe, und wir werden ihn korrigieren.
 
artmedia70:
Bitte sagen Sie mir, ob es möglich ist, den Wert von double, der das Ergebnis der Berechnung ist, als Ersatzwert für int für weitere Berechnungen zu verwenden.
Beispiel:
Hier sind meine ausgewählten Variablen vom Typ double, aber in iMA wird ihr Wert dort verwendet, wo ein int-Wert benötigt wird (als Zeitraum von MA).
Meine Frage ist also: Ist eine solche Verwendung korrekt oder ist eine Konvertierung von Werten in den Typ int erforderlich ?
Die Umrechnung erfolgt automatisch, wobei lediglich die Nachkommastellen abgeschnitten werden. Die einzige Einschränkung, auf die ich bei einer solchen Verwendung gestoßen bin, ist, dass double nicht in den Array-Index gesetzt werden kann
 
alsu:
Die Umrechnung erfolgt automatisch, wobei lediglich die Nachkommastellen abgeschnitten werden. Die einzige Einschränkung bei dieser Verwendung, die ich gesehen habe, ist, dass double nicht in den Array-Index gesetzt werden kann
Danke, das ist beruhigend... :)
Eine weitere Frage:
   MA200_DIN =iMA(NULL,PERIOD_M5,Din_Per200,0,MODE_SMA,PRICE_CLOSE,1);
   MA200_UP  =MA200_DIN+20*pt;
   MA200_DN  =MA200_DIN-20*pt;
   
   MA5_DIN  =iMA(NULL,PERIOD_H1,Din_Per5,0,MODE_SMA,PRICE_CLOSE,1);
   MA5_UP   =MA5_DIN+20*pt;
   MA5_DN   =MA5_DIN-20*pt;
Konstruktionen
MA200_UP=MA200_DIN+20*pt; 
MA200_DN=MA200_DIN-20*pt; и 
MA5_UP=MA5_DIN+20*pt; 
MA5_DN=MA5_DIN-20*pt;
funktionieren nicht. Wenn ihre Werte im Diagramm angezeigt werden, haben sie alle den gleichen Wert, z. B:
1.4118 für MA200_DIN, MA200_UP, MA200_DN und
1.4106 für MA5_DIN, MA5_UP, MA5_DN.
Es stellt sich heraus, dass die Formeln zur Berechnung der Stufen +20 und -20 Punkte nicht funktionieren.
Was mache ich falsch?
 
Was bedeutet pt? Versuchen Sie die Ausgabe mit NormalizeDouble()
 
OK, danke, ich habe es verstanden... Ich setze pt=Point; bereits nach der Berechnung der Werte...
Wie Matroskin sagte: Du bist ein Narr... :)
 
alsu:
Geben Sie uns einen Code oder eine Aufgabe, und wir werden ihn korrigieren

In WelsLab sieht die Entsprechung des Problems wie folgt aus:

MyATR = SMA.Series((((High-Low)/Low), PerB)[i-1] ;

wenn (BuyAtStop(i, (Open[i] + Open[i]*MyATR), "") ;

d.h. wenn ein Balken geöffnet wird, wird eine Stop-Position platziert, bei der der Open [i] -Kurs des aktuellen Balkens + Trigger (derselbe Open-Kurs multipliziert mit MyATR, berechnet für den Zeitraum PerB auf den geschlossenen Balken [i-1]) einmal geöffnet wird, wenn das angegebene Niveau erreicht wird

Hier wird gezeigt, was ich mit mql4 erreichen möchte, indem ich WellLab als Beispiel verwende.

Ich habe die Materialien vor Ort studiert und versucht, eine Analogie herzustellen.

        MyATR = ((High[0] - Low[0])/Low[0]);
	 BT = Open[0] + Open[0]*iMAOnArray(MyATR ,0,PerB,0,MODE_SMA,1);
        ST = Open[0] - Open[0]*iMAOnArray((MyATR ,0,PerS,0,MODE_SMA,1);

   if (Ask >=  BT)                       // Если разница между
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (Bid <= ST)                       // Если разница между
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Ergebnis: Die Aufträge stapeln sich. Bitte geben Sie an, welche Bedingung hinzugefügt (oder geändert) werden sollte, damit die Aufträge einmal zu einem bestimmten Niveau ausgeführt werden.

 

Hinweis: Der erste Parameter der Funktion iMAOnArray sollte ein Array sein - und Sie haben MyATR als Skalar. Um es richtig zu machen, sollten Sie:

1. deklarieren Sie double MyATR[];

2. Setzen Sie die Arraygröße auf ArrayResize(MyATR,PerB);

3. das Array füllen for(i=1;i<=PerB;i++) MyATR[i-1]=(High[i]-Low[i])/Low[i]; Index i beginnt mit 1, da wir nur geschlossene Balken benötigen

4. Danach können Sie iMAOnArray(MyATR,0,PerB,0,MODE_SMA,0) lesen; hier ist der letzte Parameter 0, da die Verschiebung ha1 bereits in Schritt 3 berücksichtigt wurde.


Prüfen Sie, wie es funktioniert, vielleicht liegt der Fehler nur in diesem