奇狐社區論壇
在這個頁面顯示本主題全部的 5 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- 請問寫法 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=17388)


由 q45168 在 2013-01-03 12:03 發表:

請問寫法

請教個問題:如何將以下程式改寫為不用迴圈的寫法?
空方:=MA(HIGH,3);
多方=MA(LOW,3);
FC:=CLOSE;
HLD:=IF(CLOSE>REF(MA(HIGH,4),1),1,IF(CLOSE<REF(MA(LOW,4),1),-1,REF(HLD,1)));
FOR I=4+2 TO DATACOUNT DO BEGIN
IF FC[I]>空方 [I-1] THEN
HLD[I]:=1;ELSE
IF FC[I]<多方 [I-1] THEN
HLD[I]:=-1;ELSE
HLD[I]:=HLD[I-1];
END;
多空:=IF(HLD<=-1,MA(HIGH,3),MA(LOW,3));
我不熟悉迴圈的寫法,不了解程式容,因此想程式改寫為不用迴圈的寫法


由 cgjj 在 2013-01-03 12:12 發表:

回覆: 請問寫法

引用:
最初由 q45168 發表
請教個問題:如何將以下程式改寫為不用迴圈的寫法?
空方:=MA(HIGH,3);
多方=MA(LOW,3);
FC:=CLOSE;
HLD:=IF(CLOSE>REF(MA(HIGH,4),1),1,IF(CLOSE<REF(MA(LOW,4),1),-1,REF(HLD,1)));
FOR I=4+2 TO DATACOUNT DO BEGIN
IF FC[I]>空方 [I-1] THEN
HLD[I]:=1;ELSE
IF FC[I]<多方 [I-1] THEN
HLD[I]:=-1;ELSE
HLD[I]:=HLD[I-1];
END;
多空:=IF(HLD<=-1,MA(HIGH,3),MA(LOW,3));
我不熟悉迴圈的寫法,不了解程式容,因此想程式改寫為不用迴圈的寫法



您這段程式原來是在奇狐中跑的嗎?

HLD 先前未定義, 在奇狐中下列這行是不能跑的, 因為內有REF(HLD,1)
HLD:=IF(CLOSE>REF(MA(HIGH,4),1),1,IF(CLOSE<REF(MA(LOW,4),1),-1,REF(HLD,1)));

無法得知原計算結果, 是難以正確改寫的


由 q45168 在 2013-01-03 12:22 發表:

回覆: 回覆: 請問寫法

引用:
最初由 cgjj 發表
您這段程式原來是在奇狐中跑的嗎?

HLD 先前未定義, 在奇狐中下列這行是不能跑的, 因為內有REF(HLD,1)
HLD:=IF(CLOSE>REF(MA(HIGH,4),1),1,IF(CLOSE<REF(MA(LOW,4),1),-1,REF(HLD,1)));

無法得知原計算結果, 是難以正確改寫的


這段程式來是在奇狐中跑的.正確程式:
空方:=MA(HIGH,3);
多方:=MA(LOW,3);
FC:=CLOSE;
HLD:=IF(CLOSE>REF(MA(HIGH,4),1),1,IF(CLOSE<REF(MA(LOW,4),1),-1,REF(HLD,1)));
FOR I=4+2 TO DATACOUNT DO BEGIN
IF FC[I]>空方 [I-1] THEN
HLD[I]:=1;ELSE
IF FC[I]<多方 [I-1] THEN
HLD[I]:=-1;ELSE
HLD[I]:=HLD[I-1];
END;
多空:IF(HLD<=-1,MA(HIGH,3),MA(LOW,3));


由 cgjj 在 2013-01-03 12:54 發表:

回覆: 回覆: 回覆: 請問寫法

引用:
最初由 q45168 發表
這段程式來是在奇狐中跑的.正確程式:
空方:=MA(HIGH,3);
多方:=MA(LOW,3);
FC:=CLOSE;
HLD:=IF(CLOSE>REF(MA(HIGH,4),1),1,IF(CLOSE<REF(MA(LOW,4),1),-1,REF(HLD,1)));
FOR I=4+2 TO DATACOUNT DO BEGIN
IF FC[I]>空方 [I-1] THEN
HLD[I]:=1;ELSE
IF FC[I]<多方 [I-1] THEN
HLD[I]:=-1;ELSE
HLD[I]:=HLD[I-1];
END;
多空:IF(HLD<=-1,MA(HIGH,3),MA(LOW,3));



HLD:=IF(CLOSE>REF(MA(HIGH,4),1),1,IF(CLOSE<REF(MA(LOW,4),1),-1,REF(HLD,1)));

這行是不起什麼作用的(可視為多餘)
因為迴圈內的運算, 幾乎全把原先這行算的HLD給取代掉了
而且, 這行MA參數是取4, 與迴圈內用的MA參數是取3, 兩者不同
那個是您要用的, 請自行再 Check 修改

這迴圈算的HLD值, 可用以下式子簡化取代:
空方:=MA(HIGH,3);
多方:=MA(LOW,3);
HLD:(C>ref(空方,1))-(C<ref(多方,1));
HLD:=ref(HLD,barslast(HLD<>0));


由 q45168 在 2013-01-03 13:33 發表:

多謝版主指點!


全部時間均為台灣時間, 現在時間為22:53
在這個頁面顯示本主題全部的 5 個文章


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

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