初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 577 1...570571572573574575576577578579580581582583584...1504 新しいコメント Andrey Koldorkin 2016.05.11 22:45 #5761 Artyom Trishkin: まあ、私はそれを関数にすべて形成し、私がそれを必要とするとき、すべてのティック(それが合理的かつ必要である場合)、または新しいローソクの 開始時-例えば、我々はH1で動作する場合、1時間に1回でもそれを呼び出すだろう。機能付きはもちろん、便利です。コードを把握した。これではっきりしましたね。どうすれば自分のやりたいことに持っていけるのか、いつ、どの段階で必要なデータを取ればいいのか、考えていきたいと思います。 mila.com 2016.05.12 08:32 #5762 Koldun Zloy:あからさまに「無謀の極み」であれば、禁止されるはずだ。WinAPIはMQLの機能を大幅に拡張します。そして、DLLがなくてもバカなことはできる。そして、クリップボードへの文字列の受け渡しの例です。 よくやった、コメントもつけて。 ありがとうございます。 ここで、もうひとつ質問です。 与えられた座標でのマウスクリックをエミュレートすることは可能でしょうか? Alexey Volchanskiy 2016.05.12 10:44 #5763 mila.com: 素晴らしい、しかも解説付きで。 ありがとうございます。 もう1つ質問です。 指定した座標でマウスをクリックするエミュレーションを作ることはできますか? MQLからやる必要がなければ、AutoITを見てください、そこでは何でもできます。製品は無料で、MQLと対話するために1つのDLLが必要なだけです。 Koldun Zloy 2016.05.12 18:06 #5764 mila.com: 素晴らしい、しかも解説付きで。 ありがとうございます。 もう1つ質問です。 指定した座標でマウスをクリックするエミュレーションを作ることはできますか?はい、できます。#define MK_LBUTTON 0x0001 #define WM_LBUTTONDOWN 0x0201 #define WM_LBUTTONUP 0x0202 struct POINT { int x; int y; }; #import "User32.dll" uint WindowFromPoint( int x, int y ); uint PostMessageW( uint hWnd, uint Msg, uint wParam, uint lParam ); int ScreenToClient( uint hWnd, POINT& lpPoint ); #import int x = 1000; // Экранные координаты int y = 350; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { uint hwnd = WindowFromPoint( x, y ); // Получаем дескриптор окна в нужном месте if( hwnd ){ POINT point; point.x = x; point.y = y; ScreenToClient( hwnd, point ); // Преобразуем экранные координаты в координаты рабочей области окна uint lParam = (point.y * 65536) + (point.x & 0xFFFF); // Упаковываем координаты в 32-разрядное целое PostMessageW( hwnd, WM_LBUTTONDOWN, MK_LBUTTON, lParam ); // Посылаем сообщения от "мыши" PostMessageW( hwnd, WM_LBUTTONUP, MK_LBUTTON, lParam ); } } Andrey Koldorkin 2016.05.12 18:09 #5765 Artyom Trishkin: さて、私はそれをすべて関数に定式化し、必要なときにそれを呼び出します - すべてのティック(必要かつ合理的であれば)または新しいキャンドルが 開くときに - 例えば、我々はH1で動作する場合、1時間に一度。Artem、私は正しく理解しています、私たちはループを持っている場合:for(int i=0; i<copy_bars; i++) とループがある for(int j=0; j<copy_bars; j++) if(j==i) continue; ,は、カウントが平行であることを意味し、おおよそ5本のローソク足があれば、比較は継続することになります。1で1-捨てる。2で1、3で1、4で1、5で1。そうすれば、どこでどうなるかというサイクルが始まります。2 with 1、2 with 3、2 with 4、2 with 5。といった具合に。 同じになるのでしょうか? Artyom Trishkin 2016.05.12 18:44 #5766 Andrey Koldorkin:Artem、私は正しく理解しています、ループがある場合:for(int i=0; i<copy_bars; i++) とループがある場合 for(int j=0; j<copy_bars; j++) if(j==i) continue; ,というのは、計算が並行しているということになり、ローソク足が大体5本あれば、比較は進みます。1で1-捨てる。2で1、3で1、4で1、5で1。そうすれば、どこでどうなるかというサイクルが始まります。2 with 1、2 with 3、2 with 4、2 with 5。といった具合に。 同じになるのでしょうか? はい。 Andrey Koldorkin 2016.05.12 19:17 #5767 Artyom Trishkin: はい。もう一つの質問ですが、もし現在のローソクを比較する必要がないのであれば、カウントをゼロではなく1から始める必要はないのでしょうか?それとも、ここでは0がローソク足1、1がローソク足2などと理解すればいいのでしょうか? Artyom Trishkin 2016.05.12 19:50 #5768 Andrey Koldorkin:もう一つの質問ですが、もし現在のローソクを比較する必要がないのであれば、カウントをゼロではなく1から始める必要はないのでしょうか?それとも、ここでは0がローソク足1、1がローソク足2などと理解すればいいのでしょうか?ここで、0は配列の始まりです。そして、配列の中に、最初のローソク足から・・・まで、「まで」ではなく、必要な数だけ書くのです。int copied=CopyRates(Symbol(),PERIOD_CURRENT,1,copy_bars,array);1はコピーするローソク足の数、copy_barsはコピーするローソク足の数です。したがって、array[]には、インデックス0-1または1+copy_bars-1のセルに必要なローソク足が含まれます。 array[]のインデックス方向によって(ArraySetAsSeries()はインデックス方向を設定 し、ArrayGetAsSeries(), ArrayIsSeries() で確認可能)、array[]のインデックス方向が変わります。 Andrey Koldorkin 2016.05.12 20:48 #5769 Artyom Trishkin:ここで、0は配列の始まりです。そして、配列には、ローソク足を、「~まで」ではなく、必要な数だけ、先頭から...まで書きます。1はコピーするローソク足の数、copy_barsはコピーするローソク足の数です。したがって、array[] には、インデックス 0 のセルに必要なロウソクが 1 または 1+copy_bars-1 として格納される。 array[] のインデックス方向によって(ArraySetAsSeries() でインデックス方向を設定 し、ArrayGetAsSeries(), ArrayIsSeries() で確認できる)、インデックス方向が 決まる。このプログラミング森の奥へ進むほど...。まずAlert経由で表示されるものを確認しただけです。その逆、つまり現在のローソクに最も近いローソクが最大数を持つようです。 そして、経由して確認しました。bool series=ArrayIsSeries(dataCandle)。アラート(シリーズ)。と表示され、スクリプトには "false "と表示されます。私の論理では、falseが間違った側にあれば、trueが正しい側にあることになる。 と処方しました。ArraySetAsSeries (dataCandle, true); //方向を変えるbool series=ArrayIsSeries(dataCandle); //再度チェックする。Alert (series); //結果を画面に書き込む。でも、その後も「false」が出るんです。どうしたんだろう? Artyom Trishkin 2016.05.12 20:54 #5770 Andrey Koldorkin:ああ、このプログラミング。森の奥へ進むほど...。まず、Alertを通して、何を出しているのかだけ確認しました。それは逆であることが判明、すなわち、現在のローソクに最も近いローソクは、最大の数字を持っています。 そして、経由して確認しました。bool series=ArrayIsSeries(dataCandle)。アラート(シリーズ)。と表示され、スクリプトには "false "と表示されます。私の論理では、falseが間違った側にあれば、trueが正しい側にあることになる。 と処方しました。ArraySetAsSeries (dataCandle, true); //方向を変えるbool series=ArrayIsSeries(dataCandle); //再度チェックする。Alert (series); //結果を画面に書き込む。でも、その後も「false」が出るんです。どうしたんだろう?dataCandles は構造体である。履歴からロウソクを書き込む配列-array[]。そして、そのインデックスがチャート上のローソク足のインデックスと一致するように、時系列として作成する必要があります。つまり、array[]の0番目のセルが、現在の日付に最も近いローソク足に対応することになります。すなわち、1.ローソク足を配列array[]にコピーし、2.それを時系列にし、そこから値を構造体に読み込む。あなたはarray[]なしで行うことができます - ちょうど構造体にチャートから直接データを書き込むが、私は5との互換性のためにこれを提案 - それは唯一の高[i]、低[i]と他のデータを使用して、指標の中で直接コピーすることができますが、スクリプトまたはエキスパート-アドバイザで、我々は最初の配列に必要な履歴間隔をコピーする必要がありますが、私はそれをしました。 1...570571572573574575576577578579580581582583584...1504 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
まあ、私はそれを関数にすべて形成し、私がそれを必要とするとき、すべてのティック(それが合理的かつ必要である場合)、または新しいローソクの 開始時-例えば、我々はH1で動作する場合、1時間に1回でもそれを呼び出すだろう。
機能付きはもちろん、便利です。コードを把握した。これではっきりしましたね。どうすれば自分のやりたいことに持っていけるのか、いつ、どの段階で必要なデータを取ればいいのか、考えていきたいと思います。
あからさまに「無謀の極み」であれば、禁止されるはずだ。
WinAPIはMQLの機能を大幅に拡張します。そして、DLLがなくてもバカなことはできる。
そして、クリップボードへの文字列の受け渡しの例です。
よくやった、コメントもつけて。
ありがとうございます。
ここで、もうひとつ質問です。
与えられた座標でのマウスクリックをエミュレートすることは可能でしょうか?
素晴らしい、しかも解説付きで。
ありがとうございます。
もう1つ質問です。
指定した座標でマウスをクリックするエミュレーションを作ることはできますか?
素晴らしい、しかも解説付きで。
ありがとうございます。
もう1つ質問です。
指定した座標でマウスをクリックするエミュレーションを作ることはできますか?
はい、できます。
さて、私はそれをすべて関数に定式化し、必要なときにそれを呼び出します - すべてのティック(必要かつ合理的であれば)または新しいキャンドルが 開くときに - 例えば、我々はH1で動作する場合、1時間に一度。
Artem、私は正しく理解しています、私たちはループを持っている場合:for(int i=0; i<copy_bars; i++) とループがある for(int j=0; j<copy_bars; j++) if(j==i) continue; ,
は、カウントが平行であることを意味し、おおよそ5本のローソク足があれば、比較は継続することになります。
1で1-捨てる。
2で1、3で1、4で1、5で1。
そうすれば、どこでどうなるかというサイクルが始まります。
2 with 1、2 with 3、2 with 4、2 with 5。
といった具合に。
同じになるのでしょうか?
Artem、私は正しく理解しています、ループがある場合:for(int i=0; i<copy_bars; i++) とループがある場合 for(int j=0; j<copy_bars; j++) if(j==i) continue; ,
というのは、計算が並行しているということになり、ローソク足が大体5本あれば、比較は進みます。
1で1-捨てる。
2で1、3で1、4で1、5で1。
そうすれば、どこでどうなるかというサイクルが始まります。
2 with 1、2 with 3、2 with 4、2 with 5。
といった具合に。
同じになるのでしょうか?
はい。
もう一つの質問ですが、もし現在のローソクを比較する必要がないのであれば、カウントをゼロではなく1から始める必要はないのでしょうか?
それとも、ここでは0がローソク足1、1がローソク足2などと理解すればいいのでしょうか?
もう一つの質問ですが、もし現在のローソクを比較する必要がないのであれば、カウントをゼロではなく1から始める必要はないのでしょうか?
それとも、ここでは0がローソク足1、1がローソク足2などと理解すればいいのでしょうか?
ここで、0は配列の始まりです。そして、配列の中に、最初のローソク足から・・・まで、「まで」ではなく、必要な数だけ書くのです。
1はコピーするローソク足の数、copy_barsはコピーするローソク足の数です。
したがって、array[]には、インデックス0-1または1+copy_bars-1のセルに必要なローソク足が含まれます。 array[]のインデックス方向によって(ArraySetAsSeries()はインデックス方向を設定 し、ArrayGetAsSeries(), ArrayIsSeries() で確認可能)、array[]のインデックス方向が変わります。
ここで、0は配列の始まりです。そして、配列には、ローソク足を、「~まで」ではなく、必要な数だけ、先頭から...まで書きます。
1はコピーするローソク足の数、copy_barsはコピーするローソク足の数です。
したがって、array[] には、インデックス 0 のセルに必要なロウソクが 1 または 1+copy_bars-1 として格納される。 array[] のインデックス方向によって(ArraySetAsSeries() でインデックス方向を設定 し、ArrayGetAsSeries(), ArrayIsSeries() で確認できる)、インデックス方向が 決まる。
このプログラミング森の奥へ進むほど...。
まずAlert経由で表示されるものを確認しただけです。その逆、つまり現在のローソクに最も近いローソクが最大数を持つようです。
そして、経由して確認しました。
bool series=ArrayIsSeries(dataCandle)。
アラート(シリーズ)。
と表示され、スクリプトには "false "と表示されます。
私の論理では、falseが間違った側にあれば、trueが正しい側にあることになる。
と処方しました。
ArraySetAsSeries (dataCandle, true); //方向を変える
bool series=ArrayIsSeries(dataCandle); //再度チェックする。
Alert (series); //結果を画面に書き込む。
でも、その後も「false」が出るんです。
どうしたんだろう?
ああ、このプログラミング。森の奥へ進むほど...。
まず、Alertを通して、何を出しているのかだけ確認しました。それは逆であることが判明、すなわち、現在のローソクに最も近いローソクは、最大の数字を持っています。
そして、経由して確認しました。
bool series=ArrayIsSeries(dataCandle)。
アラート(シリーズ)。
と表示され、スクリプトには "false "と表示されます。
私の論理では、falseが間違った側にあれば、trueが正しい側にあることになる。
と処方しました。
ArraySetAsSeries (dataCandle, true); //方向を変える
bool series=ArrayIsSeries(dataCandle); //再度チェックする。
Alert (series); //結果を画面に書き込む。
でも、その後も「false」が出るんです。
どうしたんだろう?
dataCandles は構造体である。履歴からロウソクを書き込む配列-array[]。そして、そのインデックスがチャート上のローソク足のインデックスと一致するように、時系列として作成する必要があります。つまり、array[]の0番目のセルが、現在の日付に最も近いローソク足に対応することになります。
すなわち、1.ローソク足を配列array[]にコピーし、2.それを時系列にし、そこから値を構造体に読み込む。
あなたはarray[]なしで行うことができます - ちょうど構造体にチャートから直接データを書き込むが、私は5との互換性のためにこれを提案 - それは唯一の高[i]、低[i]と他のデータを使用して、指標の中で直接コピーすることができますが、スクリプトまたはエキスパート-アドバイザで、我々は最初の配列に必要な履歴間隔をコピーする必要がありますが、私はそれをしました。