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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → [原创]自动开关金字塔软件、自动开启交易等技巧

   

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


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

主题:[原创]自动开关金字塔软件、自动开启交易等技巧

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


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By:2014/1/25 10:50:55 [只看该作者]

网友帮我发现了一个问题,有一个地方没有定义WM_CLOSE,就是以下代码蓝色字体这行,2楼和10楼的VBA代码更新为:

 

第二部分为金字塔VBA代码,可复制并放入金字塔的任何一个VBA模块中:

 

dim StartTime
dim StartTrade
dim HasDoClose

Sub APPLICATION_Start()
 '''''''自动启动相应的框架(分日盘、夜盘调出相应图表,请自行叠加相应策略公式)
 if cdate(time)>cdate("06:00:00") and cdate(time)<cdate("18:00:00") then
 '''''''日盘交易,打开框架名“Frame1”
  application.ActivateFrame "Frame1"
 else
 '''''''夜盘交易,打开框架名“Frame2”
  application.ActivateFrame "Frame2"

 end if
 call application.Settimer(100,30000) '30秒时钟循环
 StartTime = cdate(time)
 StartTrade = 0
 HasDoClose = 0
End Sub

Sub APPLICATION_Timer(ID)
 if ID=100 then
  if StartTrade=0 then
   ''''''''''''''启动图表交易
   Set Wrap = CreateObject("DynamicWrapper")
   Wrap.Register "user32.dll","FindWindowA","i=ss","f=s", "r=l"
   Wrap.Register "user32.dll","FindWindowExA","i=llss","f=s", "r=l"
   Wrap.Register "user32.dll","SendMessageA","i=lull","f=s", "r=l"

   Wrap.Register "user32.dll","PostMessageA","i=lull","f=s", "r=l"
   WM_CLOSE=16

   WM_LBUTTONDOWN=513
   WM_LBUTTONUP=514
   h = Wrap.FindWindowA("#32770","图表程式化交易 - 日盘框架 - 交易中") '框架名称请自行定义,下同
   if h=0 then h = Wrap.FindWindowA("#32770","图表程式化交易 - 夜盘框架 - 交易中")
   if h<>0 then
    Wrap.PostMessageA h,WM_CLOSE,0,0
    StartTrade=1
   else
    h = Wrap.FindWindowA("#32770","金字塔")
    if h<>0 then
     h2 = Wrap.FindWindowExA(h,0,"Button","是(&Y)")
     if h2<>0 then
      Wrap.SendMessageA h2,WM_LBUTTONDOWN,0,0
      Wrap.SendMessageA h2,WM_LBUTTONUP,0,0
     end if
    else
     h = Wrap.FindWindowA("#32770","图表程式化交易 - 日盘框架 - 已停止")
     if h=0 then h = Wrap.FindWindowA("#32770","图表程式化交易 - 夜盘框架 - 已停止")
     if h<>0 then
      h2 = Wrap.FindWindowExA(h,0,"Button","启动交易")
      if h2<>0 then
       Wrap.SendMessageA h2,WM_LBUTTONDOWN,0,0
       Wrap.SendMessageA h2,WM_LBUTTONUP,0,0
      end if
     else
      application.PostMessage(33873)
     end if
    end if
   end if
  elseif HasDoClose=0 and cdate(time)>cdate("17:30:00") and cdate(time)<cdate("18:00:00") then
   ''''''''17:30~18:00启动收盘
   HasDoClose=1
   call application.Settimer(5,2000)
   application.PostMessage(454)'收盘
  elseif (StartTime<cdate("16:00:00") and cdate(time)>cdate("19:00:00") and cdate(time)<cdate("19:30:00")) or ((StartTime<cdate("2:30:00") or StartTime>cdate("6:30:00")) and cdate(time)>cdate("06:00:00") and cdate(time)<cdate("06:30:00")) then
   '''''''''''''关闭金字塔程序(早上2:30前或前一日6:30后开启的凌晨6点关闭,下午16点前开启的19点关闭)
   Set Wrap = CreateObject("DynamicWrapper")
   Wrap.Register "user32.dll","FindWindowA","i=ss","f=s", "r=l"
   Wrap.Register "user32.dll","FindWindowExA","i=llss","f=s", "r=l"
   Wrap.Register "user32.dll","SendMessageA","i=lull","f=s", "r=l"
   WM_LBUTTONDOWN=513
   WM_LBUTTONUP=514
   h = Wrap.FindWindowA("#32770","金字塔")
   if h<>0 then
    h2 = Wrap.FindWindowExA(h,0,"Button","是(&Y)")
    if h2<>0 then
     Wrap.SendMessageA h2,WM_LBUTTONDOWN,0,0
     Wrap.SendMessageA h2,WM_LBUTTONUP,0,0
    end if
   else
    application.PostMessage(57665)
   end if
  end if
 elseif ID=5 then
  '''''''''''开始收盘
  call application.killtimer(5)
  Set Wrap = CreateObject("DynamicWrapper")
  Wrap.Register "user32.dll","FindWindowA","i=ss","f=s", "r=l"
  Wrap.Register "user32.dll","FindWindowExA","i=llss","f=s", "r=l"
  Wrap.Register "user32.dll","PostMessageA","i=lull","f=s", "r=l"
  WM_CLOSE=16
      call application.Settimer(7,600000)'10分钟后关闭收盘窗口
  h = Wrap.FindWindowA("#32770","数据管理器")
  tab=Wrap.FindWindowExA(h,0,"SysTabControl32","Tab1")
  BM_CLICK=245
  h1=Wrap.FindWindowExA(tab,0,"#32770","")
  do while h1<>0
   bt=Wrap.FindWindowExA(h1,0,"Button","执行收盘(&X)")
   if bt<>0 then
    Wrap.PostMessageA bt,BM_CLICK,0,0
    h1=0
   else
    h1=Wrap.FindWindowExA(tab,h1,"#32770","")
   end if
  loop
  call application.Settimer(6,2000)
 elseif ID=6 then
      call application.killtimer(6)
      BM_CLICK=245
  Set Wrap = CreateObject("DynamicWrapper")
  Wrap.Register "user32.dll","FindWindowA","i=ss","f=s", "r=l"
  Wrap.Register "user32.dll","FindWindowExA","i=llss","f=s", "r=l"
  Wrap.Register "user32.dll","PostMessageA","i=lull","f=s", "r=l"
  h = Wrap.FindWindowA("#32770","金字塔")
  bt=Wrap.FindWindowExA(h,0,"Button","是(&Y)")
  Wrap.PostMessageA bt,BM_CLICK,0,0
 elseif ID=7 then
  '''''''结束收盘
      Set Wrap = CreateObject("DynamicWrapper")
  Wrap.Register "user32.dll","FindWindowA","i=ss","f=s", "r=l"
  Wrap.Register "user32.dll","FindWindowExA","i=llss","f=s", "r=l"
  Wrap.Register "user32.dll","PostMessageA","i=lull","f=s", "r=l"
  WM_CLOSE=16
  BM_CLICK=245
  h = Wrap.FindWindowA("#32770","金字塔")
  bt = 0
  bt = Wrap.FindWindowExA(h,0,"Button","确定")
  st = 0
  st = Wrap.FindWindowExA(h,0,"Static","收盘作业结束。")
  if bt<>0 and st<>0 then
   Wrap.PostMessageA h,WM_CLOSE,0,0
   h = Wrap.FindWindowA("#32770","数据管理器")
   Wrap.PostMessageA h,WM_CLOSE,0,0
   call application.killtimer(7)
   'SendMail "收盘作业完成","收盘作业完成" ''''发信息通知收盘完成,是否需要个人决定
  end if
 end if
end sub

 

注:第一个红色的代码段,是打开夜盘的图表(这里假设日盘和夜盘的图表是不一样的),如果不交易夜盘可以去掉

     其他红色字体的东西是你们可能需要修改的,Frame1、日盘图表。。。。这些,需要根据你实际的框架名称来设定

     绿色字体部分,是原来代码中漏掉的一句,必须加上,否则会vba出错

     橙色字体的是自动收盘的,如果不需要就删除。


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


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By:2014/1/25 11:02:52 [只看该作者]

20楼网友:的确是我遗漏了这一句,是我从vba拷贝代码段时,拷少了(我自己的程序中有更多个性化的东西,所以不能全拷)

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


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By:2014/1/25 11:09:36 [只看该作者]

另外,有一些朋友反映,无法自动开启金字塔,后来我自己安装新版本金字塔时,也发现了这个问题。

原因可能是金字塔新的安装程序,似乎注册表中不再保存金字塔安装地址了。自己添加上即可:

打开注册表编辑工具:开始》运行》输入“regedit回车”

找到这个项:HKEY_CURRENT_USER\Software\Weisoft\金字塔\Settings

在下面看看有没有AppPaths,如果没有就新建一个名称为AppPaths的字符串值,数据值为金字塔安装路径,例如我的是“D:\Weisoft Stock\

因为程序需要从注册表读到金字塔安装路径,才能正确启动金字塔。另外,不支持修改了金字塔主程序命名的,主程序必须为WinStock.exe


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


加好友 发短信
等级:论坛游侠 帖子:560 积分:346 威望:0 精华:0 注册:2012/12/25 15:33:49
  发帖心情 Post By:2014/1/26 14:16:57 [只看该作者]

以下是引用klc在2014/1/25 11:09:36的发言:

另外,有一些朋友反映,无法自动开启金字塔,后来我自己安装新版本金字塔时,也发现了这个问题。

原因可能是金字塔新的安装程序,似乎注册表中不再保存金字塔安装地址了。自己添加上即可:

打开注册表编辑工具:开始》运行》输入“regedit回车”

找到这个项:HKEY_CURRENT_USER\Software\Weisoft\金字塔\Settings

在下面看看有没有AppPaths,如果没有就新建一个名称为AppPaths的字符串值,数据值为金字塔安装路径,例如我的是“D:\Weisoft Stock\

因为程序需要从注册表读到金字塔安装路径,才能正确启动金字塔。另外,不支持修改了金字塔主程序命名的,主程序必须为WinStock.exe

建议修改为读取一个congfig.ini文件,而且同时可以启动几个金字塔,我的一台服务器上运行了4个金字塔,执行4个账户的交易,无法使用你的这个无人值守的工具,遗憾!


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


加好友 发短信
等级:论坛游侠 帖子:252 积分:1001 威望:0 精华:0 注册:2010/2/15 16:47:58
  发帖心情 Post By:2014/1/27 10:46:04 [只看该作者]

请问下C++用什么软件编译的?能否用VS2010重新编译。

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


加好友 发短信
等级:论坛游民 帖子:138 积分:494 威望:0 精华:0 注册:2011/9/28 8:36:47
  发帖心情 Post By:2014/2/6 14:32:45 [只看该作者]

精品

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


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By:2014/3/22 22:19:16 [只看该作者]

以下是引用Ivan在2014/1/26 14:16:57的发言:

建议修改为读取一个congfig.ini文件,而且同时可以启动几个金字塔,我的一台服务器上运行了4个金字塔,执行4个账户的交易,无法使用你的这个无人值守的工具,遗憾!

 

Ivan你好,我已经提供了VC++的源代码,你可以自己修改一下,老实说,C++我用的很少,很多东西也是要一边弄一边百度才做的出来


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


加好友 发短信
等级:论坛游侠 帖子:191 积分:218 威望:0 精华:0 注册:2012/10/12 23:57:56
  发帖心情 Post By:2014/3/23 20:06:32 [只看该作者]

能否整成一个执行文件,自己不在家时,让家里人开下机,再点一下执行文件,实现金字塔开启和图表交易加载?

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


加好友 发短信
等级:论坛游侠 帖子:581 积分:171 威望:0 精华:0 注册:2013/4/2 6:58:20
  发帖心情 Post By:2014/3/24 19:02:08 [只看该作者]

太好了,感谢。要是能在Vc++增加一个功能:判断服务器是否断网,如果断网5分钟,自动将服务器金字塔文件全部删除,同时覆盖硬盘该区域文件表(防止恢复),这样就起到防止服务器策略被盗。(一般服务器租用都是远程的,难免会策略被泄露)

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


加好友 发短信
等级:论坛游侠 帖子:191 积分:218 威望:0 精华:0 注册:2012/10/12 23:57:56
  发帖心情 Post By:2014/3/26 12:52:50 [只看该作者]

点击VC++的执行文件,路径也添加,怎么弹出的窗口显示“send heartbeat 1395809276”?就是不启动金字塔

 回到顶部
总数 46 上一页 1 2 3 4 5 下一页