"ダミー "からの質問 - ページ 181

 

助けて!どこにも情報がないんです。

数回取引した後のポジションの加重平均 始値を調べるにはどうしたらいいですか?CPositionInfo のPriceOpen() は最初の取引の価格を表示しますが、数回の取引の後に得られた現在の価格が必要です。

Документация по 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:

興味本位

C++で Q3を作る方法: public Q1, public Q2

と同時に、コンパイラに何を期待されているかを理解させることができます。

このノートのどこが悪いんだ?多重継承と呼ばれるものです。
 
220Volt:
この記事の何が問題なのか?これを多重継承といいます。

そうですね、ただ、プロトタイプが同じ機能を持つのであれば、カスケード継承を行う方が論理的です。

仮想関数や 明示的関数のセットが異なる場合、多重継承が必要であり、すべての仮想関数や明示的関数が子孫で利用可能でなければならない。

特に重要なのは、すでに一定の階層があるにもかかわらず、一部の仮想化が不足している場合、確立したクラスを書き換えるのではなく、複数の継承を行い、不足している仮想化を並列ブランチで仮想化することである。

 
Urain:

そうですね、ただ、プロトタイプが同じ機能を持つのであれば、カスケード継承を行う方が論理的です。

仮想関数や 明示的関数のセットが異なる場合、多重継承が必要であり、すべての仮想関数や明示的関数が子孫で利用可能でなければならない。

特に、既にある階層があり、その中に仮想的なものが欠けている場合、確立したクラスを書き換えることを避けるために多重継承を行い、欠けている仮想的なものを並列分岐で仮想化することが重要である。

私の理解では、多重継承はいくつかのライブラリ機能を接続するのに適しており、テンプレートがなければすべてがうまくいくはずです。
 
220Volt:
このエントリーの何が問題なのか?多重継承と呼ばれるものです。

と呼びたいのですが、コンパイラと交渉する必要があります。

で、Q2でFnを定義するのが唯一の合意事項のようです。

 

こんにちは

全シンボルのオープンポジションの数量を一度に選択するにはどうすればよいですか?

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関数が 40ではなく0をプリント する理由がわからないのですが?

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