到奇狐勝券首頁 奇狐社區論壇 購買奇狐勝券 試用奇狐勝券
 
論壇首頁 你可以在這裡編輯你的資料,查看短訊,訂閱主題和論壇參數等等 免費會員註冊 會員列表 論壇幫助 論壇日曆 論壇搜索 加入我的最愛 登出論壇  
奇狐社區論壇 : Powered by vBulletin version 2.3.0 奇狐社區論壇 > 指標公式 > 問題交流 > 建倉條件與平倉條件式求助
  上一主題   下一主題
作者
主題 發表新主題    回覆主題
soromance
中級會員

註冊日期: Feb 2007
來  自:
文章數量: 74

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

版主大大:

假設我佈多的條件是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);
------------------------------------------------------------------------------------------------------

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

向版主報告此篇 | 查IP位址
Old Post 2008-03-06 11:39
soromance 現在離線 點選這裡查看 soromance 的個人資料 點選這裡給 soromance 傳送一條短訊 查找更多關於 soromance 的文章 增加 soromance 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 18251

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

引用:
最初由 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);
------------------------------------------------------------------------------------------------------

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



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

....

向版主報告此篇 | 查IP位址
Old Post 2008-03-06 11:50
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 18251

漏掉 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;

向版主報告此篇 | 查IP位址
Old Post 2008-03-06 12:19
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 18251

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


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

向版主報告此篇 | 查IP位址
Old Post 2008-03-06 12:24
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
soromance
中級會員

註冊日期: Feb 2007
來  自:
文章數量: 74

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

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

向版主報告此篇 | 查IP位址
Old Post 2008-03-07 08:43
soromance 現在離線 點選這裡查看 soromance 的個人資料 點選這裡給 soromance 傳送一條短訊 查找更多關於 soromance 的文章 增加 soromance 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 18251

引用:
最初由 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 值

向版主報告此篇 | 查IP位址
Old Post 2008-03-07 09:03
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
soromance
中級會員

註冊日期: Feb 2007
來  自:
文章數量: 74

引用:
最初由 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才行)。

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

向版主報告此篇 | 查IP位址
Old Post 2008-03-07 14:02
soromance 現在離線 點選這裡查看 soromance 的個人資料 點選這裡給 soromance 傳送一條短訊 查找更多關於 soromance 的文章 增加 soromance 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 18251

引用:
最初由 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 的需求來說
最末三行沒必要

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

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

向版主報告此篇 | 查IP位址
Old Post 2008-03-07 14:17
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
全部時間均為台灣時間, 現在時間為09:51 發表新主題    回覆主題
  上一主題   下一主題
顯示可列印版本 | 訂閱此主題

論壇跳轉:
主題評分:

論壇規定:
你不可以發表新主題
你不可以回覆文章
你不可以上傳附件
你不可以編輯自己的文章
HTML語法禁止
vB 語法核准
表情符號核准
貼圖語法[IMG]核准
 

本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。

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

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.  聯絡我們