奇狐社區論壇
在這個頁面顯示本主題全部的 15 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- 新建交易公式後不斷出現買入或賣出箭頭 [訊號過濾] (http://www.chiefox.com.tw/bbs/showthread.php?threadid=14148)


由 09033015 在 2010-08-18 12:16 發表:

新建交易公式後不斷出現買入或賣出箭頭

1.新建交易公式後,不斷出現買入或賣出箭頭如何消除第1支以後相同的買賣箭頭?請示版主,感謝.

__________________


由 cgjj 在 2010-08-18 13:35 發表:

回覆: 新建交易公式後不斷出現買入或賣出箭頭

引用:
最初由 09033015 發表
1.新建交易公式後,不斷出現買入或賣出箭頭如何消除第1支以後相同的買賣箭頭?請示版主,感謝.


// BB 是買訊 SS 是賣訊 處理範例如下:
// 關鍵字: 訊號過濾, 過濾訊號

BB:=BB or barpos=0;
SS:=SS or barpos=0;
CK:=BB-SS;
CK:=ref(CK,barslast(CK<>0));
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);
ENTERLONG:CK=1;
EXITLONG:CK=-1;


由 soromance 在 2010-08-18 22:39 發表:

回覆: 回覆: 新建交易公式後不斷出現買入或賣出箭頭

引用:
最初由 cgjj 發表
// BB 是買訊 SS 是賣訊 處理範例如下:
// 關鍵字: 訊號過濾, 過濾訊號

BB:=BB or barpos=0;
SS:=SS or barpos=0;
CK:=BB-SS;
CK:=ref(CK,barslast(CK<>0));
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);
ENTERLONG:CK=1;
EXITLONG:CK=-1;



BB:=BB or barpos=0;
SS:=SS or barpos=0;
....
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);

大大,不好意思,上面這三行可以說明一下嗎?
因為看不太懂意思.. (尤其是barpos=lbound(CK)這一段)
謝謝您.


由 soromance 在 2010-08-18 23:13 發表:

回覆: 回覆: 新建交易公式後不斷出現買入或賣出箭頭

引用:
最初由 cgjj 發表
// BB 是買訊 SS 是賣訊 處理範例如下:
// 關鍵字: 訊號過濾

BB:=BB or barpos=0;
SS:=SS or barpos=0;
CK:=BB-SS;
CK:=ref(CK,barslast(CK<>0));
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);
ENTERLONG:CK=1;
EXITLONG:CK=-1;



BB:=BB or barpos=0;
SS:=SS or barpos=0;
....
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);

大大,不好意思,上面這三行可以說明一下嗎?
因為看不太懂意思.. (尤其是barpos=lbound(CK)這一段)
謝謝您.


由 cgjj 在 2010-08-19 11:21 發表:

回覆: 回覆: 回覆: 新建交易公式後不斷出現買入或賣出箭頭

引用:
最初由 soromance 發表
BB:=BB or barpos=0;
SS:=SS or barpos=0;
....
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);

大大,不好意思,上面這三行可以說明一下嗎?
因為看不太懂意思.. (尤其是barpos=lbound(CK)這一段)
謝謝您.



BB 和 SS 數據有效起始點不同, 故需要先用 or barpos=0 處理過
讓兩者數據有效起始點一樣

barpos=1 代表計算的K棒是歷史首根
barpos=2 代表計算的K棒是歷史第二根

barpos=0 這情況是永不發生的

or barpos=0 是一種取巧的寫法
有時數列有效起始位置, 未必等於1 (歷史首根)
可能會是自第n根開始才有效
例如: MA(C,5) 是自第五根起才有效

or barpos=0 會讓無效的部份填零
經過 or barpos=0 數列起點就會變為自1 開始(歷史首根)

此種取巧寫法
僅適用於數列中僅有 0 與 1 兩種值的情況下


由 cgjj 在 2010-08-19 11:22 發表:

CK:=BB-SS;
//將 BB 與 SS 訊號共同整合在 CK 之中 (買為1, 賣為-1)

CK:=ref(CK,barslast(CK<>0));
//若當根無買賣訊, 則延續最近之前的買賣訊

CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);
//若當根訊號不等於前根訊號, 則保留當根訊號, 否則濾除

//上式其中的 or barpos=lbound(CK)
//是用於處理 CK 的首次訊號(該訊號無前根訊號可比較,故需留存)


由 soromance 在 2010-08-20 16:25 發表:

引用:
最初由 cgjj 發表
CK:=BB-SS;
//將 BB 與 SS 訊號共同整合在 CK 之中 (買為1, 賣為-1)

CK:=ref(CK,barslast(CK<>0));
//若當根無買賣訊, 則延續最近之前的買賣訊

CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);
//若當根訊號不等於前根訊號, 則保留當根訊號, 否則濾除

//上式其中的 or barpos=lbound(CK)
//是用於處理 CK 的首次訊號(該訊號無前根訊號可比較,故需留存)



1) BB:=BB or barpos=0 會讓無效的部份填零

指的是假設MA(C,5)第五根才生效,那barpos一到八根的順序就就是0,0,0,0,1,2,3,4….. 請問是這樣的邏輯嗎?
另外有一點不太明瞭的是,BB:=BB所代表的是BB要得到一個「數值」,但後面加上or barpos= 0,會有任何的「數值」傳回給BB嗎?
還是我的思考有問題?

2) or barpos=lbound(CK)

當CK首次訊號出現時,barpos這時的值是1嗎?
那… lbound(CK)傳回的不是0嗎?
看來我的邏輯又不對了…?


由 cgjj 在 2010-08-20 19:00 發表:

引用:
最初由 soromance 發表
1) BB:=BB or barpos=0 會讓無效的部份填零

指的是假設MA(C,5)第五根才生效,那barpos一到八根的順序就就是0,0,0,0,1,2,3,4….. 請問是這樣的邏輯嗎?
另外有一點不太明瞭的是,BB:=BB所代表的是BB要得到一個「數值」,但後面加上or barpos= 0,會有任何的「數值」傳回給BB嗎?
還是我的思考有問題?

2) or barpos=lbound(CK)

當CK首次訊號出現時,barpos這時的值是1嗎?
那… lbound(CK)傳回的不是0嗎?
看來我的邏輯又不對了…?



不是的
前面已說 or barpos= 0 這方法僅適用於數列中僅有 0 與 1 兩種值的情況下

先單獨去跑這行看結果(看歷史頭端)
CROSS(MA(C,5),MA(C,10));

再單獨去跑這行看結果(看歷史頭端)
CROSS(MA(C,5),MA(C,10)) or barpos=0;

比較一下兩者差別在那, 就較能了解

CK 首次訊號出現的位置, 未必是在K棒歷史首根
barpos 值代表第n根K棒(其為數列)
故 barpos = 1 是代表K棒歷史首根
barpos = 1 不是代表( CK 首次成立 或 CK數列起始有效位置)
lbound(CK) 才是代表 CK數列起始有效位置
barpos=lbound(CK) 是代表 K棒編號=CK數列起始有效位置


由 soromance 在 2010-08-22 23:30 發表:

引用:
最初由 cgjj 發表
不是的
前面已說 or barpos= 0 這方法僅適用於數列中僅有 0 與 1 兩種值的情況下

先單獨去跑這行看結果(看歷史頭端)
CROSS(MA(C,5),MA(C,10));

再單獨去跑這行看結果(看歷史頭端)
CROSS(MA(C,5),MA(C,10)) or barpos=0;

比較一下兩者差別在那, 就較能了解

CK 首次訊號出現的位置, 未必是在K棒歷史首根
barpos 值代表第n根K棒(其為數列)
故 barpos = 1 是代表K棒歷史首根
barpos = 1 不是代表( CK 首次成立 或 CK數列起始有效位置)
lbound(CK) 才是代表 CK數列起始有效位置
barpos=lbound(CK) 是代表 K棒編號=CK數列起始有效位置



Hi 大大您好:

經過您的詳細解說,我已大致瞭解 or barpos=0的用法了。再次謝謝您的耐心教導。但仍有小小的問題想不通...

barpos=lbound(CK) 是代表 K棒編號=CK數列起始有效位置

也就是說,如果我在第200根的K線出現第一根CK訊號,那barpos=200。 但是,關於Lbound(CK),經過我的測試,lbound(CK)傳回值永遠是1耶... 那barpos=lbound(CK)就不會成立了...

請問lbound(CK)傳回的值是下標,下標的意義不是很明瞭? CK的下標是1嗎?

不好意思,再次麻煩您了..


由 cgjj 在 2010-08-23 08:28 發表:

引用:
最初由 soromance 發表
Hi 大大您好:

經過您的詳細解說,我已大致瞭解 or barpos=0的用法了。再次謝謝您的耐心教導。但仍有小小的問題想不通...

barpos=lbound(CK) 是代表 K棒編號=CK數列起始有效位置

也就是說,如果我在第200根的K線出現第一根CK訊號,那barpos=200。 但是,關於Lbound(CK),經過我的測試,lbound(CK)傳回值永遠是1耶... 那barpos=lbound(CK)就不會成立了...

請問lbound(CK)傳回的值是下標,下標的意義不是很明瞭? CK的下標是1嗎?

不好意思,再次麻煩您了..



正常的
不成立 或 值 為零, 仍是有效的唷, 並非是無效
CK:MA(C,5); 的 Lbound(CK)=5
其第一到四根屬無效, 自第五根開始有效
下標是指數列有效起始位置(亦稱下界)


由 soromance 在 2010-08-23 22:06 發表:

引用:
最初由 cgjj 發表
正常的
不成立 或 值 為零, 仍是有效的唷, 並非是無效
CK:MA(C,5); 的 Lbound(CK)=5
其第一到四根屬無效, 自第五根開始有效
下標是指數列有效起始位置(亦稱下借)




CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);

嗯.. 瞭解lbound下界的意義了,謝謝您!
但如前面例子,如果在第200根出現第一根有效CK,

a. CK<>ref(CK,1),因為是第一個CK有效位置,所以此式無效。
b. 此時,barpos=200
c. lbound(CK),不管我怎麼測試,從第一根K棒開始,傳回值都是1.
d. 那barpos (值為200) = lbound(CK) (值為1),那此式也不成立
e. 那表示,CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0); 這個if條件式就須傳回不成立的值,也就是傳回0。那... 第一根CK還是不會出現...

我應該有死角沒有貫通,可請板大指點?
謝謝您..


由 cgjj 在 2010-08-24 10:10 發表:

引用:
最初由 soromance 發表
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);

嗯.. 瞭解lbound下界的意義了,謝謝您!
但如前面例子,如果在第200根出現第一根有效CK,

a. CK<>ref(CK,1),因為是第一個CK有效位置,所以此式無效。
b. 此時,barpos=200
c. lbound(CK),不管我怎麼測試,從第一根K棒開始,傳回值都是1.
d. 那barpos (值為200) = lbound(CK) (值為1),那此式也不成立
e. 那表示,CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0); 這個if條件式就須傳回不成立的值,也就是傳回0。那... 第一根CK還是不會出現...

我應該有死角沒有貫通,可請板大指點?
謝謝您..



去體驗一下, 下面這例子(各自跑結果)
去觀看歷史的頭30根K棒中的訊號, 就可發覺差異點


原始訊號
MC:ma(c,10);
//模擬1買1賣組合
BB:=MC and mod(barpos,10)=0;
SS:=MC and mod(barpos,10)=6;
//顯示訊號
VERTLINE(BB) linedot colorred;
VERTLINE(SS) linedot colorgreen;

整合訊號(正常, 與前者完全一致)
MC:ma(c,10);
BB:=MC and mod(barpos,10)=0;
SS:=MC and mod(barpos,10)=6;
CK:=BB-SS;
CK:=ref(CK,barslast(CK<>0));
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);
BB:=CK=1;
SS:=CK=-1;
VERTLINE(BB) linedot colorred;
VERTLINE(SS) linedot colorgreen;

整合訊號( 不正常,少了首次的訊號)
MC:ma(c,10);
BB:=MC and mod(barpos,10)=0;
SS:=MC and mod(barpos,10)=6;
CK:=BB-SS;
CK:=ref(CK,barslast(CK<>0));
CK:=if(CK<>ref(CK,1),CK,0);
BB:=CK=1;
SS:=CK=-1;
VERTLINE(BB) linedot colorred;
VERTLINE(SS) linedot colorgreen;

不正常的, 少了 barpos=lbound(CK) 在式子中
barpos=lbound(CK) 用於處理在數列第一個有效位置上的訊號


由 cgjj 在 2010-08-24 10:20 發表:

在這兩行之間
CK:=ref(CK,barslast(CK<>0));
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);

插入lbound(CK) ,才能正確看到未處理前的原始起點
CK:=ref(CK,barslast(CK<>0));
起點:lbound(CK) linethick;
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);

若加在此行之後, 就看不到原始起點, 而是處理後的
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);
起點:lbound(CK) linethick;

寫程式要清楚知道每一行跑後所帶來的結果
否則易陷入迷思當中
感覺迷惑時, 就一行接續一行去看結果, 自然就會理的清楚


由 soromance 在 2010-08-24 23:17 發表:

引用:
最初由 cgjj 發表
在這兩行之間
CK:=ref(CK,barslast(CK<>0));
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);

插入lbound(CK) ,才能正確看到未處理前的原始起點
CK:=ref(CK,barslast(CK<>0));
起點:lbound(CK) linethick;
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);

若加在此行之後, 就看不到原始起點, 而是處理後的
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);
起點:lbound(CK) linethick;

寫程式要清楚知道每一行跑後所帶來的結果
否則易陷入迷思當中
感覺迷惑時, 就一行接續一行去看結果, 自然就會理的清楚



Hi 板大:

經過不斷的測試及模擬,愚笨的我終於完全瞭解了!
VB的邏輯真的是不簡單,我這種門外漢真的要下很多功夫來學習。
真的是非常非非常的感謝您的耐心解說。
再次謝謝您!

Soro


由 cgjj 在 2010-08-25 18:36 發表:

引用:
最初由 soromance 發表
Hi 板大:

經過不斷的測試及模擬,愚笨的我終於完全瞭解了!
VB的邏輯真的是不簡單,我這種門外漢真的要下很多功夫來學習。
真的是非常非非常的感謝您的耐心解說。
再次謝謝您!

Soro



不用客氣唷, 謝謝!


全部時間均為台灣時間, 現在時間為21:02
在這個頁面顯示本主題全部的 15 個文章


Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.