设为首页收藏本站

 找回密码
 注册
查看: 2699|回复: 6
打印 上一主题 下一主题

如何限制程序在有持仓的时候不再开立新仓 [复制链接]

Rank: 2

精华
0
UID
5677
积分
51
帖子
3
主题
1
阅读权限
30
注册时间
2009-10-16
最后登录
2019-3-24
跳转到指定楼层
1#
发表于 2009-10-21 14:37:30 |只看该作者 |倒序浏览
Begin

If(Close[1]>Open[1]&&Close>Close[1]||Close[1]<Open[1]&&Close>High[1])
{Buy(1,Close);
}Else
If(Close[1]<Open[1]&&Close<Close[1]||Close[1]>Open[1]&&Close<Low[1])
{Sell(1,Close);}

End

做了一个程序,怎么样能将这个程序限制成为有持仓的时候不再开立新仓,直到反向指令出现为止?请老师帮忙给看看啊

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2009-10-21 14:50:11 |只看该作者
Begin
If(marketpostion!=1 && Close[1]>Open[1]&&Close>Close[1]||Close[1]<Open[1]&&Close>High[1])
{Buy(1,Close);

Else
If(marketposition!=-1 && Close[1]<Open[1]&&Close<Close[1]||Close[1]>Open[1]&&Close<Low[1])
{Sellshort(1,Close);}

End

另外注意一下,你条件里面的那些&& 与||关系,为了防止混乱最好是习惯使用小括号再括起来.
比如 (Close[1]>Open[1]&&Close>Close[1])||(Close[1]<Open[1]&&Close>High[1])
或是(Close[1]>Open[1]&&(Close>Close[1]||Close[1]<Open[1])&&Close>High[1])

使用道具 举报

Rank: 2

精华
0
UID
5677
积分
51
帖子
3
主题
1
阅读权限
30
注册时间
2009-10-16
最后登录
2019-3-24
3#
发表于 2009-10-21 15:24:41 |只看该作者
非常感谢斑竹!
我对程序进行了一点改进,加入了交易时间限制,在日内9:05-14:55之间进行交易,好象没出现错误,呵呵,

Begin
If(marketposition!=1 && (Close[1]>Open[1]&&Close>Close[1])||(Close[1]<Open[1]&&Close>High[1])  &&  Time>=0.0905)
{Buy(1,Close);
}
Else
If(marketposition!=-1 && (Close[1]<Open[1]&&Close<Close[1])||(Close[1]>Open[1]&&Close<Low[1]))
{Sellshort(1,Close);}
{if( time>=0.1455 && MarketPosition!=0)
{
  BuyToCover;
  sell;
}
}
End

还有一点问题请教一下:现在这个系统是用收盘价测试的,如果我想设置成为一突破就进行交易的,应该如何更改程序啊?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
2
UID
4130
积分
20906
帖子
6519
主题
17
阅读权限
200
注册时间
2009-4-15
最后登录
2019-4-12
4#
发表于 2009-10-21 15:29:36 |只看该作者
突破的函数有crossover和crossunder两个,具体查看软件帮助文件

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
5#
发表于 2009-10-21 16:21:51 |只看该作者

回复 3# cifcosz 的帖子

这样的写法,在测试时是使用close,但是在实时交易时,他就是一满足条件就会发单的,但是也会有信号消失的可能.
下面的那样改写可使得历史测试信号标致在突破的位置而非收盘价上.(未编译过)
Begin
If(marketposition!=1&&Time>=0.0905 )
{
     if (Close[1]>Open[1]&&Close>=Close[1])
     {
            buy(1,close[1]+1*minmove*pricescale);
     }else if(Close[1]<Open[1]&&Close>=High[1])
     {
           Buy(1,high[1]+1*minmove*pricescale);
     }
}

If(marketposition!=-1 && time>=0.0905)
{
      if(Close[1]<Open[1]&&Close<=Close[1])
      {
           sellshort(1,close[1]-1*minmove*pricescale);
      }else if(Close[1]>Open[1]&&Close<Low[1]))
      {
          Sellshort(1,low[1]-1*minmove*pricescale);
      }
}
if( time>=0.1455 && MarketPosition!=0)
{
  BuyToCover;
  sell;
}
End

使用道具 举报

Rank: 2

精华
0
UID
5677
积分
51
帖子
3
主题
1
阅读权限
30
注册时间
2009-10-16
最后登录
2019-3-24
6#
发表于 2009-10-22 15:39:46 |只看该作者
之前的程序出现了信号消失的问题,我看了老师论坛里的教程,将程序修改了一下,请老师帮忙看一下这样修改对不对,还会不会出现信号消失的问题?


Vars
    NumericSeries AvgClose;
Begin
AvgClose = AverageFC(Close,2);
If(marketposition!=1&&Time>=0.0905 )
{
     if (Close[1]>Open[1]&&avgclose>=Close[1])
     {
            buy(1,close[1]+1*minmove*pricescale);
     }else if(Close[1]<Open[1]&&Close>=High[1])
     {
           Buy(1,high[1]+1*minmove*pricescale);
     }
}
If(marketposition!=-1 && time>=0.0905)
{
      if(Close[1]<Open[1]&&avgclose<=Close[1])
      {
           sellshort(1,close[1]-1*minmove*pricescale);
      }else if(Close[1]>Open[1]&&Close<Low[1])
      {
          Sellshort(1,low[1]-1*minmove*pricescale);
      }
}
if( time>=0.1455 && MarketPosition!=0)
{
  BuyToCover;
  sell;
}
End

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
7#
发表于 2009-10-22 15:44:54 |只看该作者
 一样没法避免信号的消失

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-24 07:02

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部