[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 347

 

こんにちは、質問です。固定されたフラクタルに対してのみ演算を行うようにするには、コードにどのように書けばよいのでしょうか。

フラクタルが固定されているとしたら、それは・・・。

マイフラクタル

int start()
  {
//----
    double CenBuy = High[isFractalUp()];
     double CenSell = Low[isFractalDn()];

   return(0);
}

int isFractalUp()
{
 for(int i=0; i != 10; i++)
 {
 if(iFractals(NULL, 0, MODE_UPPER, i)!= NULL) return(i);
 }
 return(-1);
}
 
int isFractalDn()
{
 for(int i=0; i != 10; i++)
 {
 if(iFractals(NULL, 0, MODE_LOWER, i)!= NULL) return(i);
 }
 return(-1);
}
 
hoz:

うーん、そうですね、各方向の保留注文の数が同じであれば、この方法で適切な保留注文を見つけることは問題ありません。そして、もし違うのであれば、私の理解するところでは、これはうまくいかないでしょう。

そして、保留中の注文が発生した事実を判断し、最も遠い反対側の注文を削除します。

これらはすべて、ある 瞬間のある事実とある 保留中の注文に対してのみ行われる。あなたがやろうとしているように、トリガーされた数、削除された数を作る必要はありません。保留中の注文が1ティックで変換される事実をキャッチすることができます。その他のトリガーは(もしあれば)次のティックで決定されます。

 
誰が知っているか教えてください。平日と週末でテスターの結果が異なるのはなぜですか?アルパリ
 

berezhnuyは、週末になると数倍にもなるスプレッドがあるためです。

 

プログラマーの皆様、以下は買い注文と売り注文をカウントして、買い注文 または売り注文を 1つだけ開くためのコードです。

int CountBuy()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
。{
if(OrderType() == OP_BUY)
count++;
}

}
return(count)
}
//+------------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
。{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() &)& OrderMagicNumber() == magic)
{
if(OrderType() == OP_SELL)
count++;
}

}
return(count);
}.

そして、すべてが機能しているように見えますが、私のEAでは、いくつかのローソク足パターンでTPとSLを使用して売買する条件があります。しかし、この条件が満たされ、TPがトリガーされると、ローソク足の0本目の形成時にまだ注文を出す条件が残っており、その時点では出してはいけない新規注文が出されてしまうのである。これ以上注文を出さないようにするには、どのようなコードを使用すればよいか教えていただけないでしょうか。EA本体は添付のとおりです。

ファイル:
expert.mq4  4 kb
 
artmedia70:

そして、トリガーされた保留中の注文の事実を判断し、最も遠い反対側の注文を削除します。

これらはすべて、たった 度の事実のために、たった一度の ために行われるものです。あなたがやろうとしているように、トリガーされた数、削除された数を作る必要はありません。保留中の注文が1ティックで変換される事実をキャッチすることができます。その他のトリガーは(もしあれば)次のティックで決定されます。



また、1ティックあたりのパス数が多い場合はどうでしょうか?例えば、オーダー間のステップが非常に小さい場合、複数のオーダーがトリガーされる可能性があります。もちろん、必要なアクションをすべて時間内に行うことはできません。
 
hoz:

ダニでもっと通過したらどうするんだ?例えば、注文間のステップが非常に小さい場合、複数の注文をトリガーすることができます。もちろん、必要なアクションは間に合いません。
現在のバーでトリガーされた注文を検索するオープンポジションの ループと、同じループ内で保留中の注文を削除する。
 
artmedia70:
現在のバーでトリガーされた注文を検索するためのオープンポジションのループと、同じループ内のポジションの削除です。


まあ、このループが繰り返され、またすべてが削除されることになるのですが。また、今持っているバリアントには条件があります。

 while (ordersToDelete > 0)                      // Если есть ордера, которые требуется удалить..
   {
      OrderDelete(s_ticket,Black);
      ordersToDelete--;                        // Уменьшаем количество требуемых ордеров для удаления на 1, т.к. строкой выше..
                                               // .. один отложенник уже удалили
   }

つまり、ordersToDeleteが 0になるまで削除する必要があります。しかし、それはすべてを破壊してしまう。初歩的なことのように思えますが、ある種の暴挙が起こります。価値のないチュートリアルに、そんな瞬間はまったくない。すでに両方の方法で試して、いろいろと書き直したのですが、思うようにいきません。

 

書き換えが違う。

//+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells(int& amountOfCurrPending)
{
   int total = OrdersTotal() - 1,
       ordersToDelete = level - amountOfCurrPending,  // Количество отложек, которые требуется удалить
       s_ticket = -1,                                 // Тикет искомого ордера
       np = -1;                                       // Номер позиции искомого ордера
   amountOfCurrPendingBuys = 0;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0;                      // Количество текущих отложек на продажу

   double OOP = 20.0;                                 // Зададим значение цены открытия отложки, которой не может быть..
   
   if (ordersToDelete == 0) return (0);               // Если ничего удалять не нужно, выйдем из функции

   for (int i=total; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if(OrderType() != OP_SELLSTOP) continue;         // Работает только с шортовыми ордерами
      
      if (OOP > OrderOpenPrice())
      {
          OOP = OrderOpenPrice();                  // Ищется ордер, с минимальной ценой открытия
          np = i;
      }
   }
   if (OrderSelect(np,SELECT_BY_POS))
   {
      s_ticket = OrderTicket();                // Получаем тикет ордера с минимальной ценой открытия
      OrderDelete(s_ticket,Black);
   }
   
   return (0);
}

金さん、同じく探しています。最低始値を 持つ注文を見つけ、そのポジションを定義し、この注文を選択し、チケットを定義し、それを削除しました。しかし、削除されることはありません。

 
また、ダイレクトトランスファーで、そのような注文がない場合はどうなるのでしょうか?ゼロオーダーを削除するのでしょうか