Вопросы от "чайника" - страница 181

 

Помогите, не смог найти нигде инфу.

Как из советника узнать средневзвешенную цену открытия позиции после нескольких торговых операций? PriceOpen() из CPositionInfo показывает ЦО первой сделки, а нужна текущая, полученная после нескольких сделок.      

Документация по 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();
Идея в том, что есть некоторый класс, функциональность которого нам нужна (связный список Parent2). Этот класс хочу подключить в какой-то другой иерархии (при помощи множественного наследования). Далее, в базовом классе этой иерархии, определить одноименные, виртуальные функции (такие же как и в библиотечном классе), для вызова этих библиотечных функций. Так как библиотечный класс - шаблон, следовательно выходной тип (после множественного наследования) мы не знаем (их много и они разные). Но походу это все нереализуемо.
 
sergeev:

интерес вероятно чисто академический

как в С++ сделать Q3: public Q1, public Q2 

и при этом чтоб компилятор понял что от него хотят.

А что не так в этой записи? Это называется множественным наследованием.
 
220Volt:
А что не так в этой записи? Это называется множественным наследованием.

Да всё так, просто если прототипы имеют одинаковые функции то логичнее сделать каскадное наследование.

Множественное наследование требуется если разный набор виртуальных функций либо явных функций, и все виртуалки либо явные должны быть доступны в потомке.

особенное это важно когда уже есть определённая иерархия, но в ней не хватает некоторых виртуалок, чтоб не переписывать устоявшиеся классы делается множественное наследование и в параллельной ветке виртуалятся недостающие.

 
Urain:

Да всё так, просто если прототипы имеют одинаковые функции то логичнее сделать каскадное наследование.

Множественное наследование требуется если разный набор виртуальных функций либо явных функций, и все виртуалки либо явные должны быть доступны в потомке.

особенное это важно когда уже есть определённая иерархия, но в ней не хватает некоторых виртуалок, чтоб не переписывать устоявшиеся классы делается множественное наследование и в параллельной ветке виртуалятся недостающие.

Идею не совсем удовил, в моем понимании множественное наследование хорошо для подключение какого-либо библиотечного функционала, все было бы замечательно если бы не шаблон.
 
220Volt:
А что не так в этой записи? Это называется множественным наследованием.

называйте как хотите, но с компилятором вам все равно нужно договариваться.

и похоже единственный договор - это определять Fn в Q2

 

Добрый день.

Как выбрать объем открытых позиции по всем символам сразу?      

if(PositionSelect(Symbol_)) open_volume = PositionGetDouble(POSITION_VOLUME) - Эта функция выдает результат только каждому символу отдельно.

 
abeiks:

Добрый день.

Как выбрать объем открытых позиции по всем символам сразу?      

if(PositionSelect(Symbol_)) open_volume = PositionGetDouble(POSITION_VOLUME) - Эта функция выдает результат только каждому символу отдельно.

Я бы перебрал в цикле все символы, и просуммировал. Примерно так:

double volume = 0;
for(int counter = PositionsTotal();  counter > 0;  counter --)
{
   if( PositionSelect(PositionGetSymbol(counter)) )
      volume += PositionGetDouble(POSITION_VOLUME);
}
Не проверял на правильность (вообще не компилил).
 
220Volt:

Я бы перебрал в цикле все символы, и просуммировал. Примерно так:

Не проверял на правильность (вообще не компилил).

Полагал, что может есть что-то подобное как AccountInfoDouble(ACCOUNT_BALANCE) только по открытим позициями. Но смотрю придется переберать в цикле все символы. Спасибо.

 

Не могу разобраться почему функция Print выводит 0 вместо 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());
  }
//+------------------------------------------------------------------+
Причина обращения: