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

 
Roman.:

タンクを見て、再起動して、もしかしたら役に立つかもしれない...。:-)

追伸:親切なんです。

なーんだ。戦車は選択肢にない。 本当にそういうことをやりたいのなら。落ち着くのは結果だけです))
 
hoz:
なーんだ。戦車は選択肢にない。 本当にそういうことをやりたいのなら。結果だけ落ち着きます(笑)。

:-)
 

まさかね。とにかく、不思議な瞬間であることがわかります。ロットをノーマライズしたわけではありません。ここでは、ロット正規化という機能があります。

//+-------------------------------------------------------------------------------------+
//| Проверка объема на корректность и округление                                        |
//+-------------------------------------------------------------------------------------+
double LotFloor(double value)
{
   return(MathFloor(MathMin(MathMax(value, g_minLot), g_maxLot)/g_lotStep)*g_lotStep);

注文を出す関数が呼び出される取引関数 自体に間違いがあることを確認し、注文を出す関数の呼び出しロットパラメータにこの関数を追加しました。エラーは消えなかった。

そして、最初の罵倒関数に直接正規化関数を追加した途端、これは保留中の注文を設定する関数ですが、罵倒は止まりました。どういうことですか?

//+-------------------------------------------------------------------------------------+
//| Открытие отложенной короткой позиции                                                |
//+-------------------------------------------------------------------------------------+
bool OpenPendingSell(double lot, double price)
{
   int g_ticket = -1;
   double OOP = price - i_distanceFromLastPos * pt;
      
   if (OOP < Bid)
   {
       fCheck_ValidPendingOOP(Symbol(), OP_SELLSTOP, OOP);
       
       g_ticket = OrderSend(Symbol(), OP_SELLSTOP, LotFloor(lot), ND(OOP), 30, 0, 0, NULL, i_magic, 0, CLR_NONE);
   }
   if (g_ticket > 0)
   {
       return (true);
   }
   else
       pr ("OpenPendingSell(): Ордер послать не удалось " + GetLastError());
   
   return (false);
}

最初のケースでは、チェックしたロットをすぐに送信し、2番目のケースでは、OrderSend() 関数自体でロットサイズをチェックします。しかし、その違いは何なのでしょうか?

 
chief2000:
ここで問題なのは、1次元の配列があり、そのサイズは様々であることです。
配列の要素のすべての可能な組み合わせをループする方法は?
要素の順番は関係ない、つまり123==213==321。

以下は、要素が4つの配列の例です。

まあ、お互いに、難しいとは思わないんですけどね。

int k = ArraySize(array);
for(int i=0;i<k-1;i++)
for(int ii=i+1;ii<k;ii++)
   {
   ...
   }
しかし、ここで、2つ以上あると、どう比較したらいいのかわからなくなる。1、2、3の3つの数字を同時に比較する方法を示せ。
 
最適化ウィンドウを開き直らないようにするにはどうしたらいいか、どなたか教えてください......。このウィンドウは、背景やキャンドルなどの設定が異なることがわかりました。
 
もしかしたら、そういうスクリプトがあるかもしれない!!!
 
皆さん、こんにちは!このテーマについてアドバイスをお願いします...。798にレベルをずらしたい場合、多くのペアで計算するのは面倒なので、手動でカウントせずに、ずらした移動平均の価格を描画するか、データウィンドウに表示するインジケータをどう書けばいいでしょうか?MAレベル
 
Roger:

まあ、お互いに、難しいことではなさそうです。

しかし、2つ以上あると、どう比較したらいいのかわからなくなる。1、2、3の3つの数字を同時に比較する方法を教えてください。


間違っていなければ、サイクル数は配列の要素数と一致させなければなりません。問題は、要素の数が一定ではなく、4よりはるかに多くなる可能性があるため、どのように設計するか考える必要があることです。また、速度やメモリ消費量などに影響を与える他の実装オプションはないのでしょうか?
 
paladin80:



ありがとうございました。3小節目など、どちらからカウントを始めても問題ないのでしょうか?
 
前回の質問を言い換えて補足したい。
以下は、4つの要素を持つ配列のコードです。実際には、配列の項目数は可変である。
ネストされたforループの数が可変になるように、配列1項目につき 1つのforループになるようにコードを変更するにはどうすればよいでしょうか?
ありがとうございました!

int start() { 

   int Array[4]                                       = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size                                  = ArrayRange(Array,0);


   for(x1=0; x1<Array_Size; x1++) {
      Print("Combination                       = ", Array[x1]);

      for(x2=x1+1; x2<Array_Size; x2++) {
         Print("Combination                    = ", Array[x1] + "   " + Array[x2]);

         for(x3=x2+1; x3<Array_Size; x3++) {
            Print("Combination                 = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(x4=x3+1; x4<Array_Size; x4++) {
               Print("Combination              = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }


   return(0);
}