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

 
ブローカーでシンボル名を変更(サフィックスを追加)すると、古いシンボルでのチャート設定(もう存在しないので、新しい名前に移行する必要があります)はすべて失われます。紛れもなく、専門家の指標と一緒です。嘘つけ。
 

2204では、EAを搭載したプロファイルがEAなしで読み込まれます。

EAの読み込みが遅いのも直ってない。確かに、今は端末がハングアップすることはなく、EAが長い間消えているだけです。

 
ここで助けてほしい。TesterのOptionsタブのinactiveウィンドウで、CTRL+CとCTRL+Vのキーの組み合わせが必要です。以下のものしか見つかっていません。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

端末がTFを変更したり、開いたりしたときに、プログラムでスクリプトを起動させる方法を教えてください。

エゴール さん 2008.11.16 09:28

必要なスレッドで「キーボード入力状態テーブル」を追加更新することでスクリプトを実行することができる。

MQLで試してみないと、もしかしたら、お役に立てるかもしれませんね。

    if ( h != NULL)
    {
        HWND child = :: FindWindowEx( h,NULL,"Edit", NULL);

        UINT lparam_Ctrl1 = :: MapVirtualKey( VK_CONTROL, 0) << 16 | 1 ;
        UINT lparam_A1 = :: MapVirtualKey((int)'A', 0) << 16 | 1 ;

        UINT lparam_A2 = 1 << 31 | 1 << 30 | :: MapVirtualKey((int)'A', 0) << 16 | 1 ;
        UINT lparam_Ctrl2 = 1 << 31 | 1 << 30 | :: MapVirtualKey( VK_CONTROL, 0) << 16 | 1 ;

        DWORD pid;
        DWORD tid = GetWindowThreadProcessId( child, & pid);
        HANDLE hProc = OpenProcess( PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, pid);
        //Ctrl + A

        AttachThreadInput( GetCurrentThreadId(), tid, TRUE);

        LRESULT pl1_Ctrl = :: PostMessage( child, WM_KEYDOWN, VK_CONTROL, lparam_Ctrl1 );
        WaitForInputIdle( hProc, INFINITE);

        BYTE state[256];
        GetKeyboardState( state);
        state[ VK_CONTROL] = 0x80;
        SetKeyboardState( state);

        LRESULT pl1_A = :: PostMessage( child, WM_KEYDOWN, (int)'A', lparam_A1 );
        WaitForInputIdle( hProc, INFINITE);

        LRESULT pl2_A = :: PostMessage( child, WM_KEYUP, (int)'A', lparam_A2);
        WaitForInputIdle( hProc, INFINITE);

        LRESULT pl2_Ctrl = :: PostMessage( child, WM_KEYUP, VK_CONTROL, lparam_Ctrl2);        
        WaitForInputIdle( hProc, INFINITE);
/*
        GetKeyboardState(state);
        state[VK_CONTROL] = 0x0;
        SetKeyboardState(state);
*/

        AttachThreadInput( GetCurrentThreadId(), tid, FALSE);

    }

実装できていないんです。マルチテスターにどうしても必要なんです。

 
fxsaber:
よろしくお願いします。TesterのSettingsタブのinactiveウィンドウでCTRL+CとCTRL+Vのキーの組み合わせを送信する必要があります。以下のものしか見つかっていません。

実施することができませんでした。マルチテスターにひどく必要とされる。

アクティブでないウィンドウにコピー&ペーストコマンドを送信することはできません。まず、テスターのウィンドウを開き、設定タブをアクティブにします。
 

チップがおかしいんです。EAファイルです。

Alt+Gでここに送信します。


エディター2200

 
Slava:
非アクティブなウィンドウにコピー&ペーストコマンドを送信することはできません。まず、テスターウィンドウを開き、設定タブをアクティブにする必要があります

テスターを自動化するためのアクションは、すべてPostMessageで行えるので、とても便利です。テスターを最小化できるように、など。

しかし、設定の取得や取り込みは、この利便性の例外となる。こちら側からの設定で作業を自動化できるような仕組みはできないのでしょうか?

削除済み  

テスターや オプティマイザーをコードから停止 させる方法を教えてください。

例えば、テスターは外部ファイルを読み込む必要があります。ファイルが見つからない場合は、ファイルが忘れられている旨のメッセージを表示し、テスターやオプティマイザーを無為に実行しないようにします。

削除済み  
Igor Makanu: MT4ビルド1220は、以前、端末4/5用のMEは同じで、新しい32ビットMEはもうないだろうと書いた人が、最後のMT4アップデートである可能性が高いです

また、新しいバグが発見された場合、そのバグがそのまま残ってしまうのでしょうか?

 
. ... Rick D. ... .:

また、新たなバグが発見された場合、そのままになってしまうのでしょうか?

バグを修正することと、開発することは別物です。
 
. ... Rick D. ... .:

テスターやオプティマイザーをコードから停止させる方法について、何かヒントはありますか?

例えば、Expert Advisorが外部ファイルをダウンロードする必要がある場合。ファイルが見つからない場合、テスターやオプティマイザーはそのファイルを忘れたことを知らされ、アイドリングの実行を停止します。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

mql5言語の特徴、微妙なニュアンスとコツ

fxsaber, 2019.11.06 16:57

遺伝的最適化では、最初の数千回のパスで、すでに結果を多かれ少なかれ理解できることがあります。

自動的に多くの最適化を実行する場合、すべての動作が速くなるようにしたいものです。そのため、最適化を中断する仕組みが必要になるのです。

#include <fxsaber\MultiTester\MTTester.mqh>  // https://www.mql5.com/ru/code/26132

// Выключает Оптимизацию ( и одиночный проход)
bool OptimizationStop( void )
{
  return(!MTTESTER::IsReady() && MTTESTER::ClickStart(false));
}


アプリケーションです。

// Демонстрация прерывания Оптимизации.

sinput int inAmountPasses = 20; // Через сколько проходов закончить
input int Range = 0; // 0..10000

double OnTester()
{
  int Data[];
  
  return(FrameAdd(NULL, 0, 0, Data)); // Сгенерировали TesterPass
}

void OnTesterPass()
{
  static int Amount = 0;
  
  ulong Pass;
  string Name;
  long ID;
  double Value;
  int Data[];

  while (FrameNext(Pass, Name, ID, Value, Data))
    if (++Amount > inAmountPasses)
    {
      OptimizationStop(); // Как достигли нужного количества проходов, выключили оптимизатор.
      
      break;
    }
}