どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1022 1...101510161017101810191020102110221023102410251026102710281029...1178 新しいコメント Anatolii Zainchkovskii 2016.03.05 14:48 #10211 あるいは、もっとシンプルに質問させてください。OnCalculate()関数の 中でループが挿入されているので、1回だけ反復して、グラフが更新されたときだけ次の反復をする......ということです。 Victor Nikolaev 2016.03.05 15:26 #10212 ara66676:あるいは、もっとシンプルに質問させてください。OnCalculate()関数の中でループが挿入されているので、1回だけ反復して、グラフが更新されたときだけ次の反復をする......ということです。 サイキックかCODE TO STUDYが必要なようです。 Vadim Zhunko 2016.03.05 16:05 #10213 bistreevseh: ありがとうございました。私は管理者権限を持っており、特にターミナルフォルダについては、すべての破壊を所有者に与えたところ、うまくいきましたが、その後、動かなくなりました。その後、FileReadStrArrayW(名前に間違いがなければ)を使ってログファイルを読もうとしましたが、空の行を読んでしまい、スクリプトはansiモードでハングしてしまいます。FileReadCharArrのみ、アンシコードを読み取ることができました。あなたのライブラリでログファイルをパースする例はありますか?ぜひともよろしくお願いします。はい、現在ログを読むのに問題があります。昔はもっと簡単だったんです。ファイル自体はANSIエンコードされているのに、文字列がUNICODEになってしまっていることです。ここでは、そのようなスクリプトの動作を紹介します。#property strict #property script_show_inputs #include <FileFunctions.mqh> input int NumLines = 10; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { string sName = TimeToString(TimeLocal(), TIME_DATE); StringReplace(sName, ".", ""); string sPath = TerminalPath() + "\\MQL4\\Logs\\" + sName + ".log"; Print(sPath); if (!FileCheckW(sPath)) { Print("Файл отсутствует!"); return; } int hFile = FileOpenExistingW(sPath, GENERIC_READ, SHARE_READ); if (hFile == NULL) { Print("Файл не открыт!"); return; } string asArray[]; ArrayResize(asArray, NumLines); Print("hFile = ", hFile); for (int i = 0; i < NumLines; i++) asArray[i] = string(i) + " "; FileReadStrArrayMW(hFile, asArray, ArraySize(asArray), 0, NumLines); FileCloseHandle(hFile); for (int i = 0; i < NumLines; i++) Alert(asArray[i]); }しかし、それはログファイルが最初にUNICODEで保存されている場合にのみ機能しますすなわち、ライブラリが正常に動作する。ファイルのANSIエンコーディングからUNICODE文字列配列に変換する簡単な方法を考えるか、ファイルを読むときに文字列のエンコーディングを変換するような関数をライブラリに追加する必要がありますね。=====================オプション1:アレイを扱う必要がない。ファイル全体をANSIとして読み込み、UNICODEに変換し、MQLでパースします。バリエーション2。ANSIとして読み込み、端末のカレントディレクトリに書き込み、CSVファイル用のMQL関数で読み込む。オプション3.同じライブラリの関数を使ってサンドボックス内のログファイルへのシンボリックリンクを作成 し、CSVファイルを扱うためのMQL関数を使って読み取ります。#property strict #include <FileFunctions.mqh> //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { string sName = TimeToString(TimeLocal(), TIME_DATE); StringReplace(sName, ".", ""); sName += ".log"; string sPathLogs = TerminalPath() + "\\MQL4\\Logs\\" + sName; string sPathFiles = TerminalPath() + "\\MQL4\\Files\\" + sName; Print(sPathLogs); Print(sPathFiles); if (!FileCheckW(sPathLogs)) { Print("Файл отсутствует!"); return; } if (!FileCheckW(sPathFiles) && !FileSymbolicLinkW(sPathLogs, sPathFiles)) { Print("Символьная ссылка не создана!"); return; } int hFile = FileOpen(sName, FILE_READ|FILE_CSV|FILE_ANSI, '\t'); if (hFile == INVALID_HANDLE) { Print("Файл не открыт!"); return; } while (!FileIsEnding(hFile)) Alert(FileReadString(hFile)); FileClose(hFile); }私の意見では、これが一番きれいで簡単なオプションです。 [Удален] 2016.03.06 15:44 #10214 私は、あるチャンネルのインジケータを書こうとしています。チャートに描画するための値を計算し、double tob[] と double tos[] 配列に入れましたが、それらをチャートに描画するためのバッファに接続しようとすると - 25行目と26行目にあるようになります。SetIndexBuffer(0, tob); SetIndexBuffer(1, tos);のように、必要な値の代わりにこれらの配列を使用します。0/1.424/1.3679 1/1.42/1.3639は、このように2147483647という数字で埋め尽くされます。 0/2147483647/2147483647 1/2147483647/2147483647 2/2147483647/2147483647どうしたら治るのでしょうか? ファイル: channel1.mq4 7 kb 削除済み 2016.03.07 11:37 #10215 ピリオドを素早く切り替えるためのホットキーはありますか?Dを押すとH1がM15に、Uを押すとH1に切り替わります。 削除済み 2016.03.07 11:39 #10216 MT4で昼夜を分けるためのテンプレートを探すのを手伝ってください。00:00から8:00までのチャートが1色で、8:00から00:00までが別の色だとします。 Dikons 2016.03.07 20:59 #10217 皆様にご挨拶申し上げます。この問題に直面した。ロボットのコードの断片。int per=Period(); if(per = 60){.Print("If the period is not H1, this line should not be in the log");コメント(...)です。...// これがロボットのボディです......}は、チャート上でH1以外の期間を有効にした場合、ロボット本体、Print(...)ライン、画面上のComment(...)が実行されないことを意味しています。ただし、どの期間でもすべて実行される。なぜ?正しく書くには、チャート上の周期が指定したものと一致しない場合 - 端末に制御を戻すことです。(ちなみに、RETURN (0)も試しましたがダメで、やはり全部印刷されてしまいます...) Any rookie question, so How to get comments Any questions from newcomers 削除済み 2016.03.07 21:01 #10218 Dikons:皆様にご挨拶申し上げます。この問題に直面した。ロボットのコードスニペットです。int per=Period(); if(per = 60){Print("If the period is not H1 - this line should not be in the logbook");コメント(...)です。...// 次に、ロボットの本体......}は、チャートでH1以外のピリオドが有効になっている場合、ロボット本体、Print(...)文字列、画面上のComment(...)が実行されないことを意味しています。ただし、どの期間でもすべて実行される。なぜ?タイムフレームが設定されたものと一致しない場合の正しい登録方法 - 端末に制御を戻す。(ちなみに、RETURN (0)も試してみましたが、うまくいきません。やはり全部印刷されてしまいます...) あなたは課題をやっているので、比較が必要です if(per== 60) Dikons 2016.03.08 05:45 #10219 Trader76: 比較は必要だが、代入はしている if(per== 60)ありがとう、同志よ...。脳みそが煮えくり返ってる...。プログラミングを大幅に中断してしまったので、少し知っていることをかなり忘れてしまっています...。---もう1つ質問ですが...1日のうち最大/最小の最初の8時間を端末別に検索した場合の断片。int h=TimeHour(TimeCurrent()); // 現在のターミナルアワーを求める (0...23) if (h<8) return(0); // 日中の最初の8本のローソクのH1がない場合 = leave... double Maxi=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)]; // その日の最初の8本のローソクの最大値を定義します.double Mini=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,8,h-7)];最後の2行は、チャートの期間がH1以外に設定されている場合、正しく動作しません。なぜ?ロボットには明示的に計算期間が割り当てられているため...。例えばチャートにH4を表示させると、ロボットはH4のローソク足を使ってリバランスを行います(他のタイムフレームでも同様です)。 削除済み 2016.03.08 07:18 #10220 Dikons:ありがとう、同志よ...。脳みそが煮えくり返ってる...。プログラミングを大幅に中断してしまったので、少し知っていることをかなり忘れてしまっています...。---もう1つ質問ですが...1日のうち最大/最小の最初の8時間を端末別に検索した場合の断片。int h=TimeHour(TimeCurrent()); // 現在のターミナルアワーを求める (0...23) if (h<8) return(0); // 日中の最初の8本のローソクのH1がない場合 = leave... double Maxi=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)]; // その日の最初の8本のローソク足の最大値を決定。double Mini=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,8,h-7)];最後の2行は、チャートの期間がH1以外に設定されている場合、正しく動作しません。なぜ?ロボットには明示的に計算期間が割り当てられているため...。例えばチャートにH4を表示させると、ロボットはH4のローソク足を使ってリバランスを行います(他のタイムフレームでも同様です)。ここでは、最大/最小バー数を 取得します: iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)そして、例えばバー番号2を挿入すると、High[2]となり、別のタイムフレームでは、H1とは異なる値を得ることができます。ハイについて読むiHigh(NULL,PERIOD_H1, iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7))) 1...101510161017101810191020102110221023102410251026102710281029...1178 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
あるいは、もっとシンプルに質問させてください。
OnCalculate()関数の 中でループが挿入されているので、1回だけ反復して、グラフが更新されたときだけ次の反復をする......ということです。
あるいは、もっとシンプルに質問させてください。
OnCalculate()関数の中でループが挿入されているので、1回だけ反復して、グラフが更新されたときだけ次の反復をする......ということです。
ありがとうございました。私は管理者権限を持っており、特にターミナルフォルダについては、すべての破壊を所有者に与えたところ、うまくいきましたが、その後、動かなくなりました。その後、FileReadStrArrayW(名前に間違いがなければ)を使ってログファイルを読もうとしましたが、空の行を読んでしまい、スクリプトはansiモードでハングしてしまいます。FileReadCharArrのみ、アンシコードを読み取ることができました。あなたのライブラリでログファイルをパースする例はありますか?ぜひともよろしくお願いします。
はい、現在ログを読むのに問題があります。昔はもっと簡単だったんです。
ファイル自体はANSIエンコードされているのに、文字列がUNICODEになってしまっていることです。
ここでは、そのようなスクリプトの動作を紹介します。
しかし、それはログファイルが最初にUNICODEで保存されている場合にのみ機能します
すなわち、ライブラリが正常に動作する。ファイルのANSIエンコーディングからUNICODE文字列配列に変換する簡単な方法を考えるか、ファイルを読むときに文字列のエンコーディングを変換するような関数をライブラリに追加する必要がありますね。
=====================オプション1:アレイを扱う必要がない。ファイル全体をANSIとして読み込み、UNICODEに変換し、MQLでパースします。
バリエーション2。ANSIとして読み込み、端末のカレントディレクトリに書き込み、CSVファイル用のMQL関数で読み込む。
オプション3.同じライブラリの関数を使ってサンドボックス内のログファイルへのシンボリックリンクを作成 し、CSVファイルを扱うためのMQL関数を使って読み取ります。
私の意見では、これが一番きれいで簡単なオプションです。
私は、あるチャンネルのインジケータを書こうとしています。チャートに描画するための値を計算し、double tob[] と double tos[] 配列に入れましたが、それらをチャートに描画するためのバッファに接続しようとすると - 25行目と26行目にあるようになります。
のように、必要な値の代わりにこれらの配列を使用します。
0/1.424/1.3679
1/1.42/1.3639
は、このように2147483647という数字で埋め尽くされます。
0/2147483647/2147483647
1/2147483647/2147483647
2/2147483647/2147483647
どうしたら治るのでしょうか?
MT4で昼夜を分けるためのテンプレートを探すのを手伝ってください。
00:00から8:00までのチャートが1色で、8:00から00:00までが別の色だとします。
皆様にご挨拶申し上げます。
この問題に直面した。
ロボットのコードの断片。
int per=Period();
if(per = 60)
{.
Print("If the period is not H1, this line should not be in the log");
コメント(...)です。
...// これがロボットのボディです
...
...
}
は、チャート上でH1以外の期間を有効にした場合、ロボット本体、Print(...)ライン、画面上のComment(...)が実行されないことを意味しています。
ただし、どの期間でもすべて実行される。なぜ?
正しく書くには、チャート上の周期が指定したものと一致しない場合 - 端末に制御を戻すことです。(ちなみに、RETURN (0)も試しましたがダメで、やはり全部印刷されてしまいます...)
皆様にご挨拶申し上げます。
この問題に直面した。
ロボットのコードスニペットです。
int per=Period();
if(per = 60)
{
Print("If the period is not H1 - this line should not be in the logbook");
コメント(...)です。
...// 次に、ロボットの本体
...
...
}
は、チャートでH1以外のピリオドが有効になっている場合、ロボット本体、Print(...)文字列、画面上のComment(...)が実行されないことを意味しています。
ただし、どの期間でもすべて実行される。なぜ?
タイムフレームが設定されたものと一致しない場合の正しい登録方法 - 端末に制御を戻す。(ちなみに、RETURN (0)も試してみましたが、うまくいきません。やはり全部印刷されてしまいます...)
比較は必要だが、代入はしている if(per== 60)
ありがとう、同志よ...。脳みそが煮えくり返ってる...。プログラミングを大幅に中断してしまったので、少し知っていることをかなり忘れてしまっています...。
---
もう1つ質問ですが...1日のうち最大/最小の最初の8時間を端末別に検索した場合の断片。
int h=TimeHour(TimeCurrent()); // 現在のターミナルアワーを求める (0...23)
if (h<8) return(0); // 日中の最初の8本のローソクのH1がない場合 = leave...
double Maxi=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)]; // その日の最初の8本のローソクの最大値を定義します.
double Mini=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,8,h-7)];
最後の2行は、チャートの期間がH1以外に設定されている場合、正しく動作しません。なぜ?ロボットには明示的に計算期間が割り当てられているため...。
例えばチャートにH4を表示させると、ロボットはH4のローソク足を使ってリバランスを行います(他のタイムフレームでも同様です)。
ありがとう、同志よ...。脳みそが煮えくり返ってる...。プログラミングを大幅に中断してしまったので、少し知っていることをかなり忘れてしまっています...。
---
もう1つ質問ですが...1日のうち最大/最小の最初の8時間を端末別に検索した場合の断片。
int h=TimeHour(TimeCurrent()); // 現在のターミナルアワーを求める (0...23)
if (h<8) return(0); // 日中の最初の8本のローソクのH1がない場合 = leave...
double Maxi=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)]; // その日の最初の8本のローソク足の最大値を決定。
double Mini=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,8,h-7)];
最後の2行は、チャートの期間がH1以外に設定されている場合、正しく動作しません。なぜ?ロボットには明示的に計算期間が割り当てられているため...。
例えばチャートにH4を表示させると、ロボットはH4のローソク足を使ってリバランスを行います(他のタイムフレームでも同様です)。
ここでは、最大/最小バー数を 取得します: iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)
そして、例えばバー番号2を挿入すると、High[2]となり、別のタイムフレームでは、H1とは異なる値を得ることができます。ハイについて読む
iHigh(NULL,PERIOD_H1, iHighest(NULL,PERIOD_H1,MODE_HIGH,8,h-7)))