Fragen von einem "Dummy" - Seite 181

 

Hilfe, ich kann nirgendwo Informationen finden.

Wie kann ich den gewichteten durchschnittlichen Eröffnungskurs einer Position nach mehreren Abschlüssen herausfinden? PriceOpen() von CPositionInfo zeigt den Preis des ersten Abschlusses an, aber ich brauche den aktuellen Preis, der nach mehreren Abschlüssen ermittelt wurde.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
class Parent1
{
public:
	virtual void Fn() {}
};

template <typename type>
class Parent2   // Какой-то библиотечный класс.
{
public:
	void Fn() {}     // Эту функцию хочу вызвать в Parent 1.
};

class Derived : public Parent2<type>, public Parent1
{

};

Parent1 *p = new Derived();
p->Fn();
Die Idee ist, dass es eine Klasse gibt, deren Funktionalität wir wollen (verknüpfte Liste Parent2). Diese Klasse möchte ich in eine andere Hierarchie einbinden (durch Mehrfachvererbung). Definieren Sie dann in der Basisklasse dieser Hierarchie virtuelle Funktionen mit demselben Namen (wie in der Bibliotheksklasse), um diese Bibliotheksfunktionen aufzurufen. Da es sich bei einer Bibliotheksklasse um eine Vorlage handelt, kennen wir den Ausgabetyp (nach Mehrfachvererbung) nicht (es gibt viele von ihnen und sie sind unterschiedlich). Aber das scheint alles nicht realisierbar zu sein.
 
sergeev:

das Interesse ist wahrscheinlich rein akademisch

wie man Q3 in C++ erstellt: public Q1, public Q2

und gleichzeitig dem Compiler verständlich zu machen, was von ihm erwartet wird.

Was ist an dieser Notiz falsch? Das nennt man Mehrfachvererbung.
 
220Volt:
Was ist an diesem Beitrag falsch? Dies wird als Mehrfachvererbung bezeichnet.

Ja, es ist nur so, dass es logischer ist, kaskadierende Vererbung durchzuführen, wenn Prototypen dieselben Funktionen haben.

Mehrfachvererbung ist erforderlich, wenn verschiedene virtuelle oder explizite Funktionen vorhanden sind, und alle virtuellen oder expliziten Funktionen müssen im Nachkommen verfügbar sein.

Besonders wichtig ist es, wenn es bereits eine bestimmte Hierarchie gibt, der aber einige Virtualitäten fehlen, die etablierten Klassen nicht neu zu schreiben, sondern Mehrfachvererbung zu betreiben und die fehlenden Virtualitäten in einem Parallelzweig zu virtualisieren.

 
Urain:

Ja, es ist nur so, dass es logischer ist, kaskadierende Vererbung zu betreiben, wenn Prototypen dieselben Funktionen haben.

Mehrfachvererbung ist erforderlich, wenn verschiedene virtuelle oder explizite Funktionen vorhanden sind, und alle virtuellen oder expliziten Funktionen müssen im Nachkommen verfügbar sein.

Dies ist vor allem dann wichtig, wenn bereits eine bestimmte Hierarchie vorhanden ist, aber einige virtuelle Elemente fehlen. Um zu vermeiden, dass etablierte Klassen umgeschrieben werden, wird Mehrfachvererbung durchgeführt und die fehlenden virtuellen Elemente werden in einem parallelen Zweig virtualisiert.

Ich bin nicht ganz zufrieden mit der Idee, in meinem Verständnis Mehrfachvererbung ist gut für die Verbindung einige Bibliothek-Funktionalität, alles wäre gut, wenn nicht für die Vorlage.
 
220Volt:
Was ist an diesem Eintrag falsch? Das nennt man Mehrfachvererbung.

Sie können es nennen, wie Sie wollen, aber Sie müssen trotzdem mit dem Compiler verhandeln.

und es scheint, dass die einzige Vereinbarung darin besteht, Fn in Q2 zu definieren

 

Guten Tag.

Wie wähle ich das Volumen der offenen Positionen für alle Symbole auf einmal aus?

if(PositionSelect(Symbol_)) open_volume = PositionGetDouble(POSITION_VOLUME) - Diese Funktion gibt das Ergebnis nur für jedes Symbol einzeln aus.

 
abeiks:

Guten Tag.

Wie wähle ich das Volumen der offenen Positionen für alle Symbole auf einmal aus?

if(PositionSelect(Symbol_)) open_volume = PositionGetDouble(POSITION_VOLUME) - Diese Funktion liefert ein Ergebnis nur für jedes Symbol einzeln.

Ich würde alle Symbole durchgehen und zusammenfassen. Ungefähr so:

double volume = 0;
for(int counter = PositionsTotal();  counter > 0;  counter --)
{
   if( PositionSelect(PositionGetSymbol(counter)) )
      volume += PositionGetDouble(POSITION_VOLUME);
}
Wurde nicht auf Korrektheit geprüft (wurde nicht kompiliert).
 
220Volt:

Ich würde alle Figuren durchgehen und zusammenfassen. Zum Beispiel so:

Ich habe es nicht auf Korrektheit geprüft (ich habe es überhaupt nicht kompiliert).

Ich dachte, es könnte so etwas wie AccountInfoDouble(ACCOUNT_BALANCE) nur für offene Positionen geben. Aber ich sehe, dass ich alle Zeichen durchgehen muss. Danke.

 

Ich kann nicht herausfinden, warum die Druckfunktion 0 statt 40 ausgibt?

//+------------------------------------------------------------------+
//|                                               test_deviation.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#include <Trade\Trade.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
CTrade trade;
trade.SetDeviationInPoints(40);
Print(trade.RequestDeviation());
  }
//+------------------------------------------------------------------+