欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → VBA交易原码,却无法自动交易

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4355人关注过本帖树形打印复制链接

主题:VBA交易原码,却无法自动交易

帅哥哟,离线,有人找我吗?
hxl
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:136 积分:35 威望:0 精华:0 注册:2012/3/30 14:35:39
VBA交易原码,却无法自动交易  发帖心情 Post By:2015/7/8 9:39:12 [只看该作者]

private iFlag,nFlagPrice,iBars     '变量定义,分别是信号、信号价、周期数
private sCode,sMarket              '交易的合约代码、市场代码
private sAccountID                 '交易帐户号码
private iBuyHold,iSellHold         '帐户多、空实际持仓


Sub APPLICATION_VBAStart()
    sCode="IF07"
    'sCode2="IF07"
    sMarket="ZJ"
    sAccountID=""
    call Application.SetTimer(0,1000) '创建一个0号定时器,间隔时间1秒
       frmControl.Show
End Sub

'停止VBA时,把计时器也停了
Sub APPLICATION_VBAEnd()
    Call application.KillTimer(0)
End Sub

Sub APPLICATION_Timer(ID)  
 
       '读取信号
    GetFlag
   
    '获取帐户的实际持仓,如果跟信号持仓不一致,就进行持仓同步
    GetHoldByCode sAccountID,sCode,sMarket
   
    '根据信号持仓与实际持仓的对比,进行开平仓操作
    StartTrade
   End Sub

Sub GetFlag()
    sPolicyName="一分钟超级短线2"
    iPeriod=0         '周期类型,0 1分钟 1 5分钟 2 15分钟 3 30分钟 4 60分钟 5日线 6周线 7月线 8年线 9多日线 10分笔成交 11多小时线 12多秒线 13多分钟线 14季度线 15半年线 16节气线 17 3分钟 18 10分钟 19 多笔线
    Set Formula = marketdata.STKINDI(sCode,sMarket,sPolicyName,0,iPeriod)
    iFlag=Formula.GetBufData("Flag",Formula.DataSize-1)
    nFlagPrice=formula.GetBufData("FlagPrice",Formula.DataSize-1)
    iBars=Formula.GetBufData("Bars",Formula.DataSize-1)
    application.MsgOut "信号:"&iFlag & "价格:"&nFlagPrice & "周期:"&iBars
End Sub


Sub GetHoldByCode(sAccount1,sCode1,sMarket1)
    dim BuyHoding
    dim BuyCost
    dim BuyTodayHoding
    dim SellHoding
    dim SellCost
    dim SellTodayHoding
    dim PNL
    dim UseMargin
    dim Code
    dim Market
   
    on Error resume Next
    AccountStatus=Order.Account2(2,sAccount1)
    'application.MsgOut sCode & "," & sMarket1 & "," & sAccount1 & ",NextCode:" & NextCode & ",账户状态:" & AccountStatus
    if AccountStatus=255 or AccountStatus="" then
       exit sub
    end if
    iBuyHold=0
    iSellHold=0
    DuoPrice=0
    KongPrice=0
    Call Order.HoldingInfoByCode2(sCode1,sMarkdt1,BuyHoding,BuyCost,BuyTodayHoding,SellHoding,SellCost,SellTodayHoding,PNL,UseMargin,sAccount1)
    '显示持仓量
    'application.MsgOut "显示持仓量:" & BuyHoding
    if BuyHoding>0 then
        iBuyHold=BuyHoding
    else
        iBuyHold=0
    end if
    if SellHoding>0 then
         iSellHold=SellHoding
    end if
    if BuyCost>0 then
        DuoPrice=BuyCost
     else
        DuoPrice=0
     end if
     if SellCost>0 then
         KongPrice=SellCost
     else
         KongPrice=0
     end if
    
End Sub

Sub StartTrade()
    if iFlag>0 then  '信号是多单
        iOpenVol=iFlag-iBuyHold   '信号持仓-实际持仓,如果为正,说明信号持仓持仓大,那么就要补充开仓,如果小,说明实际持仓大,就得平掉多单
        if iOpenVol>0 then
            Call order.Buy(0,iOpenVol,0,0,sCode,sMarket,sAccountID,0)
        elseif iOpenVol<0 then
            Call order.Sell(0,Abs(iOpenVol),0,0,sCode,sMarket,sAccountID,0)
        end if
        if iSellHold>0 then   '如果此时帐户持有空单,就把空单全部平掉
           Call order.SellShort(0,iSellHold,0,0,sCode,sMarket,sAccountID,0)
        end if
      end if
     
      if iFlag<0 then  '信号是空单
        iOpenVol=iFlag-iSellHold   '信号持仓-实际持仓,如果为正,说明信号持仓大,那么就要补充开仓,如果小,说明实际持仓大,就得平掉多单
        if iOpenVol>0 then
            Call order.BuyShort(0,iOpenVol,0,0,sCode,sMarket,sAccountID,0)
        elseif iOpenVol<0 then
            Call order.SellShort(0,Abs(iOpenVol),0,0,sCode,sMarket,sAccountID,0)
        end if
        if iBuyHold>0 then   '如果此时帐户持有空单,就把空单全部平掉
           Call order.Sell(0,iSellHold,0,0,sCode,sMarket,sAccountID,0)
        end if
      end if 
   
      if iFlag=0 then    '如果图表信号为0,就是没有持仓,那么将帐户的多、空单全部平掉
          if iBuyHold>0 then      '平帐户多单
              Call  order.Sell(0,iSellHold,0,0,sCode,sMarket,sAccountID,0)
          end if
           if iSellHold>0 then    '平帐户空单
              Call  order.SellShort(0,iSellHold,0,0,sCode,sMarket,sAccountID,0)
           end if
       end if
End Sub

            

 

 

 

 

 

请问大师

    第一个问题:为啥   iPeriod=0         '周期类型,0 1分钟 1 5分钟 2 15分钟 3 30分钟 4 60分钟 5日线 6周线 7月线 8年线 9多日线 10分笔成交 11多小时线 12多秒线 13多分钟线 14季度线 15半年线 16节气线 17 3分钟 18 10分钟 19 多笔线
一分钟K线取不到  application.MsgOut "信号:"&iFlag & "价格:"&nFlagPrice & "周期:"&iBars

而19,或其它的分钟却可以。
    第二个问题:在模拟帐户开通中, iPeriod=19,同时application.MsgOut "信号:"&iFlag & "价格:"&nFlagPrice & "周期:"&iBars有数据变化,而帐户却无法自动买卖交易。

   

   谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2015/7/8 10:29:39 [只看该作者]

你需要确认是否已经调用了Order.buy等交易函数了?

通过下单日志看一下,如果未调用,你应该继续使用application.MsgOut来调试下单条件的



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
hxl
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:136 积分:35 威望:0 精华:0 注册:2012/3/30 14:35:39
  发帖心情 Post By:2015/7/8 13:40:47 [只看该作者]

老大,你说,这段代码有问题么?

 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2015/7/8 15:33:21 [只看该作者]

代码太长,抱歉我们没法去给你细致测运行以及评测,希望用户自己完成调试工作,并配合我们回答2楼的问题



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
guotx2010
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2015/7/8 17:01:13 [只看该作者]

1、检查公式中flag,flagprice,bars几个变量是不是输出项
2、使用股指仿真账户来测试

 回到顶部
帅哥哟,离线,有人找我吗?
hxl
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:136 积分:35 威望:0 精华:0 注册:2012/3/30 14:35:39
  发帖心情 Post By:2015/7/9 19:51:08 [只看该作者]

上面代码是老大guotx2010 你写的,麻烦你,测试下,为啥不能自动交易?谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
guotx2010
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2015/7/10 8:45:03 [只看该作者]

肯定能交易,你检查公式的输出项是否正确


 回到顶部
帅哥哟,离线,有人找我吗?
hxl
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:136 积分:35 威望:0 精华:0 注册:2012/3/30 14:35:39
  发帖心情 Post By:2015/7/10 15:10:15 [只看该作者]

老大,我比你牛,我搞定了。。。呵呵呵


 回到顶部
帅哥哟,离线,有人找我吗?
guotx2010
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蜘蛛侠 帖子:1366 积分:5210 威望:0 精华:7 注册:2010/12/11 18:00:33
  发帖心情 Post By:2015/7/13 8:46:07 [只看该作者]

恭喜

 回到顶部