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

註冊日期: Apr 2006
來  自:
文章數量: 43

問題 操作數類型錯誤

請問一下,我要寫一個技術指標,但是相關函數的參數是動態的.
但是在Compile 時,出現了 操作數類型錯誤 , 在 RSIVal 那一行有一個
變數是在前幾列運算出來的.

這一行出錯: 只因用了 Td 這個變數當成參數,用了常數就OK了.
RSIVal := SMA(MAX(CLOSE-LC,0),Td,1)/SMA(ABS(CLOSE-LC),Td,1)
而且我在處理Td 時,有用INTPART函數,避免了有小數點的問題.
煩請大大,撥空釋疑.謝謝!


指標 Source Code :

=====================================================
TdMax:= 30;
TdMin:= 5;

StdA := EMA(Std(Close,5),10);
Vi := IIF(StdA <> 0,Std(Close,5) / StdA,1);
Td := IIF(Vi <>0,INTPART(14 / Vi),1);

Td := IIF(Td > TdMax,TdMax,Td);
Td := IIF(Td < TdMin,TdMin,Td);

LC := REF(CLOSE,1);
RSIVal := SMA(MAX(CLOSE-LC,0),Td,1)/SMA(ABS(CLOSE-LC),Td,1)*100;

SDMI:1;
======================================================

kending 附帶上了此圖片:

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

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

SMA(X,N,M),求X的N日移動平均,M為權重。
算法:
若Y=SMA(X,N,M) 則 Y=(M*X+(N-M)*Y')/N, 其中Y'表示上一週期Y值,N必須大於M。
例如:
SMA(CLOSE,20,1)
表示求20日移動平均價


SMA(X,N,M) 其中的 N 和 M 必需為常數
您導入的 TD 為一個數值數列, 非單一數值
所以會出現操作數類型錯誤

cgjj 附帶上了此圖片:

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

註冊日期: Apr 2006
來  自:
文章數量: 43

請問,那如果用 EMA() 函數呢 ?
而怎麼將數值數列,變成單一數值呢 ?
如果可以轉換就可以使用了吧.

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

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

引用:
最初由 kending 發表
請問,那如果用 EMA() 函數呢 ?
而怎麼將數值數列,變成單一數值呢 ?
如果可以轉換就可以使用了吧.



EMA 狀況亦同

Td:= Td[datacount];

這式子跑完後
Td 會由數值數列改變為單一數值
注意: 該單一數值為原數列裡最後端的數

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

註冊日期: Apr 2006
來  自:
文章數量: 43

請問 datacount 是從0開始,還是1 .. ,如果要取LAST 是填多少 ?

Td:= Td[datacount];

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

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

引用:
最初由 kending 發表
請問 datacount 是從0開始,還是1 .. ,如果要取LAST 是填多少 ?

Td:= Td[datacount];



datacount 是內建函數
其為單一數值, 值為K棒總數
所以即是取 Last

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

註冊日期: Apr 2006
來  自:
文章數量: 43

謝啦...很好的服務 .

還有一個問題,在4.0版時,IF THEN ELSE 的敘述可以多行撰寫對吧! 
但是我使用了如下的敘述,卻是得到語法錯誤

IF (RSIVal - LLV(RSIVal,Td)) = 0 Then BEGIN
SDMI:0;
End;
ELSE Begin
SDMI : 1;
End;

kending 附帶上了此圖片:

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

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

奇狐的 IF 有兩種
IF(cond,A,B); //條件式結果可為數列
IF cond THEN .... //條件式結果不可為數列(需為常數或單值)

用法於插入函數中可找到

IF(X,A,B)
若X不為0則返回A,否則返回B
一般公式寫作大都應用此 IF

例如:
IF(CLOSE<OPEN,LOW,HIGH)
表示該週期收陰則返回最低價,否則返回最高價


IF cond THEN ....
較不常用, 其用法教學請看下列連結
http://www.chiefox.com.tw/bbs/showt...=&threadid=2646

您的問題出在錯用 IF cond THEN 的條件式

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

註冊日期: Apr 2006
來  自:
文章數量: 43

謝謝,總版主.

如果在一個數值陣列,我要知道目前是在什麼位置.
CurrentPosition

For Example :

Td := Td[datacount] ; // 這是取出LAST 位置 Td 的值

那可以這樣嗎 ?
Td := Td[CurrentPos] ; // 目前陣列的 INDEX

這樣是取得最後的位置資料,那如果要在每次運算時(K BAR),取得目前的位置. 而不是得到陣列的最後一個值,那又該怎麼寫呢 ?
因為Td 這個數值陣列,他的每一個CELL 的值,都會不一樣,會依目前的K線,運算出來,而其他的函數也都是用這個 變數.

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

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

目前是在什麼位置
這句話要看如何解釋


若是十字游標目前所在的位置
可經由 SYSPARAM(1) 函數取得

例如:
取得目前十字游標所在K棒Close價
CC:C;
CC:=CC[SYSPARAM(1)];


基本上奇狐的運算方式是整個數列對整個數列的運算
NN:OPEN+CLOSE; 式子舉例來說

計算過程如下:
OPEN[1]+CLOSE[1]
OPEN[2]+CLOSE[3]
OPEN[3]+CLOSE[4]
   :
OPEN[datacount]+CLOSE[datacount]
NN=前面算完的結果數列

整個結果計算出來後一次才存入 NN 數列中

並非用以下方式運算:
NN[1]=OPEN[1]+CLOSE[1]
NN[2]=OPEN[2]+CLOSE[2]
NN[3]=OPEN[3]+CLOSE[3]
   :
NN[datacount]=OPEN[datacount]+CLOSE[datacount]

所以不會有目前計算的位置

若您要需分次存取數列裡的數
就必須以迴圈來定位存取

定位存取:
Td[1]; //取第1根K棒的 Td 值
Td[10]; //取第10根K棒的 Td 值
Td[N]; //取第N根K棒的 Td 值
Td[datacount]; //取最末根K棒的 Td 值
Td[datacount-1]; //取最倒數第2根K棒的 Td 值
Td[SYSPARAM(1)]; //取目前十字游標所在K棒的 Td 值

用迴圈來連續定位存取範例:
for N = 1 to datacount do begin
X:=Td[N];
end;

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

論壇跳轉:
主題評分:

論壇規定:
你不可以發表新主題
你不可以回覆文章
你不可以上傳附件
你不可以編輯自己的文章
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.  聯絡我們