Fehler, Irrtümer, Fragen - Seite 1702

 
Ich verstehe. Ich danke Ihnen.
 
Dmytro Zelenskyy:

OK, wie man richtig konvertieren double zu int mit dem Zeichen intakt (die Zahl spielt keine Rolle, wenn es außerhalb der Grenze ist, dann begrenzen Sie es zu int)

Konvertieren in lang.
 
fxsaber:
Antworten Sie und schließen Sie sie dann sofort.

Ich musste in der Lage sein, mich selbst (den Indikator) zu löschen, wenn auch nur eine Kopie mit anderen Eingabeparametern lief. Dazu musste ich herausfinden, was es mit mir auf sich hat. Leider wusste ich damals nicht, dass dies bei MMS in 100 % der Fälle unmöglich ist. Ich beschloss daher, einen nicht sehr cleveren Trick auszuprobieren.

Ich bin alle Griffe durchgegangen. Wenn er mit dem Zufallswert übereinstimmt, den ich vor der Überprüfung in meinen Indikator geschrieben habe, bedeutet das automatisch, dass der Handle mir gehört und ich mich gegebenenfalls selbst löschen kann.

Aus diesen Überlegungen heraus wurde ein so harmloser Code geschrieben, der bei den Entwicklern eine so zweideutige, aber offensichtlich negative Reaktion hervorrief. Das können Sie nicht tun. Was haben Sie getan? Nun, ich lese den Wert meines Puffers durch den CopyBuffer. Ist das illegal?!

Die Antwort des Entwicklers lautet nicht: "Das können Sie nicht tun". Nirgendwo steht, dass es "illegal" ist.

Wenn Sie glauben, dass Sie diesen "harmlosen Code" unbedingt brauchen, verwenden Sie ihn. Fügen Sie einfach IndicatorRelease(handle)) zu OnCalculate() hinzu, nachdem Sie den Puffer gelesen haben. Sie müssen doch nicht bei jedem Häkchen überprüfen, ob es "Ihr" Indikator ist, oder?

Auf diese Weise löst der Indikator Ihr Problem und hört auf, "unsichtbar" zu sein:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

double Buffer[];

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   ::SetIndexBuffer(0,Buffer,INDICATOR_DATA);
   handle=ChartIndicatorGet(0,1,ChartIndicatorName(0,1,0));
  }

#define  TOSTRING(A) #A + " = " + (string)A + "\n"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(handle!=INVALID_HANDLE)
     {
      Buffer[rates_total-1]=MathRand();

      double BufferCopy[];

      if(CopyBuffer(handle,0,0,1,BufferCopy)>0)
         Print(TOSTRING(BufferCopy[0])+TOSTRING(Buffer[rates_total-1]));
         
      if(IndicatorRelease(handle)) 
         handle=INVALID_HANDLE;
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int Reason)
  {
   if(handle!=INVALID_HANDLE)
      IndicatorRelease(handle);
   return;
  }


Die Community sollte sich darüber im Klaren sein, dass es auf diese Weise möglich ist, im Hintergrund eine unkontrollierte Ausführung von beliebigem Code auch auf dem Terminal ohne Charts zu erzeugen. Hier ist ein kleiner Tipp. Ob es sich um einen Fehler handelt oder nicht, ist wahrscheinlich eine Frage der Terminologie. Soweit ich weiß, können die Bauherren hier nichts architektonisch verändern. Das ist der Grund, warum es so viel Ärger gibt. Anders kann ich mir diese Reaktion nicht erklären.

Es gibt keine "Wut" in der Reaktion von Servicedesk. Es ist ein Missverständnis, dass Sie die Probleme, auf die Sie stoßen, regelmäßig übertreiben.

Die Entwickler sind in der Lage, Dinge zu ändern. Aber sie sind in der Regel sehr vorsichtig mit Vorschlägen, auch nicht dokumentierte Verhaltensweisen "wegzunehmen und zu verbieten", wenn sie nicht eindeutig schädlich sind. Dieser "Hack" ist ziemlich speziell, aber vielleicht benutzt ihn ja jemand.

Vielleicht wird es noch Änderungen im Terminal geben, aber es ist sicherlich kein riesiges Problem und die Priorität dieses Themas ist minimal.

Es wird sich sowieso niemand äußern. Ein solcher Rechen würde sich in der Hilfe gut widerspiegeln.

Es stellt sich heraus, dass Sie sehr wohl wissen, dass dieser "ernste Fehler" des Terminals nur für Sie von Interesse ist.

Lassen Sie uns die Angelegenheit an dieser Stelle abschließen. Die technischen Einzelheiten wurden bereits erörtert, und Emotionen sind in diesem Thread überflüssig.

 
Anton:

In der Antwort der Entwickler steht nichts von "es ist nicht erlaubt". Nirgendwo steht, dass es "illegal" ist.

Wenn Sie der Meinung sind, dass dieser "harmlose Code" für Sie absolut notwendig ist, verwenden Sie ihn. Fügen Sie einfach IndicatorRelease(handle)) zu OnCalculate() hinzu, nachdem Sie den Puffer gelesen haben. Sie müssen nicht bei jedem Häkchen überprüfen, ob es "Ihr" Indikator ist, oder?

Nein, das ist natürlich nicht nötig.

Auf diese Weise löst der Indikator Ihr Problem und hört auf, "unsichtbar" zu sein:

Zu diesem Thema habe ich kürzlich eine Antwort von Ihrem Kollegen erhalten

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Fehler, Irrtümer, Fragen

Slawa, 2016.09.07 17:17

fxsaber:

IndicatorRelease nach iCustom durchgeführt werden sollte?

Und wozu?

Tun Sie es nicht. Auch nicht nach IndicatorCreate machen

Ich habe keine Antwort erhalten.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2016.09.07 17:27

Danach bedeutet nicht sofort. Aber wenn man das nicht muss, wann sollte man es dann tun?

Es gibt keine "Wut" in der Reaktion von Servicedesk. Es ist ein Missverständnis, dass Sie die Probleme, mit denen Sie konfrontiert sind, regelmäßig übertreiben.

Die Motivation ist rein egoistisch. Ich möchte, dass alles vorhersehbar und entsprechend der Dokumentation funktioniert. Bugs sind lästig, das ist das Ergebnis.

Die Entwickler sind in der Lage, sich zu verändern. Aber sie sind in der Regel sehr vorsichtig mit Vorschlägen, auch nicht dokumentierte Verhaltensweisen "wegzunehmen und zu verbieten", es sei denn, sie sind eindeutig schädlich. Dieser "Hack" ist ziemlich speziell, aber vielleicht benutzt ihn ja jemand.

Vielleicht wird es noch Änderungen am Terminal geben, aber es ist sicherlich kein riesiges Problem und die Priorität dieser Frage ist minimal.

Ich stimme zu, was die Priorität betrifft.

Es stellt sich heraus, dass Sie sehr wohl wissen, dass dieser "schwerwiegende Fehler" des Terminals nur für Sie interessant ist.

Lassen Sie uns die Frage an dieser Stelle beenden. Alle technischen Details werden besprochen, aber Emotionen sind in diesem Thread unnötig.

Nein, sie äußern sich aus einem anderen Grund nicht. Unabhängig davon, wie schwerwiegend der Fehler war. Meine "Ernsthaftigkeit" bezog sich auf die Wanzen, die man bereits herstellen und in denselben Markt stellen kann. Und dann mit der Tatsache konfrontiert werden, dass der VPS nicht über genügend Rechenressourcen verfügt. Wie auch immer, Sie verstehen die Idee.
 
Vladimir Pastushak:

Ich brauche das nicht, ich versuche, viel zu tun, um mein Leben in Zukunft einfacher zu machen.

Ich löste mein Problem auf diese Weise in der übergeordneten alle geschützt und Vererbung geht unter geschützten dann überschreiben.

Wenn der Elternteil alle geschützt ist, dann gibt es keine Notwendigkeit, Schutz-Vererbung zu tun (Sie können public lassen). Aber jetzt ist es nicht klar, was Sie ursprünglich wollten. Wenn Sie Eltern-Methoden innerhalb der Klasse verstecken müssen (nicht außerhalb, wie ich dachte), dann was hat Schutz damit zu tun? Sie brauchen ein Primitiv.
 
Alexey Navoykov:
Nur ist jetzt nicht mehr klar, was Sie ursprünglich wollten.
Es sieht so aus, als ob Sie nur die nicht verfügbaren Methoden in der Pop-up-Liste loswerden.
 
Sergei Vladimirov:
Es sieht so aus, als würde man nur die nicht verfügbaren Methoden in der Pop-up-Liste loswerden.
Die unzugänglichen werden also nicht angezeigt, oder?
 
Sergei Vladimirov:
Sieht so aus, als ob Sie einfach die nicht verfügbaren Methoden in der Popup-Liste loswerden.

Nicht nur das, ich habe die Klassen der grafischen Objekte für mich selbst umgeschrieben und aus einer Klasse, in der alle Eigenschaften der Objekte beschrieben sind, mache ich jetzt einfach und verständlich (zumindest für mich) die Nachfahren des Button-Typs.

Außerdem kann ich aus diesen einfachen Elementen kompliziertere Elemente mit minimaler Fehlerwahrscheinlichkeit, maximaler Geschwindigkeit und Einfachheit (zumindest für mich) erstellen.

Vielleicht werden Sie mir einen freundlichen Tritt geben und sagen, dass die Standardbibliothek alles hat, aber ich sage Ihnen gleich, es ist nicht alles und es ist alles unverständlich. Ich bin es gewohnt, mit dem zu arbeiten, was ich vollständig verstehe, und um zu verstehen, wie das alles funktioniert, muss man es selbst ausprobieren...

 
Alexey Navoykov:
Die unzugänglichen werden also nicht angezeigt, oder?

Nein, das tun sie.

Im Studio ist es übrigens das Gleiche.

 
Sergei Vladimirov:

Nein, das tun sie.

Dann sollte Metakvots darauf achten. Warum unzugängliche Methoden anzeigen. Schließlich ist für den geschützten Bereich alles ausgeblendet, so wie es sein sollte. Also sollte es hier genauso sein.