[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 39

 
artem86:

お願いします。5つの保留注文を同じマジックで決済する方法。

ありがとうございました。


if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {  if(OrderMagicNumber()==magic_number)
         {  if (OrderClose(OrderTicket(),LOT,price,3)==true)
            {  Print("Error = ",GetLastError()); return(0);
}  }  }  }  }
これらの注文がすべて売りで出された場合、価格=Ask、買いの場合、価格=Bidと なります。
 
paladin80:
売り注文の場合は価格=Ask、買い注文の場合は価格=Bidとなります。


間違っている、あなたがすべき

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {  if(OrderMagicNumber()==magic_number)
         {  if (OrderDelete(OrderTicket())==true)
              {  
              Print("Error = ",GetLastError()); return(0);
              } 
         } 
      }  
   }  
}
 
r772ra:


間違っている、あなたがしなければならない

しまった、保留中の注文を 閉じるべきだったことに気づかず、ポジションを閉じることを考えていた。
 

みんな - 私に教えて、テスターで、その後、手動で含む取引口座で取引するとき、それはそれが必要なボリュームによって開かれる間、オープンポジションの ボリュームをノーマライズすることが可能でないことが判明しました。例えば、私が0.1210ロットの注文を出すと、ターミナルは0.12で開きます。つまり、「余分な」端数部分はデフォルトで破棄されます。

これも端末の「バージョンアップ」なのか、もともと可能だったのか、アドバイスをお願いします。

私は前にボリュームの正規化のこの方法を使用しているが、私は私のOPSと注文が開き続けるのいずれかでこの点を逃し、Expert Advisorsタブは、ポジションを開く前に私に開かれる予備量、特に、0.121ロットを与える - 私は、デモ口座でこれをテストしています。

ロットの正規化機能。

//+------------------------------------------------------------------+
//| Нормализация лота                                                |
//+------------------------------------------------------------------+

double NormalizeLots(double lot)
{
   double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
   double lots = NormalizeDouble(lot / lotStep, 0) * lotStep;   
   lots = MathMax(lots, MarketInfo(Symbol(), MODE_MINLOT));
   lots = MathMin(lots, MarketInfo(Symbol(), MODE_MAXLOT));   
   return (lots);
}

EAスタートから呼び出す。

// ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...            
                    Lots_New = NormalizeLots(Lots_New);
                    if (lastType == OP_SELL) WmOrderSend(Symbol(), OP_BUY, Lots_New, Ask, 0, 0, "итерация" , MagicNumber);
                    if (lastType == OP_BUY)  WmOrderSend(Symbol(), OP_SELL,Lots_New, Bid, 0, 0, "итерация" , MagicNumber);

誰がそれを認識している - コメント、plz...

P.S. 再度確認したところ、どうやら0.1466のボリュームを開こうとすると、0.14を開く、つまり小数点以下の第2記号の右側をすべて拒否する状況があるようです。

正規化すると、0.15ロット-つまり四捨五入で開くようです。

調べてみないと...。

P.P.S. All same:Who knows - comment, please...

 

クソ無視。

 
HELP...PLEASE...Expert Advisorをデモとリアル口座で動かしていますが、次のティックで開始されますと表示されます。ティックは来ますが、「EAを取引可能にする」オプションはチェックされていて、EAも有効になっており、ログにエラーもなく、インターネットも機能して、他のEAも機能しています。このアドバイザーはテスターでは正常に機能しています。役立つとしたら: この記事から フィルタ機能をEAに追加したら起動しなくなりました
 
sellena:
参考になれば:この記事に あるフィルター機能を追加したらEAが起動しなくなりました

もしよろしければ、ここで働いて いる人に声をかけてみてください。
 
sergeev:

もしよろしければ、ここで働いて いる人に声をかけてみてください。
アレックス、時間があったら私の質問を見てください...。ありがとうございます。
 
Roman.:
アレックス、時間があったら私の質問を見てください...。ありがとうございます。

ひとつ言えるのは、すでに(別の機会に)サービスに問い合わせたところ、「 デフォルトに頼るのは有害だ、確かめたいなら独自のフィルタや処理を 使え」と言われました。 だから、あなた次第なんです...。
 
Roman.:
アレックス、時間があったら私の質問を見てください...。ありがとうございます。 。

FAQにちゃんと書いてある。デフォルト」に頼ってはいけない。というのも、オーダーを送る 前に正規化を行わないと、131エラー(ロット違い)がよく出た記憶があるからです。
たぶん、今のMMOは、執行のための注文を送るときに、サーバーのデフォルトのロットチェックを独自にやっているのだと思います。

ですから、送信前に必ずご自身で価格とロットの正規化を行う必要があります。

これはあなたにとって、良いコーディングのルールであり、将来起こりうる問題に対する手間を減らすための誓約でもあるのです。