MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 90

 
Vitaly Muzichenko:

ありがとうございます。なぜかロットでそのようにならないんですよね。

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

スナップショットロット=0.03の14番目の売りストップのロットを返すにはどうしたらいいですか?

 
Marina Korotkih:

ありがとうございます。なぜかロットでそのようにならないんですよね。

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();
  double r=MarketInfo(sy, MODE_MINLOT);
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots()) {
                r=OrderLots();
  }}}}}}}
  return(r);
}
これは最小限のもので、もし最新のオーダーが必要なら、今すぐ行います
 
Vitaly Muzichenko:

これは最小限のもので、もし最新のオーダーが必要なら、今すぐ行います

価格から最も遠い土地を探すのはこちら

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
datetime t=0;
double r=-1,l=0;
if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderOpenPrice() || r==-1) {
                r=OrderOpenPrice();
                l=OrderLots();
  }}}}}}}
  return(l);
}
 
Marina Korotkih:

ありがとうございます。なぜかロットでそのようにならないんですよね。

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

スナップショットの14番目の売りストップのロット=0.03を返すにはどうしたらいいですか?



関数が正しく動作していないのに、なぜ戻り値が1でも14でもなく、2なのでしょうか?

はテスターなのでしょうか?

私の場合は正しく動作しています。

 
Vitaly Muzichenko:

価格から最も遠い土地を探すのはこちら


ありがとうございます、納得です。見つけた!これで全てわかる )

 
Alekseu Fedotov:

関数が正しく動作していないのに、なぜ戻り値が1でも14でもなく、2なのですか?

はテスターなのでしょうか?

私の場合は正しく動作しています。

サイズで検索できないため、価格でソートする必要があります。グリッドが混在している可能性があり、最大または最小のいずれかを見つけることができますが、最初と最後のものではありません
 
Marina Korotkih:

ありがとうございます、納得です。見つけた!今なら全部わかるよ )

注文やポジションに関するすべての情報を調べるには、チケットで行うのがよいでしょう。

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}
 
Alekseu Fedotov:

...なぜ、戻り値が1でも14でもなく、2なのですか?


なぜなら、私はこう呼んでいるからです。

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
 
Vitaly Muzichenko:

注文やポジションの詳細を確認するには、チケットから行うのが良いでしょう。

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}

しかし、そのためには、まず、ラストオーダー14のチケットを知る必要があります

では、最初の関数のように、やはり順番に検索する必要があるのでしょうか?

または ちょうど SELECT_BY_POS SELECT_BY_TICKET に置き換えてください。

 
Marina Korotkih:

しかし、そのためにはまず、ラストオーダー14のチケットを見つけなければなりません。

では、最初の関数と同じように、やはり順番に検索する必要があるのでしょうか?

または ちょうど SELECT_BY_POS SELECT_BY_TICKET に置き換えてください。

何を確認する必要があるかによって異なります。実際には、ここですべてを調べ、価格で注文を選択 し、それに必要なパラメータを書いて、すべてを返すこともできる。

ループをもう1回使うのは良くないので、1つのループですべてを実現した方が良い。実際の取引では目立たないが、テスターでのテストは長時間走ることになる。しかし、テスターのためにプログラムを書く人がいたり、トレーディングのためにプログラムを書く人がいたりと、タスクによって異なるので、複数のサイクルを使い分けることができます。

追伸:Expert Advisorがpipsqueakの場合、もちろん1サイクルは使わない方が良い)