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

 

こんにちは。マジック買いオープンポジションを計算するブロックを作りましたが、問題は、ブロックが異なる通貨ペアで動作する場合、ブロックは1つの通貨ペア(最後のオープンポジション)の結果を生成するだけであることです。ブロックが各通貨ペアの結果を与えるように、(魔法を変えずに)コードを修正するにはどうしたらよいですか?

int OpenMagicOrderCount_buy() 
{
   int OpenBuyOrdersCount = 0;
   int OpenOrders = 0;
   int cnt = 0;
   OpenOrders=OrdersTotal();
   for(cnt=0;cnt<OpenOrders;cnt++)   // scan all orders and positions. ..
   {
     OrderSelect(cnt, SELECT_BY_POS);
          if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic &&  OrderType() == OP_BUY )
          {                             
                  OpenBuyOrdersCount ++;
          }
   } 
   Print("+++++++++++++++++++++++OpenBuyOrdersCount: " + OpenBuyOrdersCount,"   OrderSymbol()= ", OrderSymbol());
   return(OpenBuyOrdersCount); 
}
 
int OpenMagicOrderCount_buy() 
{
   int OpenBuyOrdersCount = 0;
   int OpenOrders = 0;
   int cnt = 0;
   OpenOrders=OrdersTotal();
   for(cnt=0;cnt<OpenOrders;cnt++)   // scan all orders and positions. ..
   {
     OrderSelect(cnt, SELECT_BY_POS);
          if (OrderMagicNumber()==magic &&  OrderType() == OP_BUY )
          {                             
                  OpenBuyOrdersCount ++;
          }
   } 
   Print("+++++++++++++++++++++++OpenBuyOrdersCount: " + OpenBuyOrdersCount,"   OrderSymbol()= ", OrderSymbol());
   return(OpenBuyOrdersCount); 
}
так все " OP_BUY"マジシャンがカウント する
 
7777877:

...続き...

StringSubstr 関数のサブセクションの最後に、次のような文言が括弧で囲まれています。「別に注意しなければならないのは、最初のforループ (私の注:他にオブジェクトを削除する方法がないのでdeinit()でなければならない)では、オブジェクトを削除できない ことだ。しかし、引用したEAでは、2つ目のfor ループが全くありません。また、for ループ の前のdeinit() 関数で定義された変数 Quant_Del は 0 で初期化され、変数ifor ループの前のどこにも定義されていない。

上記のコードは、いくつかのプログラム行を些細に省略しているだけであることが判明した。

本当に数行の些細な省略だったのか、それとも外部の助けがないと初心者が意味を理解できないほどトリッキーなプログラムなのか、1つ目の質問 です。

さらに...同じ章の同じセクションの引用文の前に、同じExpert Advisor(添付ファイル)へのリンクがあり、クリックするとMetaElitorで同じExpert Advisorが開かれるようになっています。しかし、このExpert Advisorのテキストは異なって おり、deinit()関数は次のようになります。

では、もし 「コンバイン 言習わし"別に、最初のforループでオブジェクトを削除できないことに注意してください。この場合、削除のたびにオブジェクトの総数とその番号が変わり、一部のオブジェクト名がスキップ されるからです "テキスト 最後のバリアントのdeinit()関数について、2つ目の質問があります。

質問 です。 ObjectDelete(Obj_Name)関数をif 文の中に配置し、最初のfor ループでオブジェクトを削除できないのはなぜですか?

なぜ削除のたびに「...オブジェクトの総数が変化 する」...?この場合、オブジェクトの総数を決定するQuant_Objects 変数が ObjectsTotal() と等しい値を取得するため、for ループをFORWARD するのですか?

P.S. フォーラムを散らかさないためにも、回答をよろしくお願いします。

サイクルを逆回転させ、好きなだけ削除することができます
 
FAQ:
ループを逆拡大して、できる限り削除する

ちゃんと理解できたかな?deinit関数(特にループ)は、次のように考えるのがよいでしょう。

int deinit()                           // Спец. функция deinit()
  {
   int Quant_Objects=ObjectsTotal();   // Cтолько всего ВСЕХ объектов
   for(int k=Quant_Objects; k>=0; k--) // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Если найден объект, …
        {                              // ... начинающийся с Paint_,
         ObjectDelete(Obj_Name);       // … то его и удаляем
        }                              //конец if
     }                                 //конец for
   return;                             // Выход из deinit()
  }                                    //конец deinit
//-------------------------------------------------------------- 10 --
 
Elektronik:


このデータは、買い注文と売り注文の差を計算するために必要です。

例えば、数量0.09の買い注文が1つ、数量0.11の売り注文が2つ出たとすると、その差は0.09-0.11=-0.02、可能ならその差の1.0倍となります。


では、関数OrderLots.
 
abeiks:

こんにちは。マジック買いオープンポジションを計算するブロックを作りましたが、問題は、ブロックが異なる通貨ペアで動作する場合、ブロックは1つの通貨ペア(最後のオープンポジション)の結果を生成するだけであることです。ブロックがすべての通貨ペアで計算されるように、(マジックを変更せずに)コードを修正するにはどうすればよいですか?

変更する。

if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic &&  OrderType() == OP_BUY )

へ。

if (OrderMagicNumber()==magic &&  OrderType() == OP_BUY )
 
EAのピップ単位のストップロスを、最後のローソク足より上のストップロスに置き換えるにはどうすればよいですか?
 
Neo777:
EAのピップ単位のストップロスを、最後のローソク足より上のストップロスに置き換えるにはどうしたらいいですか?
double x = ... // Задаем на сколько пипсов выше
double sl = NormalizeDouble(High[1] + x * Point, Digits); // Задаем значение стоплосс на x пипсов выше предпоследней свечи
 

Reshetov:спасибо
извиняюсь за то что не в SRC

入れ方

 
7777877:

ちゃんと理解できたかな?deinit関数(特にループ)は、次のように考えるのがよいでしょう。


この場合、例えば18のオブジェクトを削除すると、19がその場所になり、19=>18、つまり1つの逆反復が自動的に得られます。ご注文の際にもご利用ください。

また、オブジェクトと オーダーのリストは形式的に=0から始まる配列なので、最大インデックスは配列のサイズより1つ小さくなります。

int Quant_Objects=ObjectsTotal()-1;