ヘルプできる人 !!!

 

問題に立ち往生

for(int i = 0; i < OrdersTotal(); i++)
  {
    
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;


セレクタはオープンポジションがあれば注文を見つけますが、オープンポジションがない場合、どのようにすれば見つけることができますか? セレクタは最後のクローズポジションを表示したままです。
 
sllawa3:

問題に立ち往生


セレクタはオープンポジションがあれば注文を見つけますが、オープンポジションがない場合、どのようにすれば見つけることができますか? セレクタは最後のクローズポジションを表示したままです...
フラグ
MODE_TRADES
、「セレクタ」にはクローズドポジションは 全く表示されず、オープンポジションのみが表示されます。オープンポジションがゼロの場合、条件が偽となるため、ループは開始されません。
 
Techno:
旗を振って
セレクタにはクローズドポジションは表示されず、オープンポジションのみが表示されます。 オープンポジションがゼロの場合、条件が偽となるため、ループは開始されません。

開始されず、すでに決済された最後のポジションが保存されることは知っています...それは私が書いたものです...オープンポジションは選択注文で確認できますが、ポジションがないことはどのように確認すればいいのでしょうか?
 
sllawa3:

その通り、起動しないし、既に閉じた最後のポーズを保存する...そう言うことです...
何が書いてあるのかわからない。今でも、「クローズドポジションを保存する」というのはどういうことですか?ポジションの計算ということであれば、推測ですが、スタート関数の最初にすべての変数(注文 数を格納するための)をゼロにする必要があります。つまり、ループの前です。ループの後、それらが空のままであれば、ポジションがないことを意味する。
 
トピックの最初にあるコードの一部...ポジションがない場合、新しい注文が出るまでDSは=1のままです...注文が終了しているのに...選択するだけで起動しない...何がわからないんだろう...。
 
Techno:
が明確に書かれていない。今でも、「ポジションを閉じておく」とはどういうことなのでしょうか。推測ですが、ポジションを計算するということであれば、スタート関数の最初にすべての変数(注文数を格納するためのもの)をゼロにリセットする必要があるのではないでしょうか。つまり、ループの前です。ループの後、それらが空のままであれば、ポジションがないことを意味する。

DSは最初、ループの前にint = 0と書かれている
 
Techno:


ので、サイクルが始まらなければリセットされないし、ポーズがなければ始まらな
 
sllawa3:

DSはサイクル前にint = 0として初期設定される
あ、そうか、規定で0が割り当てられるなら問題ないんだ、そうでなければなぜ1に等しくなるんだ?スタート機能以上で0を代入しているのでしょうか?
 
 
問題はないかもしれないが、あるのだ......自分の目で見て、試してみてほしい
 
これはどうでしょう?
DS=0;
for(int i = 0; i < OrdersTotal(); i++)
  {
    if (DS==0) DS=-1;
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;
}
if (DS==0) // поз никаких нет
if (DS==-1) // позы есть, но нету БАЙ
if (DS==1) // есть БАЙ