![]() |
總頁數 (2): [1] 2 » 在這個頁面顯示本主題全部的 24 個文章 |
奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- [問題] IF 的用法 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=7149)
[問題] IF 的用法
請問為何例1ok,例2為何會說"語法錯誤"?百思不解呀。
例1:
If DATATYPE=2 then begin
...
end;
例2:
If L=70 then begin
...
end;
因為L是序列, 你可以想做是一個陣列 L[i] ,i= 0 ~ barcount
, 所以應該要先取出陣列中的某個值才能相比.
奇狐的教學文件做的極差, 很多重要的東西都沒有講清楚.
實在是應該要好好參考國外的軟體, 像是wealth-lab, 從內建的函式包含範例, 程式語法說明, 到回測系統, 各種東西寫的一清二楚.
謝謝您的指教, 我們會努力加油改善
當前軟體內建教學說明不足之處
目前會盡可能先於論壇上做教學
4.0版新增的 IF....THEN.... 的教學
這裡有較詳細的說明
http://www.chiefox.com.tw/bbs/showt...=&threadid=2646
引用:
最初由 yuting_lin 發表
因為L是序列, 你可以想做是一個陣列 L[i] ,i= 0 ~ barcount
, 所以應該要先取出陣列中的某個值才能相比.
奇狐的教學文件做的極差, 很多重要的東西都沒有講清楚.
實在是應該要好好參考國外的軟體, 像是wealth-lab, 從內建的函式包含範例, 程式語法說明, 到回測系統, 各種東西寫的一清二楚.
引用:
最初由 kokyo 發表
請問該如何取出陣列中的某個值呢?實際想應用的是:
IF MA(c,6)>REF(MA(c,6),1) then
這樣的用法,該如何寫?謝謝了。
原碼:
HH:=H;
LL:=L;
MM: if(MA(c,6)>REF(MA(c,6),1),(HH+LL)/2,0);
前例改用 數列之單值 的方法來處理, 可做更複雜的應用
原碼:
HH:=H;
LL:=L;
MM:C*0;
CK:=MA(c,6)>REF(MA(c,6),1);
for i=lbound(CK) to datacount do begin
if CK[i]=1 then begin
//需用 Array[x] 的方式, 存取數列中的單值
MM[i]:=(HH[i]+LL[i])/2;
end;
end;
再以 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);
原碼:
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;
感謝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);
引用:
最初由 kokyo 發表
.......
目的是要得知在每一根K線的位置,
EMA已經連續向下幾天了(超過7天算7天)?
不過得到的是最後一根K線的,
.......
就是這樣,
感謝大大。
大大好,再請教:
關於IF…then不可用在序列,但IF(cond,A,B)可以用在序列,雖然大部分的情況可用後者解決,但可以的話還是習慣前者的方式。因此想到山不轉路轉,先用QQ當人頭,如下程式,但是還是發生錯誤了,莫非這樣出來的QQ仍是序列?
QQ:=IF(c>ref(c,1),1,0);
IF QQ then …
感溫。
QQ仍是序列喔
因為 C 為 CLOSE
CLOSE 為收盤價
收盤價並非單一數值
以日線來看
假設這個商品已交易10天
則 CLOSE 這個數列, 存了 10 天的收盤價
換言之
有 10 個數,存於 CLOSE 這個數列中
小弟在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%...我承認是參數優化的關係...)
請問到底要怎麼寫才行呀?
引用:
最初由 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的初始值上面...
小弟這兩天試著先用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));
也不行呀!
頭痛!
全部時間均為台灣時間, 現在時間為06:04 | 總頁數 (2): [1] 2 » 在這個頁面顯示本主題全部的 24 個文章 |
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved.