奇狐社區論壇 總頁數 (2): [1] 2 »
在這個頁面顯示本主題全部的 16 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- 5.0 & 5.1期貨版公視寫法差異請指導 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=17997)


由 Markchu7 在 2013-09-10 09:22 發表:

5.0 & 5.1期貨版公視寫法差異請指導

U1轉換參數:=IF(DATATYPE=1,5,IF(DATATYPE=2,3,IF(DATATYPE=3,2,IF(DATATYPE=4,2,5))));
IF STKLABEL='FITX1' AND DATATYPE<6 THEN U1H:REF(STKINDI('','VKL引用.攻防H',0,DATATYPE+1),U1轉換參數),COLORRED,LINETHICK;
IF STKLABEL='FITX1' AND DATATYPE<6 THEN U1L:REF(STKINDI('','VKL引用.攻防L',0,DATATYPE+1),U1轉換參數),COLORBLUE,LINETHICK;
U1M:(U1H+U1L)/2,COLORBLACK,LINETHICK;
STICKLINE(DATATYPE<6,U1H,U1M,10,0),COLORBBBBBB;
STICKLINE(DATATYPE<6,U1L,U1M,10,0),COLORAAAAAA;

以下為引用之子公式:
V1:=V;
VTK:=V1,COLORRED,LINETHICK1;
VKN:=SORT(VtK,0,LBOUND(VtK),UBOUND(VtK));
VSTTK:=SETLBOUND(Vtk,0);

巨量:VTK[INTPART(VKN*IF(DATATYPE>2,0.90,IF(DATATYPE=2,0.95,0.9618)))],COLORBLUE,LINETHICK;
VK:V>巨量;
攻防H:REF(H,BARSLAST(VK));
攻防L:REF(L,BARSLAST(VK));

相同的公式卻呈現不同的結果!5.0版是我需要的結果,請問5.1期貨版要如何修改?而原因何在?請指導!感恩!
本樓為5.0版


由 Markchu7 在 2013-09-10 09:23 發表:

本樓為5.1期貨版!


由 Markchu7 在 2013-09-10 09:34 發表:

現在時間0931卻又呈現正確的圖形了!
如何修正公式呢?


由 Markchu7 在 2013-09-10 09:38 發表:

我也不知為何如此!有空在處理吧!


由 cgjj 在 2013-09-10 10:11 發表:

回覆: 5.0 & 5.1期貨版公視寫法差異請指導

引用:
最初由 Markchu7 發表
..............
以下為引用之子公式:
V1:=V;
VTK:=V1,COLORRED,LINETHICK1;
VKN:=SORT(VtK,0,LBOUND(VtK),UBOUND(VtK));
VSTTK:=SETLBOUND(Vtk,0);

巨量:VTK[INTPART(VKN*IF(DATATYPE>2,0.90,IF(DATATYPE=2,0.95,0.9618)))],COLORBLUE,LINETHICK;
VK:V>巨量;
攻防H:REF(H,BARSLAST(VK));
攻防L:REF(L,BARSLAST(VK));



VSTTK:=SETLBOUND(Vtk,0);

與版本無關
兩個版本算出的東西都是錯的
因為您公式沒寫對, 已經越界存取數列了

SETLBOUND(Vtk,0)
您指定 0, 是把 Vtk 設成一個無效數列

既然是無效數列, 後續就不能 VTK[n] 的方式去存取它
(存取到的可能是個亂數)


由 Markchu7 在 2013-09-10 22:27 發表:

真是錯的渾然不知啊!以前都沒發生如此的狀況,也就一直誤用下去!
請教總版主:
1.如果我要設下界為800,則VSTTK:=SETLBOUND(Vtk,800);寫法是否正確?以成交量來說這樣寫是不是800(含)以上才會納入序列?
2.如果全部序列變量最大值為9999,則VSTTK:=SETLBOUND(Vtk,10000);就會使序列無效,是否正確?
3.如果不寫VSTTK:=SETLBOUND(Vtk,800);這條公式(也就是不指定下界),會有何影響呢?
4.抓到亂數!所以說5.0版呈現正常畫面,只是運氣好,如果5.0版是錯的畫面,也不一定會錯的跟5.1期貨版一個樣!是否如此?
請指導!


由 cgjj 在 2013-09-11 10:07 發表:

引用:
最初由 Markchu7 發表
真是錯的渾然不知啊!以前都沒發生如此的狀況,也就一直誤用下去!
請教總版主:
1.如果我要設下界為800,則VSTTK:=SETLBOUND(Vtk,800);寫法是否正確?以成交量來說這樣寫是不是800(含)以上才會納入序列?
2.如果全部序列變量最大值為9999,則VSTTK:=SETLBOUND(Vtk,10000);就會使序列無效,是否正確?
3.如果不寫VSTTK:=SETLBOUND(Vtk,800);這條公式(也就是不指定下界),會有何影響呢?
4.抓到亂數!所以說5.0版呈現正常畫面,只是運氣好,如果5.0版是錯的畫面,也不一定會錯的跟5.1期貨版一個樣!是否如此?
請指導!



Re1: Yes
Re2: Yes
Re3: 要看您做何用途? 一般公式較不需要用到它
   (應該問您自己當初加它的用意為何?)
Re4: Yes
   越界存取, 相當於去存取一個未被配置或被其他東西佔據的區域
   越界讀取到的內容, 是無法預料的數值或字元
   若有越界寫入, 甚至有可能因此導致奇狐或其他程式當掉


由 Markchu7 在 2013-09-11 10:42 發表:

感謝指導!再去研究研究!


由 Markchu7 在 2013-09-11 14:26 發表:

感謝總版主不厭其煩的指正錯誤,在改正公式的錯誤後,兩個版本的圖形仍有差異!經過詳細比對後,發現應該是時間切割的問題,因為我是1分鐘週期引用5分鐘週期數據,如圖!


由 Markchu7 在 2013-09-11 14:27 發表:

5.1版!
關於如此的問題,可否指導應如何修改5.1版的公式,感謝!


由 cgjj 在 2013-09-11 15:12 發表:

請附上您改過, 現在在跑的公式, 才能協助您


由 Markchu7 在 2013-09-11 15:46 發表:

U1轉換參數:=IF(DATATYPE=1,5,IF(DATATYPE=2,3,IF(DATATYPE=3,2,IF(DATATYPE=4,2,5))));
IF STKLABEL='FITX1' AND DATATYPE<6 THEN U1H:REF(STKINDI('','VKL引用.攻防H',0,DATATYPE+1),U1轉換參數),COLORRED,LINETHICK;
IF STKLABEL='FITX1' AND DATATYPE<6 THEN U1L:REF(STKINDI('','VKL引用.攻防L',0,DATATYPE+1),U1轉換參數),COLORBLUE,LINETHICK;
U1M:(U1H+U1L)/2,COLORBLACK,LINETHICK;
STICKLINE(DATATYPE<6,U1H,U1M,10,0),COLORBBBBBB;
STICKLINE(DATATYPE<6,U1L,U1M,10,0),COLORAAAAAA;

以下為引用之子公式:
V1:=V;
VTK:=V1,COLORRED,LINETHICK1;
VKN:=SORT(VtK,0,LBOUND(VtK),UBOUND(VtK));

巨量:VTK[INTPART(VKN*IF(DATATYPE>2,0.90,IF(DATATYPE=2,0.95,0.9618)))],COLORBLUE,LINETHICK;
VK:V>巨量;
攻防H:REF(H,BARSLAST(VK));
攻防L:REF(L,BARSLAST(VK));
以上為導致結果差異的公式源碼.

================================================
因為推估是時間切割導致的問題,所以更改子公式末三行:
VK:REF(V>巨量,1)=1;
攻防H:REF(REF(H,1),BARSLAST(VK));
攻防L:REF(REF(L,1),BARSLAST(VK));

公式引用的部分:
IF STKLABEL='FITX1' AND DATATYPE<6 THEN U1H:STKINDI('','VKL引用.攻防H',0,DATATYPE+1),COLORRED,LINETHICK;
IF STKLABEL='FITX1' AND DATATYPE<6 THEN U1L:STKINDI('','VKL引用.攻防L',0,DATATYPE+1),COLORBLUE,LINETHICK;

所以已經解決問題了!對不起!麻煩總版主了,感謝!


由 cgjj 在 2013-09-11 17:33 發表:

引用:
最初由 Markchu7 發表
U1轉換參數:=IF(DATATYPE=1,5,IF(DATATYPE=2,3,IF(DATATYPE=3,2,IF(DATATYPE=4,2,5))));
IF STKLABEL='FITX1' AND DATATYPE<6 THEN U1H:REF(STKINDI('','VKL引用.攻防H',0,DATATYPE+1),U1轉換參數),COLORRED,LINETHICK;
IF STKLABEL='FITX1' AND DATATYPE<6 THEN U1L:REF(STKINDI('','VKL引用.攻防L',0,DATATYPE+1),U1轉換參數),COLORBLUE,LINETHICK;
U1M:(U1H+U1L)/2,COLORBLACK,LINETHICK;
STICKLINE(DATATYPE<6,U1H,U1M,10,0),COLORBBBBBB;
STICKLINE(DATATYPE<6,U1L,U1M,10,0),COLORAAAAAA;

以下為引用之子公式:
V1:=V;
VTK:=V1,COLORRED,LINETHICK1;
VKN:=SORT(VtK,0,LBOUND(VtK),UBOUND(VtK));

巨量:VTK[INTPART(VKN*IF(DATATYPE>2,0.90,IF(DATATYPE=2,0.95,0.9618)))],COLORBLUE,LINETHICK;
VK:V>巨量;
攻防H:REF(H,BARSLAST(VK));
攻防L:REF(L,BARSLAST(VK));
以上為導致結果差異的公式源碼.

================================================
因為推估是時間切割導致的問題,所以更改子公式末三行:
VK:REF(V>巨量,1)=1;
攻防H:REF(REF(H,1),BARSLAST(VK));
攻防L:REF(REF(L,1),BARSLAST(VK));

公式引用的部分:
IF STKLABEL='FITX1' AND DATATYPE<6 THEN U1H:STKINDI('','VKL引用.攻防H',0,DATATYPE+1),COLORRED,LINETHICK;
IF STKLABEL='FITX1' AND DATATYPE<6 THEN U1L:STKINDI('','VKL引用.攻防L',0,DATATYPE+1),COLORBLUE,LINETHICK;

所以已經解決問題了!對不起!麻煩總版主了,感謝!



問題不是在時間切割, 兩個版本分線切割方式是一致的
應該是併筆產生的差異性, 兩個版本算的應該都沒有錯
不需做 REF 偏移動作(做了反而是錯的)

您可以去比較看看 v5.0 和 v5.1 每一根分線的成交量
會有少許差異

v5.1 是沒併筆的量, v5.0 有併筆過的量
該分最末幾筆的成交量, 在 v5.0 中可能被併入歸到下一根中
但在 v5.1 仍是歸在本根之中

量彼此不完全一樣, 兩邊 SORT 的結果就會有少許差異
這是正常的, 沒有對錯

v5.1 的分線數據 不會完全相等於 v5.0 的分線數據
(因為無併筆vs有併筆, 包含開高低收量)

要先有這樣的認知, 再去進行比對唷


由 Markchu7 在 2013-09-11 23:32 發表:

總版主真是貼心,鉅細靡遺的說明,就怕狐友誤用!我會持續觀察與詳細比對,再有問題還是要麻煩總版主的啦!感謝!


由 Markchu7 在 2013-09-13 08:26 發表:

昨晚還想到一個問題:
9/10 5.1版一開始是錯誤圖形後來變正確有可能是我一 直沒有切換到5分鐘週期,所以5分鐘數據沒有補進來的關係,後來切換過後再到該畫面就又變正確了,這可能會是原因,向總版主報告!


全部時間均為台灣時間, 現在時間為07:01 總頁數 (2): [1] 2 »
在這個頁面顯示本主題全部的 16 個文章


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

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