以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  高级功能研发区  (http://www.weistock.com/bbs/list.asp?boardid=5)
----  股票池选出个股后按名次分配权重资金。  (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=140694)

--  作者:ZZAASSXX
--  发布时间:2016/10/11 20:33:37
--  股票池选出个股后按名次分配权重资金。
图片点击可在新窗口打开查看
图片点击可在新窗口打开查看

本帖引自普通问题板块,金字塔目前通过股票池选出的个股是等权重分配资金买入,通过后台也无法确定哪一个是第一名,如果想对名次靠前的个股给予更多的资金分配,名次靠后的个股给予少一些的资金分配目前来说还做不到。上面第一图是假期里面股票池选出来的个股,如果能对第一名读者传媒给予更多的资金买入,两个涨停板交易日后的今天则会取得更好的成绩。
为啥我要强调名次的顺序呢。虽然金字塔提供了股票池这个大杀器,但是从实战上来说运用还不够灵活,比如某账户资金100万,我想拿20%的资金购买量比排行榜(降序)前三位的个股,第一名50%权重(100万*20%*50%=10万),第二名30%权重(100万*20%*30%=6万),第三名20%(100万*20%*20%=4万)权重。

不知道这个问题能不能有其他方式解决呢?


--  作者:王锋
--  发布时间:2016/10/11 22:27:10
--  
稍等,相关范例编写中
--  作者:zzaassxx
--  发布时间:2016/10/13 12:48:10
--  
我得从一个实战的角度来解释一下这个股票池名次重要的问题,以便于金字塔能了解一下实战中用户更需要哪些功能,才能开发出更加贴近真实实战的软件功能。
目前的股票池把条件选股、排序选股两块集于一身,其实这两个说的不是一回事。

1、当使用的是股票池的条件选股功能时,名次排名没意义:比如我可以让股票池选出所有5日均线>10日均线的个股。这个选出的股票在股票池里叫状态池,这个状态池里面比如说选出有200个股票,这么多股票不可能都买,就有待继续加工,这些个股的名次排名没任何价值。

2、状态池选了那么多的股票我们可以加工一下,这个时候就可以用到排序选股功能(勾选下图“选择指标排序”),名次就重要了:比如对这200个股票用kdj指标的j线进行排序,取j值最小(升序)的头二支个股作为买进的个股;或者对这200个股票用量比指标进行排序,取量比最大(降序)的头二支个股作为买进个股。这个排序在实战当中是非常有用的,用来挑选最合适的目标个股(现在的金字塔默认只能是升序排序)

3、最后才是对挑选出的个股进行资产配置,比如第一名配多少权重资金,第二名配多少权重资金等。
图片点击可在新窗口打开查看

--  作者:王锋
--  发布时间:2016/10/13 20:08:05
--  

 

\'全局变量,计算触发的个数
Dim StockCount
StockCount = 0

\'获取股票池触发事件
Sub MARKETDATA_StockPoolNotifyIng(StockPool, StatusPool, Code, Market)
 
 \'触发的股票池数据记录到文本文件中
 Document.DebugFile "C:\\GPCLog.txt",Market&Code,1
  
 \'判断股票池有多少品种
 If StockPool = "股票池" And StatusPool = "状态池1" Then
  StockCount = StockCount + 1
 End If
 
 CalcCash = 0 \'计算该使用多少资金
 
 \'计算下单价格,防止出现涨停板
 PleacePrice = 0
 Set MyReport = marketdata.GetReportData(Code,Market)
 If MyReport.SellPrice1 > 0 Then
  PleacePrice =  MyReport.SellPrice1
 Else
  PleacePrice = MyReport.NewPrice \'如果卖1价格为0表示已经涨停板,取最新价计算
 End If
  
 \'调试代码
 \'Application.MsgOut StockCount
 
 If StockCount = 1 Then \'第一个触发品种
     CalcCash = 500000
 ElseIf StockCount = 2 Then
  CalcCash = 300000
 ElseIf StockCount = 3 Then
  CalcCash = 200000
 End If
 
 If PleacePrice > 0 And CalcCash > 0 Then
  CalcVol = CalcCash / PleacePrice
  call Order.Buy(0,CalcVol,PleacePrice,0,Code,Market,"",0)
  Application.MsgOut "已触发股票池下单,代码:"&Code&" - 价格:"&PleacePrice&" - 数量:"&CalcVol
 End If
   
End Sub


--  作者:王锋
--  发布时间:2016/10/13 20:09:09
--  
你说的问题2,我们后面会修正一下,对于后几名选项,按照倒序触发
--  作者:王锋
--  发布时间:2016/10/14 12:52:54
--  
经过我们测试,问题2不存在你说的问题,如果按照取后N名股票,就是按照倒序排序的