Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули#include <winuser32.mqh>#import"user32.dll"intGetParent(inthWnd);
#import//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда//возможно нужно будет делать задержку в пару секунд//У меня все работаетintReconnect(){intresult;
inthwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графикаhwnd = GetParent(hwnd); // получаем хендл родительского окнаhwnd = GetParent(hwnd); // ...hwnd = GetParent(hwnd); //добираемся до главного окнаresult = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщенеreturn;
}
Ну вот и все - отлично работает процедруа программного реконнекта :) НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4. //В начале советника подключаем необходимые ДЛЛ-ки и модули #include <winuser32.mqh> #import"user32.dll" intGetParent(inthWnd); #import
//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться //Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда //возможно нужно будет делать задержку в пару секунд //У меня все работает intReconnect() { intresult; inthwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графика hwnd = GetParent(hwnd); // получаем хендл родительского окна hwnd = GetParent(hwnd); // ... hwnd = GetParent(hwnd); //добираемся до главного окна result = SendMessageA(hwnd, WM_COMMAND, 37400, 0); Print("SendMessageA = " + result); //посылаем сообщене return; }
Ну вот и все - отлично работает процедруа программного реконнекта :)
НЕ ЗАБУДЬТЕ ВКЛЮЧИТЬ ГАЛОЧКУ "Разрешить импорт ДЛЛ" в настройках МТ4.
//В начале советника подключаем необходимые ДЛЛ-ки и модули#include <winuser32.mqh>#import"user32.dll"intGetParent(inthWnd);
#import//Копируем процедуру в наш советник или библиотеку и вызываем ее там, где вам нравиться//Лично я вызываю перед рассчетом данных - но можно перед установкой ордеров. Правда тогда//возможно нужно будет делать задержку в пару секунд//У меня все работаетintReconnect(){intresult;
inthwnd = WindowHandle(Symbol(), Period()); // получаем хендл окна графикаhwnd = GetParent(hwnd); // получаем хендл родительского окнаhwnd = GetParent(hwnd); // ...hwnd = GetParent(hwnd); //добираемся до главного окнаresult = SendMessageA(hwnd, WM_COMMAND, 37400, 0);
Print("SendMessageA = " + result); //посылаем сообщенеreturn;
}
入力を生成するコードの一部を示せば、ロジックの誤りをより早く発見することができるだろう。
でも、MQLには一般的に受け入れられているソリューションがあるはずですよね?異なるシンボルのバーの開始を「同期」させる方法は?どうやら、使用されているすべてのシンボルについて、新しいバーのオープンを待つ必要があるようだ。でも、どうすれば正しくできるのでしょうか?
シンクロニシティなどという自転車操業的な発明は必要ないのです。すべては、もうとっくの昔に発明されている。新しいバーの有無は、Expert Advisor がインストールされている商品のみ、最初のティックの到着時に確認されます。また、start()イベントも新しいティックの到着時にそのシンボルにのみトリガーされます。私はこのチェックを行うコードの一部をお渡ししました。これにより、リクオートの場合、次のポジションは次のバーで開かれず、失敗した後は同じバーで開かれようとします。単一通貨モードでも多通貨モードでも、すべて問題なく動作しています。再提示の場合の取引は同じバーで行われますが、若干の遅れがあるため、常にそのバーの始値で行われるわけではなく、若干のオフセットがあります。すなわち、テスターとの差はありますが、バーではなく、始値での差になります。
ユーリ、刻が来なくても新しい時間の始まりは起きるんだ!
ダニが来なくても、新しい時間をスタートさせます!
あらゆる楽器の新しいバーを ティック単位で計算することが可能です。
LeoVは使用するすべてのペアで同期して新しいティックを待ちます。
YuraZさんが書きました(a)。
ぶっちゃけこれらのペアのためにティックが来なかった場合、またそれらを逃すことになります。
ティックが来なかった場合、スクリプトを使用しない限り、すぐに注文を出すことはできません。
また、証券会社にダニが来ても、端末に転送しない場合のみ(日中)。
だから、多通貨のExpert Advisorを実装するときは、Miles(またはMoore)のState Machineを作っていたんだ。
必要なペアのオーダーオープン状態を監視するものです。もちろん、常に可能だったわけではありません
当然、正しい価格でオープンすることはできないが、この方法によって、注文が正確にオープンすることが保証された。
簡単に注文できます。
よく考えてみてください、わからないならヒントをあげましょう。
通常、多通貨EAでは、注文の到着が100%保証されないような状況です。
となると、アドバイザーの仕事の論理が崩れてしまう。
ところで、EAはホバリングしているペアのティックで動作していることを忘れないでください。
だから、他のペアでティックがあったとしても、あなたのEAを取り付けたペアでティックがなかったとしても、です。
の場合、同期がとれなくなります。
証券会社との接続が切れたり、リクオート(リアル口座の場合)が発生するなどの不都合も忘れてはならない。
ところで、マイクロリアルズでは、端末がリロードされるまで注文が通らないという事態がよく発生します。
マニュアルモードでも彼らは何かを待っている、待っている...。
だから、私はペアオーダーを使ったシステムをずっと前から諦めていたんです。
面倒くさいから。
YuraZさんが書きました(a)。
ぶっちゃけ これらのペアのためにティックが来なかった場合、またそれらを逃すことになります。
ティックが来なかった場合、スクリプトを使用しない限り、すぐに注文を出すことはできません。
また、証券会社にダニが来ても、端末に転送しない場合のみ(日中)。
だから、多通貨のExpert Advisorを実装するときは、Miles(またはMoore)のState Machineを作っていたんだ。
必要なペアのオーダーオープン状態を監視するものです。 もちろん、常に可能だったわけではありません
もちろん、必要な値段でオープンできないこともありましたが、この方法なら必ずオープンできるのです。
簡単に注文できます。
よく考えてみてください、わからないならヒントをあげましょう。
通常、多通貨EAでは、注文の 到着が100%保証されないような状況です。
となると、アドバイザーの仕事の論理が崩れてしまう。
ところで、EAはホバリングしているペアのティックで動作していることを忘れないでください。
だから、他のペアでティックがあったとしても、あなたのEAを取り付けたペアでティックがなかったとしても、です。
の場合、同期がとれなくなります。
証券会社との接続が切れたり、リクオート(リアル口座の場合)が発生するなどの不都合も忘れてはいけません。
ちなみに、マイクロリアルズでは、端末を再読み込みするまで注文が 通らないという状況がよくあります。
マニュアルモードでも彼らは何かを待っている、待っている...。
だから、私はペアオーダーを使ったシステムをずっと前から諦めていたんです。
痛いほど面倒くさい。
TICと 書きたかったんだろうけど...。が、今、オーダーと書きましたね。
EAがEURUSDでエントリーし、USDCHFを使用する可能性があることを理解している。
書くだけ
LevelOpenBUY =MarketInfo("USDCHF",MODE_ASK)。
...= OrderSend ("USDCHF",Lot, LevelOpenBUY, ...).
動作するコードの断片
OpenLevel = MarketInfo( sSymbol, MODE_BID );
if ( TDARELOCK == 0 )
ticket=OrderSend( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,sComment,mMagic,0,Red) とする。
----
また、USDCHFのTICは、どのPairでもティックを取得するのに十分でない場合があります。
MQL5では、プログラムが動作するためにティックを受信する必要がないことを期待する
イベントを作成することを約束した。
----
2つ目の質問は、端末のフリーズについてですが、この問題は再起動することで解決できますので、開発者の方にはこちらの方がおすすめです。
これも見たことある
これは修正可能で、このフォーラムに例があります。
---
注文を送ったが開かなかった場合、このコードを送信して解決することができます。
YuraZ писал (а):
TICと書きたかったんだろうけど...。が、オーダーと書いてありましたね。
100%で発注することを指していたのです。
YuraZさんが書きました(a)。
TICと書きたかったんだろうけど...。TICのことですね
100%発注することを指していました。
しかし、これは多通貨体制に限ったことではないことはご理解いただけると思います
普通のExpert Advisorでは100%の保証は得られませんが......。100%保証はない
というのも
インターネッ
プロバイダー
ユア・ディー・シー・プロバイダー
御社ハードウェア
DC装置
など
---
そのためのストップです。または、別のプロバイダの予備のパソコン(お客様側に問題がある場合)
---
が、プログラムのロジックにエラーがある!!という場合は、別問題として処理されます。
---
であり、入力が15:00でなく15:05や15:02であっても論理は破綻しないはずである。
これはまさに、このスレッドの著者に見られることです!彼は、15時00分00秒に入ろうとしているのです。
( 数字は任意です )
彼はpipsはやらないので、15:00か15:01〜15:07にエントリーすれば、それほど問題はないはずです。
つまり、必要なすべてのシンボルについて、バーの始まりに厳密に縛られることはできない、どれかでバーの始まりを得ることができれば十分だ、ということです
YuraZさんが書きました(a)。
ぶっちゃけ これらのペアのためにティックが来なかった場合、またそれらを逃すことになります。
ティックが来なかった場合、スクリプトを使用しない限り、すぐに注文を出すことはできません。
また、証券会社にダニが来ても、端末に転送しない場合のみ(日中)。
だから、多通貨のExpert Advisorを実装するときは、Miles(またはMoore)のState Machineを作っていたんだ。
必要なペアのオーダーオープン状態を監視するものです。 もちろん、常に可能だったわけではありません
もちろん、必要な値段でオープンできないこともありましたが、この方法なら必ずオープンできるのです。
簡単に注文できます。
よく考えてみてください、わからないならヒントをあげましょう。
通常、多通貨EAでは、注文の 到着が100%保証されないような状況です。
となると、アドバイザーの仕事の論理が崩れてしまう。
ところで、EAはホバリングしているペアのティックで動作していることを忘れないでください。
だから、他のペアでティックがあったとしても、あなたのEAを取り付けたペアでティックがなかったとしても、です。
の場合、同期がとれなくなります。
証券会社との接続が切れたり、リクオート(リアル口座の場合)が発生するなどの不都合も忘れてはいけません。
ところで、マイクロリアルズでは、端末がリロードされるまで注文が 通らないという事態がよく発生します。
マニュアルモードでも彼らは何かを待っている、待っている...。
だから、私はペアオーダーを使ったシステムをずっと前から諦めていたんです。
面倒くさいから。
TICと 書きたかったんだろうけど...。が、今、オーダーと書きましたね。
エキスパートアドバイザーがEURUSDの上に立っている場合、USDCHFでエントリーする可能性があることを理解しています。
と書けばよいのです。
LevelOpenBUY =MarketInfo("USDCHF",MODE_ASK)。
...= OrderSend ("USDCHF",Lot, LevelOpenBUY, ...).
動作するコードの断片
OpenLevel = MarketInfo( sSymbol, MODE_BID ); if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,sComment,mMagic,0,Red).OrderLevel=OrderInfo( sSymbol,OP_SELL,Lots,OpenLevel,0,0,0,0);
----
USDCHFのTICは、どのペアのティックを取得するために十分でないかもしれません。
MQL5では、プログラムが動作するためにテロップを受信する必要がないことを期待します
イベントを作成することを約束します。つまり、どんなコードでもイベントに応じて書くことができます。
----
ターミナルでのフリーズに関する2つ目の質問ですが、この問題は再起動することで解決できますので、これは開発者に問い合わせる方がいいでしょう。
これも見たことあるー。
これもまた、このフォーラムで扱われており、例もあります。
---
注文を送ったが開かなかった場合、もちろん同様のコードを送って解決することができます。
ターミナルを再起動するのはいいのですが、このとき他のExpert Advisorが他のウィンドウにぶら下がっているのはどうしたらいいのでしょうか。
また、操作ロジックも当然異なり、変数の値が失われるため、頻繁なリロードにはあまり反応しません。
私たちがこれまで積み重ねてきたものを
Expert AdvisorがEURUSDをベースにしていても、USDCHFで入力することがあることを認識する。
を書けば十分です。
LevelOpenBUY =MarketInfo("USDCHF",MODE_ASK)。
...= OrderSend ("USDCHF",Lot, LevelOpenBUY, ...).
しかし、メインペアで前の時間の最後のティックが、例えば7時50分に来て、その時間の最初のティックが来たとします。
は8時10分、第二シンボルでは8時00分に最初の時刻が来た。
となると、メジャー通貨ペアのアドバイザーがマイナー通貨ペアに注文を出すことは期待しにくいです
を8時、良くて8時10分とします。
EAがスクリプトとして動作する場合、つまりシステムを休ませることなく、ひたすら空回りする場合です。
ダニがいるのに考慮しない。台本は書いたほうがいい。
YuraZさんが書きました(a)。
ぶっちゃけ これらのペアのためにティックが来なかった場合、またそれらを逃すことになります。
ティックが来なかった場合、スクリプトを使用しない限り、すぐに注文を出すことはできません。
また、証券会社にダニが来ても、端末に転送しない場合のみ(日中)。
だから、多通貨のExpert Advisorを実装するときは、Miles(またはMoore)のState Machineを作っていたんだ。
必要なペアのオーダーオープン状態を監視するものです。 もちろん、常に可能だったわけではありません
もちろん、必要な値段でオープンできないこともありましたが、この方法なら必ずオープンできるのです。
簡単に注文できます。
よく考えてみてください、わからないならヒントをあげましょう。
通常、多通貨EAでは、注文の 到着が100%保証されないような状況です。
となると、アドバイザーの仕事の論理が崩れてしまう。
ところで、EAはホバリングしているペアのティックで動作していることを忘れないでください。
だから、他のペアでティックがあったとしても、あなたのEAを取り付けたペアでティックがなかったとしても、です。
の場合、同期がとれなくなります。
証券会社との接続が切れたり、リクオート(リアル口座の場合)が発生するなどの不都合も忘れてはいけません。
ところで、マイクロリアルズでは、端末がリロードされるまで注文が 通らないという事態がよく発生します。
マニュアルモードでも彼らは何かを待っている、待っている...。
だから、私は以前からペアリング・オーダーを使ったシステムを拒否してきたのです。
面倒くさいから。
TICと 書きたかったんだろうけど...。が、今、オーダーと書きましたね。
エキスパートアドバイザーがEURUSDの上に立っている場合、USDCHFでエントリーする可能性があることを理解しています。
と書けばよいのです。
LevelOpenBUY =MarketInfo("USDCHF",MODE_ASK)。
...= OrderSend ("USDCHF",Lot, LevelOpenBUY, ...).
動作するコードの断片
OpenLevel = MarketInfo( sSymbol, MODE_BID ); if ( TDARELOCK == 0 ) ticket=OrderSend ( sSymbol,OP_SELL,Lots,OpenLevel,3,0,0,sComment,mMagic,0,Red).OrderLevel=OrderInfo( sSymbol,OP_SELL,Lots,OpenLevel,0,0,0,0);
----
USDCHFのTICは、どのペアのティックを取得するために十分でないかもしれません。
MQL5では、プログラムが動作するためにテロップを受信する必要がないことを期待します
イベントを作成することを約束します。つまり、どんなコードでもイベントに応じて書くことができます。
----
ターミナルでのフリーズに関する2つ目の質問ですが、この問題は再起動することで解決できますので、これは開発者に問い合わせる方がいいでしょう。
これも見たことあるー。
これもまた、このフォーラムで扱われており、例もあります。
---
注文を送ったが開かなかった場合、もちろん同様のコードを送って解決することができます。
ターミナルを再起動するのはいいのですが、このとき他のExpert Advisorが他のウィンドウにぶら下がっているのはどうしたらいいのでしょうか。
また、操作ロジックも当然異なり、変数の値が失われるため、頻繁なリロードにはあまり反応しません。
私たちがこれまで積み重ねてきたものを
Expert AdvisorがEURUSDをベースにしていても、USDCHFで入力することがあることを認識する。
を書けば十分です。
LevelOpenBUY =MarketInfo("USDCHF",MODE_ASK)。
...= OrderSend ("USDCHF",Lot, LevelOpenBUY, ...).
しかし、メインペアで前の時間の最後のティックが、例えば7時50分に来て、その時間の最初のティックが来たとします。
は8時10分、第二シンボルでは8時00分に最初の時刻が来た。
となると、メジャー通貨ペアのアドバイザーがマイナー通貨ペアに注文を出すことは期待しにくいです
を8時、良くて8時10分とします。
EAがスクリプトとして動作する場合、つまりシステムを休ませることなく、ひたすら空回りする場合です。
ダニがいるのに考慮しない。スクリプトを書いたほうがいいのでは?
1で、ReconnectがInit()関数を呼び出して、EAを再起動させると思いますか?
。
あなたは間違っている...
さらに、計算された貴重な変数を保存することが賢明である
複雑なコードがない場合は、グローバル変数に格納します。
コードが複雑な場合は、ディスクに書き出し、再起動時に読み込む - 再起動が誤っていた場合は、単に復元する
ちなみに、間違えかどうか判断するのは簡単です。
---
2 ある通貨ペアで新時刻があり、他のペアでティックがない場合、いつティックがあってもおかしくない。
新しいバー、より正確には新しい時間が来たと考えることができます。
そのため、後発組もカバーされていると考えてCLOSEでカウントすることが可能です。
ティックは後で、バーはタイムシフトされます!!しかし、本当の時間は過ぎています。
---
ティックのない通貨ペアで注文を出してもOKです。
8時に展示されるとは言っていません。
どの通貨ペアでも、新しいバーで新しいTICKが到着するとすぐに設定される可能性があります。
---
メインペアの前の時間の最後のティックが、例えば7時50分に来て、その時間の最初のティックが来た場合、>o 。
>を8時10分に、セカンダリーペアでは8時00分に最初のティックが入りました。
>メジャー通貨ペアでホバリングしているEAがセカンダリーで注文を出すことは期待しにくいです。
>8時か、せいぜい8時10分に。
多通貨モードで作業している場合、メインのペアの時間をカウントする必要はありませんし、メインのペアがない場合
任意の通貨ペアで新しいバーの開始のティックをキャッチする必要があります - とCLOSEによって指標を計算し、バーの終値によってではありません。
とin-outの2種類があります。
というのも、新しい時間のシグナルになるため、どのコントロールされたペアの新しいバーのティックにエントリーされるからです!(この場合、新しい時間)
多通貨で使用する場合、メインバーを時間指定する必要はありませんし、メインバーでなくても構いません。
新しいバーの開始のティックをキャッチする必要があります - そして、バーのクローズによってではなく、CLOSEによって指標を計算します。
とか、in-out
なぜなら、エントリーはどのコントロールされたペアの新しいバーのティックに正確に行われるからです。(この場合、新しい時間)
もっとこう......。
メイン通貨ペアのタイミングを合わせる必要はないし、メインでなくてもいい
任意の通貨ペアの新しいバーのティックをキャッチする必要があります - とCLOSEによって指標を計算し、バーの終値によってではありません。
とか、in-out
なぜなら、エントリーはどのコントロールされたペアの新しいバーのティックに正確に行われるからです。(この場合、新しい時間)
もっと詳しく............。
このロジックでExpert Advisorを作り直すと、PROBLEMの発生確率が何倍にもなります。
マーケットレビューのウィンドウにあるすべてのペアで新しい時間のキャッチを追加した場合、特に円では、実質的に失敗がないはずです。
1 ただ、すべてのペアで同期して新しいバーをキャッチしないでください !!!
2 コントロールされたペアのいずれかに新しいバーをキャッチし、現在のCLOSEで必要なすべてのペアの再計算を開始...
(ところで、あなたはいくつかの指標をやり直す必要があるかもしれません。)
入るか、出るか、持ち続けるかを決める
このロジックでExpert Advisorを作り直すと、問題が発生する確率が低くなる時期がある
マーケットオーバービューのウィンドウにあるすべてのペアで新しい時間のキャッチを追加した場合、特に円では実質的に失敗はないはずです。
1は、すべてのペアで同期して新しいバーをキャッチすることはできません!!!
2 コントロールされているペアで新しいバーをキャッチし、現在のCLOSEで必要なすべてのペアの再計算を開始します...
(ところで、いくつかの指標は、再計算する必要があるかもしれません。)
を行い、参入-撤退-保有継続の判断をする。
Veri Machaさん、ありがとうございます。)