COCO研究院

 找回密碼
 註冊
搜索
查看: 3975|回復: 15

請問 AB 中如何定如 VB 的全域變數

[複製鏈接]
發表於 13-6-25 14:03 | 顯示全部樓層 |閱讀模式
本帖最後由 nicowang 於 13-6-25 14:04 編輯

如題

小弟需要在AB中設一個全域變數 GLOBAL ,一直持續累計計算,

但實際在AB中,AB會要初始這個變數,結果每次啟動這變數就被歸零 (初始化)

所以之前的計算就不見了 ... >"<
發表於 13-6-25 16:42 | 顯示全部樓層
本帖最後由 電腦人 於 13-6-25 16:59 編輯

VB 每次啟動,全域變數照樣歸零

我的解決方式是把全域變數"存成文字檔",然後要調用時,去"讀取文字檔"

類似遊戲的SAVE/LOAD記錄

AMIBROKER有讀取文字檔這功能嗎?不知

MULTICHARTS好像也只有輸出文字檔,我沒看過有讀入文字檔的功能

所有的全域變數只在程式啟動期間具有生命力,重啟程式後當然是歸零
發表於 13-6-25 17:50 | 顯示全部樓層
在程式生命週期
http://www.amibroker.com/guide/keyword/global.html
要是在生命週期外,就真的要read file
發表於 13-6-25 17:51 | 顯示全部樓層
發表於 13-6-25 18:33 | 顯示全部樓層
好問題,推一下。
發表於 13-6-25 19:38 | 顯示全部樓層
StaticVarGet( ''varname', align = True' )  
StaticVarSet( ''varname'', value )

ex.
X=Nz(StaticVatGet("VaribleX"))

X can be processed within formula

at the end of formula

StaticVarSet("VaribleX", X)
 樓主| 發表於 13-6-25 20:21 | 顯示全部樓層
本帖最後由 nicowang 於 13-6-25 20:23 編輯

謝謝大大們回答,我會試試看
 樓主| 發表於 13-6-25 20:22 | 顯示全部樓層
本帖最後由 nicowang 於 13-6-25 20:23 編輯
電腦人 發表於 13-6-25 16:42
VB 每次啟動,全域變數照樣歸零

我的解決方式是把全域變數"存成文字檔",然後要調用時,去"讀取文字檔"

VB 的全域變數可以再 module 中宣告,之後所有的method 就都可以共用,不會init

 樓主| 發表於 13-6-25 20:24 | 顯示全部樓層
calvinhorng 發表於 13-6-25 19:38
StaticVarGet( ''varname', align = True' )  
StaticVarSet( ''varname'', value )

感謝 ... 我待會試試看
 樓主| 發表於 13-6-25 20:32 | 顯示全部樓層
本帖最後由 nicowang 於 13-6-25 20:36 編輯
lwhuang 發表於 13-6-25 17:50
在程式生命週期
http://www.amibroker.com/guide/keyword/global.html
要是在生命週期外,就真的要read fil ...

謝謝大大 ... 這段我看過,但一樣會被初始化

感謝 ^^

不過像 calvinhorng 大大提供的方式,丟到 static 去,需要再取回,可以一試。
發表於 13-6-25 23:37 | 顯示全部樓層
本帖最後由 電腦人 於 13-6-25 23:42 編輯
nicowang 發表於 13-6-25 20:22
但實際在AB中,AB會要初始這個變數,結果每次啟動這變數就被歸零 (初始化)

...

並不是 在所有method可以共用,指的是在"整個程式執行時間"可以共用

但只要你關閉程式,然後再開一次程式(每次重新啟動程式)時,此時你的全域變數仍然是在初始狀態

所以唯一解就是需要一個外部變數記住這個變數目前的值

當然,不關掉程式的話,設好的全域變數是不會被清掉的,除非是程式不支援全域變數或是設定錯誤

在MULTICHARTS上的全域變數是自動判別的,但只要你程式重新編譯或載入一次,對不起,系統一樣把你的全域變數歸零,沒得商量

AB就真的沒研究了

但你有提到VB,VB上的解就很簡單,存個文字檔保留就好,你關機關程式關電源後,再重新啟動程式,一樣可以到磁碟去讀去之前的資料,此時全域變數就可以用這技巧不被破壞。

AB這個軟體是否有DEBUG工具,用類似單步執行的方式去看變數是怎麼被讀寫的,這樣最快
 樓主| 發表於 13-6-26 02:43 | 顯示全部樓層
電腦人 發表於 13-6-25 23:37
並不是 在所有method可以共用,指的是在"整個程式執行時間"可以共用

但只要你關閉程式,然後再開一次程式 ...

了解, 感謝大大回答
AB的DEBUG能力好像不強,也許我初學還不清楚,所以先保留說法,待日後驗證。
發表於 13-6-26 06:33 | 顯示全部樓層
nicowang 發表於 13-6-26 02:43
了解, 感謝大大回答
AB的DEBUG能力好像不強,也許我初學還不清楚,所以先保留說法,待日後驗證。
...

建議你看一下 http://www.amibroker.com/members/library/formula.php?id=1225
裡面有變數與Debug的使用
發表於 13-6-26 07:59 | 顯示全部樓層
nicowang 發表於 13-6-25 20:32
謝謝大大 ... 這段我看過,但一樣會被初始化

感謝 ^^

一般語言的全域變數所指,都是這樣啊
你要的是應該是像ini檔那樣的東西,那不叫全域變數

發表於 13-7-4 16:17 | 顯示全部樓層
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-23 09:08

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |