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

 
sergeev:

がすべて一致した。

2010.08.28 20:57:09 Servis (EURUSD,H1) L1=6653490000 L2=6653490000 L3=6653490000 M1=6653490000
2010.08.28 20:57:09 サーヴィス(EURUSD,H1) A=665349 B=665349 C=665349
2010.08.28 20:57:09 Servis (EURUSD,H1) --- OnInit() --- 1 --- !


と私のM1が合わなかったのです。

PQ      0       Servis (EURUSD,H8)      22:06:24        --- OnInit() --- 1 --- !!!  Старт  подготовки начальных параметров  !!!
LE      0       Servis (EURUSD,H8)      22:06:24         A=100652  B=100652  C=100652
CP      0       Servis (EURUSD,H8)      22:06:24         L1=1006520000   L2=1006520000   L3=1006520000   M1=4294966006
 
sergey1294:

最初の数字を何に使うかにもよりますが、次のようにしてみてください。

ええ、その方が簡単です。最後に余計な逆カンマを 付ける必要もありませんし。
return(StringToTime((string)str.year+"."+(string)str.mon+".01 00:00"));
 
SHOOTER777:

もう一度、このことを問いかけたいと思います。

そのコードを添付します。

プログラミングを理解すれば、L1 = L2 = L3 = M1 となるはずです。 あなたはどうでしょうか?

当初、コンパイラは "#import "lbS7N_Servis.ex5 "がないことに文句を言った。

この行を削除したら、ギブアップしました。

2010.08.28 22:19:51 サービス[1] (EURUSD,H1) L1=1016990000 L2=1016990000 L3=6617010000 M1=1016990000
2010.08.28 22:19:51 サービス[1] (EURUSD,H1) A=101699 B=101699 C=661701
2010.08.28 22:19:51 Servis[1] (EURUSD,H1) --- OnInit() --- 1 --- !

コードの口座 番号を自分のものに置き換えると、こうなりました。

2010.08.28 22:26:46 サービス[1] (EURUSD,H1) L1=1016990000 L2=1016990000 L3=1016990000 M1=1016990000

2010.08.28 22:26:46 サービス[1] (EURUSD,H1) A=101699 B=101699 C=101699

2010.08.28 22:26:46 Servis[1] (EURUSD,H1) --- OnInit() --- 1 --- !

MQサーバー、ビルド316。

 
sergey1294:

と私のM1がマッチしなかった

特殊事情:(
 
SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT), がゼロを返すのはなぜですか?
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
sergeev:
ユニークな状況...:(

そして、3つものユニークなシチュエーションがあるのです。これが検出されたものです。また、未検出のものはどれくらいあるのでしょうか?

そんな中、MetaQuotesは1ヶ月後にChampionship 2010を スタートさせるわけですね。

ああ、MetaTrader 5は驚きに満ちている...。

 
Kos:
SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT) がゼロを返すのはなぜですか?

さらに、成功表示を返すバージョン(ヘルプでは2. と指定されています。関数の成功に応じて、true または false を返す。成功すれば、最後のパラメータで参照渡しされた先の変数に、プロパティの値が格納される。) 通話が成功したことを報告する。

void OnStart()
{
  double SymbolVolumeLimit1 = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_LIMIT);
  double SymbolVolumeLimit2 = DBL_MAX;

  Print("Symbol() = ", Symbol(), ", bool SymbolInfoDouble() = ", SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_LIMIT, SymbolVolumeLimit2));
  Print("SymbolVolumeLimit1 = ", SymbolVolumeLimit1, ", SymbolVolumeLimit2 = ", SymbolVolumeLimit2);
}

/* Вывод в лог (хронология - сверху вниз):
JN      0       1 (EURUSD,M15)  02:41:18        Symbol() = EURUSD, bool SymbolInfoDouble() = true
JJ      0       1 (EURUSD,M15)  02:41:18        SymbolVolumeLimit1 = 0, SymbolVolumeLimit2 = 0
*/

SymbolInfoDouble()の2番目のバージョンはtrueを返し、すなわち正常に実行されました。また、最初はDBL_MAXで初期化されていたSymbolVolumeLimit2変数が、SymbolInfoDouble()を呼び出した後に0を受け取ったことも確認できます。

また、メタクォーツ社の見解では、そのような状況において、エキスパート・アドバイザーはハードコードされた値を使用するのではなく、そのような関数が返す値に基づいて行うべきでしょうか。

 

OrderCheck 機能を使用したことがある人。

これは建前です。

           MqlTradeRequest request;
           request.action=TRADE_ACTION_DEAL;
           request.symbol=_Symbol;
           request.volume=volume_exe;
           request.price=SymbolInfoDouble(_Symbol, SYMBOL_ASK);
           request.sl=0;
           request.tp=0;
           request.deviation=SymbolInfoInteger(_Symbol, SYMBOL_SPREAD)*2;
           request.type=ORDER_TYPE_BUY;
           request.type_filling=ORDER_FILLING_CANCEL;
           MqlTradeResult result;
           OrderCheck(request, result);
           if(OrderSend(request, result)==false)

コンパイル時に、'result' - parameter conversion is not allowed.というエラーが発生します。

OrderCheckを削除すると、すべてが正常にコンパイルされ、テスターでポジションが 開きます。

 

その内容はというと...。

Alert(" прибыль=",ПросчетПрибылизаПериод(D'2010.08.01 00:00:00'));


double ПросчетПрибылизаПериод(datetime датаначалапросчетаприбыли)
  {
   int i;
   double прибыльзапериод;
   ulong тикет;
   HistorySelect(датаначалапросчетаприбыли,TimeCurrent());
   //HistorySelect(D'2010.08.20 00:00:00',D'2010.08.20 23:59:00');
   for(i=1;i<=HistoryDealsTotal();i=i+1)
     {
      тикет=HistoryDealGetTicket(i);
      if(HistoryDealGetInteger(тикет,DEAL_TYPE)==DEAL_ENTRY_IN || HistoryDealGetInteger(тикет,DEAL_TYPE)==DEAL_ENTRY_STATE)
         continue;
      прибыльзапериод=прибыльзапериод+HistoryDealGetDouble(тикет,DEAL_PROFIT)+HistoryDealGetDouble(тикет,DEAL_COMMISSION)+HistoryDealGetDouble(тикет,DEAL_SWAP);
     }
   return(прибыльзапериод);
  }

指定された日付からの取引の利益をカウントする必要があります。実際とはまったく違う結果を出してしまうのです。例えば、私は約2000という結果ではなく、611という結果を得ました。1日あたりのチェックをするようになりました(コメント行)。同じ結果の日もある(!!)のですが、大抵はあるべき姿ではありません...(規則性は見つけられませんでした)。 そしてデバッガーは、取引量 全体に対して全く同じサイクルを生成しています。int変数以外は値が表示されない(Expressionが評価できない)ので、この件数だけしかトレースできないのですが。

このコードは正しいのか、デバッガの使い方は正しいのか...?

 
SHOOTER777:

ありがとうございます。その時は、開発者に連絡します。

こんにちは!ビルド番号、OS、ビットレートを指定し、コードを添付して、サービスデスクに状況を詳細に記述してください。
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала - Документация по MQL5