 |
joanne115244
資深會員

註冊日期: Mar 2004
來 自: 台灣
文章數量: 121 |
[求助]請教版主以及各位前輩有關指標編寫問題
以下指標內容運行在五分線系統
請教老師該如何讓績效統計以當天為主(不連續)
也就是說每天開盤後不與昨日相比只是新數據開始
收盤價不論多空一律平倉,如此累計....
以及如何統計前一季的績效數值
謝謝
/////////////////////////
NPOS2:=C>ref(C,1) and C>=refx(C,1) or C<ref(C,1) and C<=refx(C,1);
轉折點:REF(C,BARSLAST(NPOS2)) LINETHICK0;
partline(C>REF(C,1),C),colorred,linedot;
partline(C<REF(C,1),C),colorgreen,linedot;
partline(C=REF(C,1) AND REF(C,1)>REF(C,2),C),colorred,linedot;
partline(C=REF(C,1) AND REF(C,1)<REF(C,2),C),colorgreen,linedot;
MH:REF(C,BARSLAST(C>ref(C,1) and C>=refx(C,1))) LINETHICK0;
ML:REF(C,BARSLAST(C<ref(C,1) and C<=refx(C,1))) LINETHICK0;
DRAWNUMBER((C>ref(C,1) and C>=refx(C,1)),C,C,0),colorred,pxup20;
DRAWNUMBER((C<ref(C,1) and C<=refx(C,1)),C,C,0),colorgreen,pxdn18;
tjb:=CROSS(C,REF(MH,1)) AND NOT(C=REF(C,1));
tjs:=CROSS(REF(ML,1),C) AND NOT(C=REF(C,1));
tsb:=barssince(tjb);
tss:=barssince(tjs);
if tjs[datacount]<tjb[datacount] then begin
a:=setlbound(tjs,1);
tjs:=tjs or barpos=1;
end;
tjbuy:=count(tjb,barslast(tjs))=1 and tjb;
tjsell:=count(tjs,barslast(tjb))=1 and tjs;
DRAWICON(tjbuy,L,8),ALIGN5;
DRAWICON(tjsell,H,9),ALIGN4;
DRAWNUMBER(tjbuy,L,C,0),colorred,ALIGN5,SHIFT1;
DRAWNUMBER(tjsell,H,C,0),colorgreen,ALIGN4,SHIFT1;
input:買賣點(1,1,2),K棒數(5500,0,999999),M(1,0,1),多空(1,1,2);收:=close,linethick0;
BB1:=tjbuy;
SS1:=tjsell;
BB:=BB1 {+BB2+BB3+..}; //總結買入條件,條件個數可以隨意添加
SS:=SS1 {+SS2+SS3+..}; //總結賣出條件
最大K數:=if(K棒數>datacount,datacount,K棒數),linethick0;
vertline(barpos=datacount-最大K數+1),pointdot,colorwhite;
//explain(islastbar,'買賣基準點選擇請更改參數:\n1 當天收盤 2 盤中轉折'),coloryellow;
tjb1:=BB;
tjs1:=SS;
variable:b=0;
tjb:=0*close;
tjs:=tjb;
for i=max(lbound(tjb1),lbound(tjs1)) to datacount do begin
if b=0 and tjb1[i] then begin
b:=1; tjb[i]:=1;
end else
if b=1 and tjs1[i] then begin
b:=0; tjs[i]:=1;
end;
end;
tsb:=barslast(ref(tjb,1));
紅:=if(買賣點=1,if(tjb,C,0),if(ref(tjb,1),ref(OPEN,tsb),0));
tss:=barslast(ref(tjs,1));
綠:=if(買賣點=1,if(tjs,C,0),if(ref(tjs,1),ref(OPEN,tss),0));
B:=tjb AND COUNT(tjb,BARSLAST(BARPOS=DATACOUNT-最大K數+1)+1)=1;
初紅:=barssince(B)+1; //定位指定K線數中合乎買入條件之第一筆資料
S:=tjs AND COUNT(tjs,BARSLAST(BARPOS=DATACOUNT-最大K數+1)+1)=1;
初綠:=barssince(S)+1;
紅數:=count(紅<>0,最大K數);
綠數:=count(綠<>0,最大K數);
末紅:=barslast(紅<>0);
末綠:=barslast(綠<>0);
s1:=sum(紅,最大K數); //自表頭開始符合買多條件之收盤價總和
s2:=sum(綠,最大K數); //自表頭開始符合買空條件之收盤價總和
MM:=if(買賣點=1,CLOSE,OPEN);
s5:=ref(C,初紅-1);
s6:=ref(C,初綠-1);
s7:=ref(MM,末紅);
s8:=ref(MM,末綠);
a11:=if(ISLASTBAR,c,0),LINETHICK0;
a12:=ref(c,BARSLAST(紅<>0)),LINETHICK0;
a13:=ref(c,BARSLAST(綠<>0)),LINETHICK0;
未實現利益:=if(多空=1,a11-a12,if(多空=2,a13-a11,0));
作多回數:=if((紅數=綠數 and 初紅>初綠) or (紅數<>綠數 and 初紅<初綠),紅數,紅數-1);
作空回數:=if((紅數=綠數 and 初紅>初綠) or (紅數<>綠數 and 初紅<初綠),綠數-1,綠數);
總交易回數:作多回數+作空回數,linethick0;
買多:=if((紅數=綠數 and 初紅>初綠) or (紅數<>綠數 and 初紅<初綠),s1,s1-s7);
多平:=if((紅數=綠數 and 初紅>初綠) or (紅數<>綠數 and 初紅>初綠) ,s2,s2-s6);
買空:=if((紅數=綠數 and 初紅>初綠) or (紅數<>綠數 and 初紅<初綠) ,s2-s8,s2);
空平:=if((紅數=綠數 and 初紅<初綠) or (紅數<>綠數 and 初紅<初綠) ,s1,s1-s5);
作多盈虧:=多平-買多;
作空盈虧:=買空-空平;
總盈虧:=作多盈虧+作空盈虧;
交易數:=總交易回數,linethick0,colorcyan;
多盈:=作多盈虧,linethick0,colorwhite;
空盈:=作空盈虧,linethick0,colormagenta;
總盈虧:總盈虧,linethick0;
explain(islastbar,'\n買訊: '+numtostr(紅數,0)+' 回');
explain(islastbar,'賣訊: '+numtostr(綠數,0)+' 回');
explain(islastbar,'總交易回數: '+numtostr(總交易回數,0)+' 回'),color006633;
explain(islastbar,'作多回數: '+numtostr(作多回數,0)+' 回'),colormagenta;
explain(islastbar,'作多盈虧: '+numtostr(作多盈虧,0)+' 點'),colorred;
explain(islastbar,'作空回數: '+numtostr(作空回數,0)+' 回'),colorcyan;
explain(islastbar,'作空盈虧: '+numtostr(作空盈虧,0)+' 點'),colorred;
explain(islastbar,'\n作多總交易: '+numtostr(買多,0)+' 點'),colormagenta;
explain(islastbar,'多平總交易: '+numtostr(多平,0)+' 點'),colorcyan;
explain(islastbar,'作空總交易: '+numtostr(買空,0)+' 點'),colormagenta;
explain(islastbar,'空平總交易: '+numtostr(空平,0)+' 點'),colorcyan;
explain(islastbar,'\n總結盈虧: '+numtostr(總盈虧,0)+' 點'),colorwhite;
explain(islastbar,'未實現利益: '+numtostr(未實現利益,0)+' 點'),colormagenta;
NN:=if(datatype=6,5,if(datatype=5,25,if(datatype=4,50,if(datatype=3,100,if(datatype=2,300,1500)))));
週數:if(最大K數/NN>1,最大K數/NN,1),linethick0;
explain(islastbar,'統計週數: '+numtostr(週數,0)+' 週');
explain(islastbar,'平均週獲利: '+numtostr(總盈虧/週數,2)+' 點'),colorred;
週均利:總盈虧/週數,linethick0,colorred;
|
|
向版主報告此篇 |  |
|
2007-10-08 13:33 |
|
|
|  |
 |
ifuian
資深會員

註冊日期: May 2004
來 自: 台灣
文章數量: 558 |
請問版主們有解嗎?
因為我也想了解看看!
謝謝~
__________________
人外有人 天外有天 不懼不貪 亦富亦安
|
|
向版主報告此篇 |  |
|
2007-10-10 10:17 |
|
|
|  |
 |
kkkkkk
資深會員
註冊日期: Dec 2003
來 自:
文章數量: 291 |
你這個交易系統是按照買進或賣出的條件一次進一次出對應的吧?到收盤不管多空一律平倉,也應該是前面尚留有單才能平倉,在這樣假設的條件下,第一步應該試算出自開盤開始買賣信號的對應問題,就如你例子中是從開市第一筆符合條件起算,現在則是要從開盤第一筆符合買賣條件起算,加上收盤時是否必需多加一筆不一定符合買賣條件的出倉單,我這樣的了解不知道對不對?
基於我自己的了解,對於買賣的對應寫出以下程式,你先看看
w:=barslast(date<>ref(date,1) or barpos=1),linethick0;
vertline(date<>ref(date,1) or barpos=1),pointdot; //驗證用,可略
NPOS2:=C>ref(C,1) and C>=refx(C,1) or C<ref(C,1) and C<=refx(C,1);
轉折點:REF(C,BARSLAST(NPOS2)) LINETHICK0;
partline(C>REF(C,1),C),colorred,linedot;
partline(C<REF(C,1),C),colorgreen,linedot;
partline(C=REF(C,1) AND REF(C,1)>REF(C,2),C),colorred,linedot;
partline(C=REF(C,1) AND REF(C,1)<REF(C,2),C),colorgreen,linedot;
MH:REF(C,BARSLAST(C>ref(C,1) and C>=refx(C,1))) LINETHICK0;
ML:REF(C,BARSLAST(C<ref(C,1) and C<=refx(C,1))) LINETHICK0;
//DRAWNUMBER((C>ref(C,1) and C>=refx(C,1)),C,C,0),colorred,pxup20;
//DRAWNUMBER((C<ref(C,1) and C<=refx(C,1)),C,C,0),colorgreen,pxdn18;
tjb:=CROSS(C,REF(MH,1)) AND NOT(C=REF(C,1)),linethick0; //買訊
tjs:=CROSS(REF(ML,1),C) AND NOT(C=REF(C,1)),linethick0; //賣訊
stickline(tjb,h*1.005,L*0.995,1,0),colorred,pointdot; //驗證用,可略
stickline(tjs,h*1.005,L*0.995,1,0),colorgreen,pointdot; //驗證用,可略
bb:=barslast(tjb),linethick0; bs:=barslast(tjs),linethick0;
x:=count(tjb or tjs,w+1)=1; xx:=x=1 and ref(x,1)=0,linethick0; //開盤後第一筆符合多空的信號
tjbb:=tjb and ((count(tjb,bs+1)=1 and bs<=w) or xx=1),linethick0; //賣訊之後第一個買訊
tjss:=tjs and ((count(tjs,bb+1)=1 and bb<=w) or xx=1),linethick0; //買訊之後第一個賣訊
cb:=count(tjbb,w+1),linethick0;
cs:=count(tjss,W+1),linethick0;
y:=if(w=59 and tjbb=0 and tjss=0 and cb>cs,1,if(w=59 and tjbb=0 and tjss=0 and cb<cs,2,0)),linethick0; //59為台灣期指5分線最後一根W,決定最後收盤前多空的回數差
//如果買數多於賣數設為1,如果買數少於賣數設為2,相等時設為0
drawicon(tjbb or y=2,L,10),align5; //買
drawicon(tjss or y=1,H,11),align4; //賣
|
最後由 kkkkkk 在 2007-10-11 08:20 編輯 |
向版主報告此篇 |  |
|
2007-10-11 04:36 |
|
|
|  |
 |
|  |
 |
kkkkkk
資深會員
註冊日期: Dec 2003
來 自:
文章數量: 291 |
回覆: 感謝指導
[QUOTE]最初由 joanne115244 發表
[B]
只有當日開盤後的第一個買賣訊號位置的取捨(如附圖一)
另外如果想改變連續性買賣訊號的習慣是否有辦法修改(如附圖二)
是否能請你更詳細說明一下條件要求? 改變開盤後第一個買賣訊號的意思是...落在開盤第一根K上的不取?還是不與昨日收盤單相同多空?或........?
至於連續習慣是不是說所有不是買賣訊號的副訊號皆列為加碼單?這樣子在統計的程式上勢非大大修改不可,因為會關係到手上多空單數目的問題,也會牽涉到留單的問題
當初我寫簡易指標測試系統時,只是一時感慨奇狐對於交易系統測試的不足,為了激勵奇狐也能儘快提供諸如其他軟體(如日盛HTS)等一般功能好一點的測試系統而起意玩一玩的,事後因未發現太多盲點而放棄
事實上,一個買賣訊號出現,或者不管其下來的市況如何就立即以市價買賣,或者以接下去K棒的狀況用下一根K與訊號關係點或開盤點等來作買賣的取捨,往往不能盡如人意像公式中所寫的統計點來交易,這也就產生狀況外訊號推移的問題,也同時造成統計上的誤差,這是我個人一點感想,關於這些點想來兄必然比我更了解
|
最後由 kkkkkk 在 2007-10-11 19:26 編輯 |
向版主報告此篇 |  |
|
2007-10-11 19:21 |
|
|
|  |
 |
kkkkkk
資深會員
註冊日期: Dec 2003
來 自:
文章數量: 291 |
x:=count(tjb or tjs,w)=1; xx:=x=1 and ref(x,1)=0 and w>0,linethick0; //開盤後第一筆符合多空的信號
|
|
向版主報告此篇 |  |
|
2007-10-11 23:55 |
|
|
|  |
本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。
|
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved. 聯絡我們
|