以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  [原创]请教开仓问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=174250)

--  作者:marks
--  发布时间:2020/2/11 13:30:17
--  [原创]请教开仓问题
请看如下代码开不了仓,在图表上也没有箭头显示,但是回测历史正常。
测试出来问题出在开仓次数:=1上,如果没有这行代码就可以开仓.
请问是什么原因。

VARIABLE:开仓次数=0;
初始开仓手数:=1;
多单开仓条件:=1;

if holding=0 and 开仓次数=0 THEN 
begin
   开多: buy(多单开仓条件,初始开仓手数,THISCLOSE);
   止损位:=ENTERPRICE-止损跳点*MINDIFF;
   开仓次数:=1;
end

--  作者:FireScript
--  发布时间:2020/2/11 13:42:04
--  
你图表上肯定是有的,但是因为在第一个K,所以你可能没注意到。


图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看


如果上面这段就是完整代码得话,那么
开仓次数:=1;

这个加不加效果都是一样的。因为代码逻辑决定你这个只会开一次仓。

--  作者:marks
--  发布时间:2020/2/11 15:20:56
--  
这个不是完整代码,我一条条的排到这的。我需要根据这个开仓次数做后续判断。
--  作者:FireScript
--  发布时间:2020/2/11 15:46:20
--  
那就是了。
这个全局变量会限制这个地方只开仓一次。你需要在其他地方 比如平仓的时候 执行一个:

开仓次数:=0;

--  作者:marks
--  发布时间:2020/2/11 15:48:57
--  
平仓后赋0有写,我现在单独拿出这一小段代码是开不了仓的,把开仓次数注释掉就能开。
--  作者:FireScript
--  发布时间:2020/2/11 15:59:19
--  
你给出完整代码吧。否则我也不知道你这里其他地方什么逻辑。全局变量是很常规的用法,并无特殊之处。
--  作者:marks
--  发布时间:2020/2/11 16:14:20
--  
VARIABLE:开仓次数=0;
VARIABLE: 回撤平仓跳点=10;
止损跳点:=20;
加仓间距:=10;
初始开仓手数:=1;
加仓倍数:=1;
加仓次数循环:=3;
空单开仓条件:=1;
//回撤跳点评测1:=(DYNAINFO(  3)*初始开仓手数+DYNAINFO(  3)*加仓间距*加仓倍数*初始开仓手数)/(加仓倍数*初始开仓手数+初始开仓手数);
//回撤跳点评测2:=DYNAINFO(  3)*加仓间距-回撤平仓跳点;
if holding=0 and 开仓次数=0 THEN
 begin
   开空: buyshort(1,初始开仓手数,MARKETR);
   止损:=ENTERPRICE+止损跳点*MINDIFF;
   开仓次数:=1;
   end
//回撤出:=ENTERPRICE+回撤平仓跳点*MINDIFF;
     
if holding<0 then
begin 
if c>=止损 then begin
        sellshort(holding<0,0,MARKETR);
        开仓次数:=0;
        end
     if 开仓次数>1  then 
     begin  
      if c>=ENTERPRICE+回撤平仓跳点*MINDIFF then begin
        sellshort(holding<0,0,MARKETR);   
    开仓次数:=0;
    end
end
//----------------------------------------------------------------------------    
if 0<开仓次数 and 开仓次数>=开仓次数%加仓次数循环 and 开仓次数%加仓次数循环<>0 then
   begin  
      if c<=ENTERPRICE-加仓间距*MINDIFF THEN
        begin
        开空2:buyshort(1,entervol*加仓倍数,MARKETR);
        开仓次数:=开仓次数+1;
    end     
        end
        
      if 0<开仓次数  and 开仓次数%加仓次数循环=0 then 
         begin  
      if c<=ENTERPRICE-加仓间距*MINDIFF THEN
        begin
        开空1:buyshort(1,初始开仓手数,MARKETR);
        开仓次数:=开仓次数+1;
    end     
        end  
end    

--  作者:FireScript
--  发布时间:2020/2/11 16:27:46
--  
你这个看效果不是正常的么。见下图:


图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看

--  作者:marks
--  发布时间:2020/2/11 16:30:21
--  
看图是正常的,真正SHIFT+Z跑的时候不开仓
--  作者:FireScript
--  发布时间:2020/2/11 17:01:50
--  
有几个地方要明确下:

1.是完整代码 不开仓 还是只那单独的一部分程序化不开仓? 
2.单独那部分代码。无论是注释还是保留 赋值为1的那一句代码。效果都是一样,你这里说注释了就开仓  这个现象和代码效果不是一致的。我建议你再确认下。 

目前完整代码过了遍,应该不存在大问题。建议明天盘中再观察下再反馈下。