は、実行ポリシーを返します。 - ページ 2

 
Vladimir Karputov:

CTradeトレードクラスでの例最初に'SYMBOL_FILLING_FOK' をチェックし、次に'SYMBOL_FILLING_IOC' をチェックする。


チェックは「ANDビット演算」を用いて行う。

ビット単位のAND演算

2値表現xとyのビット単位のAND演算。この式の値は,x と y がともに 0 でないすべてのビットに 1 (TRUE) を含み,それ以外のすべてのビットに 0 (FALSE) を含む。



ビット演算の 詳細はこちら

このコードによって、実行ポリシーはiocかfokのどちらか、またはそのどちらでもないということになり、同時に2つ存在することはできないということになるのですね。それとも、また誤解していたのでしょうか?
 
結局、同時に2つ存在することはできないのでしょうか? 同時に2つ存在するためには、関数は何を返さなければならないのでしょうか?
 
私はあなたの答えを誤解していたようです。1つの取引口座に関することではなく、一般的なことを指しているのですね。ご協力ありがとうございました。
 
Ivan_Invanov:
結局、同時に2つ存在することはできないのですか? 同時に2つ存在するためには、関数は何を返すべきですか?
2であれば、この関数は3を返します。しかし、これは典型的なケースです。選択肢が3つしかないことから、1、2、または1+2の合計の可能性があります。第3の選択肢ではなく、和である。したがって、ビット演算による チェックでは、「このフィル・ポリシーを適用できるか」という質問にしか答えられない。
 
Ivan_Invanov:
結局、同時に2つ存在することはできないのですか? 同時に2つ存在するためには、関数は何を返すべきですか?

MetaQuotes-Demoサーバーの2文字に対するチェックの例。

2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        MetaQuotes-Demo
2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        Fill or Kill, SYMBOL_FILLING_FOK: false
2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        Immediate or Cancel, SYMBOL_FILLING_IOC: true
2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        Return: true
2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        Flags of allowed order filling modes: SYMBOL_TRADE_EXECUTION_INSTANT
2020.07.19 07:35:07.922 Info_FILLING (USDRUB,H1)        
2020.07.19 07:35:45.291 Info_FILLING (EURUSD,H1)        MetaQuotes-Demo
2020.07.19 07:35:45.291 Info_FILLING (EURUSD,H1)        Fill or Kill, SYMBOL_FILLING_FOK: true
2020.07.19 07:35:45.291 Info_FILLING (EURUSD,H1)        Immediate or Cancel, SYMBOL_FILLING_IOC: false
2020.07.19 07:35:45.291 Info_FILLING (EURUSD,H1)        Return: true
2020.07.19 07:35:45.291 Info_FILLING (EURUSD,H1)        Flags of allowed order filling modes: SYMBOL_TRADE_EXECUTION_INSTANT

これらの記号については、仕様書(記入欄)を参照してください。



そして、より一般的なバリエーションとして、シンボルに対してすべてのフィルが使用可能な場合、次のようになります。

2020.07.19 07:40:22.818 Info_FILLING (NZDUSD,H1)        MetaQuotes-Demo
2020.07.19 07:40:22.818 Info_FILLING (NZDUSD,H1)        Fill or Kill, SYMBOL_FILLING_FOK: true
2020.07.19 07:40:22.818 Info_FILLING (NZDUSD,H1)        Immediate or Cancel, SYMBOL_FILLING_IOC: true
2020.07.19 07:40:22.818 Info_FILLING (NZDUSD,H1)        Return: true
2020.07.19 07:40:22.818 Info_FILLING (NZDUSD,H1)        Flags of allowed order filling modes: SYMBOL_TRADE_EXECUTION_INSTANT

および仕様


 
ありがとうございます。
 
Alexey Viktorov:
また、2 を指定した場合は、3 を返します。しかし、これは典型的なケースです。選択肢が3つしかないことから、1、2、または1+2の合計の可能性があります。第3の選択肢ではなく、和である。したがって、ビット演算による チェックでは、「このフィル・ポリシーを適用できるか」という質問にしか答えられない。
は、1つの変数が2つの項を返すことができることをまだ理解していない。また、1メンバーとして3の値を返すと、ビット演算が効かなくなります。EXECUTION_INSTANT モードを選択するだけで、常にFOK ポリシーを持つことにしました。
 
Ivan_Invanov:
1つの変数が2つのメンバーを返すというのは、いまだに理解できません。また、1つのメンバーを3として返すと、ビット演算が効かなくなります。EXECUTION_INSTANT モードを選択するだけで、常にFOK ポリシーを持つことにしました。

これを理解するためには、フラグとは何かを理解する必要があります。

フラグの次の値は、それぞれ前の値を2倍した値になります。すなわち、1、2、4、8、16、32......であるから、値が33であれば、この値には1と32しか含まれていないことになる。同様に、値が18の場合、16と2でしか構成できない。そして、値3は1と2からしか構成できない。

つまり、ビット演算は、チェックした値がフラグの和に存在するかどうかをチェックするだけです。任意の数字が18に含まれるかどうかをチェックすると、値2と16をチェックする以外はfalseになる。

 
Alexey Viktorov:

これを理解するためには、フラグとは何かを理解する必要があります。

フラグの次の値は、それぞれ前の値を2倍した値になります。すなわち、1、2、4、8、16、32......であるから、値が33であれば、この値には1と32しか含まれていないことになる。同様に、値が18の場合、16と2でしか構成できない。そして、値3は1と2からしか構成できない。

つまり、ビット演算は、チェックした値がフラグの和に存在するかどうかをチェックするだけです。18に任意の数字が含まれるかどうかを調べると、値2と16をチェックする以外はfalseになります。

はい、2進数の扱い方は理解しています。

   uint filling=(uint)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
   if((filling&SYMBOL_FILLING_FOK)==SYMBOL_FILLING_FOK)
     {
      m_type_filling=ORDER_FILLING_FOK;

このコードから、例えば、この関数は 3 を返します。

(11&1)==1 ; 11==01 いや、それは嘘だ、うまくいかなかったんだ。

書いていて思ったのですが、もしかしたら操作を勘違いしていたのかもしれませんね。

10進数の値を2進数に変換して、ビット単位の演算を行うということです。

== は、第1項と第2項が等しいとき、真となる。これでよいのでしょうか?

 
桁に値があれば真のフラグとなり、トリプレットは両方の桁に値を入れる。ただ、それならなぜこのコードが動作するのか?