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

 
Integer:


Ich bin beeindruckt von dem Maß an Fantasie. Warum sind die Daten nur für einige Zeichen (die nicht geöffnet wurden) und nicht für alle in der Marktübersicht verfügbar? Woher wusste die Funktion RefreshRates(), dass einige Symbole aktualisiert werden sollten und andere nicht?

Junko, hör auf zu schwärmen.


Dmitry, lass uns nicht miteinander streiten. Es ist besser, sich gegenseitig zu helfen, weil du und Vadim in letzter Zeit so viele Meinungsverschiedenheiten hattet. Ich war ein paar Tage lang mit meinen Gedanken beschäftigt, habe den Thread nicht besucht und dann, wie üblich, alles durchgesehen. Um ehrlich zu sein, es war lustig zu lesen, wirklich lustig! Es gibt so ein Geplänkel, und solche Diskussionen und Kongresse, dass ich mich nur wundere :) Gelegentlich abstruse Phrasen und Wörter, aber im Grunde genommen völliger Unsinn. Ich werde niemanden verurteilen, obwohl ich weit von fortgeschrittenem Denken entfernt bin, selbst noch zu lernen (an manchen Stellen zu schwimmen), und dann verstanden und klar sehen, dass die Debatte völlige Absurdität erreicht hat.

Es scheint eine Zusammenkunft von Profis zu sein, sonst würde ich es nicht sagen. Ich kann nichts anderes über Sie sagen, denn ich kann sehen, dass jeder versteht, was er tut. Interessant ist jedoch, dass Profis zu Fehlern neigen können, wenn sie diese nicht zugeben wollen. Aber wir lernen aus unseren Fehlern! Es gibt nichts, wofür man sich schämen müsste. Wenn also jemand einen Fehler gemacht hat, braucht man nicht vom Thema abzuweichen, sondern kann ihn zugeben. Für Dutzende von Seiten Programmierer-Müll, die sich in Persönlichkeiten verwandeln, ist das irgendwie keine Option. Der Zweck zumindest dieses Zweiges oder Forums besteht nicht darin, sich gegenseitig von Kopf bis Fuß zu bescheißen, sondern darin, sich in der Programmierung zu verbessern und unsere Gedanken zu diesem Thema auszutauschen. Lasst uns also zusammen leben. Genug des Gezänks.

 
hoz:

Nun, das ist richtig. Sie "lesen" die Funktion Zeile für Zeile und verstehen, wie sie funktioniert, wenn Sie zu gelangweilt sind, sie selbst zu schreiben, und alles wird sich von selbst ergeben...

Sie haben einen Funktionsparameter:

ist der Zeitpunkt der Öffnung des letzten Tagesbalkens, d.h. alle Positionen, die vor der Öffnung des aktuellen Tagesbalkens geschlossen wurden, werden berechnet und aufsummiert! Ergibt das einen Sinn? Legen Sie also eine andere Messlatte an, die erforderlich ist oder wie auch immer sie lautet. Aber davon müssen Sie sich selbst überzeugen.


Tut mir leid, es funktioniert immer noch nicht.

Ich möchte, dass die Funktion den Gesamtgewinn für heute zurückgibt, nicht für den heutigen Tag.

und egal wie ich es versucht habe ... es funktioniert nicht. Das Ergebnis ist einfach die ganze Geschichte.

Wenn Sie das heutige BEFORE von der GESAMTEN Geschichte abziehen, erhalten Sie die heutige Summe.

double tm1=GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_D1, 0));  
double tm2=GetProfitFromDateInCurrency (Symbol(), -1, -1, TimeCurrent());  

Print(  m2-m1 );

druckt null .....

 
Es ist für einen Dummkopf immer leichter, einem klugen Mann zu beweisen, dass er ein Dummkopf ist, als umgekehrt, denn es ist für einen klugen Mann von Natur aus leichter zu zweifeln.
 
lottamer:


Wenn man theoretisch das, was VOR dem heutigen Tag passiert ist, von der GANZEN Geschichte abzieht, erhält man das, was heute passiert ist.

druckt NULL, verdammt noch mal.....


Es geht darum, zu verstehen, was diese Funktion bewirkt. Und um sie zu verstehen, muss man sie Zeile für Zeile in ihrer Gesamtheit aufschlüsseln. Das habe ich Ihnen bereits gesagt. Es ist alles elementar. Und es hat keinen Sinn, Ihnen zu helfen, denn es liegt an Ihnen, ob Sie den Code einer einfachen Funktion verstehen oder nicht.

Ich habe es oben beschrieben.

 
hoz:


Vadim, ich habe Ihr Skript auf einem Terminal laufen lassen, auf dem ich außer den Majors und den Crosses mit dem Yen nie irgendwelche Instrumente geöffnet habe. Wie auch immer, hier ist ein Screenshot:

Es wird nichts hochgepumpt, weil das Marktdatenfeld leer ist, den Kommentaren nach zu urteilen.

1. Wie haben Sie es gemacht? Sie müssen es zuerst ohne Aktualisierung ausführen. D.h. IsRefreshRates = false. Die Daten werden nicht aktualisiert.

2. Dann müssen Sie es mit IsRefreshRates = true ausführen. Die Daten werden aktualisiert.

Hier ist ein Bildschirmfoto 1: Bildschirmfoto 2:

Beachten Sie die Taktzeiten. Sie können auch sehen, dass MarketInfo() Daten aus der Marktübersicht übernimmt.

Hier ist der Expert Advisor. Ich habe es ein wenig korrigiert. Ich habe sie ein wenig korrigiert.

extern string Tool           = "AUDNZD"; // Имя инструмента.
extern bool   IsRefreshRates = true;     // Флаг включения обновления таймсерий.
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start()
 {
  string sTool = Tool; // Имя инструмента.
  if (Tool == "") sTool = Symbol();
  while (!IsStopped())
   {
    if (IsRefreshRates) RefreshRates();
    string sComment = StringConcatenate("MarketInfo() (", sTool, ")\n",
                                        TimeToStr(MarketInfo(sTool, MODE_TIME), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n",
                                        DoubleToStr(MarketInfo(sTool, MODE_BID), Digits), "  ", DoubleToStr(MarketInfo(sTool, MODE_ASK), Digits),
                                        "\n\nПредопределенные переменные (", Symbol(), ")\n",
                                        TimeToStr(Time[0], TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\n",
                                        DoubleToStr(Bid, Digits), "  ", DoubleToStr(Ask, Digits),
                                        "\n\nМассивы-таймсерии (", sTool, ")\n");
    for (int i = 0; i < 10; i++)
     {
      sComment = sComment + StringConcatenate(TimeToStr(iTime(sTool, 0, i), TIME_DATE|TIME_MINUTES|TIME_SECONDS), "  ",
                                              DoubleToStr(iOpen(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iLow(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iHigh(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iClose(sTool, 0, i), Digits), "  ",
                                              DoubleToStr(iVolume(sTool, 0, i), 0), "\n");
     }
    Comment(sComment);
    Sleep(300);
   }
 } 
hoz:


Dimitri, lass uns nicht streiten. Es ist besser, sich gegenseitig zu helfen, weil du und Vadim in letzter Zeit so viele Meinungsverschiedenheiten hattet. Ich habe einmal ein paar Tage in meinem Kopf verbracht, bin nicht in die Filiale gegangen und habe dann, wie üblich, alles durchforstet. Um ehrlich zu sein, es war lustig zu lesen, wirklich lustig! Es gibt so ein Geplänkel, und solche Diskussionen und Kongresse, dass ich mich nur wundere :) Gelegentlich abstruse Phrasen und Wörter, aber im Grunde genommen völliger Unsinn. Ich werde niemanden verurteilen, obwohl ich weit von fortgeschrittenem Denken entfernt bin, selbst noch zu lernen (an manchen Stellen zu schwimmen), und dann verstanden und klar sehen, dass die Debatte völlige Absurdität erreicht hat.

Ich denke, wir haben Fachleute versammelt. Ich werde nichts anderes über Sie sagen, denn ich sehe, dass jeder versteht, was er oder sie tut. Interessant ist jedoch, dass Profis manchmal zu Fehlern neigen, wenn sie diese nicht zugeben wollen. Aber wir lernen aus unseren Fehlern! Es gibt nichts, wofür man sich schämen müsste. Wenn also jemand einen Fehler gemacht hat, braucht man nicht vom Thema abzuweichen, sondern kann ihn zugeben. Für Dutzende von Seiten Programmierer-Müll, die sich in Persönlichkeiten verwandeln, ist das irgendwie keine Option. Der Zweck zumindest dieses Zweiges oder Forums besteht nicht darin, sich gegenseitig von Kopf bis Fuß zu bescheißen, sondern darin, sich in der Programmierung zu verbessern und unsere Gedanken zu diesem Thema auszutauschen. Lasst uns also zusammen leben. Genug des Gezänks.

Victor, pass nicht auf. Es gibt Menschen, die nicht wissen, wie man einen Gedanken formuliert und wie man eine begründete Rede aufbaut. Für sie ist das überzeugendste Argument die Profanität.

Auch solche Menschen sind für Neues nicht empfänglich. Dmitri hat immer noch nicht verstanden, wie man mit Streams arbeiten kann, ohne seine Warteschlange zu organisieren. Er hat nicht einmal ein Beispiel genannt, bei dem diese Warteschlange notwendig ist.

Jetzt streitet er sich wieder. Anstatt seine Position zu überprüfen und zu argumentieren.

 
Zhunko:

Victor, du hast nicht aufgepasst. Es gibt Menschen, die keinen Gedanken formulieren können und nicht wissen, wie man eine begründete Rede aufbaut. Für sie ist das stärkste Argument die Profanität.

Auch solche Menschen sind für Neues nicht empfänglich. Dmitri hat immer noch nicht verstanden, wie man mit Streams arbeiten kann, ohne seine Warteschlange zu organisieren. Er hat nicht einmal ein Beispiel genannt, bei dem diese Warteschlange notwendig ist.

Jetzt streitet er wieder. Anstatt seine Position zu überprüfen und zu argumentieren.


Junko, du überreagierst. Alles, was hier steht, gilt direkt für Sie. Du verstehst nichts von Datenströmen, du verstehst nicht, warum die Daten aktualisiert werden usw., aber du tust so, als wärst du ein Experte, und das ist Blödsinn. Und du tust so, als wärst du so rechtschaffen.
 
Integer:


Der Grad der Vorstellungskraft ist beeindruckend. Warum erscheinen die Daten nur für einige Symbole (die nicht geöffnet wurden) und nicht für alle in der Marktübersicht? Woher wusste die Funktion RefreshRates(), dass einige Symbole aktualisiert werden sollten und andere nicht?

Junko, hör auf zu schwärmen.

RefreshRates() aktualisiert nur die Werte, mit denen der Expert Advisor arbeitet. So findet sie es heraus. Aus dem Expert Advisor. Vor langer Zeit schrieb jemand von Metakvot darüber.
 
hoz:


Es geht darum, zu verstehen, was diese Funktion bewirkt. Und um sie zu verstehen, muss man sie Zeile für Zeile auseinander nehmen. Das habe ich Ihnen bereits gesagt. Es ist alles elementar. Und es hat keinen Sinn, Ihnen zu helfen, denn es liegt an Ihnen, ob Sie den Code einer einfachen Funktion verstehen oder nicht.

Ich habe es oben beschrieben.


Ich habe es herausgefunden.

Im Allgemeinen gibt die Funktion den Gesamtgewinn zurück, aber nur für den Zeitraum, den Sie in der Registerkarte "Historie" festgelegt haben, und sie ändert ihn sofort, wenn Sie den Zeitraum in der Registerkarte "Historie" ändern.

Ich brauche es nicht.

Ich brauche es, um den Zeitraum durch einen gegebenen Parameter einzustellen.

Ich versuche, die Funktion selbst zu ändern...

double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=iTime (NULL, PERIOD_D1, 0)   )
{
  double p=0;
  int    i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (dt<OrderCloseTime()) {
              p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
  }
  return(p);
}

aber der Compiler beschwert sich, dass

iTime' - Initialisierung erwartet

Was sollte ich hinzufügen?

 
Zhunko:
RefreshRates() aktualisiert nur das, womit der Expert Advisor gerade arbeitet. So findet sie es heraus. Aus dem Expert Advisor. Vor langer Zeit schrieb jemand von Metakvot darüber.

Geben Sie den Funktionen einer Programmiersprache keine mystischen Merkmale und Eigenschaften, die sie gar nicht haben.

 
Auf der vorherigen Seite habe ich am Ende beschrieben, wie die Daten aktualisiert werden.