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

 
Ilya Malev:

このスクリプトはMetaTrader 4用です :)

MT4では、すべてのデータは、mql4プログラムに受信される前に、端末で正確に計算されます。

はい、その後確認しました

ZS: MT4で使えるメッセージコードがMT5で使えないなんてことはないでしょうか?)

 
Alexandr Bryzgalov:
はい、その後確認しました。
MT5用のバージョンは掲載しないのですか?MT4では何のためにあるのか分かりませんが、MT5では本当に役に立つと思います - 上に書いたような絶望的な状況からすれば。
 
Ilya Malev:
MT5用のバージョンを投稿できますか?MT4では何のためにあるのかわかりませんが、MT5では本当に役に立ちます。

基本的にここはMT5用なのですが、コマンドコード(

PostMessageA(hwnd,WM_COMMAND,33324,0);

)は正しい。

エラーなしでコンパイルし、エラーなしで実行します。

//+------------------------------------------------------------------+
//|                                                 ChartRefresh.mq5 |
//|                                                      sanyooooook |
//|                                                 http://sn-bot.ru |
//+------------------------------------------------------------------+
#property copyright "sanyooooook"
#property link      "http://sn-bot.ru"
#property version   "1.00"
#property strict
#include <WinUser32.mqh>
int      hwnd=0,cnt=0;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   datetime last_time=TimeCurrent()-5;
   while(!IsStopped())
     {
      datetime cur_time=TimeCurrent();
      if(hwnd==0)
        {
         hwnd=WindowHandleMQL4(Symbol(),Period());
         if(hwnd!=0)
            Print("Chart window detected");
        }
      //--- refresh window not frequently than 1 time in 2 seconds
      if(hwnd!=0 && cur_time-last_time>=2)
        {
         //PostMessageA(hwnd,WM_COMMAND,33324,0); 
         PostMessageW(hwnd,WM_COMMAND,33324,0);//так наверное правильней
         last_time=cur_time;
        }
      Sleep(100);
     }
  }
//+--------------------------------
int WindowHandleMQL4(string symbol,
                     int tf)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   while(i<limit)
     {
      currChart=ChartNext(prevChart);
      if(currChart<0) break;
      if(ChartSymbol(currChart)==symbol
         && ChartPeriod(currChart)==timeframe)
         return((int)currChart);
      prevChart=currChart;
      i++;
     }
   return(0);
  }
  ENUM_TIMEFRAMES TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return(PERIOD_CURRENT);
      case 1: return(PERIOD_M1);
      case 5: return(PERIOD_M5);
      case 15: return(PERIOD_M15);
      case 30: return(PERIOD_M30);
      case 60: return(PERIOD_H1);
      case 240: return(PERIOD_H4);
      case 1440: return(PERIOD_D1);
      case 10080: return(PERIOD_W1);
      case 43200: return(PERIOD_MN1);
      
      case 2: return(PERIOD_M2);
      case 3: return(PERIOD_M3);
      case 4: return(PERIOD_M4);      
      case 6: return(PERIOD_M6);
      case 10: return(PERIOD_M10);
      case 12: return(PERIOD_M12);
      case 16385: return(PERIOD_H1);
      case 16386: return(PERIOD_H2);
      case 16387: return(PERIOD_H3);
      case 16388: return(PERIOD_H4);
      case 16390: return(PERIOD_H6);
      case 16392: return(PERIOD_H8);
      case 16396: return(PERIOD_H12);
      case 16408: return(PERIOD_D1);
      case 32769: return(PERIOD_W1);
      case 49153: return(PERIOD_MN1);      
      default: return(PERIOD_CURRENT);
     }
  }
 

マウスコマンドは必ず動作します )

#define  MOUSEEVENTF_MOVE              0x0001 // mouse move
#define  MOUSEEVENTF_LEFTDOWN          0x0002 // left button down
#define  MOUSEEVENTF_LEFTUP            0x0004 // left button up
#define  MOUSEEVENTF_RIGHTDOWN         0x0008 // right button down
#define  MOUSEEVENTF_RIGHTUP           0x0010 // right button up
#define  MOUSEEVENTF_MIDDLEDOWN        0x0020 // middle button down
#define  MOUSEEVENTF_MIDDLEUP          0x0040 // middle button up
#define  MOUSEEVENTF_WHEEL             0x0800 // wheel button rolled
#define  MOUSEEVENTF_ABSOLUTE          0x8000 // absolute move
              mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,25000,35000, 0, 0); 
              Sleep(50);
              mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_RIGHTDOWN,25000,35000, 0, 0); 
              Sleep(50);
              mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_RIGHTUP,25000,35000, 0, 0); 
              Sleep(500);     
 
Alexandr Bryzgalov:

基本的にここはMT5用なのですが、コマンドコード(

)は正しい。

エラーなしでコンパイルし、エラーなしで実行します。

なぜかうまくいかない。もしよろしければ、スクリプトブランチで議論を続けてください。

 
Ilya Malev:

なぜかうまくいかない。もしよろしければ、スクリプトブランチで議論を続けてください。

はい、動作しません。コード(33324)は、MT5には適していません。

他の用事で忙しいので、とりあえずこの辺で。

ZS: あとは、正しいコマンドコードを見つけるだけです。)

 

インジケータをテストする前に、testerAgent゙Filesフォルダのファイルを 削除する目的は何ですか?

 

tester 2015.10.15 19:22:44.860 1999.05.26 00:00:00 デバッグ版 'SomeIndicator.ex5' のエラーの意味は、再コンパイルしてください?

追伸:再コンパイルしたら読み込めたようですが、何がいけなかったのか理解したいです。

 
コンパイルエラー: 'const' - name expected
struct S { int i; }
      s1 = { 1 }, //нормально
      s2 = { 2 }, //нормально
сonst s3 = { 3 }; //'const' - name expected
あたらめて
 
Ilya Malev:

tester 2015.10.15 19:22:44.860 1999.05.26 00:00:00 デバッグ版 'SomeIndicator.ex5' のエラーの意味は、再コンパイルしてください?

追伸:再コンパイルしたら読み込めたようですが、何がいけなかったのか理解したいです。

ストラテジーテスターに 渡されたEX5は、デバッグ用(デバッグバージョン)として用意されていますので、再コンパイルしてください。