 
等级: 超级版主
- 注册:
- 2021-5-24
- 曾用名:
|
本帖最后由 资深技术05 于 2025-8-22 14:10 编辑
期货的,先给你个大致框架吧. 这个框架我大体测试过,应该没什么问题.需要单独在一个预警中运行,不适合和其他开仓平仓放在一起.
期货的和股票 在涨跌处理上不能一样.期货适合用变动的点数来.我这里默认10个最小变动价位.用百分比不太合适.不好评估灭每个品种的参数,它幅度比股票变化小很多的. 另外加减仓是判断保证金,不再是是市值了.
另外这种代码 最好不要手工过多参与,如果手工清仓 必须要在程序运行期间清仓.否则等你下次有仓位,代码是不知道你中间清仓过的,它还会用上次的数值去计算幅度之类的.
[PEL] 复制代码 //
//从检测到有底仓开始:
//
//1.首次加减仓:基于底仓价格涨指定点数 减仓固定手数,跌指定点数加仓固定手数.为了方便处理,这个固定手数可以设置为初始仓位的固定百分比如30%.后续加减仓均
//按照这个手数操作.
//2.后续加仓/减仓,基于最近一次的交易的价格(加仓/减仓时的价格)涨跌进行判断
//3.保证金低于10000,不减仓.保证金高于100000不加仓。
input:手数百分比(30,1,100,0.1);//基于初始仓位的百分比计算后续加减仓的手数
input:加仓点数(10,1,1000,1);//基于上次基准价跌 加仓点数 加仓一次
input:减仓点数(10,1,1000,1);//基于上次基准价涨 减仓点数 减仓一次
globalvariable:ss:=0;//加仓手数,根据初始持仓手数*手数百分比 进行计算
cbstr:=stklabel&'.cb';//超全局变量名称:记录改品种的初始持仓成本
hdstr:=stklabel&'.hd';//超全局变量名称:品种的初始持仓数量
basestr:stklabel&'.base';//超全局变量名称:记录最近一次的基准价
path:='C:\'&STKLABEL&'_日志.txt';//日志输出路径
账户状态:=taccount(53);
if 账户状态=0 then
begin
exit;
end
//完全没有持仓了,重置全局变量的值
if tbuyholdingex('','',2)=0 and tglobalsubmitex(1,'',stklabel,0)=0 then
begin
debugfile(path,'触发全局变量重置',0);
extgbdataset(cbstr,0);
extgbdataset(hdstr,0);
extgbdataset(basestr,0);
end
//没有开仓未成交+平仓未成交+有持仓+记录的持仓为0,重新初始化 初始持仓均价 以及初始的持仓数量和基准价
if tbuyholdingex('','',2)>0 and tglobalsubmitex(1,'',stklabel,0)=0 and tglobalsubmitex(2,'',stklabel,0)=0 then
begin
hd:extgbdata(hdstr);
if hd=0 then
begin
debugfile(path,'触发全局变量重新初始化',0);
extgbdataset(cbstr,tavgenterpriceex2('','',0));
extgbdataset(hdstr,tbuyholdingex('','',2));
extgbdataset(basestr,tavgenterpriceex2('','',0));
end
end
base:extgbdata(basestr);//读取记录的基准价
//计算下单手数
if ss=0 then ss:=floor(手数百分比/100*extgbdata(hdstr));
保证金占用:TMARGINEX('','',1,0);
//减仓
if c-base>=减仓点数*MINDIFF and base>0 and 保证金占用>10000 and ss>0 and tbuyholdingex('','',1)>0 then
begin
//减仓时如果可用不足,就按照可用直接平
tsell(1,min(ss,tbuyholdingex('','',1)),mkt);
debugfile(path,'减仓:texitprice:%.2f',c);
extgbdataset(basestr,c);
end
//加仓:下跌指定点数+有底仓+可用资金足够+开仓后市值小于100000
if base-c>=加仓点数*MINDIFF and tbuyholdingex('','',2)>0 and base>0 and 保证金占用<100000 and ss>0 and taccount(19)>ss*c*MULTIPLIER*TACCOUNT(41) then
begin
tbuy(1,ss,mkt);
debugfile(path,'加仓:tenterprice:%.2f',c);
extgbdataset(basestr,c);
end
|
|