lname = "right"; fh = fopen( "c:\\AmiBackup\\" + lname + ".csv", "r"); if( fh ) { while( ! feof( fh ) ) { aa=DateNum()==1000000+StrToNum( fgets( fh ) ); Plot(aa AND TimeNum()==091000,"day",colorRed,style=1); } } else { printf("ERROR: file can not be found (does not exist)"); } 以上程序可以通过批量读文本日期文件例如:“050606”即2005年6月6日“,每行一日期,多少日就有多少行。然后,ami可在相关的日期mark上标记。 但现在发现,虽然能很好的实现我的要求,但运行速度相当的慢,如果日期过多会当机。我发现,ami总是反复不停的读取csv文件,不断的进行着不必要的重复从头到尾的运算。有没有哪位有办法只让ami读一次csv文件,然后就停止不读了。我发现用ami的ib autotrading,下完一单后,也总是不断的重复下单。
试试这个吧,其实所有只想运行一次的code都可以这样来用。 加上一个trigger的好处是万一在一开始运行一次后,如果以后想手动让这一段code再运行一次,可以方便地使用这个按钮来做。 你说得下单问题道理也一样。 Code: trigger = ParamTrigger("ReadFile", "Click here to readfile"); if(trigger) { StaticVarSetText("fileRead",""); } flag = StaticVarGetText("fileRead"); if(flag == "" ) { //code that only run once OR when triggered lname = "right"; fh = fopen( "c:\\AmiBackup\\" + lname + ".csv", "r"); if( fh ) { while( ! feof( fh ) ) { aa=DateNum()==1000000+StrToNum( fgets( fh ) ); Plot(aa AND TimeNum()==091000,"day",colorRed,style=1); } StaticVarSetText("fileRead","Y"); } else { printf("ERROR: file can not be found (does not exist)"); } }
对哦,多谢提醒,绘图是要不断刷新数据的,看来要把数据先读入内存,再每次绘图时使用。 以下这个方法不算好,不过如果你的文件还不算太大的话,应该问题不大,可以试试看,应该比每次从文件读取要效率高些。 Code: trigger = ParamTrigger("ReadFile", "Click here to readfile"); if(trigger) { StaticVarSetText("fileRead",""); } flag = StaticVarGetText("fileRead"); if(flag == "" ) { lname = "right"; fh = fopen( "c:\\AmiBackup\\" + lname + ".csv", "r"); if( fh ) { StaticVarSetText( "fileRead",fgets(fh)); while( ! feof( fh ) ) { StaticVarSetText( "fileRead",StaticVarGetText("fileRead")+","+fgets(fh)); } fclose( fh ); } else { printf("ERROR: file can not be found (does not exist)"); } } flag = StaticVarGetText("fileRead"); for( item = 0; ( data = StrExtract( flag , item ) ) != ""; item++ ) { aa=DateNum()==1000000+StrToNum(data); Plot(aa AND TimeNum()==091000,"day",colorRed,style=1); }
谢谢,这个方法不错,虽然有一些速度上的影响,但总比当机好。你一定对amibroker非常了解,像我想了一个晚上,也没想到可以通过这个思路解决问题。另外,还有一个小问题想请教你,那就是ParamTrigger窗口中的按钮和文字,在字体或颜色方面是否可以有办法自定义。我找了很久也没找到办法自定义。