需要测试用于日间交易的代数交易工具。为了从NSE获取日内实时数据,一些vendors正在出售Amibroker的数据插件。为了从Amibroker中获取数据,我打算使用AFL
(Amibroker公式语言)。 AFL
中的以下code为每个符号创建一次.csv
文件。但是,要使用实时数据,我需要全天连续将传入数据追加到.csv
文件中。如何在不使Amibroker崩溃/超载的情况下完成此任务?
// created a directory on your C drive named AmiBroker data backup
dayhours = paramtoggle("Day hours only", "No|Yes");
fmkdir("c:\\AmiBackup\\");
setbarsrequired(100000,100000);
lname = Name(); // gets the name of the symbol
// note: if you have names with invalid characters like / you must rename the
file before you try to create a name
// add an IF line for each symbol you need to rename
if (lname == "ER2U8-GLOBEX-FUT") lname = "ER2U8";
fh = fopen( "c:\\AmiBackup\\" + lname + ".csv", "w");
if( fh )
{
if(interval() == inDaily OR interval() == inMonthly OR interval() == inweekly)
{
fputs( "Ticker,Date,Open,High,Low,Close,Volume \n", fh );
for( i = 0; i < BarCount; i++ )
{
y = Year();
m = Month();
d = Day();
fputs( Name() + "," , fh );
ds = StrFormat("%02.0f-%02.0f-%02.0f,", m[ i ], d[ i ], y[ i ] );
fputs( ds, fh );
qs = StrFormat("%.4f,%.4f,%.4f,%.4f,%.0f\n", O[ i ],H[ i ],L[ i ],C[ i
],V[ i ] );
fputs( qs, fh );
if(i == 65500 or i == 130000 or i == 196500 or i == 262000)
{
fclose( fh );
if(i == 65500 ) fh = fopen( "c:\\AmiBackup\\" + lname + " A.csv", "w");
if(i == 130000 ) fh = fopen( "c:\\AmiBackup\\" + lname + " B.csv", "w");
if(i == 196500 ) fh = fopen( "c:\\AmiBackup\\" + lname + " C.csv", "w");
if(i == 262000 ) fh = fopen( "c:\\AmiBackup\\" + lname + " D.csv", "w");
}
}
}
else // intraday so add time field
{
fputs( "Ticker,Date,Time,Open,High,Low,Close,Volume \n", fh );
y = Year();
m = Month();
d = Day();
r = Hour();
e = Minute();
n = Second();
for( i = 1; i < BarCount; i++ )
{
if (dayhours and lastvalue(timenum()) >= 92900 and lastvalue(timenum()) <=
161500)
{
fputs( Name() + "," , fh );
ds = StrFormat("%02.0f-%02.0f-%02.0f,", m[ i ], d[ i ], y[ i ] );
fputs( ds, fh );
ts = StrFormat("%02.0f:%02.0f:%02.0f,", r[ i ],e[ i ],n[ i ] );
fputs( ts, fh );
qs = StrFormat("%.4f,%.4f,%.4f,%.4f,%.0f\n", O[ i ],H[ i ],L[ i ],C[ i
],V[ i ] );
fputs( qs, fh );
}
else
{
fputs( Name() + "," , fh );
ds = StrFormat("%02.0f-%02.0f-%02.0f,", m[ i ], d[ i ], y[ i ] );
fputs( ds, fh );
ts = StrFormat("%02.0f:%02.0f:%02.0f,", r[ i ],e[ i ],n[ i ] );
fputs( ts, fh );
qs = StrFormat("%.4f,%.4f,%.4f,%.4f,%.0f\n", O[ i ],H[ i ],L[ i ],C[ i
],V[ i ] );
fputs( qs, fh );
}
if(i == 65500 or i == 130000 or i == 196500 or i == 262000)
{
fclose( fh );
if(i == 65500 ) fh = fopen( "c:\\AmiBackup\\" + lname + " A.csv", "w");
if(i == 130000 ) fh = fopen( "c:\\AmiBackup\\" + lname + " B.csv", "w");
if(i == 196500 ) fh = fopen( "c:\\AmiBackup\\" + lname + " C.csv", "w");
if(i == 262000 ) fh = fopen( "c:\\AmiBackup\\" + lname + " D.csv", "w");
}
}
}
fclose( fh );
}
Buy = 1;
最佳答案
似乎您一直在向服务器询问有关100.000条的数据,而它仅需要最后一条。
我将创建一次此概述,并在代码中设置一个标志(完成此过程),完成后仅通过向后迭代直到收到的barOpen时间等于概述中已存在的柱来更新数据。
关于c# - 如何连续从Amibroker导出数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32665401/