[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 364 1...357358359360361362363364365366367368369370371...1145 新しいコメント 削除済み 2009.12.23 21:50 #3631 アルス、あなたのコードの'n'変数が明確ではありません。フィールドの数なら、事前に分からないのにどうやって見つけるんだ? Alexey Subbotin 2009.12.24 09:14 #3632 sibemol >> : alsuさん、コードの中の'n'変数がよくわからないのですが。フィールドの数なら、事前に分からないのにどうやって探すんだ? でも、ファイルに何か書き込むんですよね? それとも、CSVの構造があらかじめわからないということでしょうか?では、フィールドの数、型(文字列、整数、浮動小数点、時間)、意味的な負荷がわからないのに、それを追加する意味はあるのだろうか? 削除済み 2009.12.24 13:18 #3633 alsu >> : でも、ファイルに何か書き込むんですよね? それとも、CSVの構造があらかじめわからないということでしょうか?では、フィールドの数も型(文字列、整数、浮動小数点、時間)も意味的な負荷もわからないのに、追加する意味はあるのだろうか。 私の仕事は単純で、他のアプリケーションに転送するために、現在の商品の相場をcsvファイルに書き出すことです。データ収集ループ for(int i=Bars-1; i>=0; i--)であれば、すべて正常に書き込まれます。しかし、もし、コードを最適化するならば int counted_bars=IndicatorCounted(), limit; if (counted_bars==0) limit=Bars-1; if (counted_bars>0) limit=Bars-counted_bars-1; ループで for(int i=limit; i>=0; i--), の代わりに int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_WRITE, ",") を使用するようにしました。 挿入 int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_READ|FILE_WRITE, ",") の場合、ゼロバーがファイルの先頭に書き込まれます。FileSeek()を使用すると、ティックごとに行が追加されますが、一方、現在のバーで最後のファイルの行が上書きされる必要があります。 これですべてが明らかになったかと思います。念のため、以下は最適化されていない完全な動作コードです。 //+------------------------------------------------------------------+ //| iHisoryBars.mq4 | //| Copyright © 2009, Sibemol | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, Sibemol" #property link "" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 White //---- input parameters double v1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0, v1); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(), limit; if ( counted_bars==0) limit=Bars-1; if ( counted_bars>0) limit=Bars- counted_bars-1; int f=FileOpen(Symbol()+" "+Period()+".csv", FILE_CSV| FILE_WRITE, ","); //int f=FileOpen(Symbol()+" "+Period()+".csv", FILE_CSV|FILE_READ|FILE_WRITE, ","); FileWrite( f, "<ticker>,<per>,<date>,<time>,<open>,<high>,<low>,<close>,<volume>,<oi>"); for(int i=Bars-1; i>=0; i--) { v1[ i]=Close[ i]; int _Year=TimeYear(Time[ i]), _Month=TimeMonth(Time[ i]), _Day=TimeDay(Time[ i]), _Hour=TimeHour(Time[ i]), _Minute=TimeMinute(Time[ i]); string Y, M, D, H, Mi, Date, _Time; if(_Month<10) M="0"+DoubleToStr(_Month, 0); else M=DoubleToStr(_Month, 0); if(_Day<10) D="0"+DoubleToStr(_Day, 0); else D=DoubleToStr(_Day, 0); if(_Hour<10) H="0"+DoubleToStr(_Hour, 0); else H=DoubleToStr(_Hour, 0); if(_Minute<10) Mi="0"+DoubleToStr(_Minute, 0); else Mi=DoubleToStr(_Minute, 0); Date=DoubleToStr(_Year, 0)+ M+ D; _Time= H+ Mi; FileWrite( f, Symbol(), Period(), Date, _Time, Open[ i], High[ i], Low[ i], Close[ i], Volume[ i], 0); } FileClose( f); return(0); } //+------------------------------------------------------------------+ [WARNING CLOSED!] Any newbie Collect data into excel File Write always write VonDo Mix 2009.12.24 13:41 #3634 sibemol >> : 私の仕事は簡単で、現在の商品の相場をcsvファイルに書き出し、他のアプリケーションに送信することです。データ収集ループ for(int i=Bars-1; i>=0; i--)で全て正常に書き込まれています。しかし、もし、コードを最適化するならば int counted_bars=IndicatorCounted(), limit; if (counted_bars==0) limit=Bars-1; if (counted_bars>0) limit=Bars-counted_bars-1; ループで for(int i=limit; i>=0; i--), の代わりに int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_WRITE, ",") を使用するようにしました。 挿入 int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_READ|FILE_WRITE, ",") の場合、ゼロバーがファイルの先頭に書き込まれます。FileSeek()を使用する場合、行は各ティックで追加されますが、我々は現在のバーで最後のファイル行を上書きする必要があります。 これですべてが明らかになったかと思います。念のため、最適化されていないフル稼働のコード。 とか、ファイル内の現在位置を最初に記憶しておく方が楽なのでは? バーチェンジで変わる 削除済み 2009.12.24 14:26 #3635 Sorento >> : とか、ファイル内の現在位置を最初に記憶しておく方が楽なのでは? バーチェンジで変化 差し支えなければ、コードではどのように見えるでしょうか? 削除済み 2009.12.24 15:00 #3636 現在のスクリプトから他のチャートにあるスクリプトを全て無効にする機能があれば教えてください。あるいは、端末の電源を完全に切るのがよいでしょう。 その理由は、もし有効化されたスクリプトの1つが災害の到来に「気づいた」場合、自分自身や他のすべてのスクリプトの動作を停止してしまうからです。上記のようなケースでも実現不可能な場合は、どうすればよいのでしょうか。 Alexey Subbotin 2009.12.24 20:09 #3637 sibemol >> : 私の仕事は簡単で、現在のシンボルの引用をcsvファイルに書き込んで、他のアプリケーションに送信することです。データ収集ループ for(int i=Bars-1; i>=0; i--)で全て正常に書き込まれています。しかし、もし、コードを最適化するならば int counted_bars=IndicatorCounted(), limit; if (counted_bars==0) limit=Bars-1; if (counted_bars>0) limit=Bars-counted_bars-1; ループで for(int i=limit; i>=0; i--), の代わりに int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_WRITE, ",") を使用するようにしました。 挿入 int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_READ|FILE_WRITE, ",") の場合、ゼロバーがファイルの先頭に書き込まれます。FileSeek()を使用する場合、行は各ティックで追加されますが、我々は現在のバーで最後のファイル行を上書きする必要があります。 これですべてが明らかになったかと思います。念のため、最適化されていない完全なワーキングコード。 何が問題なのか理解できない。 以下は、あなたの文章の抜粋です、フィールドを読んでください。 FileWrite( f, Symbol(), Period(), Date, _Time, Open[ i], High[ i], Low[ i], Close[ i], Volume[ i], 0); 記号、期間、日付、時刻、OHLCV - 合計9フィールドのCSVです。上記のリストでは、これらはすべて文字列として読まれていますが、私たちにとって重要なのはその値ではなく、文字列内の数なので、それは問題ではありません。 nに9を代入して使用すれば、サブルーチンは万能です。 同時に、Sorentoさんがおっしゃるように、レコードの前にポインタの位置を記憶する変数を書いておけば、次のレコードの前に、必要に応じて、カーソルを最後のレコードの先頭に移動して上書きすることができます。この場合、ファイルのオープンをinit()に、クローズをdeinit()に移動させることに注意してください。変数fはグローバルに宣言する必要があります。 まあ、それはできるだけ詳細にということです。宿題だと思ってください:)))))))) Alexey Subbotin 2009.12.24 20:13 #3638 Mathers >> : 現在のスクリプトから他のチャートにあるスクリプトを全て無効にする機能があれば教えてください。あるいは、端末の電源を完全に切るのがよいでしょう。 その理由は、もし有効化されたスクリプトの1つが災害の到来に「気づいた」場合、自分自身や他のすべてのスクリプトの動作を停止してしまうからです。上記のようなケースで実現不可能な場合、どのようにすればよいのでしょうか? 私は、スクリプトのグローバル変数の形でフラグを設定し、それを他のスクリプトが読み取ることで、時間内にクリーンアップすることができるようにします。 削除済み 2009.12.24 20:19 #3639 alsu писал(а) >> まあ、それくらい細かいことなんですけどね。宿題だと思ってください:)))))))) お返事ありがとうございます!試してみてどうなるか教えてください。 削除済み 2009.12.24 22:48 #3640 VSIのインジケータを作り直した。ボリュームをプラスとマイナスで表示したかったのだが、結果は唖然。不明確な数学。 ファイル: vsi_twin_2.mq4 4 kb 1...357358359360361362363364365366367368369370371...1145 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
alsuさん、コードの中の'n'変数がよくわからないのですが。フィールドの数なら、事前に分からないのにどうやって探すんだ?
でも、ファイルに何か書き込むんですよね? それとも、CSVの構造があらかじめわからないということでしょうか?では、フィールドの数、型(文字列、整数、浮動小数点、時間)、意味的な負荷がわからないのに、それを追加する意味はあるのだろうか?
でも、ファイルに何か書き込むんですよね? それとも、CSVの構造があらかじめわからないということでしょうか?では、フィールドの数も型(文字列、整数、浮動小数点、時間)も意味的な負荷もわからないのに、追加する意味はあるのだろうか。
私の仕事は単純で、他のアプリケーションに転送するために、現在の商品の相場をcsvファイルに書き出すことです。データ収集ループ for(int i=Bars-1; i>=0; i--)であれば、すべて正常に書き込まれます。しかし、もし、コードを最適化するならば
int counted_bars=IndicatorCounted(), limit;
if (counted_bars==0) limit=Bars-1;
if (counted_bars>0) limit=Bars-counted_bars-1;
ループで for(int i=limit; i>=0; i--),
の代わりに int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_WRITE, ",") を使用するようにしました。
挿入 int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_READ|FILE_WRITE, ",")
の場合、ゼロバーがファイルの先頭に書き込まれます。FileSeek()を使用すると、ティックごとに行が追加されますが、一方、現在のバーで最後のファイルの行が上書きされる必要があります。
これですべてが明らかになったかと思います。念のため、以下は最適化されていない完全な動作コードです。
私の仕事は簡単で、現在の商品の相場をcsvファイルに書き出し、他のアプリケーションに送信することです。データ収集ループ for(int i=Bars-1; i>=0; i--)で全て正常に書き込まれています。しかし、もし、コードを最適化するならば
int counted_bars=IndicatorCounted(), limit;
if (counted_bars==0) limit=Bars-1;
if (counted_bars>0) limit=Bars-counted_bars-1;
ループで for(int i=limit; i>=0; i--),
の代わりに int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_WRITE, ",") を使用するようにしました。
挿入 int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_READ|FILE_WRITE, ",")
の場合、ゼロバーがファイルの先頭に書き込まれます。FileSeek()を使用する場合、行は各ティックで追加されますが、我々は現在のバーで最後のファイル行を上書きする必要があります。
これですべてが明らかになったかと思います。念のため、最適化されていないフル稼働のコード。
とか、ファイル内の現在位置を最初に記憶しておく方が楽なのでは?
バーチェンジで変わる
とか、ファイル内の現在位置を最初に記憶しておく方が楽なのでは?
バーチェンジで変化
差し支えなければ、コードではどのように見えるでしょうか?
現在のスクリプトから他のチャートにあるスクリプトを全て無効にする機能があれば教えてください。あるいは、端末の電源を完全に切るのがよいでしょう。
その理由は、もし有効化されたスクリプトの1つが災害の到来に「気づいた」場合、自分自身や他のすべてのスクリプトの動作を停止してしまうからです。上記のようなケースでも実現不可能な場合は、どうすればよいのでしょうか。
私の仕事は簡単で、現在のシンボルの引用をcsvファイルに書き込んで、他のアプリケーションに送信することです。データ収集ループ for(int i=Bars-1; i>=0; i--)で全て正常に書き込まれています。しかし、もし、コードを最適化するならば
int counted_bars=IndicatorCounted(), limit;
if (counted_bars==0) limit=Bars-1;
if (counted_bars>0) limit=Bars-counted_bars-1;
ループで for(int i=limit; i>=0; i--),
の代わりに int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_WRITE, ",") を使用するようにしました。
挿入 int f=FileOpen(Symbol()+""+Period()+".csv", FILE_CSV|FILE_READ|FILE_WRITE, ",")
の場合、ゼロバーがファイルの先頭に書き込まれます。FileSeek()を使用する場合、行は各ティックで追加されますが、我々は現在のバーで最後のファイル行を上書きする必要があります。
これですべてが明らかになったかと思います。念のため、最適化されていない完全なワーキングコード。
何が問題なのか理解できない。
以下は、あなたの文章の抜粋です、フィールドを読んでください。
記号、期間、日付、時刻、OHLCV - 合計9フィールドのCSVです。上記のリストでは、これらはすべて文字列として読まれていますが、私たちにとって重要なのはその値ではなく、文字列内の数なので、それは問題ではありません。
nに9を代入して使用すれば、サブルーチンは万能です。
同時に、Sorentoさんがおっしゃるように、レコードの前にポインタの位置を記憶する変数を書いておけば、次のレコードの前に、必要に応じて、カーソルを最後のレコードの先頭に移動して上書きすることができます。この場合、ファイルのオープンをinit()に、クローズをdeinit()に移動させることに注意してください。変数fはグローバルに宣言する必要があります。
まあ、それはできるだけ詳細にということです。宿題だと思ってください:))))))))
現在のスクリプトから他のチャートにあるスクリプトを全て無効にする機能があれば教えてください。あるいは、端末の電源を完全に切るのがよいでしょう。
その理由は、もし有効化されたスクリプトの1つが災害の到来に「気づいた」場合、自分自身や他のすべてのスクリプトの動作を停止してしまうからです。上記のようなケースで実現不可能な場合、どのようにすればよいのでしょうか?
私は、スクリプトのグローバル変数の形でフラグを設定し、それを他のスクリプトが読み取ることで、時間内にクリーンアップすることができるようにします。
alsu писал(а) >>
まあ、それくらい細かいことなんですけどね。宿題だと思ってください:))))))))
お返事ありがとうございます!試してみてどうなるか教えてください。