Domande da un "manichino" - pagina 181

 

Aiuto, non riesco a trovare nessuna informazione da nessuna parte.

Come posso scoprire la media ponderata del prezzo di apertura di una posizione dopo diversi scambi? PriceOpen() di CPositionInfo mostra il prezzo del primo trade, ma ho bisogno del prezzo attuale, ottenuto dopo diversi trade.

Документация по 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();
L'idea è che ci sia una classe di cui vogliamo la funzionalità (lista collegata Parent2). Questa classe voglio collegarla in qualche altra gerarchia (usando l'ereditarietà multipla). Poi, nella classe base di questa gerarchia, definite delle funzioni virtuali con lo stesso nome (lo stesso della classe di libreria) per chiamare queste funzioni di libreria. Dato che una classe di libreria è un template, di conseguenza, non conosciamo il tipo di uscita (dopo l'ereditarietà multipla) (ce ne sono molti e sono diversi). Ma tutto questo sembra essere irrealizzabile.
 
sergeev:

l'interesse è probabilmente puramente accademico

come fare il Q3 in C++ : Q1 pubblico, Q2 pubblico

e allo stesso tempo far capire al compilatore cosa ci si aspetta da lui.

Cosa c'è di sbagliato in questa nota? Si chiama eredità multipla.
 
220Volt:
Cosa c'è di sbagliato in questo post? Questo si chiama eredità multipla.

Sì, è solo che se i prototipi hanno le stesse funzioni, è più logico fare l'ereditarietà a cascata.

L'ereditarietà multipla è richiesta se diversi set di funzioni virtuali o funzioni esplicite, e tutte le funzioni virtuali o esplicite devono essere disponibili nel discendente.

È particolarmente importante quando c'è già una certa gerarchia, ma le mancano alcuni virtuali, per non riscrivere le classi stabilite l'ereditarietà multipla è fatta e i virtuali mancanti sono virtualizzati in un ramo parallelo.

 
Urain:

Sì, è solo che se i prototipi hanno le stesse funzioni, è più logico fare l'ereditarietà a cascata.

L'ereditarietà multipla è richiesta se diversi set di funzioni virtuali o funzioni esplicite, e tutte le funzioni virtuali o esplicite devono essere disponibili nel discendente.

È particolarmente importante quando c'è già una certa gerarchia ma le mancano alcuni virtuali, per evitare di riscrivere classi stabilite si fa l'ereditarietà multipla e i virtuali mancanti sono virtualizzati in un ramo parallelo.

Non sono completamente soddisfatto dell'idea, nella mia comprensione l'ereditarietà multipla è buona per collegare alcune funzionalità di libreria, tutto andrebbe bene se non fosse per il template.
 
220Volt:
Cosa c'è di sbagliato in questa voce? Si chiama eredità multipla.

chiamatelo come volete, ma dovete comunque negoziare con il compilatore.

e sembra che l'unico accordo sia quello di definire Fn in Q2

 

Buon pomeriggio.

Come faccio a selezionare il volume delle posizioni aperte per tutti i simboli contemporaneamente?

if(PositionSelect(Symbol_)) open_volume = PositionGetDouble(POSITION_VOLUME) - Questa funzione emette solo il risultato per ogni simbolo individualmente.

 
abeiks:

Buon pomeriggio.

Come faccio a selezionare il volume delle posizioni aperte per tutti i simboli contemporaneamente?

if(PositionSelect(Symbol_)) open_volume = PositionGetDouble(POSITION_VOLUME) - Questa funzione emette solo il risultato per ogni simbolo individualmente.

Io farei un ciclo di tutti i simboli e riassumerei. All'incirca così:

double volume = 0;
for(int counter = PositionsTotal();  counter > 0;  counter --)
{
   if( PositionSelect(PositionGetSymbol(counter)) )
      volume += PositionGetDouble(POSITION_VOLUME);
}
Non ha controllato la correttezza (non ha compilato affatto).
 
220Volt:

Io farei il giro di tutti i personaggi e riassumerei. Come questo:

Non ho controllato la sua correttezza (non l'ho compilato affatto).

Ho pensato che ci potrebbe essere qualcosa come AccountInfoDouble(ACCOUNT_BALANCE) solo per le posizioni aperte. Ma vedo che dovrò fare il giro di tutti i personaggi. Grazie.

 

Non riesco a capire perché la funzione Print stampa 0 invece di 40?

//+------------------------------------------------------------------+
//|                                               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());
  }
//+------------------------------------------------------------------+