Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Amibroker连续导出数据_C#_C++_Trading_Algorithmic Trading - Fatal编程技术网

C# 如何从Amibroker连续导出数据

C# 如何从Amibroker连续导出数据,c#,c++,trading,algorithmic-trading,C#,C++,Trading,Algorithmic Trading,需要测试用于日内交易的交易工具。为了从中获取当天的实时数据,一些公司正在为其销售数据插件。为了从Amibroker中获取数据,我打算使用AFL(Amibroker公式语言)。下面在AFL中为每个符号创建一次.csv文件。但要使用实时数据,我需要在一天中连续不断地将传入数据附加到.csv文件中。如何做到这一点而不使Amibroker崩溃/过载 //在C驱动器上创建了一个名为AmiBroker data backup的目录 dayhours=参数切换(“仅限白天小时”,“否|是”); fmkdir(

需要测试用于日内交易的交易工具。为了从中获取当天的实时数据,一些公司正在为其销售数据插件。为了从Amibroker中获取数据,我打算使用AFL(Amibroker公式语言)。下面在
AFL
中为每个符号创建一次
.csv
文件。但要使用实时数据,我需要在一天中连续不断地将传入数据附加到
.csv
文件中。如何做到这一点而不使Amibroker崩溃/过载

//在C驱动器上创建了一个名为AmiBroker data backup的目录
dayhours=参数切换(“仅限白天小时”,“否|是”);
fmkdir(“c:\\AmiBackup\\”;
所需费用(100001000000);
lname=Name();//获取符号的名称
//注意:如果名称中包含无效字符,如/,则必须重命名
文件,然后再尝试创建名称
//为需要重命名的每个符号添加IF行
如果(lname==“ER2U8-GLOBEX-FUT”)lname=“ER2U8”;
fh=fopen(“c:\\AmiBackup\\”+lname+“.csv”、“w”);
如果(fh)
{ 
如果(间隔()==每日或间隔()==每月或间隔()==每周)
{
fputs(“行情、日期、开盘、高位、低位、收盘、成交量”,fh);
对于(i=0;i如果(dayhours和lastvalue(timenum())>=92900和lastvalue(timenum()),则您似乎一直在向服务器询问关于100.000条的数据,而它只需要最后一条


我将创建此概览一次,在代码中设置一个标志,是否已完成此操作,完成后仅通过向后迭代更新数据,直到收到的barOpen时间等于概览中已有的条数。

似乎您一直在向服务器询问关于100000条的数据,而服务器只需要最后一条


我将创建此概览一次,在代码中设置一个标志,是否已完成此操作,完成后仅通过向后迭代更新数据,直到收到的barOpen时间等于概览中已有的条数。

似乎您一直在向服务器询问关于100000条的数据,而服务器只需要最后一条


我将创建此概览一次,在代码中设置一个标志,是否已完成此操作,完成后仅通过向后迭代更新数据,直到收到的barOpen时间等于概览中已有的条数。

似乎您一直在向服务器询问关于100000条的数据,而服务器只需要最后一条


我会创建一次这个概览,在代码中设置一个标志,是否已经完成了这个操作,完成后只通过向后迭代来更新数据,直到收到的barOpen时间等于概览中已经存在的条。

摆脱for循环。Amibroker会在每次图表更新时运行AFL,因此对于那些for循环,您将通过每次图表更新时(当新的报价出现时),都会显示数据库中的每个栏,所以你拥有的条越多,内存使用率就越高。你可以设置i=0来引用当前条。我简直是疯了。如果你做得不对,也不介意写一个C#dll,请告诉我,我会发布代码。

摆脱for循环。Amibroker在每次更新图表时都会运行AFL,因此对于那些for循环循环,每次图表更新时(当新引用出现时),您都要查看数据库中的每个栏,所以你拥有的条越多,内存使用率就越高。你可以设置i=0来引用当前条。我简直是疯了。如果你做得不对,也不介意写一个C#dll,请告诉我,我会发布代码。

摆脱for循环。Amibroker在每次更新图表时都会运行AFL,因此对于那些for循环循环,每次图表更新时(当新引用出现时),您都要查看数据库中的每个栏,所以你拥有的条越多,内存使用率就越高。你可以设置i=0来引用当前条。我简直是疯了。如果你做得不对,也不介意写一个C#dll,请告诉我,我会发布代码。

摆脱for循环。Amibroker在每次更新图表时都会运行AFL,因此对于那些for循环循环,每次图表更新时(当新引用出现时),您都要查看数据库中的每个栏,所以条越多,内存使用率就越高。你可以设置i=0来引用当前条。我简直是疯了。如果你做得不对,也不介意写一个C#dll,请告诉我,我会发布代码。

没问题

我是从你那里得到这个主意的

您要做的是创建一个类库。创建一个接口和一个实现该接口的类。在您的例子中,它类似于
// 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;
namespace AmiCOMLib
{
    [ComVisible(true)]
    public interface IMyInterop
    {
        [DispId(1)]
        void SendQuotes(string quoteString);
    }//end interface  

    [ComVisible(true)]
    public class AmiCOM
    {
        public void SendQuotes(string quoteString)
        { 
            //process string here and save as CSV
        }
    }
  }
"%WinDir%\Microsoft.NET\Framework\v4.0.30319\regasm" /tlb /unregister "$(TargetPath)"

echo UNREGISTERED

"%WinDir%\Microsoft.NET\Framework\v4.0.30319\regasm" /tlb /codebase "$(TargetPath)"

echo REGISTERED

xcopy "$(TargetPath)" "<folder where you want DLL to be copied to>" /D /Y
ECHO OFF

ECHO We're first going to unregister, then register AmiCOMLib

ECHO UnRegistering AmiCOMLib

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm" "C:\ATS\AmiCOMLib.dll" /unregister 

ECHO UNREGISTERED

PAUSE

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm" "C:\ATS\AmiCOMLib.dll" /tlb /codebase

ECHO REGISTERED

PAUSE
AmiComObj = CreateStaticObject("AmiCOMLib.AmiCOM"); //note format is namespace.class
quoteString = Name() + "," + close; //or, for example, what you have in your fputs
AmiComObj.SendQuotes(quoteString);