[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 149

 

ここで、先日、類似の質問に答えてみました。

https://www.mql5.com/ru/forum/109048/page11

-調べてみてください。

あなたの場合、おそらくこんな感じでしょう。

if ( AutoClose) { //если выключатель закрытия включен 

//----------------------------------------------------------------------
  for (int v=0; v<OrdersTotal(); v++)                             {       
      if (OrderSelect( v, SELECT_BY_POS, MODE_TRADES))               {           
        if (OrderSymbol()==Symbol()&& OrderMagicNumber()== MagicNum)   { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { 
      
           OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
                 //return(0); // выходим
                }       
      
 //--------------------------------------------------------
if (OrderType() == OP_SELL) { 
     
                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                // return(0); // выходим
                }       
   
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total
} //Close_
 

皆さん、以下の違いについて説明してください。

NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,10,0)],4)
から
NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,iBarShift(NULL,0,Time[1],FALSE),1)] + 10 * Point,4)

iBarShiftとは何か、 何をするものなのかがわからない

 
rid >> :

ここで、先日、類似の質問に答えてみました。

目利きのための質問」。

-こちらをご覧ください。

あなたの場合、おそらくこんな感じでしょう。


rid さん、ありがとう ございます

私の場合は、こんな感じでやりました。

   if (( Close_P)&& TimeCurrent()>=StrToTime( CloseHour+":00")){  // даже по времени сделал
   int slippage=3;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
    if (!OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) break;
    if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID), slippage);
    if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK), slippage);
    }
    }


 
Dimoncheg >> :

皆さん、以下の違いについて説明してください。

から

iBarShiftとは何か、 何をするものなのかがわからない

intiBarShift() 文字列シンボル, int timeframe, datetime time, bool exact=false)
時間からバーを検索する。この関数は、指定された時刻が属するバーのオフセットを返します。指定した時間にバーがない場合(履歴の「穴」)、この関数は正確な パラメータに応じて、-1 または最も近いバーのオフセットを返します。
パラメータ
記号 - 機器のシンボル名。NULLはカレントシンボルを意味する。
タイムフレーム - 期間チャートのタイムフレームの 1つを指定することができます。0は現在のチャートの期間を表します。
- 検索する時間値。
せいせい - バーが見つからなかった場合の戻り値。FALSE - iBarShiftは最も近いものを返します。TRUE - iBarShift は -1 を返します。
 
1Rakso >> :
intiBarShift()文字列シンボル, int timeframe, datetime time, bool exact=false)
時間によるバー検索。この関数は、指定された時刻が属するバーのオフセットを返します。指定した時間のバーがない場合(履歴の「穴」)、この関数は正確な パラメータに応じて -1 または最も近いバーのオフセットを返します。
パラメータ
記号 - 機器のシンボル名。NULLはカレントシンボルを意味する。
タイムフレーム - 期間チャートのタイムフレームの 1つを指定することができます。0は現在のチャートの期間を表します。
- 検索する時間値。
せいせい - バーが見つからなかった場合の戻り値。FALSE - iBarShiftは最も近いものを返します。TRUE - iBarShift は -1 を返します。

リファレンスを読みましたが、「この関数はバーのシフトを返す」とありますが、どういう意味なのか理解できません。を読むと、単純にローソク足の本数、2本目は何らかのズレを意味するようです。私はいくつかの条件の後に最も近い高値が必要だと思います、私は最大10個のバーを見ないかもしれないので、最初のケースは動作しません(最大20または30も見ないかもしれない)、どのように正しく記述する必要がありますか(例えば、2つのマスコスを越えた後の最も近い高値)。

 
Dimoncheg >> :

ヘルプを読みましたが、「この関数はバーのオフセットを返します」と書いてある意味がわかりません。を読むと、単純にローソク足の数という意味と、2が何らかのズレを意味しているような気がします。私はいくつかの条件の後に最も近い高値が必要だと思います、私は最大10個のバーを見ていないかもしれないので、最初のケースは動作しません(最大20または30も見ていないかもしれない)、それを行うための正しい方法(例えば2つのマスコス交差後の最も近い高値)は何でしょうか?

ibarshift は、グラフの先頭からどのバーで n 番目の時刻を表示するかを示します。

 
Dimoncheg >> :

読んでみたのですが、「この関数はバーシフトを返す」と書いてあるのがよくわからないのですが、どういう意味でしょうか?1つ目を読むと単純にローソク足の数という意味ですが、2つ目は何らかのズレを意味していますね。私はいくつかの条件の後に最も近い高値が必要だと思います、私は最大10個のバーを見ないかもしれないので、最初のケースは動作しません(最大20または30も見ないかもしれない)、それを行うための正しい方法は何ですか(2つのマスコットを横断した後に最も近い高値)?

時間を与えれば、ギフトがもらえる。

ゼロバーの時刻がわかったとします。

いくつかのイベントが過ぎました。

状況が変わったので、ゼロのバーと比較して、今回のバーの位置を確認したい。

そこで必要なのがこの機能です。

 

ディモンシェグ

私自身、このセクションの顧客です)

======================

もう一つ質問ですが、ビームZZを半分に割ってレベルを計算し、そのレベルでフィックスを行うにはどうしたらよいのでしょうか?


   double ind1. up = iCustom(Symbol(), PERIOD_H1, "ZigZag_NK", ZZ_Depth1, 5, 3, 0, 0);
   double ind1. dn = iCustom(Symbol(), PERIOD_H1, "ZigZag_NK", ZZ_Depth1, 5, 3, 1, 0);
   if ( ind1. up != EMPTY_VALUE  ) ind1. arr_1 =- 1;
	else if ( ind1. dn != EMPTY_VALUE )   ind1. arr_1 = 1;  
   

   if (( Close_P)&& ind. arr_1 /2*Point){   // как вписать формулу что я не так делаю? 
   
   int slippage=3;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
    if (!OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) break;
    if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID), slippage);
    if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK), slippage);
    }
    }
 
コード内の私のインジケータは再初期化されているので、比較できるように前後の状態を知る必要があります。このプロセスを実現するためには、どのような方法があるのでしょうか。
 
1Rakso >> :

ディモンシェグ

私自身、このセクションの顧客です)

======================

もう一つ質問ですが、ビームZZを半分に割ってレベルを計算し、そのレベルでフィックスを行うにはどうしたらよいのでしょうか?


最後のポイントではジグザグは計算されません。原則として、このレベルでも修正することはできません。