以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  止损不能满足需求  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=138649)

--  作者:2457146251
--  发布时间:2016/8/25 20:45:27
--  止损不能满足需求
先贴出止损代码 和出场代码


          if holding > 0 then begin
        
             if low < enterprice - 2 * mindiff then sell( holding > 0, order, market ) ;
   
          end
 

          if holding < 0 then begin
       
             if high > enterprice + 2 * mindiff then sellshort( holding < 0, order, market );
         
          end
 

 
                   sell( low < longma, order, market ) ;
 
              sellshort( high > longma, order, market );


以上就两种出场方式,一个2个点固定止损,另外一个是条件止损,,order 为手数,趋势线是longma:=ma(close,120) ;   本打算来试试2个点止损是什么效果,测试之后 问题就来了,,具体如下图所示 :


图片点击可在新窗口打开查看


麻烦老师帮忙解答一下,,到底是哪里出了问题,为什么止损越小,赚钱就越多,,胜率就越高,无法理喻啊,多谢

--  作者:2457146251
--  发布时间:2016/8/25 22:21:06
--  
图片点击可在新窗口打开查看
之前参照老师 给出的意见 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=138570   具体见此帖


很显然,是  这段止损代码出问题了,  即便是  low <=  或者 high >= 也是一样的问题,,,所以未能达到,,超过多少个点立即止损出局的效果,麻烦老师帮忙想一下解决办法,谢谢
[此贴子已经被作者于2016-8-25 22:22:50编辑过]

--  作者:2457146251
--  发布时间:2016/8/25 22:47:38
--  
                   sell( low < longma, order, market ) ;
 
              sellshort( high > longma, order, market );    

这组代码,,测试中也是有 位移现象,,也就是说,,止损点并非是价格大于或小于 趋势线,然后就市价出去成交,,最后是以收盘价的,,,

系统这组 代码 也测试了

    if avgenterprice-c > 2 * mindiff then begin

    sell(1,holding,market);

    end
 
    if c - avgenterprice  > 2 * mindiff then begin

    sellshort(1,holding,market);

    end
 缺陷是 信号反复出现和消失,,,,,即便把 C 改为 high 或者low 但是最终的止损效果都未能达到固定止损,,
  

--  作者:jinzhe
--  发布时间:2016/8/26 9:05:26
--  

你这样用开仓价来止损的,下单价位最好用marketr,或者thisclose,能正确的在本周期上获取当前开仓信号的开仓价,用market获取的是上一个开仓价。

以及止损或者平仓语句一定要写在开仓语句后面


--  作者:2457146251
--  发布时间:2016/8/26 9:14:40
--  回复:(jinzhe)你这样用开仓价来止损的,下单价位最...
意思是说,把 平仓语句写在开仓语句之前可以避免上述情况对么?

 if holding > 0 then begin
        
             if low < enterprice - 2 * mindiff then sell( holding > 0, order, market ) ;
   
          end
 

          if holding < 0 then begin
       
             if high > enterprice + 2 * mindiff then sellshort( holding < 0, order, market );
         
          end

                   sell( low < longma, order, market ) ;
 
              sellshort( high > longma, order, market );    



这段写在开仓语句之前,,,先平后开?

--  作者:jinzhe
--  发布时间:2016/8/26 9:24:25
--  

我讲了两点,第一点你没看,第二点还看反了,这两点是要同时成立的

 

以及止损或者平仓语句一定要写在开仓语句后面

是平仓写在开仓后面


--  作者:2457146251
--  发布时间:2016/8/26 9:40:36
--  回复:(jinzhe)我讲了两点,第一点你没看,第二点还...
老师,,我实在理解不透您说的,,提高沟通教学效率,,您就帮我改改吧,这样改对了我再去慢慢悟这个过程,这样可以节省老师精力,代码就贴下面,麻烦了


开仓语句

         if holding = 0 then begin  
 
            if Bcondthen buy( 1, order, limitr, max( open, longma ) ), ignorecheckprice; 

         end
         
         if holding = 0 then begin
         
            if Scond then buyshort( 1, order, limitr, min( open, longma ) ), ignorecheckprice;

         end



平仓语句

         if holding > 0 then begin
        
             if low < enterprice - 6 * mindiff then sell( holding > 0, order, market ) ;
   
          end

        if holding < 0 then begin
       

             if high > enterprice + 6 * mindiff then sellshort( holding < 0, order, market );
         
          end



      sell( low <longma, order, market ), ignorecheckprice ;

sellshort( high > longma, order, market ), ignorecheckprice ;



  思路是,,进场之后,6个点止损,  或者 多头 跌破 趋势线 longma 立即止损,,,空头 涨过 趋势线 longma 立即止损,,, 麻烦帮忙看看问题出在哪里,怎么修改才能达到这样的效果,,多谢了




--  作者:jinzhe
--  发布时间:2016/8/26 9:51:28
--  
if holding = 0 then begin  
 
            if Bcondthen buy( 1, order, limitr, max( open, longma ) ), ignorecheckprice; 

         end
         
         if holding = 0 then begin
         
            if Scond then buyshort( 1, order, limitr, min( open, longma ) ), ignorecheckprice;

         end




         if holding > 0 then begin
        
             if low < enterprice - 6 * mindiff then sell( holding > 0, order, marketr ) ;
   
          end

        if holding < 0 then begin
       

             if high > enterprice + 6 * mindiff then sellshort( holding < 0, order, marketr );
         
          end



      sell( low <longma, order, marketr ), ignorecheckprice ;

sellshort( high > longma, order, marketr ), ignorecheckprice ;

--  作者:2457146251
--  发布时间:2016/8/26 9:56:30
--  回复:(jinzhe)if holding = 0 then begin   ...
只是把 market 改为 marketr?
--  作者:jinzhe
--  发布时间:2016/8/26 9:58:19
--