金字塔客服 发表于 2011-12-9 00:52:41

基于 金字塔平台 编写的一些经典交易系统案例

本帖最后由 金字塔客服 于 2011-12-9 16:54 编辑

基于 金字塔 平台编写的一些经典交易系统案例
(金字塔z7c9版主原创 )

--------------------------------------
分形通道突破

runmode:0;
sfx:=ref(high,1)<ref(high,2) and ref(high,2)>ref(high,3);
xfx:= ref(low,1)>ref(low,2) and ref(low,2)<ref(low,3);
upperband:=valuewhen(sfx,ref(high,2));
lowerband:=valuewhen(xfx,ref(low,2));
exittime:=time>=150000;

if holding=0 then begin
if high>=upperband then
buy(1,1,limitr,max(open,upperband));
end
if holding=0 then begin
if low<=lowerband then
buyshort(1,1,limitr,min(open,lowerband));
end
if holding>0 then begin
if time>=150000 then
sell(1,holding,limitr,close);
end
if holding<0 then begin
if time>=150000 then
sellshort(1,holding,limitr,close);
end
盈亏:asset-50000,noaxis,colorred,linethick2;
--------------------------------
考夫曼自适应移动均线系统
runmode:0;
input:length1(10,5,60,5);
input:length2(5,5,60,5);
ama:=md(close,length1);
ama1:=ema(ama,length2);
entrylongcond:=ref(cross(ama,ama1),1);
entryshortcond:=ref(cross(ama1,ama),1);
if holding=0 then begin
if entrylongcond then
buy(1,1,limitr,open);
end
if holding=0 then begin
if entryshortcond then
buyshort(1,1,limitr,open);
end
if holding>0 then begin
if entryshortcond then begin
sell(1,holding,limitr,open);
buyshort(1,1,limitr,open);
end
end
if holding<0 then begin
if entrylongcond then begin
sellshort(1,holding,limitr,open);
buy(1,1,limitr,open);
end
end
盈亏:asset-50000,noaxis,colorred,linethick2;
--------------------------------
鳄鱼线与分形图
1 Y:=(H+L)/2;
2 AA:=REF((SMA(Y,5,1)),3);
3 BB:=REF((SMA(Y,8,1)),5);
4 CC:=REF((SMA(Y,13,1)),8);
5 MA1:=MA(CLOSE,5),COLORWHITE,LINETHICK3;
6 MA2:=MA(CLOSE,10),COLORYELLOW,LINETHICK3;
7 MA3:=MA(CLOSE,30),COLORDB7093,LINETHICK3;
8 鳄:CC,COLORFF6600;
9 齿:BB,COLORRED;
10 唇:AA,COLORGREEN;
11 R2:=REF(齿,5);
12 KU1:=IF(HIGH=HHV(HIGH,3),1,0);
13 KD1:=IF(LOW=LLV(LOW,3),1,0);
14 UL:=IF(REF(KU1,2)=1 AND REF(KU1,1)=0 AND KU1=0,REF(HIGH,2),REF(HIGH,2+BARSLAST(REF(KU1,2)=1 AND REF(KU1,1)=0 AND KU1=0)));
15 DL:=IF(REF(KD1,2)=1 AND REF(KD1,1)=0 AND KD1=0,REF(LOW,2),REF(LOW,2+BARSLAST(REF(KD1,2)=1 AND REF(KD1,1)=0 AND KD1=0)));
16 上分形:IF(HIGH>=R2,UL,REF(UL,BARSLAST(HIGH>R2))),POINTDOT,LINETHICK3,COLORMAGENTA;
17 下分形:IF(LOW<=R2,DL,REF(DL,BARSLAST(LOW<=R2))),POINTDOT,LINETHICK3,COLORYELLOW;
18
19 AO:=MA(Y,5)-MA(Y,34);
20 MAO:=MA(AO,5);
21 AC:=AO-MAO;
22 AC1:=REF(AC,1);
23 AO1:=REF(AO,1);
24 KAC:=IF(AC>AC1 AND AO>AO1,1,0);
25 KAO:=IF(AC<AC1 AND AO<AO1,-1,0);
26 STICKLINE(KAC=1 AND CLOSE>=OPEN,OPEN,CLOSE,3,1),COLORRED;
27 STICKLINE(KAO=-1 AND CLOSE>=OPEN,OPEN,CLOSE,3,1),COLORGREEN;
28 STICKLINE(KAO=0 AND KAC=0 AND CLOSE>=OPEN,OPEN,CLOSE,3,1),COLORDDDDDD;
29 STICKLINE(CLOSE>=OPEN,HIGH,CLOSE,0.0,1.0),COLORRED;
30 STICKLINE(CLOSE>=OPEN,OPEN,LOW,0.0,1),COLORRED;
31 STICKLINE(KAC=1 AND CLOSE<OPEN,OPEN,CLOSE,3,0),COLORRED;
32 STICKLINE(KAO=-1 AND CLOSE<OPEN,OPEN,CLOSE,3,0),COLORGREEN;



------------------------------------

金字塔客服 发表于 2011-12-9 17:27:39

两仪四象
///////////////////////////////////////////

runmode:0;

input:length(20);

variable:stopline=0;

if barpos<=30 then exit;

up:=count(close>ref(close,1),length);
down:=count(close<REF(CLOSE,1),LENGTH);
<ref(c,1),length);
entrylongcond:=up/down>=2/3;
entryshortcond:=down/up>=2/3;

upperband:=ref(hhv(high,length),1);
lowerband:=ref(llv(low,length),1);

hh:=ref(high,1);
ll:=ref(low,1);

if holding=0 then begin
if ref(entrylongcond,1) then begin
buy(1,1,limitr,open);
stopline:=lowerband;
end

if ref(entryshortcond,1) then begin
buyshort(1,1,limitr,open);
stopline:=upperband;
end
end

if holding>0 and enterbars>=1 then begin
//if lowerband>stopline then
stopline:=lowerband;

if low<=stopline then
sell(1,holding,limitr,min(open,stopline));
end

if holding<0 and enterbars>=1 then begin
//if upperband<STOPLINE
stopline:=upperband;

if high>=stopline then
sellshort(1,holding,limitr,max(open,stopline));
end

ss:stopline,linethick0;
drawicon(holding<>0,stopline,11);
盈亏:asset-500000,noaxis,coloryellow,linethick2;
//////////////////////////////////////////

金字塔客服 发表于 2011-12-9 00:52:54

本帖最后由 金字塔客服 于 2011-12-9 16:56 编辑

Zig System
////////////////////////////////////////
input:entrystop(0.5,0.1,1,0.1);
input:exitstop(0.5,0,1,1,0.1);
dayopen:=valuewhen(day>ref(day,1),open);
if holding=0 then begin
if high>=dayopen*(1+entrystop/100) then begin
myentryprice:=dayopen*(1+entrystop/100);
myentryprice:=trimprice(myentryprice);
buy(1,volunit,limitr,myentryprice);
exit;
end
end
if holding=0 then begin
if low<=dayopen*(1-entrystop/100) then begin
myentryprice:=dayopen*(1-entrystop/100);
myentryprice:=trimprice(myentryprice);
buyshort(1,volunit,limitr,myentryprice);
exit;
end
end
if holding>0 then begin
if low<=dayopen*(1-exitstop/100) then begin
myexitprice:=dayopen*(1-exitstop/100);
myexitprice:=trimprice(myexitprice);
sell(1,holding,limitr,myexitprice);
exit;
end

if time>=closetime(0) then
sell(1,holding,limitr,close);
end
if holding<0 then begin
if high>=dayopen*(1+exitstop/100) then begin
myexitprice:=dayopen*(1+exitstop/100);
myexitprice:=trimprice(myexitprice);
sellshort(1,holding,limitr,myexitprice);
exit;
end

if time>=closetime(0) then
sellshort(1,holding,limitr,close);
end
资产:asset,noaxis,colorred,linethick2;
///////////////////////////////////////////////////////////////

DTS

runmode:0;
input:money(0,0,5,1);
input:ratio(2,1,10,1);
variable:trend=0;
variable:callback=0;
variable:stoplossprice=0;
variable:takeprofitprice=0;
variable:daytradecounter=0;
if day>ref(day,1) then begin
callback:=0;
daytradecounter:=0;

if close=open then
trend:=0;

if close>open then
trend:=1;

if close<open then
trend:=-1;
end
if trend=0 then begin
if close>open then
trend:=1;

if close<open then
trend:=-1;
end
dist:=barslast(day>ref(day,1))+1;
highest:=ref(hhv(high,dist),1);
lowest:=ref(llv(low,dist),1);
if trend=1 and low<=lowest then
trend:=-1;

if trend=-1 and high>=highest then
trend:=1;
dist1:=barslast(high<ref(high,1) and low<ref(low,1));
stoplossprice1:=ref(low,dist1);
dist2:=barslast(high>ref(high,1) and low>ref(low,1));
stoplossprice2:=ref(high,dist2);
if trend=1 and ref(high,1)<ref(high,3) and ref(high,2)<ref(high,3)and ref(high,3)=highest then
callback:=1;
if trend=-1 and ref(low,1)>ref(low,3) and ref(low,2)>ref(low,3)and ref(low,3)=lowest then
callback:=-1;

if holding=0 then begin
myentryprice:=0;
lots:=0;

if daytradecounter=0 and dist>=4 and trend=1 and callback=1 and high>=highest+mindiff then
myentryprice:=max(open,highest+mindiff);

if myentryprice>0 thenbegin
if dist1<=dist then
   stoplossprice:=stoplossprice1;
else
   stoplossprice:=lowest;
   
initialstopnum:=myentryprice-stoplossprice;

takeprofitprice:=myentryprice+initialstopnum*ratio;
   
if money=0 then begin
   lots:=1;
end else begin
   mycash:=cash(0);
   lots1:=intpart(mycash/(myentryprice*multiplier*taccount(41)));
   lots2:=intpart(mycash*(money/100)/(initialstopnum*multiplier));
   lots:=min(lots1,lots2);
end
end

if lots>=1 then begin
buy(1,lots,limitr,myentryprice);
daytradecounter:=1;
end
end
if holding=0 then begin
myentryprice:=0;
lots:=0;

if daytradecounter=0 and dist>=4 and trend=-1 and callback=-1 and low<=lowest-mindiff then
myentryprice:=min(open,lowest-mindiff);

if myentryprice>0 thenbegin
if dist2<=dist then
   stoplossprice:=stoplossprice2;
else
   stoplossprice:=highest;
   
initialstopnum:=stoplossprice-myentryprice;

takeprofitprice:=myentryprice-initialstopnum*ratio;
   
if money=0 then begin
   lots:=1;
end else begin
   mycash:=cash(0);
   lots1:=intpart(mycash/(myentryprice*multiplier*taccount(41)));
   lots2:=intpart(mycash*(money/100)/(initialstopnum*multiplier));
   lots:=min(lots1,lots2);
end
end

if lots>=1 then begin
buyshort(1,lots,limitr,myentryprice);
daytradecounter:=1;
end
end
if holding>0 then begin
myexitprice:=0;
lots:=holding;

if stricmp(marketlabel,'zj')=0 then begin
if time>=151500 then
   myexitprice:=open;
end else begin
if time>=150000 then
   myexitprice:=open;
end

if high>=takeprofitprice then
myexitprice:=max(open,takeprofitprice);

if low<=stoplossprice then
myexitprice:=min(open,stoplossprice);

if myexitprice>0 then
sell(1,lots,limitr,myexitprice);
end
if holding<0 then begin
myexitprice:=0;
lots:=-holding;

if stricmp(marketlabel,'zj')=0 then begin
if time>=151500 then
   myexitprice:=open;
end else begin
if time>=150000 then
   myexitprice:=open;
end

if low<=takeprofitprice then
myexitprice:=min(open,takeprofitprice);

if high>=stoplossprice then
myexitprice:=max(open,stoplossprice);
   
if myexitprice>0 then
sellshort(1,lots,limitr,myexitprice);
end
drawicon(holding<>0,stoplossprice,11);
drawicon(holding<>0,takeprofitprice,10);
资产:asset,noaxis,linethick2;


////////////////////////////////////////////////////////////////////////

MACD策略
runmode:0;
input:period(70,5,90,5);
input:initialstop(2,0,3,1),coststop(2,1,3,1),trailingstop(3,1,6,1);
input:money(0,0,10,1);
input:slippage(1,0,1,1);
input:debug(1,0,1,1);
variable:myasset=500000;
variable:costprice=0,stopline=0;
begin
if stricmp(marketlabel,'sh')=0 then begin
commission:=0.001;
stamptax:=0.001;
transferfee:=0.001;
end

if stricmp(marketlabel,'sz')=0 then begin
commission:=0.001;
stamptax:=0.001;
transferfee:=0;
end

diff:=ema(close,12)-ema(close,26);
dea:=ema(diff,9);
macd:=2*(diff-dea);

buycond:=ref(cross(dea,diff),1);
topband:=ref(hhv(high,period),1)+mindiff;

atr:=ref(ma(tr,10),1);

initialstopnum:=trimprice(initialstop*atr);
coststopnum:=trimprice(coststop*atr);
trailingstopnum:=trimprice(trailingstop*atr);
slippagenum:=slippage*mindiff;
end
if holding=0 then begin
price:=0;
lots:=0;

if barpos>=period and buycond then
price:=close+slippagenum;

if price>0 then begin
mycash:=cash(0);

lots1:=intpart(mycash/(price*volunit))*volunit;   

if money=0 then begin
   lots:=lots1;
end else begin
   lots2:=intpart(mycash*0.01*money/(initialstopnum*volunit))*volunit;
   lots:=min(lots1,lots2);
end
end

if lots>=1 then begin
buy(1,lots,limitr,price);

if workmode=1 then
   tbuy(1,lots,limitr,price);
end
end
if holding>0 then begin
price:=0;
lots:=holding;

if initialstop>0 then begin
if stopline>0 and low<=stopline then
   price:=close-slippagenum;
   
if stopline=0 then begin
   costprice:=trimprice((enterprice*(1+commission)+2*transferfee)/(1-commission-stamptax))+mindiff;
   
   stopline:=costprice-initialstopnum;
end
   
if stopline<costprice and high-coststopnum>=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);
costprice:=0;
stopline:=0;

myasset:=asset;

if workmode=1 then
   tsell(1,lots,limitr,price);
end
end
partline(debug=1 and holding=0,topband,colorred,1);
if initialstop>0 then begin
if holding>0 then begin
drawicon(stopline<costprice,stopline,11);
drawicon(stopline=costprice,stopline,12);
drawicon(stopline>costprice,stopline,10);
end
end
if debug=1 then begin
盈亏:myasset,noaxis,colormagenta;      
收益:(myasset-500000)/500000,linethick0;
次数:totaltrade,linethick0;
胜率:percentwin,linethick0;
连亏:maxseqloss,linethick0;
连赢:maxseqwin,linethick0;
end

//////////////////////////////////////////////////////////

金字塔客服 发表于 2011-12-9 00:52:59

本帖最后由 金字塔客服 于 2011-12-9 16:59 编辑

NFS
//////////////////////////////////////////////////////

runmode:0;
input:entryperiod(1,1,5,1);
input:initialstop(3,2,4,1);
input:breakevenstop(4,2,4,1);
input:trailingstop(5,4,8,1);
input:exitperiod(2,1,5,1);
input:intraday(1,0,1,1);
input:money(0,0,10,1);
input:offset(0,0,2,1);
input:debug(0,0,1,1);
variable:costprice=0;
variable:stopline=0;
variable:myasset=30000;
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,'if')=0 then begin
marginratio:=15/100;
commission:=0.6/10000;
tradeable:=1;
   
entrytime:=time>=093100 and time<=151400;
exittime:=time>=151500;

stoplossunit:=25*mindiff;
length:=60;
end else begin
if stricmp(label,'cf')=0 then begin
   marginratio:=17/100;
   commission:=12;
   tradeable:=1;
end

if stricmp(label,'sr')=0 then begin
   marginratio:=18/100;
   commission:=6;
   tradeable:=1;
end   
   
entrytime:=time>=091600 and time<=145900;
exittime:=time>=150000;

stoplossunit:=5*mindiff;
length:=225;
end
end
if tradeable=0 then exit;
if not(datatype=1) then exit;
begin
cond:=date>ref(date,1) or barpos=1;
dist:=barpos-valuewhen(cond,barpos)+1;
averageprice:=trimprice(sum(amount,dist)/sum(vol,dist)/multiplier);
settlementprice:=trimprice(sum(amount,length)/sum(vol,length)/multiplier);

entryupperband:=ref(hhv(high,60*entryperiod),1)+mindiff;
entrylowerband:=ref(llv(low,60*entryperiod),1)-mindiff;

exitupperband:=ref(hhv(high,30*exitperiod),2)+mindiff;
exitlowerband:=ref(llv(low,30*exitperiod),2)-mindiff;

initialstopnum:=stoplossunit*initialstop;
breakevenstopnum:=stoplossunit*breakevenstop;
trailingstopnum:=stoplossunit*trailingstop;
offsetnum:=mindiff*offset;
end
if holding=0 then begin
myentryprice:=0;
lots:=0;

if year>=2011 and entrytime and high>=entryupperband then
myentryprice:=max(open,entryupperband);

if myentryprice>0 then begin
mycash:=cash(0);   

if money=0 then begin
   lots:=1;
end else begin
   lots1:=intpart(mycash/(myentryprice*multiplier*marginratio));   
   lots2:=intpart(mycash*(money/100)/(initialstopnum*multiplier));
   lots:=min(lots1,lots2);
end
end

if lots>=1 then
buy(1,lots,limitr,myentryprice+offsetnum);
end
if holding=0 then begin
myentryprice:=0;
lots:=0;

if year>=2011 and entrytime and low<=entrylowerband then
myentryprice:=min(open,entrylowerband);

if myentryprice>0 then begin
mycash:=cash(0);   

if money=0 then begin
   lots:=1;
end else begin
   lots1:=intpart(mycash/(myentryprice*multiplier*marginratio));   
   lots2:=intpart(mycash*(money/100)/(initialstopnum*multiplier));
   lots:=min(lots1,lots2);
end
end

if lots>=1 then
buyshort(1,lots,limitr,myentryprice-offsetnum);
end
if holding>0 then begin
myexitprice:=0;

if exittime then begin
if intraday=0 then begin
   myexitprice:=open;
end else begin
   if not(costprice<averageprice and averageprice<stopline) then
    myexitprice:=open;
end
end

if stopline>0 and low<=stopline then
myexitprice:=min(open,stopline);

if stopline=0 then begin
if commission>1 then
   costprice:=enterprice+2*commission/multiplier;
else
   costprice:=enterprice*(1+commission)/(1-commission);

costprice:=ceiling(costprice/mindiff)*mindiff;

stopline:=costprice-initialstopnum;
end

if stopline<costprice and high-breakevenstopnum>=costprice then
stopline:=costprice;

if stopline>=costprice and high-trailingstopnum>stopline then
stopline:=high-trailingstopnum;
if exitlowerband>stopline then
stopline:=exitlowerband;

if myexitprice>0 then begin
sell(1,holding,limitr,myexitprice-offsetnum);
costprice:=0;
stopline:=0;
myasset:=asset;
end
end
if holding<0 then begin
myexitprice:=0;

if exittime then begin
if intraday=0 then begin
   myexitprice:=open;
end else begin
   if not(costprice>averageprice and averageprice>stopline) then
    myexitprice:=open;
end
end
if stopline>0 and high>=stopline then
myexitprice:=max(open,stopline);

if stopline=0 then begin
if commission>1 then
   costprice:=enterprice-2*commission/multiplier;
else
   costprice:=enterprice*(1-commission)/(1+commission);
   
costprice:=floor(costprice/mindiff)*mindiff;

stopline:=costprice+initialstopnum;
end

if stopline>costprice and low+breakevenstopnum<=costprice then
stopline:=costprice;
   
if stopline<=costprice and low+trailingstopnum<stopline then
stopline:=low+trailingstopnum;   

if exitupperband<stopline then
stopline:=exitupperband;

if myexitprice>0 then begin
sellshort(1,holding,limitr,myexitprice+offsetnum);
costprice:=0;
stopline:=0;
myasset:=asset;
end
end
保证金:round(close*multiplier*marginratio),linethick0;
partline(1,averageprice,colorblue,2);
partline(entrytime and holding=0,entryupperband,colorred,2);
partline(entrytime and holding=0,entrylowerband,colorgreen,2);
if entrytime and holding=0 then begin
上轨:entryupperband,linethick0;
下轨:entrylowerband,linethick0;
end
if holding>0 then begin
多头成本:costprice,linethick0;
多头止损:stopline,linethick0;
多头盈亏:(stopline-costprice)*multiplier,linethick0;

drawicon(stopline<costprice,stopline,11);
drawicon(stopline=costprice,stopline,12);
drawicon(stopline>costprice,stopline,10);
end
if holding<0 then begin
空头成本:costprice,linethick0;
空头止损:stopline,linethick0;
空头盈亏:(costprice-stopline)*multiplier,linethick0;

drawicon(stopline>costprice,stopline,11);
drawicon(stopline=costprice,stopline,12);
drawicon(stopline<costprice,stopline,10);
end
if debug=1 then begin
资产:myasset,noaxis,linethick2,colormagenta;      
收益:(myasset-30000)/30000,linethick0;
次数:totaltrade,linethick0;
胜率:percentwin,linethick0;
连亏:maxseqloss,linethick0;
连赢:maxseqwin,linethick0;
end
///////////////////////////////////////////////////////////////////////////

网格交易法

input:grid(3,1,60,1);
variable:level=0;
dist:=barslast(date<>ref(date,1));
oo:=ref(open,dist);

if holding=0 then begin
dnprice:=oo-grid*mindiff;

if low<=dnprice then begin
buy(1,1,limitr,dnprice);
level:=-1;
end
end
if holding=0 then begin
upprice:=oo+grid*mindiff;

if high>=upprice then begin
buyshort(1,1,limitr,upprice);
level:=1;
end
end
if holding>0 then begin
upprice:=oo+(level+1)*grid*mindiff;
dnprice:=oo+(level-1)*grid*mindiff;

if high>=upprice then begin
sell(1,1,limitr,upprice);
level:=level+1;
end

if low<=dnprice then begin
buy(1,1,limitr,dnprice);
level:=level-1;
end

if time=closetime(0) then
sell(1,holding,limitr,close);
end
if holding<0 then begin
upprice:=oo+(level+1)*grid*mindiff;
dnprice:=oo+(level-1)*grid*mindiff;

if low<=dnprice then begin
sellshort(1,1,limitr,dnprice);
level:=level-1;
end

if high>=upprice then begin
buyshort(1,1,limitr,upprice);
level:=level+1;
end

if time=closetime(0) then
sellshort(1,holding,limitr,close);
end
      
盈亏:asset,noaxis,colormagenta;      
收益:(asset-50000)/50000,linethick0;
次数:totaltrade,linethick0;
胜率:percentwin,linethick0;
连亏:maxseqloss,linethick0;
连赢:maxseqwin,linethick0;



///////////////////////////////////////////////////////////////////////////
时空交易

input:n(11,1,20,1);
input:m(35,5,120,5);
longcond:=ref(close,1)-ref(close,n)>=m*mindiff;
longprice:=open;
shortcond:=ref(close,n)-ref(close,1)>=m*mindiff;
shortprice:=open;
if holding=0 then begin
if longcond then
buy(1,1,limitr,longprice);
end
if holding=0 then begin
if shortcond then
buyshort(1,1,limitr,shortprice);
end
if holding>0 then begin
if time=closetime(0) then
sell(1,holding,limitr,close);
end
if holding<0 then begin
if time=closetime(0) then
sellshort(1,holding,limitr,close);
end
   
收益:asset,noaxis,colormagenta;
次数:totaltrade,linethick0;
胜率:percentwin,linethick0;
连亏:maxseqloss,linethick0;
连赢:maxseqwin,linethick0;


//////////////////////////////////////////////////////////////////////////

金字塔客服 发表于 2011-12-9 00:53:03

本帖最后由 金字塔客服 于 2011-12-9 17:01 编辑

///////////////////////////////////////////////////////////////////////////////
区间突破
runmode:0;
variable:maysset=0;
entertime:=time>=091500 and time<=145500;
exittime:=time>=150000;
dist1:=barslast(date<>ref(date,1))+1;
dist2:=ref(dist1,dist1);
hh:=ref(hhv(high,dist2),dist1);
ll:=ref(llv(low,dist2),dist1);
oo:=ref(open,dist1-1);
tt:=hh-ll;
highest:=oo+tt+mindiff;
lowest:=oo-tt-mindiff;
if holding=0 then begin
if high>=highest then
buy(1,1,limitr,highest);
end
if holding=0 then begin
if low<=lowest then
buyshort(1,1,limitr,lowest);
end
if holding>0 then begin
if exittime then
sell(1,holding,limitr,close);
end
if holding<0 then begin
if exittime then
sellshort(1,holding,limitr,close);
end
if exittime then
myasset:=asset;
收益:(myasset-30000)/30000,noaxis,colormagenta;
次数:totaltrade,linethick0;
胜率:percentwin,linethick0;
连亏:maxseqloss,linethick0;
连赢:maxseqwin,linethick0;


////////////////////////////////////////////////////////////////////////////////
闪灵交易系统
runmode:0;
input:length1(60);
input:length2(30);
variable:myholding=0;
variable:myprofit=0;
variable:myentryprice=0;
variable:myexitprice=0;
variable:myfailtrade=0;
entryupperband:=ref(hhv(high,length1),1);
entrylowerband:=ref(llv(low,length1),1);
entrylongcond:=high>=entryupperband;
entryshortcond:=low<=entrylowerband;
exitupperband:=ref(hhv(high,length2),1);
exitlowerband:=ref(llv(low,length2),1);
exitlongcond:=low<=exitlowerband;
exitshortcond:=high>=exitupperband;
if myholding=0 then begin
if entrylongcond then begin
myholding:=1;
myentryprice:=max(open,entryupperband);
end
end
if myholding=0 then begin
if entryshortcond then begin
myholding:=2;
myentryprice:=min(open,entrylowerband);
end
end

if myholding=1 then begin
if exitlongcond then begin
myholding:=0;
myexitprice:=min(open,exitlowerband);
myprofit:=myexitprice-myentryprice;
if myprofit<0 then
   myfailtrade:=myfailtrade+1;
else
   myfailtrade:=0;
end
end
if myholding=2 then begin
if exitshortcond then begin
myholding:=0;
myexitprice:=max(open,exitupperband);
myprofit:=myentryprice-myexitprice;
if myprofit<0 then
   myfailtrade:=myfailtrade+1;
else
   myfailtrade:=0;
end
end
if holding=0 and myfailtrade=1 then begin
if entrylongcond then
buy(1,1,limitr,max(open,entryupperband));
end
if holding=0 and myfailtrade=1 then begin
if entryshortcond then
buyshort(1,1,limitr,min(open,entrylowerband));
end
if holding>0 then begin
if exitlongcond then
sell(1,holding,limitr,min(open,exitlowerband));
end
if holding<0 then begin
if exitshortcond then
sellshort(1,holding,limitr,max(open,exitupperband));
end
盈亏:asset-50000,noaxis,colorred,linethick2;




////////////////////////////////////////////////////////////////////////////////

涨三跌三

runmode:0;
ds:=ref(all(close<open,3),1);
zs:=ref(all(close>open,3),1);
if holding=0 then begin
if ds then
buy(1,1,limitr,open);
end
if holding=0 then begin
if zs then
buyshort(1,1,limitr,open);
end
if holding>0 then begin
sell(1,holding,limitr,close);
end
if holding<0 then begin
sellshort(1,holding,limitr,close);
end
盈亏:asset-50000,noaxis,colorred,linethick2;

///////////////////////////////////////////////////////////////////////////////

金字塔客服 发表于 2011-12-9 00:53:07

本帖最后由 金字塔客服 于 2011-12-9 17:02 编辑

[技术指标]内包日外包日
insideday:=high<ref(high,1) and low>ref(low,1);
outsideday:=high>ref(high,1) and low<ref(low,1);
drawicon(insideday,low*0.99,10);
drawicon(outsideday,high*1.01,11);



//////////////////////////////////////////////////////////////////////////////////
[交易系统]外包日系统
----------------------------------------------------------------------
runmode:0;

variable:stopline=0;

entrylongcond:=ref(high,1)>ref(high,2) and ref(high,2)>ref(high,3) and ref(low,2);
<REF(LOW,3);
entryshortcond:=ref(low,1)ref(high,3) and ref(low,2)<REF(LOW,3);
;

atr:=3*ma(tr,15);

hh:=ref(high,1);
ll:=ref(low,1);

if holding=0 then begin
if entrylongcond then begin
buy(1,1,limitr,open);
stopline=:enterprice-atr;
end

if entryshortcond then begin
buyshort(1,1,limitr,open);
stopline:=enterprice+atr;
end
end

if holding>0 and enterbars>=1 then begin
if hh-atr>stopline then
stopline:=hh-atr;

if low<=stopline then
sell(1,holding,limitr,min(open,stopline));
end

if holding<0 and enterbars>=1 then begin
if ll+atr<STOPLINE
stopline:=ll+atr;

if high>=stopline then
sellshort(1,holding,limitr,max(open,stopline));
end

盈亏:asset-500000,noaxis,coloryellow,linethick2;

//////////////////////////////////////////////////////////////////////////////////

金字塔客服 发表于 2011-12-9 00:53:22

本帖最后由 金字塔客服 于 2011-12-9 17:03 编辑

openbreaksystem
/////////////////////////////////////////////////
runmode:0;

input:entrystop(0.5);
input:exitstop(0.5);
input:malength(120);

myma:=ma(open,malength);

entrylongcond:=open>myma and high>=open*(1+entrystop/100);
exitlongcond:=low<=open*(1-exitstop/100);

entryshortcond:=open<MYMA low<="open*(1-entrystop/100);"
exitshortcond:=high>=open*(1+exitstop/100);

if holding=0 then begin
if entrylongcond then
buy(1,1,limitr,open*(1+entrystop/100));

if entryshortcond then
buyshort(1,1,limitr,open*(1-entrystop/100));
end

if holding>0 then begin
if exitlongcond then
sell(1,holding,limitr,open*(1-exitstop/100));
end

if holding<0 then begin
if exitshortcond then
sellshort(1,holding,limitr,open*(1+exitstop/100));
end

盈亏:asset-500000,noaxis,coloryellow,linethick2;
////////////////////////////////////////////////

独孤求赔 发表于 2011-12-9 06:55:07

{:05:}

伤花怒放 发表于 2011-12-9 08:55:36

靠,看不懂啊......

一飞 发表于 2011-12-9 09:44:57

{:soso__1392141386446400320_2:}

金字塔客服 发表于 2011-12-9 13:32:07

本帖最后由 金字塔客服 于 2011-12-9 17:03 编辑

克罗均线策略
/////////////////////////////////////////////////////////////////////////
1 runmode:0;
2
3 input:n1(4,1,100,1);
4 input:n2(9,1,100,1);
5 input:n3(18,1,100,1);
6
7 ma1:=ma(close,n1);
8 ma2:=ma(close,n2);
9 ma3:=ma(close,n3);
10
11 if holding=0 then begin
12   if close>ma1 and ma1>ma2 and ma2>ma3 then
13         buy(1,1,limitr,close);
14 end
15
16 if holding=0 then begin
17   if close<ma1 and ma1<ma2 and ma2<ma3 then
18         buyshort(1,1,limitr,close);
19 end
20
21 if holding>0 then begin
22   if ma1<ma2 then
23         sell(1,holding,limitr,close);
24 end
25
26 if holding<0 then begin
27   if ma1>ma2 then
28         sellshort(1,holding,limitr,close);
29 end
30
31 资产:asset,noaxis,colormagenta;
32 次数:totaltrade,linethick0;
33 收益:(asset-40000)/40000,linethick0;
34 胜率:percentwin,linethick0;
35 出击:totaltrade/(count(date<>ref(date,1),0)+1),linethick0;
36 连亏:maxseqloss,linethick0;
37 连赢:maxseqwin,linethick0;

////////////////////////////////////////////////////////////////////////

金字塔客服 发表于 2011-12-9 15:42:59

本帖最后由 金字塔客服 于 2011-12-9 17:04 编辑

周期共振系统
/////////////////////////////////////////////////////
runmode:0;

min5open:=callstock(stklabel,vtopen,2,-1);
min5close:=callstock(stklabel,vtclose,2,-1);

min15open:=callstock(stklabel,vtopen,3,-1);
min15close:=callstock(stklabel,vtclose,3,-1);

min30open:=callstock(stklabel,vtopen,4,-1);
min30close:=callstock(stklabel,vtclose,4,-1);

entrylongcond:=min5close>min5open and min15close>min15open and min30close>min30open;
entryshortcond:=min5close
if holding=0 then begin
if entrylongcond then
buy(1,1,limitr,open);

if entryshortcond then
buyshort(1,1,limitr,open);
end

if holding>0 then begin
if time>=closetime(0) then
sell(1,holding,limitr,close);
end

if holding<0 then begin
if time>=closetime(0) then
sellshort(1,holding,limitr,close);
end

盈亏:asset-500000,noaxis,coloryellow,linethick2;
////////////////////////////////////////////////////

金字塔客服 发表于 2011-12-9 15:50:05

本帖最后由 金字塔客服 于 2011-12-9 17:04 编辑

TurtleTradingSystem
/////////////////////////////////////////////////////////////////
runmode:0;

input:riskratio(1,0,2,1);
input:atrlength(20,5,30,5);
input:entryperiod(20,5,60,5);
input:exitperiod(10,5,60,5);

variable:times=0;

atr:=ref(ma(tr,atrlength),1);
marginratio:=10/100;

entryupperband:=ref(hhv(high,entryperiod),1)+mindiff;
entrylowerband:=ref(llv(low,entryperiod),1)-mindiff;

exitupperband:=ref(hhv(high,exitperiod),1)+mindiff;
exitlowerband:=ref(llv(low,exitperiod),1)-mindiff;

entrylongcond:=high>=entryupperband;
entryshortcond:=low<=entrylowerband;

exitlongcond:=low<=exitlowerband;
exitshortcond:=high>=exitupperband;

if holding=0 then begin
price:=0;
lots:=0;

if entrylongcond then
price:=max(open,entryupperband);

if price>0 then begin
mycash:=cash(0);

lots1:=intpart(mycash/(price*multiplier*marginratio));
lots2:=intpart((mycash*riskratio/100)/(atr*multiplier));
lots:=max(1,min(lots1,lots2));
end

if lots>=1 then begin
buy(1,lots,limitr,price);
times:=1;
end
end

if holding>0 then begin
while high>=enterprice+atr/2 and times<4 do begin
price:=max(open,enterprice+atr/2);
lots:=0;

if price>0 then begin
   mycash:=cash(0);
   
   lots1:=intpart(mycash/(price*multiplier*marginratio));
   lots2:=intpart((mycash*riskratio/100)/(atr*multiplier));
   lots:=max(1,min(lots1,lots2));
end

if lots>=1 then begin
   buy(1,lots,limitr,price);
   times:=times+1;
end
end
end

if holding=0 then begin
price:=0;
lots:=0;

if entryshortcond then
price:=min(open,entrylowerband);

if price>0 then begin
mycash:=cash(0);

lots1:=intpart(mycash/(price*multiplier*marginratio));
lots2:=intpart((mycash*riskratio/100)/(atr*multiplier));
lots:=max(1,min(lots1,lots2));
end

if lots>=1 then begin
buyshort(1,lots,limitr,price);
times:=1;
end
end

if holding<0 then begin
while low<=enterprice-atr/2 and times<4 do begin
price:=min(open,enterprice-atr/2);
lots:=0;

if price>0 then begin
   mycash:=cash(0);
   
   lots1:=intpart(mycash/(price*multiplier*marginratio));
   lots2:=intpart((mycash*riskratio/100)/(atr*multiplier));
   lots:=max(1,min(lots1,lots2));
end

if lots>=1 then begin
   buyshort(1,lots,limitr,price);
   times:=times+1;
end
end
end

if holding>0 then begin
price:=0;

if exitlongcond then
price:=min(open,exitlowerband);

if low<=enterprice-2*atr and enterbars>=1 then
price:=min(open,enterprice-2*atr);

if price>0 then
sell(1,holding,limitr,price);
end

if holding<0 then begin
price:=0;

if exitshortcond then
price:=max(open,exitupperband);

if high>=enterprice+2*atr and enterbars>=1 then
price:=max(open,enterprice+2*atr);

if price>0 then
sellshort(1,holding,limitr,price);
end

盈亏:asset-500000,noaxis,colorred,linethick2;

////////////////////////////////////////////////////////////////

金字塔客服 发表于 2011-12-9 16:31:54

本帖最后由 金字塔客服 于 2011-12-9 17:05 编辑

抛物线转向系统
/////////////////////////////////////////////////////////////////////
runmode:0;

input:p(120);
input:n(120);
input:s(2);
input:m(20);

myma:=ma(open,p);
mysar:=sar(n,s,m);

entrylongcond:=open>myma and high>=mysar;
exitlongcond:=low<=mysar;

entryshortcond:=openexitshortcond:=high>=mysar;

if holding=0 then begin
if entrylongcond then
buy(1,1,limitr,max(open,mysar));

if entryshortcond then
buyshort(1,1,limitr,min(open,mysar));
end

if holding>0 then begin
if exitlongcond then
sell(1,holding,limitr,min(open,mysar));
end

if holding<0 then begin
if exitshortcond then
sellshort(1,holding,limitr,max(open,mysar));
end

盈亏:asset-500000,noaxis,coloryellow,linethick2;
/////////////////////////////////////////////////////////////////////

金字塔客服 发表于 2011-12-9 17:06:51

小时交易法
///////////////////////////////////////////////

runmode:0;
dayopen:=callstock(stklabel,vtopen,6,0);
entrylongcond:=open>dayopen;
entryshortcond:=open<dayopen;
if holding=0 then begin
if entrylongcond then
buy(1,1,limitr,open);

if entryshortcond then
buyshort(1,1,limitr,open);
end
if holding>0 then begin
sell(1,holding,limitr,close);
end
if holding<0 then begin
sellshort(1,holding,limitr,close);
end
盈亏:asset-500000,noaxis,coloryellow,linethick2;
//////////////////////////////////////////////

金字塔客服 发表于 2011-12-9 17:15:54

本帖最后由 金字塔客服 于 2011-12-9 17:16 编辑

[技术指标]时空线
////////////////////////////////////////////////////////////////////////

runmode:0;
predayhigh:=callstock(stklabel,vthigh,6,-1);
predaylow:=callstock(stklabel,vtlow,6,-1);
dayopen:=callstock(stklabel,vtopen,6,0);
dist:=barslast(date>ref(date,1))+1;
highest:=ref(hhv(high,dist),1);
lowest:=ref(llv(low,dist),1);
昨高:predayhigh,linethick2;
昨低:predaylow,linethick2;
今开:dayopen,linethick2;
最高:highest,linethick2;
最低:lowest,linethick2;
9点:vertline(time=090500);
9点30分:vertline(time=093500);
10点:vertline(time=103500);
10点15分:vertline(time=101500);
10点30分:vertline(time=103500);
11点:vertline(time=110500);
11点30分:vertline(time=113000);
13点30分:vertline(time=133500);
14点:vertline(time=140500);
14点30分:vertline(time=143500);
15点:vertline(time=150000);

////////////////////////////////////////////////////////////////////////


金字塔客服 发表于 2011-12-9 17:18:42

[技术指标]阻力支撑
/////////////////////////////////////////////////////

runmode:0;
涨停:dynainfo(54);
跌停:dynainfo(55);
昨结:dynainfo(62),linethick2;
开盘:dynainfo(4),linethick4;
阻力1:昨结+trimprice((涨停-昨结)*1/5);
阻力2:昨结+trimprice((涨停-昨结)*2/5);
阻力3:昨结+trimprice((涨停-昨结)*3/5);
阻力4:昨结+trimprice((涨停-昨结)*4/5);
支撑1:昨结-trimprice((昨结-跌停)*1/5);
支撑2:昨结-trimprice((昨结-跌停)*2/5);
支撑3:昨结-trimprice((昨结-跌停)*3/5);
支撑4:昨结-trimprice((昨结-跌停)*4/5);

////////////////////////////////////////////////////

金字塔客服 发表于 2011-12-9 17:21:18

动态突破系统


////////////////////////////////////////////////////////////////
runmode:0;
input:ceilingamt(60),flooramt(20),bolbandtrig(2);
variable:lookbackdays=20;
todayvolatility:=std(close,30);
yesterdayvolatility:=std(ref(close,1),30);
deltavolatility:=(todayvolatility-yesterdayvolatility)/todayvolatility;
lookbackdays:=lookbackdays*(1+deltavolatility);
lookbackdays:=round(lookbackdays);
lookbackdays:=min(lookbackdays,ceilingamt);
lookbackdays:=max(lookbackdays,flooramt);
mid:=ma(close,lookbackdays);
upband:=mid+bolbandtrig*std(close,lookbackdays);
dnband:=mid-bolbandtrig*std(close,lookbackdays);
buypoint:=ref(hhv(high,lookbackdays),1);
sellpoint:=ref(llv(low,lookbackdays),1);
longliqpoint:=ma(close,lookbackdays);
shortliqpoint:=ma(close,lookbackdays);
if holding=0 then begin
if close>upband then
buy(1,1,limitr,max(open,buypoint));
end
if holding=0 then begin
if close<dnband then
buyshort(1,1,limitr,min(open,sellpoint));
end
if holding>0 then begin
if close<dnband then begin
sell(1,holding,limitr,min(open,sellpoint));
buyshort(1,1,limitr,min(open,sellpoint));
end

if low<=longliqpoint then
sell(1,holding,limitr,min(open,longliqpoint));
end
if holding<0 then begin
if close>upband then begin
sellshort(1,holding,limitr,max(open,buypoint));
buy(1,1,limitr,max(open,buypoint));
end

if high>=shortliqpoint then
sellshort(1,holding,limitr,max(open,shortliqpoint));
end
盈亏:asset-50000,noaxis,colorred,linethick2;
//////////////////////////////////////////////////////////////

金字塔客服 发表于 2011-12-9 17:22:51

恒温器系统

////////////////////////////////////////////
runmode:0;
input:bollingerlengths(50);
input:trendliqlength(50);
input:numstddevs(2);
input:swingprcnt1(0.5);
input:swingprcnt2(0.75);
input:atrlength(10);
input:swingtrendswitch(20);
variable:swing=false;
cmival:=abs(close-ref(close,30))/(hhv(high,30),1)-llv(low,30);
buyeasierday:=0;
selleasierday:=0;
trendlokbuy:=ma(low,3);
trendloksell:=ma(high,3);
keyofday:=(high+low+close)/3;
if close>keyofday then
selleasierday:=1;
else
buyeasierday:=1;

atr:=ma(tr,atrlength);
if ref(buyeasierday,1)=1 then begin
swingbuypt:=open+swingprcnt1*atr;
swingsellpt:=open-swingprcnt2*atr;
end
if ref(selleasierday,1)=1 then begin
swingbuypt:=open+swingprcnt2*atr;
swingsellpt:=open-swingprcnt1*atr;
end
swingbuypt:=max(swingbuypt,trendlokbuy);
swingsellpt:=min(swingsellpt,trendloksell);
ma1:=ma(close,trendliqlength);
mid:=ma(close,bollingerlengths);
trendbuypt:=mid+numstddevs*std(close,bollingerlengths);
trendsellpt:=mid-numstddevs*std(close,bollingerlengths);
if cmival<swingtrendswitch then begin
if holding=0 then begin
if high>=swingbuypt then begin
   buy(1,1,limitr,max(open,swingbuypt));
   swing:=true;
end
end

if holding=0 then begin
if low<=swingsellpt then begin
   buyshort(1,1,limitr,min(open,swingsellpt));
   swing:=true;
end
end

if holding>0 then begin
if low<=swingsellpt then begin
   sell(1,holding,limitr,min(open,swingsellpt));
   buyshort(1,1,limitr,min(open,swingsellpt));
   swing:=true;
end
end

if holding<0 then begin
if high>=swingbuypt then begin
   sellshort(1,holding,limitr,max(open,swingbuypt));
   buy(1,1,limitr,max(open,swingbuypt));
   swing:=true;
end
end
end else begin
swingprotstop:=3*atr;

if holding=0 then begin
if high>=trendbuypt then begin
   buy(1,1,limitr,max(open,trendbuypt));
   swing:=false;
end
end

if holding=0 then begin
if low<=trendsellpt then begin
   buyshort(1,1,limitr,min(open,trendsellpt));
   swing:=false;
end
end

if holding>0 then begin
if swing then begin
   if low<=enterprice-swingprotstop then
    sell(1,holding,limitr,min(open,enterprice-swingprotstop));
end else begin
   if low<=ma1 then
    sell(1,holding,limitr,min(open,ma1));
end
end

if holding<0 then begin
if swing then begin
   if high>=enterprice+swingprotstop then
    sellshort(1,holding,limitr,max(open,enterprice+swingprotstop));
end else begin
   if high>=ma1 then
    sellshort(1,holding,limitr,max(open,ma1));
end
end
end
盈亏:asset-50000,noaxis,colorred,linethick2;

///////////////////////////////////////////

金字塔客服 发表于 2011-12-9 17:24:22

R-Breaker

/////////////////////////////////////////////////
runmode:0;
input:notbef(090000);
input:notaft(145500);
input:f1(0.35);
input:f2(0.07);
input:f3(0.25);
input:myreverse(1);
input:rangemin(0.2);
input:xdiv(3);
variable:ssetup=0;
variable:bsetup=0;
variable:senter=0;
variable:benter=0;
variable:bbreak=0;
variable:sbreak=0;
variable:ltoday=0;
variable:hitoday=999999;
variable:startnow=0;
variable:div=0;
variable:rfilter=false;
i_reverse:=myreverse*(callstock(stklabel,vtopen,6,0)/100);
i_rangemin:=rangemin*(callstock(stklabel,vtopen,6,0)/100);
if barpos=1 then begin
startnow:=0;
div:=max(xdiv,1);
end
hh:=ref(hitoday,1);
cc:=ref(close,1);
ll:=ref(ltoday,1);
if date>ref(date,1) then begin
startnow:=startnow+1;

ssetup:=hh+f1*(cc-ll);
senter:=((1+f2)/2)*(hh+cc)-f2*ll;
benter:=((1+f2)/2)*(ll+cc)-f2*hh;
bsetup:=ll-f1*(hh-cc);
bbreak:=ssetup+f3*(ssetup-bsetup);
sbreak:=bsetup-f3*(ssetup-bsetup);

hitoday:=high;
ltoday:=low;

rfilter:=hh-cc>=rangemin;
end
if high>hitoday then hitoday:=high;
if low<ltoday then ltoday:=low;
if time>=notbef and time<notaft and startnow>=2 and rfilter then begin
if hitoday>=ssetup and holding>=0 then begin
if low<=senter+(hitoday-ssetup)/div then begin
   sell(1,holding,limitr,senter+(hitoday-ssetup)/div);
   sellshort(1,1,limitr,senter+(hitoday-ssetup)/div);
end
end

if ltoday<=bsetup and holding<=0 then begin
if high>=benter-(bsetup-ltoday)/div then begin
   if high>=benter-(bsetup-ltoday)/div then begin
    sellshort(1,holding,limitr,benter-(bsetup-ltoday)/div);
    buy(1,1,limitr,benter-(bsetup-ltoday)/div);
   end
end
end

if holding<0 then begin
if high-enterprice>=i_reverse then
   sellshort(1,enterprice+i_reverse);
end

if holding>0 then begin
if enterprice-low>=i_reverse then
   sell(1,enterprice-i_reverse);
end

if holding=0 then begin
if high>=bbreak then
   buy(1,bbreak);
end

if holding=0 then begin
if low<=sbreak then
   sellshort(1,sbreak);
end
end
if time>=notaft then begin
if holding<0 then
sellshort(1,holding,limitr,open);

if holding>0 then
sell(1,holding,limitr,open);
end
盈亏:asset-500000,noaxis,coloryellow,linethick2;


////////////////////////////////////////////////
页: [1] 2 3 4
查看完整版本: 基于 金字塔平台 编写的一些经典交易系统案例