[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 364 1...357358359360361362363364365366367368369370371...1145 新评论 [删除] 2009.12.23 22:50 #3631 Alsu,你的代码中的'n'变量并不清楚。如果是字段的数量,如果事先不知道,你怎么能找到它? Alexey Subbotin 2009.12.24 10:14 #3632 sibemol >> : alsu先生,我不明白你代码中的'n'变量。如果是字段的数量,如果你事先不知道,你怎么能找到它? 但你要向文件中写入一些东西,不是吗? 或者你的意思是事先不知道CSV结构?那么,如果我们既不知道字段的数量,也不知道它们的类型(字符串、整数、浮动、时间),更不知道语义负载,那么在其中添加的意义何在? [删除] 2009.12.24 14:18 #3633 alsu >> : 但你要向文件中写入一些东西,不是吗? 或者你的意思是事先不知道CSV结构?那么,如果我们既不知道字段的数量,也不知道它们的类型(字符串、整数、浮动、时间),更不知道它们的意义,那么向它添加的意义是什么? 我的任务很简单--将当前仪器的报价写到csv文件中,以便传输到其他应用程序。如果数据收集循环,一切都会成功写入,for(int i=Bars-1; i>=0; i--)。但是,如果我们用以下方法优化代码。 int counted_bars=IndicatorCounted(), limit; 如果(counted_bars==0)limit=Bars-1。 如果(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 Message printed in single 拜託幫我看一下~找不到輸出的檔案 VonDo Mix 2009.12.24 14:41 #3634 sibemol >> : 我的任务很简单--把当前仪器的报价写进一个csv文件,以便传送给另一个应用程序。一切都成功地写入了数据收集循环 for(int i=Bars-1; i>=0; i--)。但是,如果我们用以下方法优化代码。 int counted_bars=IndicatorCounted(), limit; 如果(counted_bars==0)limit=Bars-1。 如果(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 15:26 #3635 Sorento >> : 还是在开始时记住文件中的当前位置更容易。 随着酒吧的变化而变化。 如果你不介意的话,它在代码中看起来如何? [删除] 2009.12.24 16:00 #3636 你能告诉我,是否有一个功能,可以从当前脚本中禁用所有在其他图表上的脚本?或者更好的是,完全关闭终端。 这样做的原因是,如果其中一个被启用的脚本 "注意到 "灾难即将来临--它将停止自己和其他所有脚本的工作。如果上述情况仍然无法实施,如何才能做到这一点? Alexey Subbotin 2009.12.24 21:09 #3637 sibemol >> : 我的任务很简单--将当前符号的报价写进csv文件,以便将其发送给另一个应用程序。一切都成功地写入了数据收集循环 for(int i=Bars-1; i>=0; i--)。但是,如果我们用以下方法优化代码。 int counted_bars=IndicatorCounted(), limit; 如果(counted_bars==0)limit=Bars-1。 如果(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 - CSV中共有9个字段。在我上面的列表中,它们都被读作字符串,但这并不重要,因为对我们来说重要的不是它们的值,而是它们在字符串中的编号。 用9代替n并使用它,该子程序是通用的。 同时,正如Sorento所说,你可以写一个变量,它将记住每条记录前的指针位置。 然后在下一条记录前,如果需要,你可以将光标移到上一条记录的开头并覆盖它。注意,你应该把文件打开移到init(),关闭移到deinit()。变量f应该全局声明。 好吧,这就是尽可能多的细节。把它看作是家庭作业:))))))) Alexey Subbotin 2009.12.24 21:13 #3638 Mathers >> : 你能告诉我,是否有一个功能,可以从当前脚本中禁用所有在其他图表上的脚本?或者更好的是,完全关闭终端。 这样做的原因是,如果其中一个被启用的脚本 "注意到 "灾难即将来临--它将停止自己和其他所有脚本的工作。如果上述情况无法实施,如何才能做到这一点? 我将以全局变量的形式为脚本设置一个标志,这个标志可以被其他脚本读取,并按时清洗。 [删除] 2009.12.24 21:19 #3639 alsu писал(а) >> 好吧,这已经是你能得到的最详细的信息了。把它看作是家庭作业:))))))) 谢谢你的答复,我会试一试,让你知道发生了什么。 [删除] 2009.12.24 23:48 #3640 重新设计了 VSI指标.想得到正负的体积.结果是惊人的.什么地方来的?不清楚的数学。 附加的文件: vsi_twin_2.mq4 4 kb 1...357358359360361362363364365366367368369370371...1145 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
alsu先生,我不明白你代码中的'n'变量。如果是字段的数量,如果你事先不知道,你怎么能找到它?
但你要向文件中写入一些东西,不是吗? 或者你的意思是事先不知道CSV结构?那么,如果我们既不知道字段的数量,也不知道它们的类型(字符串、整数、浮动、时间),更不知道语义负载,那么在其中添加的意义何在?
但你要向文件中写入一些东西,不是吗? 或者你的意思是事先不知道CSV结构?那么,如果我们既不知道字段的数量,也不知道它们的类型(字符串、整数、浮动、时间),更不知道它们的意义,那么向它添加的意义是什么?
我的任务很简单--将当前仪器的报价写到csv文件中,以便传输到其他应用程序。如果数据收集循环,一切都会成功写入,for(int i=Bars-1; i>=0; i--)。但是,如果我们用以下方法优化代码。
int counted_bars=IndicatorCounted(), limit;
如果(counted_bars==0)limit=Bars-1。
如果(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;
如果(counted_bars==0)limit=Bars-1。
如果(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;
如果(counted_bars==0)limit=Bars-1。
如果(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 - CSV中共有9个字段。在我上面的列表中,它们都被读作字符串,但这并不重要,因为对我们来说重要的不是它们的值,而是它们在字符串中的编号。
用9代替n并使用它,该子程序是通用的。
同时,正如Sorento所说,你可以写一个变量,它将记住每条记录前的指针位置。 然后在下一条记录前,如果需要,你可以将光标移到上一条记录的开头并覆盖它。注意,你应该把文件打开移到init(),关闭移到deinit()。变量f应该全局声明。
好吧,这就是尽可能多的细节。把它看作是家庭作业:)))))))
你能告诉我,是否有一个功能,可以从当前脚本中禁用所有在其他图表上的脚本?或者更好的是,完全关闭终端。
这样做的原因是,如果其中一个被启用的脚本 "注意到 "灾难即将来临--它将停止自己和其他所有脚本的工作。如果上述情况无法实施,如何才能做到这一点?
我将以全局变量的形式为脚本设置一个标志,这个标志可以被其他脚本读取,并按时清洗。
alsu писал(а) >>
好吧,这已经是你能得到的最详细的信息了。把它看作是家庭作业:)))))))
谢谢你的答复,我会试一试,让你知道发生了什么。