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

奇狐社區論壇 (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=9305)


由 soromance 在 2008-03-06 11:39 發表:

建倉條件與平倉條件式求助

版主大大:

假設我佈多的條件是A>0(長天期) 且 B>0(中天期) 且 C>0(短天期) 同時成立時才能佈多單,
但只有在B<0時才平倉,
中間有可能會經過(A>0, B>0,但C<0)的情況,但此時多單仍會持在手,因為B還是>0,
一直到B<0條件成立時才會進行平倉。

為了跟我後來的程式做連結,我必須在手上持有多單時一直把"Long"這個參數維持在1 (表示持倉狀態),
直到平倉時才把"Long"變為0。

也就是說,假設我寫:
Long_temp:=if(A>0 and B>0 and C>0, 1, 0);
Long:=if(B<0, 0, Long_temp);
會有造成建立多單之後,雖然未達到平倉條件,但因下一根K棒出現時,造成C<0讓建多倉條件失去,所以Long的倉位變成0。
但事實上因為我還沒有達到多單平倉的條件(B要<0),所以多單應該還在手,也就是Long應該還要維持在1。

我曾經試過下面的方法,不過好像有問題:
-----------------------------------------------------------------------------------------------------
做多倉位:= if(A>0 and B>0 and C>0, 1, 0);
平倉:= if(B<0, 1, 0);

做多倉位到目前週期數:= barslast(做多倉位);
做多平倉到目前週期數:= barslast(平倉);

Long:= if(做多倉位到目前週期數<做多平倉到目前週期數, 1, 0);
------------------------------------------------------------------------------------------------------

請問我在什麼地方的邏輯有錯誤呢? 還是版主大大有更好的程式寫作方式?
謝謝您!


由 cgjj 在 2008-03-06 11:50 發表:

回覆: 建倉條件與平倉條件式求助

引用:
最初由 soromance 發表
版主大大:

假設我佈多的條件是A>0(長天期) 且 B>0(中天期) 且 C>0(短天期) 同時成立時才能佈多單,
但只有在B<0時才平倉,
中間有可能會經過(A>0, B>0,但C<0)的情況,但此時多單仍會持在手,因為B還是>0,
一直到B<0條件成立時才會進行平倉。

為了跟我後來的程式做連結,我必須在手上持有多單時一直把"Long"這個參數維持在1 (表示持倉狀態),
直到平倉時才把"Long"變為0。

也就是說,假設我寫:
Long_temp:=if(A>0 and B>0 and C>0, 1, 0);
Long:=if(B<0, 0, Long_temp);
會有造成建立多單之後,雖然未達到平倉條件,但因下一根K棒出現時,造成C<0讓建多倉條件失去,所以Long的倉位變成0。
但事實上因為我還沒有達到多單平倉的條件(B要<0),所以多單應該還在手,也就是Long應該還要維持在1。

我曾經試過下面的方法,不過好像有問題:
-----------------------------------------------------------------------------------------------------
做多倉位:= if(A>0 and B>0 and C>0, 1, 0);
平倉:= if(B<0, 1, 0);

做多倉位到目前週期數:= barslast(做多倉位);
做多平倉到目前週期數:= barslast(平倉);

Long:= if(做多倉位到目前週期數<做多平倉到目前週期數, 1, 0);
------------------------------------------------------------------------------------------------------

請問我在什麼地方的邏輯有錯誤呢? 還是版主大大有更好的程式寫作方式?
謝謝您!



搭配訊號過濾程式即可解決, 如下:

....


由 cgjj 在 2008-03-06 12:19 發表:

漏掉 Long 處理了, 重新回應如下:

做多倉位:AA>0 and BB>0 and CC>0;
平倉:BB<0;
CK:=做多倉位-平倉;
CK:=ref(CK,barslast(CK<>0));
做多區:CK=1;
CK:=if(CK<>ref(CK,1) or barpos=lbound(CK),CK,0);
做多倉位:=CK=1;
平倉:=CK=-1;


由 cgjj 在 2008-03-06 12:24 發表:

若平倉當根也要列入做多區


做多區:CK=1;
這行改為
做多區:CK=1 or ref(CK,1)=1;
即可


由 soromance 在 2008-03-07 08:43 發表:

非常感謝版主大大的協助,問題已經解決大半了。
只是,底下這一行的程式我實在看不懂,它的意義是什麼呢?

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


由 cgjj 在 2008-03-07 09:03 發表:

引用:
最初由 soromance 發表
非常感謝版主大大的協助,問題已經解決大半了。
只是,底下這一行的程式我實在看不懂,它的意義是什麼呢?

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



CK<>ref(CK,1)     假如 CK 不等於前一根CK的值
or             或
barpos=lbound(CK)  當前K棒位置=第一根有效CK值的位置

以上成立留存原 CK 值
不成立設為 0 值


由 soromance 在 2008-03-07 14:02 發表:

引用:
最初由 cgjj 發表
CK<>ref(CK,1)     假如 CK 不等於前一根CK的值
or             或
barpos=lbound(CK)  當前K棒位置=第一根有效CK值的位置

以上成立留存原 CK 值
不成立設為 0 值




Dear 版主大大:

如果我是要寫在交易系統內,按照您給的範例,那就是
Longenter:=if(A>0 and B>0 and C>0,1,0); //第一行:做多條件成立時
Longexit:=if(B<0,1,0); //第二行:平倉條件成立時
CK:=Longenter-Longexit; //第三行
CK:=ref(CK, barslast(CK<>0)); //第四行:找出上一根不為0的CK值 (只有1及-1二種數值)
Long:=if(CK=1, 1, 0); //第五行:只要多單在手,Long值都保持為1,平倉時保持為0

這樣不是就可以了嗎?不懂為什麼要加入下面這一行呢?

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

因為如果做多條件在某一週期成立時,第四行的CK就是1,第五行的Long也是1。
但如果下一個週期做多條件消失,但平倉條件未出現前,第三行CK=0,第四行CK=1,第五行Long=1。
但如果加入補充行於第四行為第五行間(如您教的範例),那補充行的CK因和上一個週期的CK值相同,造成條件式不成立,那CK=0,那我的Long就變成0了(可是我的多單還在手,Long要保持為1才行)。

我是不是有什麼地方沒有想通呢?請大大幫幫忙。


由 cgjj 在 2008-03-07 14:17 發表:

引用:
最初由 soromance 發表
Dear 版主大大:

如果我是要寫在交易系統內,按照您給的範例,那就是
Longenter:=if(A>0 and B>0 and C>0,1,0); //第一行:做多條件成立時
Longexit:=if(B<0,1,0); //第二行:平倉條件成立時
CK:=Longenter-Longexit; //第三行
CK:=ref(CK, barslast(CK<>0)); //第四行:找出上一根不為0的CK值 (只有1及-1二種數值)
Long:=if(CK=1, 1, 0); //第五行:只要多單在手,Long值都保持為1,平倉時保持為0

這樣不是就可以了嗎?不懂為什麼要加入下面這一行呢?

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

因為如果做多條件在某一週期成立時,第四行的CK就是1,第五行的Long也是1。
但如果下一個週期做多條件消失,但平倉條件未出現前,第三行CK=0,第四行CK=1,第五行Long=1。
但如果加入補充行於第四行為第五行間(如您教的範例),那補充行的CK因和上一個週期的CK值相同,造成條件式不成立,那CK=0,那我的Long就變成0了(可是我的多單還在手,Long要保持為1才行)。

我是不是有什麼地方沒有想通呢?請大大幫幫忙。




單就 Long 的需求來說
最末三行沒必要

最末三行是為了要呈現過濾重覆訊號後的狀況

您把最末三行先刪除, 觀察 [做多倉位] [平倉] 訊號
觀察後再加入那三行
再仔細看 [做多倉位] [平倉] 訊號 發生的變化
應就可了解了


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


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

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