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

 
Leonid123456:

for this EA last))です。実は、うまくいったんです。 最後の1枚だったんです))。Expert Advisorはテスト用です...ですから、複数の通貨とマニュアル取引(併用)の仕事は、まだ想定していません...。

今後のヒントになるようなことを教えてもらえると嬉しいのですが...。

いつもありがとうございます。

もし必要なら、成行注文と保留中の注文を区別する必要があります。 通常、すべての基準(シンボル、マジシャン、タイプ)で最初に出会ったものが最も新鮮なものです。 しかし、それが確実に若くないように、開始時刻 も見た方が良いでしょう。

テスターでは、以下の項目を一度に選択できます。

OrderSelect(OrdersTotal()-1,SELECT_BY_POS))

システムに未決済注文がない場合は、すべて正常に動作します。しかし、保留中の注文と成行注文の両方がある場合は、実作業はもちろんのこと、これではうまくいきません。

 
Leonid123456:

for this EA last))です。実は、うまくいったのです。 最後の1枚でした))。Expert Advisorはテスト用です...ですから、複数の通貨とマニュアル取引(併用)の仕事は、まだ想定していません...。

今後のヒントになるようなことを教えてもらえると嬉しいのですが...。

いつもありがとうございます。

余計なことは書かない方が正しい。なぜネストしたループを入れたのですか?何しろ、必要なことはすべて1回の注文選択でループさせることができるのですから。

if(New_Bar)
{
OrderSend(Symbol(),OP_BUYSTOP,Lotpers,Ask+step,100,0,0,NULL,MagicNumber,0,DarkTurquoise);
OrderSend(Symbol(),OP_SELLSTOP,Lotpers,Bid-step,100,0,0,NULL,MagicNumber,0,Yellow);
}

 for(int b=0; b<OrdersTotal(); b++)
  {
   if(OrderSelect(b, SELECT_BY_POS) && OrderSymbol() == _Symbol && OrderMagicNumber() == MagicNumber)
    {
     lastlot = OrderLots();
   // Здесь надо в переменную засунуть тикет выбранного ордера
     if(OrderType() == OP_BUYSTOP||OrderType() == OP_BUY)
      orderprisebuy = OrderOpenPrice();
   
      if(OrderType() == OP_SELLSTOP||OrderType() == OP_SELL)
       orderprisecell = OrderOpenPrice(); 
         
        SL_VirtualCell = orderprisecell+step1*Point;
        SL_VirtualBuy = orderprisebuy-step1*Point;

                          /*  if(Mas_Tip[0] >0|| Mas_Tip[1] >0)
                                               {
if (New_Bar&&/*valsar1<Ask &&  osma0>0&&osma1<0    /*&& Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_BUY,NormalizeDouble( lastlot*Marti,2),Ask,100,0,0,NULL,MagicNumber,0,DarkTurquoise);

if (New_Bar&& /*valsar1>Bid && osma0<0&&osma1>0    /* && Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_SELL,NormalizeDouble( lastlot*Marti,2),Bid,100,0,0,NULL,MagicNumber,0,Yellow);       
         
}*/

CheckEvents(MagicNumber); // Вот здесь теряется выбранный ордер при переборе ордеров в вызванной функции

/*if ( eventSellClosed_SL >0|| eventBuyClosed_SL >0)
{        as();
                

 }
  /* ///   if ( eventBuyClosed_TP > 0 )
   //     Alert( Symbol(), ": Buy-позиция закрыта по ТейкПрофиту!" );

   */
    if(eventBuyStopOpened > 0)
     {
      OrderSend(Symbol(),OP_SELLSTOP,NormalizeDouble( Lotpers,5),orderprisecell,0,0,0,NULL,MagicNumber,0,clrKhaki); 
 
      if (OrderType() == OP_SELL)
       OrderClose(OrderTicket(),OrderLots(), Ask, 3,clrIvory );  // Здесь может быть чужой OrderTicket() Возможны и другие аналогичные потери
     }//завершение блока if(eventBuyStopOpened > 0)
 ///

  if(eventSellStopOpened > 0)
  {
  OrderSend(Symbol(),OP_BUYSTOP,NormalizeDouble( Lotpers,5),orderprisebuy,0,0,0,NULL,MagicNumber,0,clrPlum);
 
   if (OrderType() == OP_BUY)
    OrderClose(OrderTicket(),OrderLots(), Bid, 3,clrIvory );  
  }//завершение блока if(eventSellStopOpened > 0)
 }//завершение блока if(OrderSelect(b
}//завершение блока for(int b=0


複数行の コメントがあるところ、うまく入り込めませんでした。何か、そこでコンパイルエラーになりそうな気がして...。コード中の私のコメントに注目してください。

 
Zhunko:
何が言いたいの?
お疲れ様でした
 
AlexeyVik:

余計なことを書かない。なぜネストしたループを入れたのですか?なぜなら、必要なことはすべて1回の注文選択でループさせることができるからです。


複数行のコメントがあるあそこは、なんとか理解できません。何か、そこでコンパイルエラーになりそうな気がして...。コード中の私のコメントに注目してください。

エラーはありませんが、OrderSend.OrderClose.OrderDelete 関数を確認するようにとの指摘があります。

OrderSend' の戻り値をチェックする必要があります。 .

コメントありがとうございます。

 

ArrayMinimum"を使って配列の中から "ZigZag "インジケータの最小値を探す。

NULL値を無視するように検索を設定できますか?それともループを使って検索しなければならないのでしょうか?

 
コーディングの仕方がわからない。最後のポーズが不採算だった場合、EAに一定時間待機させる必要がある。何か心当たりはありますか?
 
Forexman77:

ArrayMinimum"を使って配列の中から "ZigZag "インジケータの最小値を探す。

NULL値を無視するように検索を設定できますか?それともループを使って検索しなければならないのでしょうか?

ほとんどの場合、ループを使用する必要があります。
 
Vinin:
おそらく、ループを使用する必要があります
ありがとうございました。
 

最大値と最小値の間の最も深い補正値をどのように求めるか。最大値と最小値は既知なので、iHighest と

iHighestとiLowestを使用すると、図のように常に極値であるとは限らないため、極値付近を見つけることができる場合があります。一般的には、ABCフォーメーションの識別が必要です。

そのためにZigZagを適用してみたが、正確なヒットには至らない。

е.

 

Forexman77:

最大値と最小値の間の最も深い補正値をどのように見つけるか?最大値と最小値は既知なので、iHighest と

iHighestとiLowestを使用すると、図のように常に極値であるとは限らないため、極値付近を見つけることができる場合があります。 一般的には、ABCフォーメーションの識別が必要です。

そのためにZigZagを適用してみたが、正確なヒットには至らない。

どのような深さを求めるべきかを判断すれば、すべてが簡単になる。iLowestの 代わりに、CopyLowと ArrayMinimum() を使うことができます。