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

註冊日期: Nov 2011
來  自:
文章數量: 39

[問題]程式碼的執行順序?

請問程式碼的執行順序,是一根K棒執行完所有程式碼,再移到下一根;還是一行程式碼執行在畫面上所有K棒,然後再移至下一行程式碼執行?謝謝。因為執行的邏輯不同,程式碼的設計也會有很大的不同。

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

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

回覆: [問題]程式碼的執行順序?

引用:
最初由 novaliou0206 發表
請問程式碼的執行順序,是一根K棒執行完所有程式碼,再移到下一根;還是一行程式碼執行在畫面上所有K棒,然後再移至下一行程式碼執行?謝謝。因為執行的邏輯不同,程式碼的設計也會有很大的不同。



一行程式碼執行完所有被調入的K棒,然後再接續下一行程式碼
(畫面上的所有K棒可能僅是所有被調入K棒的一部份)


在奇狐中
A:=B+C; //這行跑完後整個 A 數列就已經是 B+C 計算完成的結果
D:=E-F+G; //這行是整個E數列-F數列的結果都算完後, 再去加上G數列
並非一根K棒 Run 完這兩行後, 再跑下一根K棒
而是歷史數據整個 Run 完第一行後, 再續跑第二行

奇狐中雖是數列對數列之運算
但也可做單一元素的判斷或處理

例如:
CC:=Close; //整個收盤價的數列存入CC變數當中
BB:=CC[10]; //單獨取得第10根K棒的CC數值
CC[10]:=50; //將第10根K棒之CC數值改為 50

與迴圈搭配, 去循序存取數列中元素
亦可以實現一根K棒執行完迴圈內所有的程式碼, 再續下一根K棒
例如:
HH:=high; LL:=low; CC:=Close;
MM:Close*0; //MM為與K棒等長的零值數列
for i=1 to datacount do begin
MM[i]:=HH[i]+LL[i];
MM[i]:=(CC[i]*2+MM[i])/4;
end;


故較完整的說法
奇狐兩種方式皆可寫作實現, 甚至可混著寫

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

註冊日期: Nov 2011
來  自:
文章數量: 39

感謝版主的回答,謝謝。

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

註冊日期: Nov 2011
來  自:
文章數量: 39

另外突然想到一個問題想再請教總版主,對於迴圈的程式碼,以您的例子,計算每一根K棒的高、低、兩倍收盤價的平均值,這樣的相同的計算過程會在所有調入的K棒都執行一次嗎?如果會,明明結果一樣卻要重覆計算多次,這樣不是會浪費很多資源?我是強烈懷疑會,因為我自己測試一個簡單的迴圈,把他套用到任何的時間週期,結果當我套用到日線圖時,奇狐就當掉了,其他時間週期都不會,後來我查了一下,日線週期調入的K棒有一萬多筆,其他的週期就只有幾百到幾千筆,是否是重複計算浪費了很多資源,導致奇狐當掉?如果像我所懷疑的,那要如何避免這樣的情形?先謝謝總版主的解疑。

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

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

引用:
最初由 novaliou0206 發表
另外突然想到一個問題想再請教總版主,對於迴圈的程式碼,以您的例子,計算每一根K棒的高、低、兩倍收盤價的平均值,這樣的相同的計算過程會在所有調入的K棒都執行一次嗎?如果會,明明結果一樣卻要重覆計算多次,這樣不是會浪費很多資源?我是強烈懷疑會,因為我自己測試一個簡單的迴圈,把他套用到任何的時間週期,結果當我套用到日線圖時,奇狐就當掉了,其他時間週期都不會,後來我查了一下,日線週期調入的K棒有一萬多筆,其他的週期就只有幾百到幾千筆,是否是重複計算浪費了很多資源,導致奇狐當掉?如果像我所懷疑的,那要如何避免這樣的情形?先謝謝總版主的解疑。


前面給您的例子, 並無所謂的重複計算唷

迴圈本來就是在做重覆過程
而 "重覆過程", 其並不等同於 "重覆計算"

----------------------------------------------------------------------------------------------------------
答覆您的範例, 在迴圈中它一次僅算一根K棒 (算的速度很快)
只是重覆過程在數列中的每個元素
HH:=high; LL:=low; CC:=Close;
MM:Close*0;
for i=1 to datacount do begin
MM[i]:=HH[i]+LL[i];
MM[i]:=(CC[i]*2+MM[i])/4;
end;

----------------------------------------------------------------------------------------------------------
以此範例來說
可以不需用迴圈寫, 可簡化為: (此法最快)

HH:=high; LL:=low; CC:=Close;
MM:(CC*2+HH+LL)/4; //這些變數全部均為數列

但實際上奇狐系統內部仍是需要迴圈, 才能把歷史K棒算完
只是它被系統包裝起來, 讓您可以很簡易的撰寫

----------------------------------------------------------------------------------------------------------
若您在迴圈中,把要算數列單一元素的, 誤植為要算整個數列
那麼可能會很慢, 甚至慢的非常離譜, 例如:

嚴重錯誤範例(極慢,慢到可能無回應)
HH:=high; LL:=low; CC:=Close;
MM:Close*0;
for i=1 to datacount do begin
MM:=HH+LL; //每次都重覆計算整個數列
MM:=(CC*2+MM)/4; //每次都重覆計算整個數列
end;

錯誤範例(普通慢, 仍是浪費CPU)
HH:=high; LL:=low; CC:=Close;
MM:Close*0;
for i=1 to datacount do begin
QQ:=HH+LL; //每次都重覆計算整個數列
MM[i]:=(CC[i]*2+QQ[i])/4;
end;

----------------------------------------------------------------------------------------------------------
基本上
除非計算本身特質需要, 否則能不用迴圈就不用
用迴圈也不一定比較慢, 要看您算什麼?怎麼算?

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

註冊日期: Nov 2011
來  自:
文章數量: 39

謝謝您如此快回答我,不好意思我可能用詞有錯,應該是重複過程,我想要表達的是這樣的過程重複在調入的每一根K棒上,然而這樣的過程是針對同樣的數列做同樣的事,得到相同的結果,即使很快,還是會浪費資源,是否奇狐可以宣告單一迴圈在一開始執行在第一根調入的K棒後,後續的K棒就跳過此迴圈不再執行?得到這些結果後,是有可能應用後面的程式碼在後續的K棒經由一些判斷來改變數列元素的內容。

另外如您所述,一行程式碼是執行在所有調入的K棒,執行完再移到下一行程式碼,但程式碼有可能會依據哪一根K棒及一些條件判斷再決定要不要執行,因此是否有指令可以知道目前程式碼是執行在哪一根K棒上,例如:位置、時間、、、等等。

謝謝您。

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

註冊日期: Nov 2011
來  自:
文章數量: 39

接續剛才的問題,是否可以指定程式碼執行在特定的K棒上,例如:位置、時間、、、等等?

謝謝您。

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

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

引用:
最初由 novaliou0206 發表
謝謝您如此快回答我,不好意思我可能用詞有錯,應該是重複過程,我想要表達的是這樣的過程重複在調入的每一根K棒上,然而這樣的過程是針對同樣的數列做同樣的事,得到相同的結果,即使很快,還是會浪費資源,是否奇狐可以宣告單一迴圈在一開始執行在第一根調入的K棒後,後續的K棒就跳過此迴圈不再執行?得到這些結果後,是有可能應用後面的程式碼在後續的K棒經由一些判斷來改變數列元素的內容。


要去想, 沒有那些計算過程, 那來的計算結果

我給您十個數字, 要您算每個數字乘上3後, 全部加總的結果
請問有辦法
只算第一組數字, 將其乘上3, 就得到我們最終要的嗎?
當然是不行, 十個數都要被計算處理
較差的方式. 是把每組數字都先乘3, 再去加總
較優的方式. 是把所有數字先加總後, 最後再先乘3 (乘法僅需做一次)

重點是
您想讓它跑多長?, 得到多長的計算資料
用什麼技巧去算它

迴圈末必需要從頭算到尾
只算需要算的範圍, 就不會有浪費的問題
例如: 可只跑頭幾根, 或末幾根, 甚至跳著跑
迴圈程式結構安排的好, 事半功倍
迴圈程式結構安排的差, 事倍功半

存取數列未必一定要自頭到尾存取
變數[n] 可讓您直接指定讀取或寫入數列中的任一個有效位置

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

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

引用:
最初由 novaliou0206 發表
接續剛才的問題,是否可以指定程式碼執行在特定的K棒上,例如:位置、時間、、、等等?

謝謝您。



您用 if 這類的命令, 去判斷做進一步處理即可
( 由條件是否成立, 決定跑什麼 )

例如:
if .... then begin
............
end else begin
............
end;

就看您自己怎樣去組合安排, 就像...
usekpos:=barpos;
if usekpos[i]=n then ......
usedate:=date;
if usedate[i]>1020101 then ......

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

註冊日期: Nov 2011
來  自:
文章數量: 39

謝謝總版主的說明

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

註冊日期: Nov 2011
來  自:
文章數量: 39

另外再請教總版主,對於及時盤而言,當有一根新的K棒產生時,所以的程式碼會從第一根K棒從頭執行到新產生的K棒?還是只會針對新產生的K棒執行所有程式嗎?謝謝。

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

註冊日期: Nov 2011
來  自:
文章數量: 39

Sorry, 筆誤,是:"所有"的程式碼會從第一根K棒從頭執行到新產生的K棒?

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

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

引用:
最初由 novaliou0206 發表
另外再請教總版主,對於及時盤而言,當有一根新的K棒產生時,所以的程式碼會從第一根K棒從頭執行到新產生的K棒?還是只會針對新產生的K棒執行所有程式嗎?謝謝。


並非是有新的K棒才會觸發計算
主要是看有無新的Tick

該公式被觸發計算時
會整個重新計算, 不會僅算最末根

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

註冊日期: Nov 2011
來  自:
文章數量: 39

謝謝總版主。

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

論壇跳轉:
主題評分:

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