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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件交易策略发布专区 → [交易系统]fs2

   

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


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

主题:[交易系统]fs2

帅哥哟,离线,有人找我吗?
z7c9
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小飞侠 帖子:1882 积分:3310 威望:0 精华:15 注册:2010/3/15 13:11:56
[交易系统]fs2  发帖心情 Post By:2011/6/12 10:07:16 [只看该作者]

runmode:0;

input:unitoftime(15,5,15,5),length(4,1,6,1);
input:initialstop(2,2,6,1),trailingstop(4,2,6,1);
input:startdate(1110104,1,9999999,1),intraday(1,0,1,1);
input:money(0,0,10,1);
input:slippage(0,0,2,1);
input:debug(2,0,2,1);

variable:costprice=0,stopline=0;
variable:myasset=50000,mycurve=0;

if initialstop>trailingstop then exit;
if startdate>1 and date<startdate then exit;

database('provider=microsoft.jet.oledb.4.0;data source=e:\Trade\Report\Report.mdb');

begin
 if stricmp(marketlabel,'sq')=0 then
  label:=strleft(stklabel,2);
   
 if stricmp(marketlabel,'dq')=0 then
  label:=strleft(stklabel,1);
 
 if stricmp(marketlabel,'zq')=0 then
  label:=strleft(stklabel,2); 
  
 if stricmp(marketlabel,'zj')=0 then
  label:=strleft(stklabel,2);
  
 if stricmp(label,'cf')=0 then begin
  marginratio:=0.17;
  commission:=12;
  tradeable:=true;
 end
 
 if stricmp(label,'sr')=0 then begin
  marginratio:=0.16;
  commission:=6;
  tradeable:=true;
 end
 
 if not(tradeable) then exit;
end          

begin   
 entertime1:=t0totime(timetot0(opentime(1))+60*(unitoftime+2));
 entertime2:=t0totime(timetot0(closetime(0))-60);
 exittime1:=t0totime(timetot0(closetime(0)));

 entertime:=time>=entertime1 and time<=entertime2;
 exittime:=time>=exittime1; 
 
 cond:=day<>ref(day,1) or barpos=1; 
 n:=barpos-valuewhen(cond,barpos)+1; 
 settlementprice:=trimprice(sum(amount,n)/sum(vol,n)/multiplier); 
 
 period:=unitoftime*length;
  
 atr:=trimprice(ref(ma(tr,unitoftime),1)+mindiff);
  
 initialstopnum:=atr*initialstop; 
 trailingstopnum:=atr*trailingstop;
 slippagenum:=slippage*mindiff;
 
 topband:=ref(hhv(high,period),1)+mindiff;
 botband:=ref(llv(low,period),1)-mindiff; 
 
 longcond:=barpos>=period and entertime and high>=topband;
 longprice:=max(topband,open);
 
 shortcond:=barpos>=period and entertime and low<=botband;
 shortprice:=min(botband,open);
 
 enterhour:=ref(hour,enterbars);
 enterminute:=ref(minute,enterbars);
end

if debug=1 and ((startdate=1 and barpos=1) or date=startdate) then begin
 dbexecute('drop table 设置');
 dbexecute('drop table 权益'); 
 dbexecute('drop table 交易明细'); 
 dbexecute('drop table 账户');

 dbexecute('create table 设置(品种 text,周期 text,时间 text,初始资金 number,保证金率 number,佣金滑点 text)');
 dbexecute('create table 权益(日期 datetime,权益 number,平仓盈亏 number,累计盈亏 number)');
 dbexecute('create table 交易明细(开仓日期 datetime,合约名称 text,开仓时间 datetime,开仓价格 number,交易类型 text,平仓时间 datetime,平仓价格 number,盈亏点数 number,交易手数 number,总手续费 number,平仓盈亏 number)');  
 
 if commission>1 then
  comm:=numtostr(commission,0);
 else
  comm:=numtostr(commission*10000,2)+'%%';
 
 dwdate:=date[datacount];
 nyear:=intpart(dwdate/10000+1900);
 nmonth:=intpart(dwdate/100%100);
 nday:=intpart(dwdate%100);  
 ndate:=numtostr(year,0)+'/'+numtostr(month,0)+'/'+numtostr(day,0)+'-'+numtostr(nyear,0)+'/'+numtostr(nmonth,0)+'/'+numtostr(nday,0);

 dbexecute('insert into 设置(品种,周期,时间,初始资金,保证金率,佣金滑点) values("'+stkname+'","1分钟","'+ndate+'",500000,'+numtostr(marginratio,2)+',"'+comm+' & '+numtostr(slippage,0)+'")');  
end

if holding=0 then begin
 costprice:=0;
 stopline:=0;
end

if holding=0 then begin
 price:=0;
 lots:=0;
 
 if longcond then
  price:=longprice;
 
 if price>0 then begin  
  mycash:=cash(0);
  
  lots1:=intpart(mycash/(price*multiplier*marginratio));   
  
  if money=0 then begin
   lots:=lots1;
  end else begin
   lots2:=intpart(mycash*0.01*money/(initialstopnum*multiplier));
   lots:=min(lots1,lots2);
  end
 end  
  
 if lots>=1 then
  buy(1,lots,limitr,price+slippagenum);
end

if holding=0 then begin
 price:=0;
 lots:=0;
 
 if shortcond then
  price:=shortprice;
  
 if price>0 then begin  
  mycash:=cash(0);
  
  lots1:=intpart(mycash/(price*multiplier*marginratio));  
  
  if money=0 then begin
   lots:=lots1;
  end else begin
   lots2:=intpart(mycash*0.01*money/(initialstopnum*multiplier));
   lots:=min(lots1,lots2); 
  end
 end  
   
 if lots>=1 then
  buyshort(1,lots,limitr,price-slippagenum);
end

if holding>0 then begin
 price:=0;
 lots:=holding;
 
 if exittime then begin
  if intraday=0 then begin
   price:=open;
  end else begin
   if costprice<settlementprice and settlementprice<stopline then
    exit;
   else
    price:=close; 
  end 
 end   
    
 begin
  if stopline>0 and low<=stopline then
   price:=min(stopline,open);
   
  if stopline=0 then begin
   if commission>1 then
    costprice:=trimprice(enterprice+2*commission/multiplier)+mindiff;
   else
    costprice:=trimprice(enterprice*(1+commission)/(1-commission))+mindiff;
   
   stopline:=costprice-initialstopnum;
  end 
   
  if stopline<costprice and high-initialstopnum>=costprice then
   stopline:=costprice;  
  
  if stopline>=costprice and high-trailingstopnum>stopline then
   stopline:=high-trailingstopnum;  
 end 
 
 if price>0 then begin
  sell(1,lots,limitr,price-slippagenum);
  
  if debug=1 then begin
   if commission>1 then
    commission:=2*commission*lots;
   else
    commission:=(enterprice+exitprice)*multiplier*commission*lots;
                       
   sql:='insert into 交易明细(开仓日期,合约名称,开仓时间,开仓价格,交易类型,平仓时间,平仓价格,盈亏点数,交易手数,总手续费,平仓盈亏) values("'+
         numtostr(year,0)+'-'+numtostr(month,0)+'-'+numtostr(day,0)+'","'+stklabel+'","'+
         numtostr(enterhour,0)+':'+numtostr(enterminute,0)+'",'+numtostr(enterprice,2)+',"Buy","'+
         numtostr(hour,0)+':'+numtostr(minute,0)+'",'+numtostr(exitprice,2)+','+
         numtostr(exitprice-enterprice,2)+','+numtostr(lots,0)+','+numtostr(commission,0)+','+
         numtostr((exitprice-enterprice)*multiplier*lots,2)+')';         
   dbexecute(sql); 
  end
 end 
end

if holding<0 then begin
 price:=0;
 lots:=-holding;
 
 if exittime then begin
  if intraday=0 then begin
   price:=open;
  end else begin
   if costprice>settlementprice and settlementprice>stopline then
    exit;
   else
    price:=close;
  end 
 end

 begin
  if stopline>0 and high>=stopline then
   price:=max(stopline,open);
   
  if stopline=0 then begin
   if commission>1 then
    costprice:=trimprice(enterprice-2*commission/multiplier)-mindiff;
   else
    costprice:=trimprice(enterprice*(1-commission)/(1+commission))-mindiff;
   
   stopline:=costprice+initialstopnum;
  end 
  
  if stopline>costprice and low+initialstopnum<=costprice then
   stopline:=costprice;
     
  if stopline<=costprice and low+trailingstopnum<stopline then
   stopline:=low+trailingstopnum;   
 end 
 
 if price>0 then begin
  sellshort(1,lots,limitr,price+slippagenum);

  if debug=1 then begin 
   if commission>1 then
    commission:=2*commission*lots;
   else
    commission:=(enterprice+exitprice)*multiplier*commission*lots;
      
   sql:='insert into 交易明细(开仓日期,合约名称,开仓时间,开仓价格,交易类型,平仓时间,平仓价格,盈亏点数,交易手数,总手续费,平仓盈亏) values("'+
         numtostr(year,0)+'-'+numtostr(month,0)+'-'+numtostr(day,0)+'","'+stklabel+'","'+
         numtostr(enterhour,0)+':'+numtostr(enterminute,0)+'",'+numtostr(enterprice,2)+',"Sell","'+
         numtostr(hour,0)+':'+numtostr(minute,0)+'",'+numtostr(exitprice,2)+','+
         numtostr(enterprice-exitprice,2)+','+numtostr(lots,0)+','+numtostr(commission,0)+','+
         numtostr((enterprice-exitprice)*multiplier*lots,2)+')';      
   dbexecute(sql);       
  end  
 end 
end

if exittime then begin 
 closeprofit:=asset-myasset;
 myasset:=asset;
 mycurve:=mycurve+closeprofit;
 if debug=1 then begin
  sql:='insert into 权益(日期,权益,平仓盈亏,累计盈亏) values("'+numtostr(year,0)+'-'+numtostr(month,0)+'-'+numtostr(day,0)+'",'+numtostr(myasset,2)+','+numtostr(closeprofit,2)+','+numtostr(mycurve,2)+')';   
  dbexecute(sql);
 end 
end

if holding>0 then begin
 drawicon(stopline<costprice,stopline,11);
 drawicon(stopline=costprice,stopline,12);
 drawicon(stopline>costprice,stopline,10); 
end

if holding<0 then begin
 drawicon(stopline>costprice,stopline,11);
 drawicon(stopline=costprice,stopline,12);
 drawicon(stopline<costprice,stopline,10);  
end

if debug=2 then begin
 盈亏:mycurve,noaxis,colormagenta;      
 收益:(myasset-50000)/50000,linethick0;
 次数:totaltrade,linethick0;
 胜率:percentwin,linethick0;
 连亏:maxseqloss,linethick0;
 连赢:maxseqwin,linethick0;
end

[此贴子已经被作者于2011-10-3 11:20:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
淡定688
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:80 积分:277 威望:0 精华:0 注册:2011/2/14 21:50:41
  发帖心情 Post By:2011/6/12 12:12:26 [只看该作者]

data source=e:\Trade\Report\Report.mdb');    不是有效途径

 回到顶部