各通貨ペアのEA - どのようなコードは、通貨ペアごとに一度だけ開くには? - ページ 3

 

から、閉じる機構を変更しました。

for (int j = 0; j < OrdersTotal(); j ++) 
   {
      if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one        
          {                                          // Analyzing orders:        
              if (OrderSymbol()==Symbol())continue;       // Another security    

//--------------Exit criteria (Exit Buy)    

                    
                if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;      // Trigger for CloseBuy (more can be added)
                if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL;   // Trigger for Closesell (more can be added)
                         
                        if (Order == SIGNAL_CLOSEBUY) 
                         {
                         OrderClose()

に変更しました。

for (int k = 0; k < OrdersTotal(); k ++) 
   {
      OrderSelect(k, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() <= OP_SELL &&  OrderSymbol() == Symbol()) 
      {
        if(OrderType() == OP_BUY) 
         {   

//--------------Exit criteria (Exit Buy)    

                    
                if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;      // Trigger for CloseBuy (more can be added)
                if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL;   // Trigger for Closesell (more can be added)
                         
                        if (Order == SIGNAL_CLOSEBUY) 
                         {
                         OrderClose(....)

に変更したところ、すべてが期待通りに動作するようになりました。しかし、私はその理由を理解していません。なぜなら、2番目のコードに追加された行が本当に理解できないからです。でも、ありがとうございました。

 
grey.unit:

から、閉じる機構を変えています。

に変更しました。

に変更したところ、すべてが期待通りに動作するようになりました。ありがとうございました。

ループの中で未決済の注文を閉じたり、保留中の 注文を削除するときは、カウントダウンしなければならないので... ループを変更する必要があります。そして、あなたはSymbol()にチャックを戻す必要があります ... そうしないと、EURUSDのEAはGBPUSDの注文を閉じる可能性があります ... あなたが必要としたのは、継続を 取り除くことでした ... または==!= にします
 
grey.unit:

から、閉じる機構を変更しました。

に変更しました。

に変更したところ、すべてが期待通りに動作するようになりました。しかし、私はその理由を理解していません。なぜなら、2番目のコードに追加された行が本当に理解できないからです。でも、ありがとうございます。

あなたの2番目のコードは正しいですが、少しおかしいです。MetaEditorを開き、ナビゲーターウィンドウ(Ctrl + D)、辞書タブ、そしてMQL4 Reference > Standard constants >Trade operationsを 選択してください。

 
RaptorUK:
ループの中で未決済の注文を閉じたり、保留中の注文を削除するときは、カウントアップではなく、カウントダウンしなければ なりません。そして、Symbol()にチャックを戻す必要があります ... そうしないと、EURUSDのEAがGBPUSDの注文を閉じる可能性があります ... あなたが必要としたのは、継続を 取り除くことでした ... または==!= にすることです。

ただ、正しく理解するために。あなたが言っているのは、もし私が最初のコードを修正して

for (int j = 0; j < OrdersTotal(); j --) 
   {
      if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one        
          {                                          // Analyzing orders:        
              if (OrderSymbol()==Symbol())       // Another security    
                 {

//--------------Exit criteria (Exit Buy)    

                    
                if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;      // Trigger for CloseBuy (more can be added)
                if (CloseSell1_1 <= CloseSell1_2) Order = SIGNAL_CLOSESELL;   // Trigger for Closesell (more can be added)
                         
                        if (Order == SIGNAL_CLOSEBUY) 
                         {
                         OrderClose(....)

に変更すれば、それも動作するはずだということですか?私はこれを試してみたので、それはちょうど再び通貨ペア ごとに1つの注文を開いている。

あるいは、2番目のコードを(k++からk--)に変更すると、それも1つの通貨ペアに1つの取引しか開きません。

for (int k = 0; k < OrdersTotal(); k --) 
   {
      OrderSelect(k, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() <= OP_SELL &&  OrderSymbol() == Symbol()) 
      {
        if(OrderType() == OP_BUY) 
         {   
 
grey.unit:

ただ、正しく理解するために。あなたが言っているのは、もし私が最初のコードを修正して

に変更すれば、それも動作するはずだということですか?私はこれを試してみたので、それはちょうど再び通貨ペアごとに1つの注文を開いている。

また、2番目のコードを(k++からk--)に変更しても、1つの通貨ペアに1つの取引しか開きません。

私は最初のコードについて話しています、あなたが使用しているループは、注文を閉じる... ...それはデクリメントする必要があります... ...そうでなければ、注文を見逃すことになります。 私はあなたがcontinueを 削除し、 { } 中括弧を追加したことを参照してください、非常に良い:-)。

通貨 ペアごとに1つの注文を出すのか、それとも全部で1つの注文を出すのか?

 
RaptorUK:

1つの通貨ペアで1つの注文を出すのか、それとも合計で1つの注文を出すのか?

はい、もちろん合計でです。さて2つ目のコードです。


for (int j = 0; j < OrdersTotal(); j ++) 
   {
      if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) // If there is the next one        
          {                                          // Analyzing orders:        
              if (OrderSymbol()==Symbol())continue;       // Another security    

ループについて話しているとき、私はあなたがこれを意味すると思います。

for (int j = 0; j < OrdersTotal(); j ++)

実際、私ならこのように変更します。

for (int j = OrdersTotal()+1 ; j > OrdersTotal(); j --) 
   {

この行は、1つの通貨 ペアにつき1つの注文しか開きません(希望通り!)。

ループはこの問題に関して正しいですか?

RaptorUK です。

ループの中で未決済の注文を閉じたり、保留中の注文を 削除するときは、 カウントアップではなく、カウントダウンを しなければ なりません。 そして、あなたはSymbol()にチャックを戻す必要があります ... さもなければ、EURUSDのEAはGBPUSDの注文を閉じる可能性があります ... あなたがする必要があったのは、 continueを 取り除くこと でした .. .... または ==!= にすることです。
 
grey.unit:

ええ、もちろんトータルで。さて、2つ目のコードです。


ループについて話しているとき、私はあなたがこれを意味すると思います。

実際、私ならこのように変更します。

この行は、通貨ペアごとに1つの注文しか開きません(希望通り!)。

この問題に関して、ループは正しいですか?

いいえ、こうしてください ... ...

for (int j = OrdersTotal()-1 ; j >= 0 ; j --)   // start at OrdersTotal() -1 ,  finish when j = 0

最初の注文の位置は0なので、5つの 注文がある場合、位置は0、1、2、3、4 ... だから最後はOrdersTotal() - 1 ... だからカウントダウンするには、OrdersTotal()-1から始めて0を終了させる。

 
わかりました、ありがとうございます。
 
RaptorUK:

いいえ、こうしてください ... ...

最初の注文の位置は 0 で、5 つの 注文がある場合の位置は 0、1、2、3、4 ... で、最後の位置は OrdersTotal() - 1 ... なので、カウントダウンするには OrdersTotal()-1 から始めて 0 で終了します。

ということで、このようになるはずです。

for (int j = OrdersTotal()-1 ; j = 0 ; j --) 

というのは、あなたがこう書いたからです。

for (int j = OrdersTotal()-1 ; j >= 0 ; j --) 

それとも、私が間違っているのでしょうか?

 
grey.unit:

だから、こんな感じになるはずです。

というのは、あなたがこれを書いたからです。

ということになるのですが、間違っていますか?

あなたは大間違いです。あなたのコードは決して実行されません!!。RaptorUKのものを使ってください。