Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Berechnungsloop für Chartzeiten (http://www.expert-advisor.com/forum/showthread.php?t=7303)

AVT 05.03.23 00:52

Berechnungsloop für Chartzeiten
 
Könnte mir bitte jemand helfen, wie ich den Loop für zeitabhängige Berechnung im Indikator am besten formuliere?

Einstellungen:
1. Der Indikator wird automatisch/gezwungen im m5 Chart geladen.
Das ist möglich, weil er nur Daten zeigt (keine Kurse oder sonstiges).
2. Zeiteinheiten für die Neuberechnung der Werte m5 bis w1.
3. Es existiert schon ein Array
int iATimFrams[7]={5,15,30,60,240,1440,10080};
4. Berechnungen sollen mit jedem Beginn einer neuen Zeiteinheit geschehen.

OnCalculate sieht bisher so aus:
Code:

  // ====================================== first run
  if(prev_calculated==0)
  {
      // === calculate the past values
        CalcAdr30();    //from yesterday 30 days back
        CalcAdr0();    //for today
        CalcAdrLeft();  //for today
        CalcChange();  //summaries till now
        CalcState();    //summaries till now
  }
  else
  {
      // === hier fehlt mir eine elegante Lösung
  }

Wäre es besser, ein zweites Array mit den Repeat-Werten für den m5 Chart
int iACalcRepeats[7]={1,3,6,12,48,288,2016};
zu schaffen und mit dem zu rechnen als die Berechnungs Timeframes durch _Period zu dividieren?
Und/oder wäre es besser, die einzelnen CalcXy() Funktionen in einem 5minuten Timer zu packen anstatt als else Anweisung in OnCalculate (oder spielt das keine Rolle)?

Wäre nett, wenn mir Programmier-Profis da zeigen könnten, wie man es am besten macht.
Danke. AVT

TraumExpert 06.03.23 12:42

Hallo AVT,

1.Du könntest eine IsNewCandle Funktion schreiben, und falls true Deinen Code ausführen
2. Oder eine fixe Zeit also zb. alle 15 Minuten

datetime newExecution = TimeCurrent () + 15*60;// (sollte vielleichtin den Globals stehen, sonst wird der Code nie erreicht :-))

if (TimeCurrent() == newExecution) {

// Dein Code


// neue Executionzeit setzten
newExecution = TimeCurrent () + 15*60;
}

Gruß

TraumExpert


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:53 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum