エラー、バグ、質問 - ページ 2412

 
Andrey Barinov:

そして、デバッグする。トランザクションチケットを印刷 し、そこで実際に何が選択されたかをテスターで確認する。ディールタイプの フィルタを追加してくださいよ。

ロットが正しく表示されているので、チケットは正しく選択されています。

 
Andrey Dik:

ロットが正しいので、チケットも正しい。

いいえ、InとOutの両方のトレードが同じロットです。しかし、利益はそうではありません。

以下は私のコードです。効くんです。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
ulong LastOutDealTicket(const string symbol,const uint magic)
  {
//===============
   long lasttime=0;
//===============

//===============
   ulong ticket=0;
//===============

//===============
#ifdef __MQL5__
//===============
   ::HistorySelect(0,TimeCurrent()+60);
//===============
   const int deals=::HistoryDealsTotal();
//===============
   for(int i=deals-1;i>=0;i--)
     {
      //===============
      const ulong tempticket=::HistoryDealGetTicket(i);
      //===============

      //===============
      if(::HistoryDealGetInteger(tempticket,DEAL_ENTRY)!=DEAL_ENTRY_OUT || ::HistoryDealGetString(tempticket,DEAL_SYMBOL)!=symbol ||
         ::HistoryDealGetInteger(tempticket,DEAL_MAGIC)!=magic)continue;
      //===============

      //===============
      if(::MQLInfoInteger(MQL_TESTER))return(tempticket);
      //===============

      //===============
      if(::HistoryDealGetInteger(tempticket,DEAL_TIME)<=lasttime)continue;
      //===============

      //===============
      ticket=tempticket;
      lasttime=::HistoryDealGetInteger(tempticket,DEAL_TIME);
      //===============
     }
//===============
#endif 
//===============

//===============
#ifdef __MQL4__
//===============
   const int ordershistory=OrdersHistoryTotal();
//===============
   for(int i=ordershistory-1;i>=0;i--)
     {
      //===============
      if(!::OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) || ::OrderSymbol()!=symbol || ::OrderMagicNumber()!=magic || 
         (::OrderType()!=OP_SELL && ::OrderType()!=OP_BUY))continue;
      //===============

      //===============
      if(::MQLInfoInteger(MQL_TESTER))return(::OrderTicket());
      //===============

      //===============
      if(::OrderCloseTime()<=lasttime)continue;
      //===============

      //===============
      ticket=::OrderTicket();
      lasttime=::OrderCloseTime();
      //===============
     }
//===============
#endif 
//===============

//===============
   return(ticket);
//===============
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastClosedProfit(const string symbol,const uint magic)
  {
//===============
   const ulong lastoutticket=::LastOutDealTicket(symbol,magic);
//===============

//===============
   if(lastoutticket<=0)return(0);
//===============

//===============
   double result=0;
//===============

//===============
#ifdef __MQL5__
//===============
   result=::HistoryDealGetDouble(lastoutticket,DEAL_PROFIT);
//===============
#endif 
//===============

//===============
#ifdef __MQL4__
//===============
   if(::OrderSelect((int)lastoutticket,SELECT_BY_TICKET,MODE_HISTORY))result=::OrderProfit();
//===============
#endif 
//===============

//===============
   return(result);
//===============
  }
 
Andrey Barinov:

いいえ、InとOutの両方のトレードが同じロットです。利益は、そうではありません。

以下は私のコードです。効くんです。

を試してみましたが、あなたのコードも0.0になりました)))

この口座はどちらかというと、ヘッジされています。
 
Andrey Dik:

を試してみましたが、あなたのコードも0.0になりました)))

この口座はどちらかというと、ヘッジされています。

2009年版をすべてチェックしたところです。私のコードは、あるべきものを出しています。もし0を出したら、そこには0があるということです。

 
Andrey Barinov:

2009年のビルドですべてを確認したところ私のコードは、出すべきものを出しているのです。もし、0を出したら、そこには0があるということです。

どうして、履歴の中にゼロでない結果のクローズド・トレードがあり、それが0を与えるのか。

 
Andrey Barinov:
アンドレイ・ディク

DC側に問題がある可能性があります。

 
Alexey Kozitsyn:

DC側に問題がある可能性があります。

テスターで、MetaquotesとRoboで試しました。

 
間違いを見つけた...私のミスは、ポジションクローズ 関数にmajikを渡さず、オープン関数に渡したことで、結果的にmajikで取引が選択できなかったことです...。
 

CSymbolInfoを多通貨で使用する場合、初期化時にNameメソッドで呼び出される。

if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
   return(false);
if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
   return(false);
if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
   return(false);

テスト中、USDCADのシンボル エラーが発生します。

no prices for symbol
 
Andrey Pogoreltsev:

CSymbolInfoを多通貨で使用する場合、初期化時にNameメソッドで呼び出される。

テスト中はUSDCADのシンボルにエラーが発生します。

私たちが話していることを理解している人はいるのでしょうか?