以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  [求助]公式编译出错  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=62845)

--  作者:利期
--  发布时间:2014/3/19 11:18:47
--  [求助]公式编译出错

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

  我将
//赚3保1
复制多了一遍执行
 //赚7保2
两者意思一样的,赋值不同而已,
一个策略组,应该是单独判断执行的吧。
为什么会出现,下一段语句 END 语句前缺少 BEGIN呢。
这个问题如何编写?



--  作者:jinzhe
--  发布时间:2014/3/19 11:26:30
--  
多了个end或者说少了个begin,你看看哪里少了或者多了
--  作者:利期
--  发布时间:2014/3/19 12:33:00
--  
不多不少吧。原封不动,只是复制多了一段   //赚3保1   策略,没有进行其他的任何删减啊。。代码都显示在那,你看是哪里少了或者多了什么。实在不明。
--  作者:利期
--  发布时间:2014/3/19 12:35:15
--  
可以了,删了一个END。
--  作者:利期
--  发布时间:2014/3/19 12:37:32
--  
ENTERPRICE这个函数,是指标形成交易条件时的开仓价?还是账户上面的实际开仓价?
如果要采用账户上的成交均价,用哪个函数?
[此贴子已经被作者于2014/3/19 12:37:49编辑过]

--  作者:jinzhe
--  发布时间:2014/3/19 13:14:53
--  
图表取不到实际开仓价,enterprice获取的是图表上的信号理论开仓价
--  作者:利期
--  发布时间:2014/3/19 14:56:48
--  
关于止损后再开仓,VARIABLE  变量赋值,没法解决,想到一种条件式COUNT,或循环条件CONTINUE ,满足首先执行前面的各种平仓作为先决条件,之后符合新条件形成再执行,新的开仓,如何编法呢?
下面编的,没有任何信号了。

BUY1:=ND>XD;
SELL1:=ND<XD;

//持有多单

 IF HOLDING>0 and enterbars>0 THEN BEGIN
  IF SELL1 THEN BEGIN  {平多单}
  多平:SELL(1,0,MARKET),ORDERQUEUE;
 END

 //多单管理
 //多单止损
 IF HOLDING>0 and enterbars>0 and ENTERPRICE-C>=ZSDS THEN BEGIN
  多损:SELL(1,0,MARKET),ORDERQUEUE;
 END
 
 //移动止盈
 IF YDZY=1 THEN BEGIN
  //每周期判断是否创新高
  IF H>HIGHPRICE THEN BEGIN
   HIGHPRICE:=H;
   dwin:=HIGHPRICE-ENTERPRICE;
  END 

 //赚3保1
  IF Z3B1=1 THEN BEGIN
   IF HOLDING>0 and enterbars>0 and dwin>=3 THEN BEGIN
    IF H-ENTERPRICE<=0.8 THEN BEGIN
     多保1:SELL(1,0,MARKET);
    END
   END
  END
 END
 

 //赚7保2
  IF Z3B1=1 THEN BEGIN
   IF HOLDING>0 and enterbars>0 and dwin>=7 THEN BEGIN
    IF H-ENTERPRICE<=2 THEN BEGIN
     多保2:SELL(1,0,MARKET);
    END
   END
  END

 

 //赚10保3
  IF Z3B1=1 THEN BEGIN
   IF HOLDING>0 and enterbars>0 and dwin>=10 THEN BEGIN
    IF H-ENTERPRICE<=3 THEN BEGIN
     多保3:SELL(1,0,MARKET);
    END
   END
  END

 
  //如果盈利超过15点之后回撤达到7点,就平仓,保住盈利
 IF HOLDING>0 and enterbars>0 and dwin>=15 THEN BEGIN
  IF HIGHPRICE-H>=7 THEN BEGIN  //回撤超过3点
   多赢1:SELL(1,0,MARKET);
   END 
  END 


  //如果盈利超过20点之后回撤达到10点,就平仓,保住盈利
 IF HOLDING>0 and enterbars>0 and dwin>=20 THEN BEGIN
  IF HIGHPRICE-H>=10 THEN BEGIN  //回撤超过3点
   多赢2:SELL(1,0,MARKET);
   END 
  END 

 
     //如果盈利超过30点之后回撤达到8点,就平仓,保住盈利
 IF HOLDING>0 and enterbars>0 and dwin>=30 THEN BEGIN
  IF HIGHPRICE-H>=8 THEN BEGIN  //回撤超过3点
   多赢3:SELL(1,0,MARKET);
   END 
  END 


//开空单
if 多平 or 多损 or 多保1 or 多保2 or 多保3 or 多赢1 or 多赢2 or 多赢3 THEN BEGIN
IF HOLDING=0 AND TIME<151300 THEN BEGIN
  IF SELL1 THEN BEGIN
   空开:BUYSHORT(1,1,MARKET),ORDERQUEUE;
   LOWPRICE:=ENTERPRICE;
   END 
  END
 END
END
//持有空单
IF holding<0 and enterbars>0 THEN BEGIN
 IF BUY1 THEN BEGIN   //平空单
  空平:SELLSHORT(1,0,MARKET);
 END

 //空单止损
 IF holding<0 and enterbars>0 and C-ENTERPRICE>=ZSDS THEN BEGIN
  空损:SELLSHORT(1,0,MARKET);
 END
 
 //移动止盈
 IF YDZY=1 THEN BEGIN
  //每周期判断是否创新低
  IF L<LOWPRICE THEN BEGIN
   LOWPRICE:=L;
   kwin:=ENTERPRICE-LOWPRICE;
  END 
  
  //赚5保1
IF holding<0 and enterbars>0 and kwin>=3 THEN BEGIN
 IF Z3B1=1 THEN BEGIN
   IF ENTERPRICE-L<=0.8 THEN BEGIN
    空保1:SELLSHORT(1,0,MARKET);
   END
  END
 END
END  

  //赚7保2
IF holding<0 and enterbars>0 and kwin>=7 THEN BEGIN
 IF Z3B1=1 THEN BEGIN
   IF ENTERPRICE-L<=2 THEN BEGIN
    空保2:SELLSHORT(1,0,MARKET);
   END
  END
 END
END


//赚10保3
IF holding<0 and enterbars>0 and kwin>=10 THEN BEGIN
 IF Z3B1=1 THEN BEGIN
   IF ENTERPRICE-L<=3 THEN BEGIN
    空保3:SELLSHORT(1,0,MARKET);
   END
  END
 END


  //如果盈利超过15点之后回撤达到7点,就平仓,保住盈利
  IF holding<0 and enterbars>0 and kwin>=15 THEN BEGIN
   IF L-LOWPRICE>=7 THEN BEGIN  //回撤超过3点
    空赢1:SELLSHORT(1,0,MARKET);
   END 
  END 

  //如果盈利超过20点之后回撤达到10点,就平仓,保住盈利
  IF holding<0 and enterbars>0 and kwin>=20 THEN BEGIN
   IF L-LOWPRICE>=10 THEN BEGIN  //回撤超过3点
    空赢2:SELLSHORT(1,0,MARKET);
   END 
  END 

  //如果盈利超过30点之后回撤达到8点,就平仓,保住盈利
  IF holding<0 and enterbars>0 and kwin>=30 THEN BEGIN
   IF L-LOWPRICE>=8 THEN BEGIN  //回撤超过3点
    空赢3:SELLSHORT(1,0,MARKET);
   END 
  END
  
//开多单
if 空平 or 空损 or 空保1 or 空保2 or 空保3 or 空赢1 or 空赢2 or 空赢3 THEN BEGIN
 IF HOLDING=0 AND TIME<151300 THEN BEGIN
  IF BUY1 THEN BEGIN
   多开:BUY(1,1,MARKET);
   HIGHPRICE:=ENTERPRICE;  //将开仓价保存到最高价
  END
 END
END

 //日内平仓
IF TIME>=151000 THEN BEGIN
 收盘清多:SELL(1,0,MARKET);
 收盘清空:SELLSHORT(1,0,MARKET);
END

--  作者:jinzhe
--  发布时间:2014/3/19 15:02:14
--  
你的代码已经没有全局变量了,也就是开平没有信号那么就说明你的开平仓条件没有成立,而不是其他什么的问题,你找找条件是否满足
--  作者:利期
--  发布时间:2014/3/19 15:06:08
--  
//开空单
if 多平 or 多损 or 多保1 or 多保2 or 多保3 or 多赢1 or 多赢2 or 多赢3 THEN BEGIN
  IF SELL1 THEN BEGIN

   空开:BUYSHORT(1,1,MARKET),ORDERQUEUE;

这样,如止盈多单后的,同时却符合合多条件BUY1  ,不会再开当前条件多仓,等到SELL1 再 空开:

//开多单
if 空平 or 空损 or 空保1 or 空保2 or 空保3 or 空赢1 or 空赢2 or 空赢3 THEN BEGIN
  IF BUY1 THEN BEGIN

   多开:BUY(1,1,MARKET);

反之亦然       止盈空单后的,同时却答合空条件SELL1  ,不会再开当前条件空仓,等到BUY1 ,再多开。


循环检测条件再执行,如何编写呢?

--  作者:jinzhe
--  发布时间:2014/3/19 15:11:20
--  
平多后不开同方向单只能开反方向单?