开拓者期货期权程序化系统交易论坛

标题: 初学者求助! [打印本页]

作者: nbjason    时间: 2009-1-13 22:00:04     标题: 初学者求助!

没有一点编程基础的我看了一星期的说明书,终于想先编个简单的试试可不可行,想不到就碰壁了,请各位老师帮我看看,问题出在哪里了,需要怎么改...

交易思路:今天收盘价大于前面10天的最高价,多开一手
             今天收盘价小于前面7天的最低价的,把之前的多单平了.


vars
  Numeric highestIn10Days;
  Numeric LowestIn7Days;
begin
highestIn10Days=highest(high[1],10);
LowestIn7Days=lowest(low[1],7);
If (MarketPosition==0)
{
  if(close>highestIn10Days);
{
buy(1,close);
}
  if(close<lowestIn7Days);
{
Sell(1,close);
}
}
End
作者: nopain    时间: 2009-1-14 08:49:36

  1. vars
  2.     Numeric highestIn10Days;
  3.     Numeric LowestIn7Days;
  4. begin
  5.     highestIn10Days=highest(high[1],10);
  6.     LowestIn7Days=lowest(low[1],7);
  7.     If (MarketPosition==0)
  8.     {
  9.           if(close>highestIn10Days)
  10.          {
  11.             buy(1,close);
  12.          }
  13.    }else if(Marketposition==1)
  14.   {
  15.         if(close<lowestIn7Days)
  16.        {
  17.            Sell(1,close);
  18.        }
  19.     }
  20. End
复制代码


先改成上面这样,应该就可以了,但这样会出现讯号消失,所以还需要把Close替换成High/Low
作者: nbjason    时间: 2009-1-14 10:18:12

[attach]1177[/attach]



老师,,我把你帮我改的程序插入超级图表中,,在每个蜡烛图上都有信号,,这是什么原因产生的啊?

谢谢!
作者: 小米    时间: 2009-1-14 10:29:44

将 if()语句后面的分号去掉.
作者: nbjason    时间: 2009-1-14 10:44:52

晕了,真奇怪了,,现在又有问题了,,就是看了一下开仓记录,,就是超级图表上的第一天开仓记录,然后一直拿到最后一天都没有平过,
作者: 小米    时间: 2009-1-14 11:01:39

你的这个系统就公式来看,在图表上至少要从左数第十个周期之后才可能出现信号的.
你多换几个商品合约看看或者再查看一下是否做了什么改动.因为就上面的那个公式我这里测试多个合约得到结果都与你所说的情况不一样.
作者: nopain    时间: 2009-1-14 11:02:05

  1. vars
  2.         Numeric highestIn10Days;
  3.         Numeric LowestIn7Days;
  4.         Numeric MyPrice;
  5. begin
  6.         highestIn10Days=highest(high[1],10);
  7.         LowestIn7Days=lowest(low[1],7);
  8.        
  9.         If(MarketPosition==0)
  10.         {
  11.                 if(High>highestIn10Days)
  12.                 {
  13.                         MyPrice = highestIn10Days+MinMove*PriceScale;
  14.                         If(Open > MyPrice ) MyPrice = Open;
  15.                         buy(1,MyPrice);
  16.                 }
  17.         }else if(Marketposition==1)
  18.         {
  19.                 if(Low<lowestIn7Days)
  20.                 {
  21.                         MyPrice = lowestIn7Days-MinMove*PriceScale;
  22.                         If(Open < MyPrice ) MyPrice = Open;
  23.                         Sell(1,MyPrice);
  24.                 }
  25.         }
  26. End
复制代码

作者: nbjason    时间: 2009-1-14 11:24:59

谢谢NOPAIN老师与小米老师,,,
                        MyPrice = highestIn10Days+MinMove*PriceScale;
                        If(Open > MyPrice ) MyPrice = Open;
麻烦再帮我解释一下,,以上两句是什么意思啊?
作者: nopain    时间: 2009-1-14 11:37:07

开盘跳空就用Open价格
作者: nbjason    时间: 2009-1-14 19:46:53

真是麻烦老师们了,又出问题了,现在多头建仓平仓是可以了,可是我加上空头建仓平仓部分,又不会来了,不知道哪又出问题了,请帮我改一下,谢谢!!!

vars
        Numeric highestIn10Days;
        Numeric LowestIn10Days;
        Numeric LowestIn7Days;
        Numeric highestIn7Days;
begin
    highestIn10Days=highest(high[1]10);
    LowestIn7Days=lowest(low[1],7);
LowestIn10Days=lowest(low[1],10);
highestIn7Days=highest(high[1],7);
If (MarketPosition==0)
        {
                if(Close>highestIn10Days)
                {
                        buy(1,Close);
         }
                If(close< LowestIn10Days)
                {
                         Sellshort(1,close);
                }
        }else if(Marketposition==1)
        {
        if(Close<lowestIn7Days)
                {
                        Sell(1,Close);
                }
           if(close>highestIn7Days)
                {
            BuyToCover(1,close);
                 }
       }
End
作者: nopain    时间: 2009-1-14 20:42:53

空头平仓需要放到Marketpositon == -1的条件下
作者: nbjason    时间: 2009-1-15 10:28:18

谢谢,终于可以了,
老师再问个小问题
Marketpositon == -1     是左右两边相等
Marketpositon = -1       是右边的赋值给左边
=与==在什么情况下需要区分开来的啊,有没有什么情况下用任何一个都可以的?
作者: nopain    时间: 2009-1-15 11:34:21

完全是两种不同的用法
作者: nbjason    时间: 2009-1-15 21:33:49

老师,现在基本上已经可以实现收盘比之前10天的最高与最低价建仓的要求了,,不过我仔细看了一下超级图表的交易连线与交易记录,发现一个问题,,就是如果我创有一个多头指令,那么我在今天收盘价比之前的7天最低的时候就要平仓,刚好今天收盘价是比前7天低了,可是今天也符合了开空单的要求,今天的收盘价同时也比前10天的最低价低了,这样今天收盘价只会把之前的多单平了,并不会开新的空单,要到下面的BAR才会建新的空单,这样的情况该如何解决啊

vars
        Numeric highestIn10Days;
        Numeric LowestIn10Days;
        Numeric LowestIn7Days;
        Numeric highestIn7Days;
begin
    highestIn10Days=highest(high[1]10);
    LowestIn7Days=lowest(low[1],7);
LowestIn10Days=lowest(low[1],10);
highestIn7Days=highest(high[1],7);
If (MarketPosition==0)
        {
                if(Close>highestIn10Days)
                {
                        buy(1,Close);
         }
                If(close< LowestIn10Days)
                {
                         Sellshort(1,close);
                }
        }else if(Marketposition==1)
        {
        if(Close<lowestIn7Days)
                {
                        Sell(1,Close);
                }
          else if(Marketposition==-1)
             {
       if(close>highestIn7Days)
                {
            BuyToCover(1,close);
                 }
       }
         }
End
作者: linqian    时间: 2009-1-17 11:44:22

原帖由 nbjason 于 2009-1-14 11:24 发表
谢谢NOPAIN老师与小米老师,,,
                        MyPrice = highestIn10Days+MinMove*PriceScale;
                        If(Open > MyPrice ) MyPrice = Open;
麻烦再帮我解释一下,,以上两句是什么意思啊? ...


开盘跳空就用Open价格

这也是我关心的问题,谢谢!




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2