 |
q45168
中級會員
註冊日期: Apr 2006
來 自:
文章數量: 52 |
請問寫法
請教個問題:如何將以下程式改寫為不用迴圈的寫法?
空方:=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));
我不熟悉迴圈的寫法,不了解程式容,因此想程式改寫為不用迴圈的寫法
|
|
向版主報告此篇 |  |
|
2013-01-03 12:03 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18197 |
回覆: 請問寫法
引用: 最初由 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)));
無法得知原計算結果, 是難以正確改寫的
|
|
向版主報告此篇 |  |
|
2013-01-03 12:12 |
|
|
|  |
 |
q45168
中級會員
註冊日期: Apr 2006
來 自:
文章數量: 52 |
回覆: 回覆: 請問寫法
引用: 最初由 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));
|
|
向版主報告此篇 |  |
|
2013-01-03 12:22 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18197 |
回覆: 回覆: 回覆: 請問寫法
引用: 最初由 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));
|
|
向版主報告此篇 |  |
|
2013-01-03 12:54 |
|
|
|  |
本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。
|
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved. 聯絡我們
|