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

 
законопослушный гражданин #:

私が見る限りでは、このような違いがあります。

ストーリーは、最初からでも最後からでもOKです。違いはありません。とにかく、この機能では、最新の終値の時刻を持つ注文を検索します。また、注文を削除したり、閉じたりする場合は、リストの最後から検索する必要があります。そうでない場合は、ループはオーダーをスキップします。

 
законопослушный гражданин #:

を見る限り、以下のような違いがあります。

この場合、差はありません。OrersTotalから0へのサイクルは、ポジションのクローズまたはオーダーの削除の場合のみ必須です。それ以外の場合はお好み次第です。

 
Mihail Matkovskij #:

ストーリーは、最初からでも最後からでもOKです。違いはありません。とにかく、閉店時間が一番遅いオーダーを検索する機能です。また、注文を削除したり、閉じたりしたい場合は、リストの最後から検索する必要があります。そうでない場合は、ループはオーダーをスキップします。

もし、この関数が最新の終値を持つ注文を検索するのであれば、履歴の最初からではなく、最後から、つまり現在の時刻から過去の時刻までの検索が明らかに速くなります。

 
Artyom Trishkin #:

もし、この関数が最新の終了時刻の注文を探すのであれば、履歴の先頭からではなく、最後から、つまり現在の時刻から過去の時刻までの検索が明らかに速くなるはずです。

逆に、この関数は最新の終値を持つ注文をより速く見つけ、サイクルの終わりまでそれを変更せず、その結果を返します。順方向では、すべての注文を検索し、最後の注文の一つを返します。違いは、ループを通過するたびに変数が上書きされることです。そう、違いがあるのです。しかし、あまり意味はないのではないかと思います。順方向より逆方向のループの方が良いですが。にもかかわらず、その機能が一方的に働いてしまうのです。

 
皆さんこんにちは。プログラム上でチャートウィンドウを切り替える、つまり、プログラム内から任意のチャートをアクティブにする方法はありますか?
 
Maksim Mihajlov #:
皆さんこんにちは。プログラム上でチャートウィンドウを切り替える、つまりプログラムから任意のチャートをアクティブにする方法はありますか?

チェックする

チャートトップ

チャートを他のすべてのチャートの上に表示する

ブール

 
Alexey Viktorov #:

チェックする

チャートトップ

チャートを他のすべてのチャートの上に表示する

ブール

ありがとうございました。

 
Mihail Matkovskij #:

ストーリーは、最初からでも最後からでもOKです。違いはありません。とにかく、閉店時間が一番遅いオーダーを検索する機能です。また、注文を削除したり、閉じたりしたい場合は、リストの最後から検索する必要があります。そうでない場合は、ループはオーダーをスキップします。

とにかく、注文ロットカウント以外は全く同じEAを2つ作ってみました!!その結果がこちらです。

動作しない(例:SELLの代わりにBAYを開けない)

void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
,,,
double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) {Ls=OrderLots();}
           }
        }
     }
   return Ls;
  }

WORKING (「SELL」の代わりに BAY」を開くなど。


void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
...
double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
              }
           }
        }
     }
   return Ls;
  }
 
законопослушный гражданин #:

とにかく、注文ロットカウントを除いて、全く同じEAを2つ作ってみました!その結果がこちらです。

動作しない(例:SELLの代わりにBAYを開けない)

WORKING(例:SELLではなくBAYを開く)


もう一度、違いを強調します。

1 変形

double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))

2 変形

double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
 
законопослушный гражданин #:

とにかく、注文ロットカウントを除いて、全く同じEAを2つ作ってみました!その結果がこちらです。

動作しない(例:SELLの代わりにBAYを開けない)

WORKING (「SELL」の代わりに BAY」を開くなど。


OrdersTotalOrdersHistoryTotalを やみくもにコピーするのではなく、何をコーディングしているのか理解するようにしましょう。

オーダーセレクト

pool=MODE_TRADES

[in] 選択するデータのソース。selectパラメータがSELECT_BY_POSのときに使用します。以下の値のいずれかを指定することができる。

MODE_TRADES(デフォルト) - 開いている注文と保留中の注文の中から選択されます。
MODE_HISTORY - 閉じられた注文と削除された注文の中から選択されます。

    OrdersTotal - Торговые функции - Справочник MQL4
    OrdersTotal - Торговые функции - Справочник MQL4
    • docs.mql4.com
    OrdersTotal - Торговые функции - Справочник MQL4