def RunTestCase():

    SymbolDataCache.LoadCallback=CacheData.LoadCacheData  # 设置第3放数据加载回调

    name='测试脚本'

    # 指标脚本代码
    script=TEST_INDEX

    # 参数
    args=[ ArgumentItem(name='M1', value=5), ArgumentItem(name='M2', value=10), ArgumentItem(name='M3', value=20)] 

    scpritInfo=ScriptIndexItem(name=name, id=888888, script=script, args=args)
    indexConsole = ScriptIndexConsole(scpritInfo)

    arySymbol=['600000.sh','000001.sz'] # 要执行策略的股票池
    aryResult=[] # 结果数据

    runTime=time.time()

    for item in arySymbol :
        startTime = time.time()
        option = SymbolOption(
            symbol=item,
            right=1, # 复权 0 不复权 1 前复权 2 后复权
            period=PERIOD_ID.DAY, # 周期
            request=RequestOption(maxDataCount=500,maxMinuteDayCount=3)
            )

        # 替换成自己的数据类
        option.ProcCreateSymbolData=SymbolDataCache.Create  
        result=indexConsole.ExecuteScript(option,False) # 使用缓存的AST执行
        endTime = time.time()

        print("[RunTestCase] 股票:{0} 耗时:{1}".format(item, endTime - startTime))

        aryResult.append(result)

    print("[RunTestCase] 股票个数:{0} 耗时:{1}".format(len(arySymbol), time.time() - runTime))

    return aryResult
def Test_ScriptIndexConsole():

    # 创建脚本, 及参数
    scpritInfo = ScriptIndexItem(
        name='我的MA指标',
        id=888888,
        script=  # 指标脚本代码
        'V9:TROUGHBARS(3,15,1)<10;\n'
        'T1:PEAKBARS(3,15,1)<10;\n',
        args=[
            ArgumentItem(name='M1', value=5),
            ArgumentItem(name='M2', value=10),
            ArgumentItem(name='M3', value=20)
        ]  # 参数
    )

    indexConsole = ScriptIndexConsole(scpritInfo)

    option = SymbolOption(
        symbol='000001.sz',
        right=1,  # 复权 0 不复权 1 前复权 2 后复权
        period=0,  # 周期 0=日线 1=周线 2=月线 3=年线 4=1分钟 5=5分钟 6=15分钟 7=30分钟 8=60分钟
        request=RequestOption(maxDataCount=500, maxMinuteDayCount=3))
    option.ProcCreateSymbolData = CreateMySymbolData
    result = indexConsole.ExecuteScript(option)

    if result.Error:
        print(result.Error)
        return

    print('run successfully.')
    JSComplierPandasHelper.ToDateTimeSeries(result)  # 转化为pandas Series 数据格式
    JSComplierPandasHelper.ToDataFrame(result)  # 转化为pandas DataFrame 数据格式

    jsonData = result.ToJson()
    varName = 'jsonData'  # 数据变量名字

    HQChartOption = """g_KLineOption={
            Symbol:'%(symbol)s',    //股票代码
            Right:%(right)d,        //复权
            Period:%(period)d,      //周期

            Windows:
            [
                {   Modify:false,Change:false, 
                    Local: 
                    { 
                        Data:%(varName)s,   //py执行以后的json数据
                        Type:'LocalJsonDataIndex' ,
                        Name:'%(name)s',    //指标名字
                        Args:[              //指标参数
                            { Name: '%(arg1)s', Value: %(argvalue1)d },
                            { Name: '%(arg2)s', Value: %(argvalue2)d },
                            { Name: '%(arg3)s', Value: %(argvalue3)d }]
                    }
                },
                //{Index:"VOL", Modify:false,Change:false},
            ]
        } 
        """ % {
        "symbol": option.Symbol,
        'right': option.Right,
        'period': option.Period,
        'varName': varName,
        'name': scpritInfo.Name,
        'arg1': scpritInfo.Arguments[0].Name,
        'argvalue1': scpritInfo.Arguments[0].Value,
        'arg2': scpritInfo.Arguments[1].Name,
        'argvalue2': scpritInfo.Arguments[1].Value,
        'arg3': scpritInfo.Arguments[2].Name,
        'argvalue3': scpritInfo.Arguments[2].Value
    }

    localJsonData = varName + '=' + jsonData + '\n'
    filePath = 'data.html'
    # 生成图形化页面
    with codecs.open(filePath, 'w', "utf-8") as file:
        file.write(HTML_PART1)
        file.write(localJsonData)
        file.write(HQChartOption)
        file.write(HTML_PART_END)
        file.close()

    webbrowser.open(filePath, new=1)