エキスパート: Cidomo

 

Cidomo:

エキスパートアドバイザーは逆指値買い(BuyStop)注文と逆指値売り(SellStop)注文を出します。

Cidomo

作者: Vladimir Karputov

 
場所は?

 
Habibur Rohman :
場所は?

アドバイザーはどこにも行っていない。アドバイザーはその場所にいる:


 

Expert Advisorを自分用に改良したいが、そのためには多くのことを理解する必要がある!(私は多くのことを理解していません)。部分的に質問させていただきます。

コードがあります:

   if(m_need_delete_buy_stop || m_need_delete_sell_stop)
     {
      int count_buy_stops=0,count_sell_stops=0;
      CalculateAllPendingOrders(count_buy_stops,count_sell_stops);

      if(m_need_delete_buy_stop)
        {
         if(count_buy_stops>0)
           {
            DeleteOrders(ORDER_TYPE_BUY_STOP);
            return;
           }
         else
           {
            m_need_delete_buy_stop=false;
            return;
           }
        }
      if(m_need_delete_sell_stop)
        {
         if(count_sell_stops>0)
           {
            DeleteOrders(ORDER_TYPE_SELL_STOP);
            return;
           }
         else
           {
            m_need_delete_sell_stop=false;
            return;
           }
        }
     }

それは何をするのですか?

 
Sysmart:

Expert Advisorを自分用に改良したいが、そのためには多くのことを理解する必要がある!(私は多くのことを理解していません)。部分的に質問させていただきます。

コードがあります:

それは何をするのですか?

フラグ'm_need_delete_buy_stop' ('保留中の 買い逆指値注文を削除する必要がある') またはm_need_delete_sell_stop' ('保留中の売り逆指値注文を削除する必要がある') が発生した場合。

   if(m_need_delete_buy_stop || m_need_delete_sell_stop)
     {

削除に進みます。


エキスパートアドバイザーが現在発注している未決注文の数を計算します:

      int count_buy_stops=0,count_sell_stops=0;
      CalculateAllPendingOrders(count_buy_stops,count_sell_stops);


保留中の買い逆指値注文を削除する必要がある」場合:

      if(m_need_delete_buy_stop)
        {
         if(count_buy_stops>0)
           {
            DeleteOrders(ORDER_TYPE_BUY_STOP);
            return;
           }
         else
           {
            m_need_delete_buy_stop=false;
            return;
           }
        }

発注済みの買い逆指値注文の数がゼロより大きい場合 ('count_buy_stops') - それらを削除します。その数がゼロに等しい場合、'm_need_delete_buy_stop' フラグをリセットします。


未決済の売り逆指値注文を削除する必要がある」場合も、同じようにする。

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 

ありがとう!

また分からないコードが増えた:

//--- 新しいバーが誕生した時だけ働く。
   static datetime PrevBars=0;
   datetime time_0=iTime(m_symbol.Name(),InpWorkTimeFrame,0);
   if(time_0==PrevBars)
      return;
   PrevBars=time_0;
   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }
 
Sysmart:

ありがとう!

また分からないコードが増えた:

このコードは次のような動作をします:新しいバーが 生まれたときに一度だけ動作します。

 
Vladimir Karputov:

このコードは次のように動作する:一度だけ動作する-新しいバーが 生まれた瞬間に。

ありがとうございます。最終的にはそう理解しました:

//--- 新しいバーが誕生した時だけ働く。
   // 静的変数に最後の小節の開始時刻を記憶する
   static datetime PrevBars=0;
   // 現在時刻 (iTime - バーの開店時刻の値を返す)
   datetime time_0=iTime(m_symbol.Name(),InpWorkTimeFrame,0);
   if(time_0==PrevBars)
      return;
   // 条件が通過したため、時間が異なる場合 if(time_0==PrevBars)
   // 時間を覚えておく
   PrevBars=time_0;
   // 相場が更新されていない場合、最後のバーが開いた時刻をリセットする。
   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }
   // この場所に辿り着いたとしても、それは新しいバーではない。

あなたのリンクがなければ、私はそれを理解しなかったでしょう)

 
Sysmart:

ありがとう。最終的に気づいたことはこうだ:

あなたのリンクがなかったら、私はそれに気づかなかっただろう)

少し訂正します。これは

 // この場所に辿り着いたとしても、そこは新しいバーではない。

は正しくない。正しい:

 // あなたはこの場所に到達した。
 

ちなみに、下記はそのコードである:

   if(!RefreshRates() || !m_symbol.Refresh())
     {
      PrevBars=0;
      return;
     }

上で説明したコードと一部重複していると思います:

   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }

削除してもいいと思います。

 
Vladimir Karputov:

ちょっと訂正。これは

は正しくない。正しい:

ありがとうございました)!