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

 
Andrey Khatimlianskii:

KBで待っている ;)

その解決策は、思ったよりずっとシンプルであることがわかりました。

タイマーの状態を知ることができるインジケーターの一例です。一行 #include <Timer.mqh> を追加するだけで、OnTimer()が制御されるようになります。

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#include  <Timer.mqh>

int OnInit()
  {
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
   EventSetMillisecondTimer(2201);
   return(INIT_SUCCEEDED);
  }
////////////////////////////////////////////  
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }
///////////////////////////////////////////// 
void OnTimer()
  {
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
   EventKillTimer();
   if(iTimer.On) Print("Таймер включен, период таймера = "+IntegerToString(iTimer.curPer)+" миллисеккунд"); else Print("Таймер выключен");
  }

そして、こちらが授業そのものです。

//+------------------------------------------------------------------+
//|                                                        Timer.mqh |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                         https://www.mql5.com/ru/users/nikolay7ko |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Nikolay Semko"
#property link      "https://www.mql5.com/ru/users/nikolay7ko"
#property link      "SemkoNV@bk.ru"  

///////////////////////////////////////////////////////////////////////////
class CTimer
  {
public:
                     CTimer() {curPer=0; On=false;}
                    ~CTimer() {}
   bool              On;
   int               curPer;
   void              AddNewProgTimerSec(int per){EventSetTimer(per); curPer=per*1000; On=true;}
   void              AddNewProgTimerMilliSec(int per) {EventSetMillisecondTimer(per); curPer=per; On=true;}
   void              KillProgTimer() {EventKillTimer(); curPer=0; On=false;}
  };
///////////////////////////////////////////////////////////////////////////
static CTimer iTimer;

#define EventSetMillisecondTimer iTimer.AddNewProgTimerMilliSec
#define EventSetTimer iTimer.AddNewProgTimerSec
#define EventKillTimer iTimer.KillProgTimer
その結果
2018.07.12 21:10:37.177	TestСTimer (EURUSD.m,M5)	Таймер выключен
2018.07.12 21:10:39.385	TestСTimer (EURUSD.m,M5)	Таймер включен, период таймера = 2201 миллисеккунд
2018.07.12 21:10:39.385	TestСTimer (EURUSD.m,M5)	Таймер выключен
ファイル:
Timer.mqh  3 kb
 
Nikolai Semko:

解決策は、思ったよりずっとシンプルでした。
...


コミュニティ全般のコーディングレベルについて書きたかったのですが、トラブル回避のため省略しましょう...。
私見では、この問題を解決する良い方法は、タイマー制御を実装し、タイマーイベントを「購読」する機能を提供するシングルトンまたは静的クラスを実装することです。
"subscription "は、一定時間ごとに呼び出される関数へのポインタを渡すことで実装されます。

 

取引結果は、すべてのティックでテストと異なる。どこを掘ればいいのか、教えてください。見積もりはオーバーしているのか、それとも何なのか。

全てのダニ検査 - 常に同じ結果が得られる。リアルトレード - 同じ期間の余分なトレードを提供します。

Expert Advisor の電源が 2 週間切れていない。また、このテストは2週間にわたって実施されています。50回ほど走らせました。

 
Anton Ohmat:

取引結果は、すべてのティックでテストと異なる。どこを見ればいいのか教えてください。見積もりはオーバーフローしているのでしょうか?

全てのダニ検査 - 常に同じ結果が得られる。リアルトレード - 同じ期間での追加トレードを提供します。

Expert Advisor が 2 週間停止していない。また、このテストは2週間にわたって実施されています。50回実行しましたが、いつも同じでした。

テストは "オールティック "または "リアルティック "のどちらで行われますか?

 
すべてのティックについて、最上位のパラメータ
 
Anton Ohmat:
すべてのティックについて - 最上位パラメータ

All ticks" モードでは、テスターは分バーからティックをモデル化します。テストモードの 違いについての記事はこちらです。https://www.mql5.com/ru/articles/2612

Тестирование торговых стратегий на реальных тиках
Тестирование торговых стратегий на реальных тиках
  • www.mql5.com
В данной статье мы покажем результаты тестирования простой торговой стратегии в 3-х режимах: "OHLC на M1" с использованием только цен Open,High, Low и Close минутных баров; затем детальное моделирование в режиме "Все тики", и самое достоверное тестирование в режиме "Каждый тик на основе реальных тиков" с использованием записанных тиков из...
 
を実行したところ、同じ結果になりました。
 
Sergey Dzyublik:


コミュニティ全般のコーディングレベルについて書きたかったのですが、トラブル回避のため省略しましょう...。
私見では、この問題を解決する良い方法は、タイマー制御を実装し、タイマーイベントを「購読」する機能を提供するシングルトンまたは静的なクラスを実装することです。
"subscription "は、一定時間ごとに呼び出される関数へのポインタを渡すことで実装されます。

そんな常識的なことを言っているようでは、よほど優秀なプログラマーなのでしょう。そして、ポリティカル・コレクトネスをありがとうございます :))
確かに、手軽なポリタイマーを作るというイメージはありますね。皆さんの意見を聞いて、さらに視界が広がりました。ありがとうございます。

 
Sergey Dzyublik:

を実装することで、この問題を解決しています。

MQL5でシングルトンはどのように実装できますか?
 
fxsaber:

FileLoadでエラーが発生しました。FILE_COMMON フラグを持つ 2 つのローカル エージェントが FileLoad を使用してデータを読み込もうとすると、エージェントの 1 つが失敗します。

FileOpenでは適切なフラグを設定 できるが、FileLoadではできない。そのため、他のFileLoadが読み込む場合は、FileLoad経由でのアクセスを許可してください。

この旗はどのように役立つのでしょうか?以下はその例です。https://www.mql5.com/ru/forum/1111/page1628#comment_2702870

2つのExpert Advisorが FileOpen(FILE_SHARE_READ フラグ付き)を介してデータを読み込もうとします。 結果: Expert Advisorの1つがクラッシュ しました。


Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2016.08.03
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы