どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 701

 

このように解決しました。

int nday;

 if(OrdersTotal()==0)

 {

  double lot=(AccountBalance()/ MinLot)*0.01;

  if(center>Ask && pokupaem>0 && prodaem<1 && prodaem1<1 && SelBuyDaily==Vhodim1 && proverka==1)

  {

   x=OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,Komment,Magic,0,Blue);

   nday=DayOfYear();

  }

  if(OrderSelect(x,SELECT_BY_TICKET)==true)

 {

  if((OrdersTotal()>0 && OrderCloseTime()==0 && OrderType()==OP_BUY) && (nday<DayOfYear() || OrderOpenTime()<iTime(NULL,0,0)))

  {

   if(pokupaem>0 && prodaem<1 && Ask+atr<OrderOpenPrice() && proverka==1)

   {

    x=OrderSend(Symbol(),OP_BUY,OrderLots()*Ml,Ask,3,0,0,Komment,Magic,0,Blue);

    nday=DayOfYear();

   }

  }

 }

 

他のペアでもオープンを否定しないので、初めてループでポジションオープンを書いて みました。

しかし、なぜかループの中では何も開きません開けるのに、本当に専用の輪っかが必要なのか!本当だ、テスターでしか確認してない!?

普通に書きました。

    optal = OrdersTotal();
    for(op = optal-1; op >= 0; op--) 
    { 
      if(OrderSelect(op,SELECT_BY_POS,MODE_TRADES))
      { 
        if(OrderSymbol() != Symbol()) continue;
        if(OrderMagicNumber() != magic) continue; 
// и т.д.

オープニングオーダー、ポジションの何がいけないのでしょうか?ありがとうございました。

 
borilunad:

他のペアでもオープンを否定しないので、初めてループでポジションオープンを書いてみました。

しかし、なぜかループの中では何も開きません開けるのに、本当に専用の輪っかが必要なのか!本当だ、テスターでしか確認してない!?

普通に書きました。

オープニングオーダー、ポジションの何がいけないのでしょうか?ありがとうございました。



注文がない限り、そのサイクルは始まりません。一般的にサイクルのポイントは何でしょうか?
 
borilunad:

他のペアでもオープンを否定しないので、初めてループでポジションオープンを書いてみました。

しかし、なぜかループの中では何も開きません開けるのに、本当に専用の輪っかが必要なのか!

普通に書きました。

オープニングオーダー、ポジションの何がいけないのでしょうか?ありがとうございました。

ループはトレードスレッドが解放されるより早く実行されます。そのため、遅延ループを追加する必要がありますwhile(!IsTradeContextBusy()) Sleep(100)です。
 
valeryk:


注文がない限り、ループは始まらない!一般的にループの目的は何でしょうか?


ありがとうございました。そうだったのか!?ですから、例えば1組目でオープンしたい場合は、ループを使わずに、if(OrdersTotal== 0)で十分なのです。また、同じ商品や別の商品を注文する際にも、ループがあればうまくいきます。これから試してみます!

オープニングでいろいろと変えなければならないのでしょうが、原理的にはどうすればいいのかが理解できましたありがとうございました。

 

実際、悪質な論理もある。最初はよく見ていなかったのですが...。注文を開始する際に、なぜOrdersTotal() が必要なのですか?

さて、ループ内で複数のオーダーを開く必要がある場合、必要なオーダーの数に応じてループを構成する必要があります。そして、この数字を常にサポートする必要があるのなら、他のルールを使わなければならない。

例えば、7つの注文を開く必要があります。

for(int i = 0; i < 7; i++)
{
while(!IsTradeContextBusy()) Sleep(100); // Ожидание освобождения торгового потока

int ticket = OrderSend(Symbol(), ..............); // Открытие ордера
if(ticket > 0) Print("Открылся ордер № ", i, " ticket - ", ticket); // Проверка пропусков при открытии.
}
しかし、これはショートバリアントです。注文を開く際にエラー処理を追加するのが良いアイデアです。
 
AlexeyVik:

実際、悪質な論理もある。最初はよく見ていなかったのですが...。注文を開始する際に、なぜ OrdersTotal() が必要なのですか?

さて、ループ内で複数のオーダーを開く必要がある場合、必要なオーダーの数に応じてループを構成する必要があります。そして、この数字を常にサポートする必要があるのなら、他のルールを使わなければならない。

例えば、7つの注文を開く必要があります

しかし、これはショートバリアントです。注文を開くときにエラー処理を追加するのが良いアイデアです。
!

ありがとうございました。でも、フクロウが他のペアを見ないように、ループが必要ですエラーは後で対処します!ログにエラー130が表示されたときは、うまくいったんだ!と嬉しささえ感じました。エラーは私の外部関数で 処理されます!いつもありがとうございます。
 
borilunad:

ありがとうございました。でも、フクロウが他のペアを見ないように、ループが必要なんですエラーは後で処理します!ログにエラー130が表示されたときは、動いているんだ!と嬉しささえ感じました。エラーは私の外部関数で処理されます!いつもありがとうございます。
それが理屈の悪質さです。フクロウは他のペアが見えないわけがない。すでにOPENしている他のシンボルのORDERを処理しないように強制することができますし、そうすべきです。OrderSend(......)関数の 中に、あるSymbol()を書くか、テキスト形式で、例えば「EURUSD」...と書くと、何でもオープンになる。または開こうとする...
 
AlexeyVik:

実際、悪質な論理もある。最初はよく見ていなかったのですが...。注文を開始する際に、なぜ OrdersTotal() が必要なのですか?

さて、ループ内で複数のオーダーを開く必要がある場合、必要なオーダーの数に応じてループを構成する必要があります。そして、この数字を常にサポートする必要があるのなら、他のルールを使わなければならない。

例えば、7つの注文を開く必要があります

しかし、これはショートバリアントです。注文を開く際にエラー処理を追加するのが良いアイデアです。

これは、1ティックで最大8つの注文を開けることができるかどうかを確認するのに適しています。約束はしていたが、まだ誰もチェックしていない
 
Vinin:

1ティックで最大8つの注文を開く機能をテストするのに適しています。約束はしていたが、まだ誰もチェックしていない

意味がわからない...。