關于全局變量的建議
作者:開拓者 TB 來源:cxh99.com 發布時間:2023年03月28日
-
咨詢內容:
隨著模型的發展,全局變量500個不夠用了,同時,多個策略,先每個策略留一段,但策略改進后,后面發現留少了,結果一個策略在多個段內,程序不易讀,又容易錯。造成這個情況是全部變量不能由用戶自己定義。
目前用GetGlobalVar和SetGlobalVar構建的全局變量,在每個bar時,可以看見其變化過程,明顯這些全局變量是用序列變量來實現的,因此,500,占用了很大空間,估計也是你們不愿意繼續擴大全局變量數量的原因。
實際上,目前這種GetGlobalVar和SetGlobalVar的全部變量是需要的,但不要那么多,有10到20個夠了,只用于調試程序,但程序中需要大量的由用戶自己定義的全局變量,這種變量不需要記錄中間變化過程,因此,只需要把這個變量值記錄下來,在全局可以調用,每個變量只占用幾個字節,因此不論定義多少,占用空間極少。
不知道,tb內部是什么機制,開發一般意義上的全局變量那么難。
?
?來源:CXH99.COM
-
TB技術人員:
頂
?
-
TB客服:
我也深受其害 做了個模型 tm 快氣死了 用a函數加全局變量怎么搞都是重復發單
?
-
網友回復:
Params? ?? ?? ?? ?? ?? ?? ?? ???
Vars? ?? ?? ?? ?
? ?? ? NumericSeries SX;
? ?? ? NumericSeries DP;
? ?? ? NumericSeries KP;? ?? ?
? ?? ?? ?? ?? ?? ?? ?? ? //(CurrentTime-A_OrderTime)//平臺時間-委托單時間? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?
Begin? ?? ?? ?? ?? ?? ?? ?
? ?? ?? ?
? ?? ?? ?
? ?SX=20150701;
If(Date>=SX){setglobalvar(8,81);}? ?
? ?? ?? ?Else{setglobalvar(8,80);}? ?? ?
? ?? ?? ?? ?? ?? ?? ?? ?
? ?? ?? ?if(Getglobalvar(8)==80&&A_BuyPosition==0&&A_SellPosition==0&&(CurrentTime-A_OrderTime)>0.000020)? ?//賦予初始值
? ?? ???{setglobalvar(0,0);
? ???setglobalvar(1,10);
? ???setglobalvar(2,20);
? ???setglobalvar(3,30);
? ???setglobalvar(4,40);
? ???setglobalvar(5,50);}
? ?? ?? ?
? ?? ?? ?
? ?? ?? ?
If(A_BuyPosition==0&&A_SellPosition==0&&Getglobalvar(0)==0)
? ?{ A_SendOrder(Enum_Buy, Enum_Entry, 1 ,Q_AskPrice );??//多頭開倉??
? ? A_SendOrder(Enum_Sell, Enum_Entry,1 ,Q_BidPrice);? ? //空頭開倉??
? ?? ?? ?setglobalvar(0,1); }
根本控制不住重復發單??初始值就不知道放在那里才能不被初始化
?
-
網友回復:
一堆 SetGlobalVar(0,GetGlobalVar(1)) , 原來可以簡單的寫出 A = B 的,這可讀性差太遠了,TB再不解決這問題,前途堪憂 |