どのデザインが正しいのでしょうか? - ページ 4

 
Martingeil:
こんな感じで作ってください。

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

紛らわしいのは、このセリフです。ここでは全く必要ないと思います。それとも私が間違っているのでしょうか?

 
valenok2003:

紛らわしいのは、このセリフです。ここでは全く必要ないと思います。それとも私が間違っているのでしょうか?

それは、魔法の記号を切り取ること

検索するときは、まず、マジックのない記号だけの注文を検索し、そのような注文がなければ機能を停止する......、そのような記号の注文が見つかったら、その中からマジックを検索し、取引の流れに空きがあれば、マジックの一致するものをクローズさせる。

 
valenok2003:

紛らわしいのは、このセリフです。ここでは全く必要ないと思います。それとも私が間違っているのでしょうか?

全オーダーを削除するということであれば、この行は不要です。正規化については、組み込みのスクリプトが、何をもって例とすべきと考えるのでしょうか。
 
Martingeil:

その特定のキャラクターのマジカルをカットする必要がある

検索するときは、まず、マジェスティックなしのシンボルだけの注文を検索し、なければ機能を停止し、そのシンボルの注文があれば、それらを調べ、マジェスティックに一致するものを見つけ、取引の流れに空きがあれば、それらをクローズします。

また、MagicNumberはOrderMagicNumber()で取得するため、事前にどうやって知ることができるのでしょうか?また、セリフの他に
OrderSymbol() == Symbol()

が重複している。

また、この行

Print ("close ALL orders Type : order :  Bid  "+OrderType()+" :  "+OrderOpenPrice()+"  :  "+Bid);

そのようなmajikがない場合、機能は動作を停止し、そのようなmajikがある場合はそれらを検索します。

 
Techno:
注文をすべて削除するということであれば、この行は不要です。正規化については、組み込みのスクリプトが、何をもって例とすべきと考えるのでしょうか。


まあ、結局のところマルクスか。
 
Martingeil:

この特定のシンボルのマジックをカットする必要があります。

注文を検索するとき、まずマジックナンバーのない注文を検索します。そのような注文がない場合、この関数は動作を停止します......そのような番号の注文を見つけた場合、すべての注文を調べてマジックナンバーを見つけ、取引の流れに空きがあればマジックナンバーに一致するすべての注文をクローズします。

なるほど、全注文を閉じるという話だけですね、だから最初わからなかったんです。

私は、あなたの例を勝手にこんな風にアレンジしてみました。

  for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      if (OrderMagicNumber() == MagicNumber)
      {
        while (!IsTradeAllowed()) Sleep(1000);
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
      }
    }
  }

しかし、すべての注文を終了するために

  for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
    }
  }
 
valenok2003:


まあ、結局はマルクス。
エンゲルスも)人格カルトは必要ない、自分の知識で書けばいい。)
 
valenok2003:
このような意味であれば

の場合、コードの透明性を高めるために、ここに余分な変数があります。

それとも別の話かな?

void Close_All()
{
  int Total = OrdersTotal();
  for (int i=Total; i >=1; i--)                                                        
  {                                                                                          
    if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
    {
      switch(OrderType())
      {
        case OP_BUY : OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5); break;
        case OP_SELL: OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5); break;
        default     : break;
      }        
    }
  }  
}

この場合、それはこうです。

C/C++の「共通規格」は.NETです。

void Close_All()
{
  int Total = OrdersTotal();
  for (int i=Total-1; i >=0; i--)                                                        
  {                                                                                          
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
      switch(OrderType())
      {
        case OP_BUY : OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5); break;
        case OP_SELL: OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5); break;
        default     : break;
      }        
    }
  }  
}

操作回数の違い。この場合、あまり影響がないのであれば、例えばテスターのスタイルの違いは、最適化時間に顕著な影響を与えることになります。現実の世界では、スピードに影響し、それが致命的な場合もあります。

特にブレーキはそのようなデザインです(私はあなたのサイトで見たことがありませんが、なぜかほとんどの人がそれを好むのですね)。

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

ここでは、ループの各パスで関数が呼び出されて います。演算コストの面では、最も「高い」演算である。

頑張ってください。

そういう意味で、コードを修正したんですね。

 

その結果、このようなスクリプトが出来上がりました。

//+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
    }
  }
//----
   return(0);
}
//+------------------------------------------------------------------+
質問 - なぜいつもすべての注文が終了しないのですか?例えば、売り注文を3つ連続で出して、スクリプトで決済しようとすると、1つ、2つ、または全部が決済されることがあります。その理由は何でしょうか。
 

まさか、数ある選択肢の中から間違ったものを選ぶとは、とんでもないことだ。コーディングなんてするもんじゃないな、小僧。

再引用で 閉まらない。

理由: