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

 
MakarFX #:

開いているものがなければ、2つ同時に開けるという条件付きです。

それは何ですか?

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;
  }    

このことは、現在のロットをカウントしています。

このパラメータは、設定:LotControlで設定します。

それぞれ、GetLotSize()>LotControl - bSignalBuy()シグナルでvOrderOpenSell()をオープンする必要があります。

はい、両方の注文が条件によって開かれていることは知っています。最初はそのように書いていたのですが、vOrderOpenBuy()を開かないようにするにはどうしたらよいのでしょうか?

 
Mihail Matkovskij #:

ロボットが既に一方向にエントリーしている場合、同じ方向に再度エントリーすることはありません。応募のアルゴリズムはこうなっているのでしょうか?

この条件を満たした場合、トリガー

また、売りシグナルが出たときにも

では、逆にエントリーする理由は、条件が発動されるため

はい、それが必要なんです。ただし、この条件では、フォワードエントリーを停止/除外する必要があります。

GetLotSize()>LotControl
 
Kedrov #:

マカーさん、いじってくれてありがとうございます。

以下はスクリーンショットです。

そうだ、お前は散らかしたんだ)

次に、それぞれのフォルダーで、1つずつ、Expertsを_Expertsに、Indicatorsを_Indicatorsに フォルダー名を変更します。

あるフォルダーでリネーム→ターミナルを起動→それでもダメならリネームし直して次のフォルダーへ。

P.S. 初回起動時は、通常よりも端末の起動に少し時間がかかります。

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

これは現在の敷地面積をカウントするものです

このパラメータは、設定:LotControlで設定されます。

それぞれ、GetLotSize()>LotControlの場合 - vOrderOpenSell()がシグナルbSignalBuy()と同時に起こるようにする必要があります。

はい、両方の注文が条件によって開かれていることは知っています。最初はそのように書いていたのですが、vOrderOpenBuy()を開かないようにするにはどうしたらよいのでしょうか?

        if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
           vOrderOpenSell();
        else
        if(bSignalBuy() == true)
           vOrderOpenBuy();
         
 
законопослушный гражданин #:

はい、それが必要なんです。ただし、この条件では前方への進入を停止/排除する必要があります。

この状態に困惑している

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

この状態で

GetLotSize()=0
 
MakarFX #:

ありがとうございます。 修正しました。 考えておきます。

 
MakarFX #:

この状態に困惑している

その条件付きで。

その通りだと思います。

そうですね。

 if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
         vOrderOpenSell();
         else
         if(bSignalBuy() == true)
         vOrderOpenBuy();

は、条件(GetLotSize()>LotControl)には全く反応しません。

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

その通りだと思います。

そうですね。

は、条件(GetLotSize()>LotControl)には全く反応しません。

GetLotSize()は最後に閉じたものから取得する必要があり、その場合は

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

(GetLotSize()>LotControl)が動作します。
 
MakarFX #:

GetLotSize()は最後に閉じたものから取得する必要があり、次に

(GetLotSize()>LotControl)が動作します。

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

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

はい、それが必要なんです。しかし、その際、この条件によってフォワード入力を停止/除外する必要があります。

if (bSignalBuy()) {
  if (GetLotSize() > LotControl)
    vOrderOpenSell();
  else
    vOrderOpenBuy();
}
double GetLotSize()
  {
   double Ls=0;
   datetime last = 0, openTime;
   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) {
               if ((openTime = OrderOpenTime()) > last) {
                 last = openTime;
                 Ls = OrderLots();
               }
             }
           }
        }
     }
   return Ls;
  }