MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 771 1...764765766767768769770771772773774775776777778...1953 新しいコメント Alexander Layzerevich 2019.02.25 14:55 #7701 Igor Zakharov:ただ、カレンダーのものはダメですね。30日バー逆算(日曜、土曜) シフトパラメータなしの関数から判断して、あなたは5でやっていて、4で質問していますね :)はい、30本の棒は、昨日から数えると21営業日です。(24.02.2019 - 25.01.2019) 私は 月平均キャンドルサイズ:598の場合 1週間の平均キャンドルサイズ:519 iATR()は10桁の数字が出るし...。 だから、まだ使い方がよくわからないんです。 Igor Zakharov 2019.02.25 15:38 #7702 Alexander Layzerevich:そしてiATR()は10桁の数字を出力する...。通常、小数の端数(=価格のようなもの。 ポイントに換算するには、_Pointで割る必要がある)。 イラスト参照:本日時点のユーロ/ドル - 月間の日足ベースで560pips。 Alexander Layzerevich 2019.02.25 18:33 #7703 Igor Zakharov:通常、小数の端数(=価格のようなもの。 ポイントに換算する場合は、_Pointで割る)。 イラストをご覧ください:今日のユーロ/ドル - 1ヶ月間、日足ベースで560ピップス。 MQL4で確認 しました。 Alexander Layzerevich 2019.02.25 19:19 #7704 Igor Zakharov:通常、小数の端数(=価格のようなもの。 ポイントに換算する場合は、_Pointで割る)。 イラスト参照:本日時点のユーロ/ドル - 1ヶ月間、日足ベースで560pips。 MQL5で確認しました。それを確認するために、以下のようなコードを書きました。 //************************************************************************************************/ double iPointOrderStep() { int Awerage30 = (iATR (Symbol(),PERIOD_D1, 21)); Print ("Awerage30 = ", Awerage30); int Awerage7 = (iATR (Symbol(),PERIOD_D1, 5)); Print ("Awerage7 = ", Awerage7); double iPointOrderStep = NormalizeDouble(((Awerage30+Awerage7)/2),0); Print ("iPointOrderStep = ", iPointOrderStep); return (iPointOrderStep); } //************************************************************************************************/ このように表示されます。 つまり、ある値を表示しているのに、別の値を表示している...。 Vitaly Muzichenko 2019.02.25 19:37 #7705 Alexander Layzerevich:MQL5で確認しました。それを確認するためにこのコードを書きました。これが出力されるのです。つまり、ある値を表示しているのに違う値を表示している...。MQL5では、このようなインジケーターの操作方法は適切ではありません。 int Awerage30 = (iATR (Symbol(),PERIOD_D1, 21)); Print ("Awerage30 = ", Awerage30); まず、ハンドルを作成する必要があり、それが完了した後に初めてCopyBufferから 値を取得することができます。 // этот код в Init() int handleATR=iATR(Symbol(),PERIOD_D1,21); if(handleATR==INVALID_HANDLE) return; // это уже в сам советник/индикатор: OnTick() double hATR[]; CopyBuffer(handleATR,0,0,1,hATR); // double ATR = hATR[0]; // здесь значение ATR Alexander Layzerevich 2019.02.25 19:55 #7706 Vitaly Muzichenko:MQL5では、このようなインジケーターの操作方法は適切ではありません。 まず、ハンドルを作成する必要がありますが、これで完了です。その後、CopyBufferから 値を取得することができます。 ありがとうございます、それを踏まえてコードを書き直します。 MT4で書いて、MT5でテストするために#include <MT4Orders.mqh>を使っているだけなのですが。 ライブラリがIndicatorをサポートしていないのかもしれません。 Vitaly Muzichenko 2019.02.25 20:01 #7707 Alexander Layzerevich:ありがとうございます、それを踏まえてコードを書き直します。 MT4で書いて、#include <MT4Orders.mqh>でMT5でテストしているだけなんですけどね。 ライブラリがIndicatorをサポートしていない可能性があります。はい、トレード機能のみ です。 Vitaly Muzichenko 2019.02.25 20:06 #7708 Alexander Layzerevich:ありがとうございます、それを踏まえてコードを書き直します。 MT4で書いて、#include <MT4Orders.mqh>でMT5でテストしているだけなんですけどね。 ライブラリでIndicatorがサポートされていない可能性があります。2つのプラットフォームを結合するのは非常に速い方法であり、うまくいくが、mql5ではそうしない方が良い double ATR(string symb,ENUM_TIMEFRAMES tf,int period,int index) { #ifdef __MQL4__ return(iATR(symb,tf,period,index)); #else double buf[1]; int handle=iATR(symb,tf,period); if(handle<0) { PrintFormat("Failed to create handle ATR %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator ATR %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } return(buf[0]); #endif } そして、mql4と同じようにインジケータを適用します。 double atr=ATR(Symbol(),PERIOD_D1, 30); Alexander Layzerevich 2019.02.26 05:59 #7709 Vitaly Muzichenko:これは、2つのプラットフォームを結合するための非常に速いオプションで、それは動作しますが、それはmql5でそうしない方がよいです そして、mql4と同じようにインジケータを適用します。 コードをありがとうございました。それが功を奏した。 //************************************************************************************************/ double iPointOrderStep() { double Awerage30 = (int)((ATR(Symbol(),PERIOD_D1,21,1))/Point()); // Print ("Awerage30 = ", Awerage30); double Awerage7 = (int)((ATR(Symbol(),PERIOD_D1,5,1))/Point()); // Print ("Awerage7 = ", Awerage7); double iPointOrderStep = NormalizeDouble(((Awerage30+Awerage7)/2/6),0); // Print ("iPointOrderStep = ", iPointOrderStep); return (iPointOrderStep); } //************************************************************************************************/ double ATR(string symb,ENUM_TIMEFRAMES tf,int period,int index) { #ifdef __MQL4__ return(iATR(symb,tf,period,index)); #else double buf[1]; int handle=iATR(symb,tf,period); if(handle<0) { PrintFormat("Failed to create handle ATR %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } else { if(CopyBuffer(handle,0,index,1,buf)<0) { PrintFormat("Failed to copy data from the indicator ATR %s/%s, Error: %d",symb,sTF(tf),GetLastError()); return(WRONG_VALUE); } } return(buf[0]); #endif } //************************************************************************************************/ これで、EA起動時の平均化されたデータができました。そしてこのデータは、私が関数にアクセスするたびに再計算されます。 私の理解では、呼び出しを制限するためには、計算されたデータでバッファレコードを作成する必要があります。 そこで、再計算のための条件を設定する必要があります。月曜日」とバッファに何もない場合。 例えば、変数 buferStep = -1 を宣言し、OnTick() で buferStep <0 または "Monday" ならば再計算する、という具合です。 ここでまた、困ったことに、ロボットはどうやって今日を「月曜日」と宣言するのでしょうか? Vitaly Muzichenko 2019.02.26 07:14 #7710 Alexander Layzerevich:コードをありがとうございました。こんな感じでうまくいきました。 これでEAの開始時に平均化されたデータが手に入りました。そして、このデータは関数が呼び出されるたびに再計算される。 私の理解では、呼び出しを制限するためには、計算されたデータでバッファレコードを作成する必要があります。 そこで、再計算のための条件を設定する必要があります。月曜日」とバッファに何もない場合。 例えば、変数 buferStep = -1 を宣言し、OnTick() で buferStep <0 または "Monday" ならば再計算する、という具合です。 ここでまた困ったことに、ロボットはどうやって今日が「月曜日」だと宣言するのでしょうか?月曜日は使いたくないので、何日前かだけ教えてほしい。また、Expert Advisorに計算の負荷をかけないように、新しいバーごとに取得することにしています。 1...764765766767768769770771772773774775776777778...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ただ、カレンダーのものはダメですね。30日バー逆算(日曜、土曜)
シフトパラメータなしの関数から判断して、あなたは5でやっていて、4で質問していますね :)
はい、30本の棒は、昨日から数えると21営業日です。(24.02.2019 - 25.01.2019)
私は
月平均キャンドルサイズ:598の場合
1週間の平均キャンドルサイズ:519
iATR()は10桁の数字が出るし...。
だから、まだ使い方がよくわからないんです。
そしてiATR()は10桁の数字を出力する...。
通常、小数の端数(=価格のようなもの。 ポイントに換算するには、_Pointで割る必要がある)。
イラスト参照:本日時点のユーロ/ドル - 月間の日足ベースで560pips。
通常、小数の端数(=価格のようなもの。 ポイントに換算する場合は、_Pointで割る)。
イラストをご覧ください:今日のユーロ/ドル - 1ヶ月間、日足ベースで560ピップス。
MQL4で確認 しました。
通常、小数の端数(=価格のようなもの。 ポイントに換算する場合は、_Pointで割る)。
イラスト参照:本日時点のユーロ/ドル - 1ヶ月間、日足ベースで560pips。
MQL5で確認しました。それを確認するために、以下のようなコードを書きました。
このように表示されます。
つまり、ある値を表示しているのに、別の値を表示している...。
MQL5で確認しました。それを確認するためにこのコードを書きました。
これが出力されるのです。
つまり、ある値を表示しているのに違う値を表示している...。
MQL5では、このようなインジケーターの操作方法は適切ではありません。
まず、ハンドルを作成する必要があり、それが完了した後に初めてCopyBufferから 値を取得することができます。
MQL5では、このようなインジケーターの操作方法は適切ではありません。
まず、ハンドルを作成する必要がありますが、これで完了です。その後、CopyBufferから 値を取得することができます。
ありがとうございます、それを踏まえてコードを書き直します。
MT4で書いて、MT5でテストするために#include <MT4Orders.mqh>を使っているだけなのですが。
ライブラリがIndicatorをサポートしていないのかもしれません。
ありがとうございます、それを踏まえてコードを書き直します。
MT4で書いて、#include <MT4Orders.mqh>でMT5でテストしているだけなんですけどね。
ライブラリがIndicatorをサポートしていない可能性があります。
はい、トレード機能のみ です。
ありがとうございます、それを踏まえてコードを書き直します。
MT4で書いて、#include <MT4Orders.mqh>でMT5でテストしているだけなんですけどね。
ライブラリでIndicatorがサポートされていない可能性があります。
2つのプラットフォームを結合するのは非常に速い方法であり、うまくいくが、mql5ではそうしない方が良い
そして、mql4と同じようにインジケータを適用します。
これは、2つのプラットフォームを結合するための非常に速いオプションで、それは動作しますが、それはmql5でそうしない方がよいです
そして、mql4と同じようにインジケータを適用します。
コードをありがとうございました。
それが功を奏した。
これで、EA起動時の平均化されたデータができました。そしてこのデータは、私が関数にアクセスするたびに再計算されます。
私の理解では、呼び出しを制限するためには、計算されたデータでバッファレコードを作成する必要があります。
そこで、再計算のための条件を設定する必要があります。月曜日」とバッファに何もない場合。
例えば、変数 buferStep = -1 を宣言し、OnTick() で buferStep <0 または "Monday" ならば再計算する、という具合です。
ここでまた、困ったことに、ロボットはどうやって今日を「月曜日」と宣言するのでしょうか?
コードをありがとうございました。
こんな感じでうまくいきました。
これでEAの開始時に平均化されたデータが手に入りました。そして、このデータは関数が呼び出されるたびに再計算される。
私の理解では、呼び出しを制限するためには、計算されたデータでバッファレコードを作成する必要があります。
そこで、再計算のための条件を設定する必要があります。月曜日」とバッファに何もない場合。
例えば、変数 buferStep = -1 を宣言し、OnTick() で buferStep <0 または "Monday" ならば再計算する、という具合です。
ここでまた困ったことに、ロボットはどうやって今日が「月曜日」だと宣言するのでしょうか?
月曜日は使いたくないので、何日前かだけ教えてほしい。また、Expert Advisorに計算の負荷をかけないように、新しいバーごとに取得することにしています。