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

註冊日期: Jun 2006
來  自:
文章數量: 16

[問題] IF 的用法

請問為何例1ok,例2為何會說"語法錯誤"?百思不解呀。

例1:
If DATATYPE=2 then begin
...
end;

例2:
If L=70 then begin
...
end;

向版主報告此篇 | 查IP位址
Old Post 2007-02-22 04:13
kokyo 現在離線 點選這裡查看 kokyo 的個人資料 點選這裡給 kokyo 傳送一條短訊 查找更多關於 kokyo 的文章 增加 kokyo 至你的好友列表 編輯/刪除訊息 引用回覆
yuting_lin
凌波微步

註冊日期: May 2006
來  自:
文章數量: 40

因為L是序列, 你可以想做是一個陣列 L[i] ,i= 0 ~ barcount
, 所以應該要先取出陣列中的某個值才能相比.

奇狐的教學文件做的極差, 很多重要的東西都沒有講清楚.
實在是應該要好好參考國外的軟體, 像是wealth-lab, 從內建的函式包含範例, 程式語法說明, 到回測系統, 各種東西寫的一清二楚.

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

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

謝謝您的指教, 我們會努力加油改善

當前軟體內建教學說明不足之處
目前會盡可能先於論壇上做教學

4.0版新增的 IF....THEN.... 的教學
這裡有較詳細的說明
http://www.chiefox.com.tw/bbs/showt...=&threadid=2646

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

註冊日期: Jun 2006
來  自:
文章數量: 16

引用:
最初由 yuting_lin 發表
因為L是序列, 你可以想做是一個陣列 L[i] ,i= 0 ~ barcount
, 所以應該要先取出陣列中的某個值才能相比.

奇狐的教學文件做的極差, 很多重要的東西都沒有講清楚.
實在是應該要好好參考國外的軟體, 像是wealth-lab, 從內建的函式包含範例, 程式語法說明, 到回測系統, 各種東西寫的一清二楚.



請問該如何取出陣列中的某個值呢?實際想應用的是:
IF MA(c,6)>REF(MA(c,6),1) then
這樣的用法,該如何寫?謝謝了。

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

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

引用:
最初由 kokyo 發表
請問該如何取出陣列中的某個值呢?實際想應用的是:
IF MA(c,6)>REF(MA(c,6),1) then
這樣的用法,該如何寫?謝謝了。



大多的狀況都可採用 if(cond,a,b); 來處理
可支援數列對數列的運算,簡單快速
原碼:

HH
:=H;
LL:=L;
MM: if(MA(c,6)>REF(MA(c,6),1),(HH+LL)/2,0);

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

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

前例改用 數列之單值 的方法來處理, 可做更複雜的應用

原碼:

HH
:=H;
LL:=L;
MM:C*0
CK:=MA(c,6)>REF(MA(c,6),1);
for 
i=lbound(CKto datacount do begin
  
if CK[i]=1 then begin
    
//需用 Array[x] 的方式, 存取數列中的單值
    
MM[i]:=(HH[i]+LL[i])/2;
  
end;
end;

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

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

再以 KD 指標的K為例

原公式:

原碼:

{Stochastic Indicator KD Line KD 隨機指標KD}
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M1,1);


新公式: SMA 部份改為自己用數列處理
原碼:

RSV
:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
KK:c*0;
for 
I=lbound(RSV)+1 to datacount do begin
  KK
[I]:=(1*RSV[I]+(M1-1)*KK[I-1])/M1;
end;


註解:
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日移動平均價

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

註冊日期: Jun 2006
來  自:
文章數量: 16

感謝cgjj大指導,瞭解了,
但是對奇狐的邏輯仍不大明白,
例如下面的程式,目的是要得知在每一根K線的位置,
EMA已經連續向下幾天了(超過7天算7天)?
不過得到的是最後一根K線的,
不知該如何修改才是,謝謝。

KK:=EMA(C,32); II:=UBOUND(KK); JJ:=0;
For I = 0 to 6 DO BEGIN
if KK[II-I]<KK[II-I-1] THEN JJ:=JJ+1;
END
DRAWNUMBER(1,C,JJ,0);

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

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

引用:
最初由 kokyo 發表
.......
目的是要得知在每一根K線的位置,
EMA已經連續向下幾天了(超過7天算7天)?
不過得到的是最後一根K線的,
.......



看不是很懂你要算的東西
猜了一下, 看看下面結果
是否為您要的

KK:EMA(C,32);
CK:=ref(kk,1)>kk;
JJ:=SUM(CK,7);
DRAWNUMBER(1,C,JJ,0);

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

註冊日期: Jun 2006
來  自:
文章數量: 16

就是這樣,
感謝大大。

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

註冊日期: Jun 2006
來  自:
文章數量: 16

大大好,再請教:

關於IF…then不可用在序列,但IF(cond,A,B)可以用在序列,雖然大部分的情況可用後者解決,但可以的話還是習慣前者的方式。因此想到山不轉路轉,先用QQ當人頭,如下程式,但是還是發生錯誤了,莫非這樣出來的QQ仍是序列?

QQ:=IF(c>ref(c,1),1,0);
IF QQ then …

感溫。

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

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

QQ仍是序列喔

因為 C 為 CLOSE
CLOSE 為收盤價
收盤價並非單一數值

以日線來看
假設這個商品已交易10天
則 CLOSE 這個數列, 存了 10 天的收盤價
換言之
有 10 個數,存於 CLOSE 這個數列中

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

註冊日期: Aug 2007
來  自:
文章數量: 4

小弟在HTS上的程式想轉到奇狐上來用, 但是好像是碰到了這裡討論到的資料序列問題, 沒法直接套用...

原始的程式是要在一個指標成立後, 把旗號設出, 然後等另一個指標成立後再成立買賣訊號:
(HTS):

IF XXX THEN FLAG=1 ELSE IF YYY THEN FLAG=-1

因為FLAG是序列 (沒錯吧? 但是用REF(FLAG,1)好像也調不出來?), 所以沒法用IF...THEN...ELSE, 所以改成:

(奇狐)

FLAG := IF(XXX, 1, IF(YYY, -1, FLAG));

但是問題出現了 ... > 沒有輸出...?

如果寫成
FLAG := IF(XXX. 1, IF(YYY, -1, 0));
是可以跑, 但是就變成FLAG和下一個條件要同時成立才成立買賣訊號, 跑出來天差地遠 (勝率100% vs 50%...我承認是參數優化的關係...)

請問到底要怎麼寫才行呀?

向版主報告此篇 | 查IP位址
Old Post 2007-08-31 23:05
alanpaul 現在離線 點選這裡查看 alanpaul 的個人資料 點選這裡給 alanpaul 傳送一條短訊 進入 alanpaul 的首頁! 查找更多關於 alanpaul 的文章 增加 alanpaul 至你的好友列表 編輯/刪除訊息 引用回覆
L0123
資深會員

註冊日期: Mar 2004
來  自: 彰化 海口郎
文章數量: 400

引用:
最初由 alanpaul 發表
小弟在HTS上的程式想轉到奇狐上來用, 但是好像是碰到了這裡討論到的資料序列問題, 沒法直接套用...
原始的程式是要在一個指標成立後, 把旗號設出, 然後等另一個指標成立後再成立買賣訊號:
(HTS):
IF XXX THEN FLAG=1 ELSE IF YYY THEN FLAG=-1
因為FLAG是序列 (沒錯吧? 但是用REF(FLAG,1)好像也調不出來?), 所以沒法用IF...THEN...ELSE, 所以改成:
(奇狐)
FLAG := IF(XXX, 1, IF(YYY, -1, FLAG));
但是問題出現了 ... > 沒有輸出...?
如果寫成
FLAG := IF(XXX. 1, IF(YYY, -1, 0));
是可以跑, 但是就變成FLAG和下一個條件要同時成立才成立買賣訊號, 跑出來天差地遠 (勝率100% vs 50%...我承認是參數優化的關係...)
請問到底要怎麼寫才行呀?


FLAG := IF(XXX, 1, IF(YYY, -1, FLAG));
但是問題出現了 ... > 沒有輸出...?

把 FLAG := IF(XXX, 1, IF(YYY, -1, FLAG));
改 FLAG : IF(XXX, 1, IF(YYY, -1, FLAG)); //去除=號
試試看(偶用猜的)

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

註冊日期: Aug 2007
來  自:
文章數量: 4

感謝回覆, 但是問題應該是出在FLAG的初始值上面...
小弟這兩天試著先用Variable: FLAG=0; 宣告, 程式是可以跑, 但是一旦condition XXX or YYY 成立但成交的condion尚不成立時, FLAG本來不應該歸0, 但是實際上卻被歸0了, 像這樣:

Variable: FLAG=0;

FLAG := IF(XXX, 1, IF(YYY,-1), FLAG);

SHORTCONDITION:= IF(FLAG=1 AND AAA, 1, 0);
LONGCONDITION:= IF(FLAG=-1 AND BBB, 1, 0);

FLAG:= IF(SHORTCONDITION or LONGCONDITION, 0, FLAG);

難道奇狐在每一個週期都讀一次Variable初始值, 而沒有把前一週期的Variable值留下? 試著用

FLAG:= IF(XXX, 1, IF(YYY, -1, REF(FLAG,1));

也不行呀!

頭痛!

向版主報告此篇 | 查IP位址
Old Post 2007-09-02 07:43
alanpaul 現在離線 點選這裡查看 alanpaul 的個人資料 點選這裡給 alanpaul 傳送一條短訊 進入 alanpaul 的首頁! 查找更多關於 alanpaul 的文章 增加 alanpaul 至你的好友列表 編輯/刪除訊息 引用回覆
全部時間均為台灣時間, 現在時間為23:06 發表新主題    回覆主題
總頁數 (2): [1] 2 »   上一主題   下一主題
顯示可列印版本 | 訂閱此主題

論壇跳轉:
主題評分:

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