EA/インジケーターからのティックのエミュレーション - ページ 5

 
Zhunko: イゴール、このインターネットとの接続を切る方法は良くない。このモードでは、いろいろなことがうまくいかないんです。インターネットに接続できないようにする必要はありません。

いいえ、彼の歯車 - 最初のページで、winHpで正常に動作し、あなたは間違っているが、何らかの理由でwin7でそれは私のために動作するように望んでいませんでした。

:64bitのWinがあるところでは、コードが動かないという前提があるんです。32だけなので確認できない。

いいえ、私はWin7 max 32bitです。

 
IgorM:

いいえ、彼の歯車 - 最初のページで、winHPで正常に動作し、あなたは間違っているが、何らかの理由でwin7で、それは私のために動作するように望んでいなかった

イゴール、私は、アレクセイのコードの話ではなく、 インターネットからの切断の話をしてるんだ。
 
Zhunko:

ティッキングインジケーターからどのようにトレードするのですか?MQL4はそれを提供しません。

本当に!?ループするExpert Advisorですべてできるのに、なぜ取引できないティッキングインジケーターを追加する必要があるのでしょうか?これにより、WinAPIで難しい操作をする必要がなくなり、MT4のインターフェースが遅くなることもなく、EAの動作が3倍速くなります。なぜ、そんなふうに物事を複雑にするのか。

まあ、この議論から離れましょう。どうせ建設的なことにはつながらないし、逆になる可能性が高いですから。私はロシア語で、インジケーターではなくメタトレーダーで取引していると書きましたが、あなたはまたインジケーターで取引していると言っています。 もし私の発言から何か間違った解釈をしたのなら、説明します。「取引でインジケーターを使う」という言葉は、取引がインジケーターで実行されることを意味しません。

 
Meat:

すでに、私が書いたものの意味を(意図的かどうかは分かりませんが)歪め始めているのです。私はロシア語で、インジケーターではなくメタトレーダーで取引していると書きましたが、あなたはまたインジケーターで取引しているのですね。 もし私が以前に言ったことを誤解しているのなら、説明します。「取引にインジケーターが使われている」という言葉は、インジケーターが取引を行うことを意味するのではありません。

では、インジケータからのシグナルを受け取ったExpert Advisorがトレードするのですか?もちろん、MT4はこれだけのことをするのですか?これでいいのでしょうか?そうであれば、私の疑問は残ります。エキスパートアドバイザーにすべて任せてみてはいかがでしょうか。それが合理的なのです。
 
Zhunko: イゴール、私は、アレクセイのコードの話ではなく、 インターネットからの切断の話をしてるんだ。

しかし、彼のコードはWinhrでインターネットがオフのときにも動作します。

コードは、原則的に必要です。私たちはそれをインルーダーとして作り、週末にはどんなコードにも目盛りを入れています。グラフィカルなオブジェクトを扱う ときには特に便利です。「スマートルーラー」などを作りたいとよく言われますが、週末には「目で見て」コードを作らなければならないのです。

 
IgorM:

しかし、彼のコードはWinhrでインターネットがオフのときにも動作します。

そして、コードは、原則として、必要であり、inluderとしてそれを作り、週末には、グラフィカルなオブジェクトで作業するときに特に有用で、任意のコードでダニを持っている - 人々はしばしば "スマートルーラー "などを作るために要求し、週末には、コード "によって目を作るために持っている" 。

さて、どこでも通用するコードを掲載しました。一本の線。タイマーはありません。あらゆる指標で、あらゆるOSで動作します。実験としては十分です。

また、上記のExpert Advisorのコードも示しました。Expert Advisorのティックを生成する行は、インジケータのコードで代用することができます。この場合、専門家にも影響を与えることになります。

ライブラリーを 簡素化することができる。すべてはそこに実装済みです。

 
Zhunko:
では、インジケータからのシグナルを受け取ったExpert Advisorがトレードするのですか?もちろんMT4はこれだけやってくれるんですよね?これでいいのでしょうか?そうであれば、私の疑問は残ります。Expert Advisorにすべて任せてみてはいかがでしょうか。それが合理的なのです。

自動売買の話なら、インジケータやティックの問題は全く出てこないはずです。 だから、あなたは最初からこのスレッドの趣旨を誤解しているのでしょう。

 

ところで、もうひとつ。ライン

TimerCode[byte/4] += (value[i]>>(8*j)&0xFF) <<(byte%4*8);

は、次のように置き換える必要があります。

TimerCode[byte/4] |= (value[i]>>(8*j)&0xFF) <<(byte%4*8);

さもないと、SetMyTimer を再度呼び出すときにエラーが発生します。また、ループを開始する前に、配列をゼロで初期化することもできます。

Win7に関しては、私は問題を再現することができず、すべて正常に動作しています。また、やみくもにデバッグを行うことは非現実的です。このコードが7でも動く人はここにいるのかな? なんか特殊なWindowsを動かしているような気がしてきたので。

 

エラーの原因がわかったと思います。 以下、SetMyTimer関数の修正版です。

int SetMyTimer(int interval)
{    
  int MT4InternMsg= RegisterWindowMessageA("MetaTrader4_Internal_Message");
  int hWnd= WindowHandle(Symbol(),Period());
  int PostMsgAddr= GetProcAddress(GetModuleHandleA("user32.dll"),"PostMessageA");
  if (PostMsgAddr==0) return(0);
  // push ebp; move ebp,esp; push 01; push 02; push MT4InternMsg; push hWnd; mov eax,PostMsgAddr; call eax; pop ebp; ret 0010;    
  int value[]={ 0x55, 0x8B,0xEC, 0x6A,01, 0x6A,02, 0x68,0000, 0x68,0000, 0xB8,0000, 0xFF,0xD0, 0x5D, 0xC2,0x10 };
  int len[]=  { 1,    1,   1,    1,   1,  1,   1,  1,   4,    1,   4,    1,   4,    1,   1,    1,    1,   2 };
  value[8]=MT4InternMsg;  value[10]=hWnd;  value[12]=PostMsgAddr; 
  int byte=0;  ArrayInitialize(TimerCode,0);
  for (int i=0;  i<ArraySize(value);  i++)
    for (int j=0;  j<len[i];  j++, byte++)
      TimerCode[byte/4] |= value[i]>>(8*j)&0xFF<<(byte%4*8);

  return ( SetTimer(hWnd, TimerId, interval, TimerCode) );
}

これで問題なく動作するはずです。

 

ううん...、使えない

ログにエラーはなく、ターミナルのインターネットも、Vadimのアドバイスで、切断されませんでした - とにかく出力に目盛りはありません

理由: