欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件策略编写求助区 → 20金币悬赏贴,非高手勿入

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有7532人关注过本帖树形打印复制链接

主题:20金币悬赏贴,非高手勿入

美女呀,离线,留言给我吧!
金字塔散户
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:558 积分:658 威望:0 精华:0 注册:2012/9/20 10:11:38
20金币悬赏贴,非高手勿入  发帖心情 Post By:2012/10/12 14:57:12 [只看该作者]

//声明参数
Input : T20(20,15,60,1) ; //进场的周期
Input : T10(10,10,30,1); //出场的周期
Input : ATRLen(20,15,30,1) ;
Input : PosNum(2,1,20,1) ; //每次交易的手数

//声明变量
BuyOrderThisBar := 0 ; //当前Bar有过交易

VARIABLE : _DEBUG = 1 ; //是否输出前台交易指令
VARIABLE : _TDEBUG = 1 ; //是否输出后台交易指令
VARIABLE : _DEBUGOUT = 1 ; //是否输出后台交易的调试信息


VARIABLE : myEntryPrice =0 ; //开仓价格
VARIABLE : myExitPrice =0 ; //平仓价格

VARIABLE : TurtleUnits=0 ; //交易单位
VARIABLE : Position=0 ; //仓位状态
//0表示没有仓位,1表示持有多头, -1表示持有空头

VARIABLE : T20Hi=Close ; //20周期的高点
VARIABLE : T20Lo=Close ; //20周期的低点

VARIABLE : T10Hi=Close ; //10周期的高点
VARIABLE : T10Lo=Close ; //10周期的低点

//准备需要计算的变量
T20Hi := ref(hhv(h,T20),1) ;
T20Lo := ref(llv(l,T20),1) ;

T10Hi := ref(hhv(h,T10),1) ;
T10Lo := ref(llv(l,T10),1) ;

AvgTR :=  ref(MA(TR,ATRLen),1) ;

//采用全局变量保存最后一根K线的计算状态
strEntryBarPos:=strcat(STKLABEL,'EntryBarPos') ;
strExitBarPos:=strcat(STKLABEL,'ExitBarPos') ;
strPreEntryPrice:=strcat(STKLABEL,'PreEntryPrice') ;
strTurtleUnits:=strcat(STKLABEL,'TurtleUnits') ;
strPosition:=strcat(STKLABEL,'Position') ;
strPreN:=strcat(STKLABEL,'PreN') ;

If NOT ( workmode=1 ) then Begin
DRAWTEXTEX(1 ,0 ,0 ,0 ,'提示:本公式仅用于后台交易!'  ),coloryellow ;
Exit ;
End //If

//开始执行时 初始化数据
//注意:第一个数据的Barpos=1
If BARPOS=1 Then Begin
//Position := 0 ;

End //If

//如果当前棒是最后一根K线,执行
If IsLastBar Then Begin

// 如果最后一根K线发生过出场信号,则那一根K线不再交易
If EXTGBDATA(strExitBarPos) = Barpos Then Begin
Goto ContinueLine ;
End 

//恢复上一秒计算时保存的数据
//如果记录的进场barpos和当前的相等,说明上一个进场信号也是最后一根K线发出的。
If EXTGBDATA(strEntryBarPos) = Barpos Then Begin
myEntryPrice := EXTGBDATA(strPreEntryPrice) ;
TurtleUnits := EXTGBDATA(strTurtleUnits) ;
Position := EXTGBDATA(strPosition) ;
N := EXTGBDATA(strPreN) ;
End 
//如果当前是没有持仓的状态
If Position=0 and BARPOS>T20 and h>l Then Begin
//建立多头进场条件
Long := h > T20Hi ;
//多头进场符合
if Long then begin
myEntryPrice := IF(Open>T20Hi+MINDIFF ,Open ,T20Hi+MINDIFF ) ;
Position := 1 ;
TurtleUnits := 1 ;
N := AvgTR ;
tbuy( _TDEBUG,PosNum,LMT,h),ALLOWREPEAT ;

EXTGBDATASET(strEntryBarPos,Barpos ) ;
EXTGBDATASET(strPreEntryPrice,myEntryPrice ) ;
EXTGBDATASET(strTurtleUnits,TurtleUnits ) ;
EXTGBDATASET(strPosition,Position ) ;
EXTGBDATASET(strPreN,N ) ;
end //if多头进场符合

//如果当前持有多头仓位的状态
If Position=1 and BARPOS>T20 and h>l Then Begin
//多头加仓条件
If (High>myEntryPrice+0.5*N) and TurtleUnits<4 Then Begin
myEntryPrice := IF(Open>myEntryPrice+0.5*N ,Open ,myEntryPrice+0.5*N ) ;
myEntryPrice := Ceiling(myEntryPrice/MINDIFF)*MINDIFF ;
TurtleUnits := TurtleUnits+1 ;
tbuy( _TDEBUG,PosNum,LMT,h),ALLOWREPEAT ;

EXTGBDATASET(strEntryBarPos,Barpos ) ;
EXTGBDATASET(strPreEntryPrice,myEntryPrice ) ;
EXTGBDATASET(strTurtleUnits,TurtleUnits ) ;
EXTGBDATASET(strPosition,Position ) ;
End //IF多头加仓条件
//建立多头离场条件
LongX1 := (low < T10Lo)  ;
if LongX1 and EXTGBDATA(strEntryBarPos)<>Barpos and EXTGBDATA(strExitBarPos)<>Barpos then begin
myExitPrice := IF(Open<T10Lo-MINDIFF ,Open ,T10Lo-MINDIFF ) ;
Position := 0 ;
TurtleUnits := 0 ;
tsell( _TDEBUG ,0,LMT,l),ALLOWREPEAT;
EXTGBDATASET(strExitBarPos,Barpos ) ;
EXTGBDATASET(strTurtleUnits,TurtleUnits ) ;
EXTGBDATASET(strPosition,Position ) ;

end
//建立多头止损条件
LongX2 := (Low<myEntryPrice-2*N)  ;
if LongX2 and Position=1 and EXTGBDATA(strEntryBarPos)<>Barpos and EXTGBDATA(strExitBarPos)<>Barpos then begin
myExitPrice := IF(Open<myEntryPrice-2*N ,Open ,myEntryPrice-2*N ) ;
myExitPrice := Floor(myExitPrice/MINDIFF)*MINDIFF ;
Position := 0 ;
TurtleUnits := 0 ;

tsell( _TDEBUG ,0,LMT,l),ALLOWREPEAT;
EXTGBDATASET(strExitBarPos,Barpos ) ;
EXTGBDATASET(strTurtleUnits,TurtleUnits ) ;
EXTGBDATASET(strPosition,Position ) ;

end
Goto ContinueLine ;
End  //If如果当前持有多头仓位的状态


//如果以上3种情形都没有成立,则直接结束本次判断
Goto ContinueLine ;


End //If如果当前棒是最后一根K线


//不是最后一根K线的情形
//如果当前是没有持仓的状态
If Position=0 and BARPOS>T20 and h>l Then Begin

//建立多头进场条件
Long := h > T20Hi ;
//多头进场
if Long then begin
myEntryPrice := IF(Open>T20Hi+MINDIFF ,Open ,T20Hi+MINDIFF ) ;
//buy( _DEBUG,PosNum,limitr,myEntryPrice+MINDIFF);
Position := 1 ;
TurtleUnits := 1 ;
N := AvgTR ;
BuyOrderThisBar := 1;

end //if
//不要跳转,让程序检查同一根K线是否可以加仓
//Goto ContinueLine ;
End  //If


//如果当前持有多头仓位的状态

If Position=1 and BARPOS>T20 and h>l Then Begin

//多头加仓条件
While (High>myEntryPrice+0.5*N) and TurtleUnits<4 Do Begin
myEntryPrice := IF(Open>myEntryPrice+0.5*N ,Open ,myEntryPrice+0.5*N ) ;
myEntryPrice := Ceiling(myEntryPrice/MINDIFF)*MINDIFF ;
//buy( _DEBUG, PosNum, limitr, myEntryPrice);
TurtleUnits := TurtleUnits+1 ;
BuyOrderThisBar := 1;
End //While
//建立多头离场条件
LongX1 := (low < T10Lo)  ;
if LongX1 and BuyOrderThisBar=0 then begin
myExitPrice := IF(Open<T10Lo-MINDIFF ,Open ,T10Lo-MINDIFF ) ;
//sell( _DEBUG ,0,limitr,myExitPrice-MINDIFF);
Position := 0 ;
TurtleUnits := 0 ;
end

//建立多头止损条件
LongX2 := (Low<myEntryPrice-2*N)  ;

if LongX2 and Position=1 and BuyOrderThisBar=0 then begin
myExitPrice := IF(Open<myEntryPrice-2*N ,Open ,myEntryPrice-2*N ) ;
myExitPrice := Floor(myExitPrice/MINDIFF)*MINDIFF ;
//sell( _DEBUG ,0,limitr,myExitPrice);
Position := 0 ;
TurtleUnits := 0 ;
end

Goto ContinueLine ;

End  //If



//显示账户状态
ContinueLine@ 资产:TASSET,LINETHICK0;
//可用现金:CASH(0),LINETHICK0;
Pos:THOLDING,LINETHICK0;
//交易次数:TOTALDAYTRADE, LINETHICK0 ;
//ep:myEntryPrice ;
// DEBUGOUT('Position=%.0f' ,Position ) ;
// DEBUGOUT('TurtleUnits=%.0f' ,TurtleUnits ) ;
// DEBUGOUT('BarPos=%.0f' ,BARPOS ) ;
// DEBUGOUT('myEntryPrice=%.0f' ,myEntryPrice ) ;

If _DEBUGOUT>0  and IsLastBar Then Begin

DEBUGFILE2('c:\debugfile.txt','BarPos=%.0f' ,BARPOS,1) ;
DEBUGFILE2('c:\debugfile.txt','T20Hi=%.2f' ,T20Hi ,1) ;
DEBUGFILE2('c:\debugfile.txt','N=%.2f' ,N ,1) ;
DEBUGFILE2('c:\debugfile.txt','AvgTR=%.2f' ,AvgTR ,1) ;
DEBUGFILE2('c:\debugfile.txt','Position=%.0f' ,Position,1 ) ;
DEBUGFILE2('c:\debugfile.txt','TurtleUnits=%.0f' ,TurtleUnits,1 ) ;
DEBUGFILE2('c:\debugfile.txt','Open=%.2f' ,O ,1) ;
DEBUGFILE2('c:\debugfile.txt','High=%.2f' ,H ,1) ;
DEBUGFILE2('c:\debugfile.txt','Low=%.2f' ,L ,1) ;
DEBUGFILE2('c:\debugfile.txt','Close=%.2f' ,C ,1) ;
DEBUGFILE2('c:\debugfile.txt','myEntryPrice=%.0f' ,myEntryPrice ,1) ;

End //If

金字塔提供的后台模版,主要是重复开仓的问题,以下是说明
1.多头部分,1秒轮询,加仓的那段代码会出现重复开仓的情况。举个tick的例子,假设系统准备在2000点开多,如果实盘股指按照1999.8,2000,2000.2,2000,1999.8,2000这样跳动,那么2000点就会重复开仓。
2.不是用全局变量就能控制那么简单的,开仓后给全局变量赋值这是行不通的,因为不是单次开仓,而是有加仓的环节。
3.不欢迎空口说思路不实际操作的回帖,只接受修改好的完整代码或者完整代码加修改思路。
4.版上高手还是非常多的,希望能够得到你们的帮助,金币不多,在此先谢过。
[此贴子已经被作者于2012-10-12 14:57:56编辑过]


查看使用道具详细信息
悬赏金币帖,要悬赏 20 个金币[已结帖]
 回到顶部
美女呀,离线,留言给我吧!
jiangsen
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:黑侠 帖子:992 积分:4305 威望:0 精华:0 注册:2012/8/3 10:50:38
  发帖心情 Post By:2012/10/14 19:19:02 [只看该作者]

别指望了,版上没什么高手,就算是200金币也白搭

获得0个金币
 回到顶部
帅哥哟,离线,有人找我吗?
3dian
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:416 积分:2483 威望:0 精华:0 注册:2012/5/17 9:23:48
  发帖心情 Post By:2012/11/2 15:41:47 [只看该作者]

已经帮你解决,给金币吧,呵呵!

获得0个金币
 回到顶部
帅哥哟,离线,有人找我吗?
admin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2012/11/2 17:41:09 [只看该作者]

你怎么解决的啊,分享一下啊


获得0个金币
 回到顶部
帅哥哟,离线,有人找我吗?
3dian
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:416 积分:2483 威望:0 精华:0 注册:2012/5/17 9:23:48
  发帖心情 Post By:2012/11/3 10:08:21 [只看该作者]

这个例子是金字塔提供的后台交易系统的海龟例子,里面有一个小bug,就是myEntryPrice记录的不正确。当股价单边走,不会出现这个bug,问题就在于窄幅震荡的时候,

下面的语句记录就有点问题了:

tbuy( _TDEBUG,PosNum,LMT,h),ALLOWREPEAT ;
EXTGBDATASET(strPreEntryPrice,myEntryPrice ) ;
统一一下开仓价应该就可以了。
要么
tbuy( _TDEBUG,PosNum,LMT,h),ALLOWREPEAT ;
EXTGBDATASET(strPreEntryPrice,h ) ;
要么
tbuy( _TDEBUG,PosNum,LMT,myEntryPrice),ALLOWREPEAT ;
EXTGBDATASET(strPreEntryPrice,myEntryPrice ) ;


获得0个金币
 回到顶部
帅哥哟,离线,有人找我吗?
admin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2012/11/3 11:27:01 [只看该作者]

谢谢分享,请发帖人在一周时间内回复确认问题是否解决,解决后请及时给解决人金币结贴,逾期版主将强行进行金币扣除,并惩罚性对不结贴用户的论坛积分进行扣除
[此贴子已经被作者于2012-11-3 11:27:20编辑过]

获得0个金币
 回到顶部