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

 

通貨ペア ごとに別のEAを使用しています。

ポジションを建てるべきかどうかを確認するために、「if (OrdersTotal<1)」でオープンオーダーがないかどうかをテストしますが、これでは他のすべての通貨ペアのポジションがブロックされてしまい、チャンスを逃すことになります。

つまり1つの通貨ペアで1つだけポジションを持ちたいのですが、異なる通貨ペアで複数のポジションを持つことは可能なはずです。

if (OrdersTotal<1) "の代わりにどのようなコードを使用すればよいのでしょうか?どなたか教えていただけませんか?あなたの助けを事前にありがとうございました。

 

各通貨ペアは、例えば "MyEA_EURUSD "のように、それ自身のGlobalVariableを持つようにします。

もしEAを1日1回の取引に制限している場合、コードは次のようになります。

文字列 sCheck = "MyEA_" + Symbol();

datetime t = TimeCurrent();

datetime tTrade = t - TimeHour(t)*60*60 - TimeMinute(t)*60 - TimeSeconds(t)です。

if(!GlobalVariableCheck(sCheck))GlobalVariableSet(sCheck, tTrade -PERIOD_D1 * 60);

if(GlobalVariableGet(sCheck))<tTrade){(GlobalVariableGet(sCheck)の場合)。

OrderSend(......)。

GlobalVariableSet(sCheck, tTrade);

}

 

この件をトップに戻して申し訳ありませんが、私も今同じ問題を抱えています。残念ながら、sxTedは私に質問に答えてくれませんでした。なぜなら、取引時間を記述することは、各通貨 ペアの注文量とは異なるものだからです。

私はsxTedのラインを修正しようとしましたが、この問題を解決するためにひどい失敗をしたと思います。

string sCheck = "MyEA_" + Symbol();      // already the first error in the code, second quotes should be at the end of the line.

//I would correct this one to:
string sCheck = "MyEA_ + Symbol()";          //However symbol() is not a function anymore ??


int start ()
{

// Closing Orders here


if(!GlobalVariableCheck(sCheck))                    //checking Globalvariable, GV available so it becomes true (independently of what kind of GV we have)...

GlobalVariableSet(sCheck, Symbol() );               //.. assigning a new GlobalVariable to the function of the current symbol the EA is attached on (does it actually work like this?)

if(GlobalVariableGet(sCheck) == Symbol()) {         // checking if our Symbol is the one which the EA is attached on --> becomes true...


// Order Criteria (Open trades here)

// What now? Actually i'm missing any kind of numbers or smth that limits the open orders per currency pair.

このような場合、この本を読んでいるときに、この問題を解決する必要があります。

 
mqlfor:

通貨ペアごとに別のEAを使用しています。

ポジションを建てるべきかどうかを確認するために、「if (OrdersTotal<1)」でオープンオーダーがないかどうかをテストしますが、これでは他のすべての通貨ペアのポジションがブロックされてしまい、チャンスを逃すことになります。

つまり1つの通貨ペアで1つだけポジションを持ちたいのですが、異なる通貨ペアで複数のポジションを持つことは可能なはずです。

if (OrdersTotal<1) "の代わりにどのようなコードを使用すればよいのでしょうか?どなたか教えていただけませんか?あなたの助けを事前にありがとうございました。


int total=OrdersTotal(); int count = 0; int magno = 12345; for(int pos=0;pos<total;pos++) { if(OrderSelect(pos,SELECT_BY_POS) == false) continue; if (OrderMagicNumber() != magno) continue; if (OrderSymbol() != Signature()) continue; // このEAは、このシンボルの注文をいくつ出しているかがわかります。= Symbol()) continue; count++; } // これで、このEAがこのシンボルに対して開いている注文がいくつあるかがわかります。
 
texto:

これは役に立つのか?
マジックナンバーは必要ありません ... ... シンボルを使ってください
 
texto:

これは役に立つのでしょうか?
int total=OrdersTotal();

は、全通貨 ペアの未決済注文の合計を制限するかどうか?

以下のようにあなたのコードを挿入しましたが

int total=OrdersTotal();
int count = 0;
for(int pos=0;pos<total;pos++) 
{
    if(OrderSelect(pos,SELECT_BY_POS) == false) continue;
    if (OrderSymbol() != Symbol()) continue;
    count++;
}

if (Sell_1_1 < Sell_1_2 && CloseSell1_1 > CloseSell1_2 && count < 1) Order = SIGNAL_SELL; // Trigger for Sell

if (Buy_1_1 > Buy_1_2 && CloseBuy1_1 < CloseBuy1_2 && count < 1) Order = SIGNAL_BUY;    // Trigger for Buy


if (order == SIGNAL_BUY)
{
OrderSend(...)
}   

を挿入したのですが、まだ1つの取引しか開いていません。sxTedはグローバル変数で何を伝えようとしていたのでしょうか?

 
grey.unit:

は、全通貨ペアの未決済注文の合計を制限するかどうか?

以下のようにあなたのコードを挿入しましたが

を挿入したのですが、まだ1つの取引しか開いていません。sxTedはグローバル変数で何を伝えようとしていたのでしょうか?

EAをいくつのチャートで使用していますか?
 
RaptorUK:
EAを何枚のチャートに表示させていますか?
テスト用に5つのチャートを開いていますが、N個のチャートを開き たいのですが。その数は問題ではありません。
 
grey.unit:
テスト用に5つのチャートを開いたが、N個のチャートを開きたい数量は問題では ありません。
EAが他のペアで何が起こっているかに関係なく、各ペアで取引を開始することを確認するために、一度に各ペアでコードをテストしましたか? おそらくあなたのEAは、1つの特定のペアでしか取引を開始しないので、1つの取引を開始するだけです ... ....
 
確かにそうです。例えばEURJPYでオープントレードをしていて、それを手動でクローズすると、別のEAが別の通貨ペアでトレードをオープンするかもしれません。
 
mqlfor:

通貨ペアごとに別のEAを使用しています。

ポジションを建てるべきかどうかを確認するために、「if (OrdersTotal<1)」でオープンオーダーがないかどうかをテストしますが、これでは他のすべての通貨ペアのポジションがブロックされてしまい、チャンスを逃すことになります。

つまり1つの通貨ペアで1つだけポジションを持ちたいのですが、異なる通貨ペアで複数のポジションを持つことは可能なはずです。

if (OrdersTotal<1) "の代わりにどのようなコードを使用すればよいのでしょうか?どなたか教えていただけませんか?あなたの助けのために事前にありがとうございます。

このようなコード:

 int Total_Order = OrdersTotal();
 for (pos = 0; pos <= Total_Order; pos ++)
      {
      if (OrderSelect (pos, SELECT_BY_POS) == true)
        {
        if (OrderSymbol () == Symbol ())
          {
          Print (":( Sorry already have that symbol opened ");
          // get outta here do something else
          break ;
          }
          else
          {
          Print ("No order opened for this symbol");
          Print ("Let\'s call waitress and order some drink :)");
          // do some order then break out and get out
          }
         }
       }
理由: