以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  交易策略发布专区  (http://weistock.com/bbs/list.asp?boardid=10)
----  [交易系统]fs1  (http://weistock.com/bbs/dispbbs.asp?boardid=10&id=6835)

--  作者:z7c9
--  发布时间:2011/6/11 18:11:59
--  [交易系统]fs1

runmode:1;

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,1,1);
input:debug(0,0,2,1);

strategyname:=\'fs1\';
prefix:=\'ac1_\'+stklabel+\'_\'+strategyname+\'_\';
costprice:=prefix+\'cost\';
stopline:=prefix+\'stop\';

myaccount:=\'888888\';

if initialstop>trailingstop then exit;
if startdate>1 and date<startdate then exit;
 
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;

 topband:=ref(hhv(high,period),1)+mindiff;
 botband:=ref(llv(low,period),1)-mindiff;
 
 atr:=trimprice(ref(ma(tr,unitoftime),1)+mindiff);
 
 initialstopnum:=atr*initialstop;
 trailingstopnum:=atr*trailingstop;
 slippagenum:=slippage*mindiff;
 
 longcond:=barpos>=period and entertime and high>=topband and topband<dynainfo(54);
 longprice:=close;
 
 shortcond:=barpos>=period and entertime and low<=botband and botband>dynainfo(55);
 shortprice:=close; 
end

if workmode=1 then begin
 if tbuyholdingex(myaccount,stklabel,1)=0 and tsellholdingex(myaccount,stklabel,1)=0 then begin
  extgbdataset(costprice,0);
  extgbdataset(stopline,0);
 end
     
 if tbuyholdingex(myaccount,stklabel,1)=0 then begin
  price:=0;
  lots:=0;
 
  if longcond then
   price:=longprice;   
   
  if price>0 then begin     
   mycash:=taccount2(19,myaccount); 
     
   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
   tbuy(1,lots,lmt,price+slippagenum,0,myaccount,stklabel);
 end
  
 if tsellholdingex(myaccount,stklabel,1)=0 then begin
  price:=0;
  lots:=0;
 
  if shortcond then
   price:=shortprice;
   
  if price>0 then begin    
   mycash:=taccount2(19,myaccount); 
   
   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
   tbuyshort(1,lots,lmt,price-slippagenum,0,myaccount,stklabel);
 end
 
 if tbuyholdingex(myaccount,stklabel,1)>0 then begin 
  price:=0;
  lots:=tbuyholdingex(myaccount,stklabel,1);
  
  if close=dynainfo(54) then
   price:=close;
  
  if exittime then begin
   if intraday=0 then begin
    price:=close;
   end else begin
    if costprice<settlementprice and settlementprice<stopline then
     exit;
    else
     price:=close; 
   end 
  end  
  
  begin   
   if extgbdata(stopline)>0 and close<=extgbdata(stopline) then
    price:=close;
 
   if extgbdata(stopline)=0 then begin    
    if commission>1 then
     extgbdataset(costprice,trimprice(tavgenterpriceex2(myaccount,stklabel,0)+2*commission/multiplier)+mindiff);
    else
     extgbdataset(costprice,trimprice(tavgenterpriceex2(myaccount,stklabel,0)*(1+commission)/(1-commission))+mindiff);
     
    extgbdataset(stopline,extgbdata(costprice)-initialstopnum);
   end
   
   if extgbdata(stopline)<extgbdata(costprice) and high-initialstopnum>=extgbdata(costprice) then
    extgbdataset(stopline,extgbdata(costprice));
   
   if extgbdata(stopline)>=extgbdata(costprice) and high-trailingstopnum>extgbdata(stopline) then
    extgbdataset(stopline,high-trailingstopnum);   
  end
  
  if price>0 then
   tsell(1,lots,lmt,price-slippagenum,0,myaccount,stklabel);
      
 end
 
 if tsellholdingex(myaccount,stklabel,1)>0 then begin
  price:=0;
  lots:=tsellholdingex(myaccount,stklabel,1);
  
  if close=dynainfo(55) then
   price:=close;  
  
  if exittime then begin
   if intraday=0 then begin
    price:=close;
   end else begin
    if costprice>settlementprice and settlementprice>stopline then
     exit;
    else
     price:=close;
   end 
  end 
  
  begin 
   if extgbdata(stopline)>0 and close>=extgbdata(stopline) then
    price:=close;
    
   if extgbdata(stopline)=0 then begin
    if commission>1 then
     extgbdataset(costprice,trimprice(tavgenterpriceex2(myaccount,stklabel,1)-2*commission/multiplier)-mindiff);
    else
     extgbdataset(costprice,trimprice(tavgenterpriceex2(myaccount,stklabel,1)*(1-commission)/(1+commission))-mindiff);
     
    extgbdataset(stopline,extgbdata(costprice)+initialstopnum);
   end 
   
   if extgbdata(stopline)>extgbdata(costprice) and low+initialstopnum<=extgbdata(costprice) then
    extgbdataset(stopline,extgbdata(costprice));
   
   if extgbdata(stopline)<=extgbdata(costprice) and low+trailingstopnum<extgbdata(stopline) then
    extgbdataset(stopline,low+trailingstopnum); 
  end  

  if price>0 then
   tsellshort(1,lots,lmt,price+slippagenum,0,myaccount,stklabel);
 end
end

if workmode=0 then begin
 margin:close*multiplier*marginratio,linethick0; 
 ss:settlementprice,colorwhite,linethick2;
 
 if tbuyholdingex(myaccount,stklabel,1)=0 and tsellholdingex(myaccount,stklabel,1)=0 then begin
  tb:topband,linethick0;
  bb:botband,linethick0;
    
  drawicon(entertime and islastbar and topband<dynainfo(54),topband,10);
  drawicon(entertime and islastbar and botband>dynainfo(55),botband,11);
 end
 
 if tbuyholdingex(myaccount,stklabel,1)>0 or tsellholdingex(myaccount,stklabel,1)>0 then begin
  cp:extgbdata(costprice),linethick0;
  sl:extgbdata(stopline),linethick0;
  wl:if(tbuyholdingex(myaccount,stklabel,1)>0,(sl-cp)*multiplier*tbuyholdingex(myaccount,stklabel,1),(cp-sl)*multiplier*tsellholdingex(myaccount,stklabel,1)),linethick0;
 end 

 if tbuyholdingex(myaccount,stklabel,1)>0 then begin   
  drawicon(islastbar and extgbdata(stopline)<extgbdata(costprice),extgbdata(stopline),11);
  drawicon(islastbar and extgbdata(stopline)=extgbdata(costprice),extgbdata(stopline),12);
  drawicon(islastbar and extgbdata(stopline)>extgbdata(costprice),extgbdata(stopline),10);     
 end
 
 if tsellholdingex(myaccount,stklabel,1)>0 then begin     
  drawicon(islastbar and extgbdata(stopline)>extgbdata(costprice),extgbdata(stopline),11);
  drawicon(islastbar and extgbdata(stopline)=extgbdata(costprice),extgbdata(stopline),12);
  drawicon(islastbar and extgbdata(stopline)<extgbdata(costprice),extgbdata(stopline),10); 
 end
end

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

--  作者:xian_0_9
--  发布时间:2011/6/11 20:56:13
--  
均价线?