所以如果你的策略用C的話, 它會在這一秒符合條件買入
但在下一秒又會不符合
那你之後就會發現backtest時沒這個trade
但live trading會出現, 所以才說要加barcomplete去限制當根BAR跑完才入場
j 大, 那我明白了, 我開頭誤以為, close在整數時間才生成, 但其實 H,L,C都會在每時每刻更新. 所以我的case 1 and case 2 的buy signal 在每時每刻都有機會等於1 的. 因為很多時做back test, 假設我只有1 min data, 如果我buy signal 是根據H/L/C來判別, 實際上1mins data 的H/L 是那一分鍾內的High and low. 所以最make senese是buy at closeor next open. 所以在live traging 時, 我當然希望我入市是根據back test result, 所以便要用barcomplete 來控制在整數分鍾才入市. 有時我對於amibrokerembedded/implicit looping (e.g buy/sell) or explicit loop(eg, use i in forloop) 感到混亂, 我想知道這個barcomplete是要在每個loop 裡加, 還是它都是屬於implicit loop嗎? J 大可以示範一下如何加這個barcomplete嗎?
而在live trading中, 由於那些variable會每秒去run一次 所以在K大那條thread才會有這麼多討論
real time裡需用到staticvariable這些functions 再配合newbar去限制那分鐘的BAR只下單一次 我的理解是, 因為amibroker 每秒refresh 時, variable value will be cleared. 如果想keep 住variable value, 便要宣告static variable. 例如在trail stop 的例子中, 要被宣告成static 的variable便是 trailstop 了, 因為它記住了每個position 的stop level. J 大可以示範一個簡單宣告static variable 再配合newbar去限制那分鍾的bar 只下單一次給我看看嗎? 但相信我現在back test 層面也用不著, 唯有現在了解他, 將來live trading 時用… 但其實我現在也盡量build 一個model 不論在back test 還是在live trading 也用得著, 那就十分方便了….
IB是有實時數據, 而它是snapshot報價的, 好像廿幾元一個月
paper account是免費的, 只要你去IB開戶口然後去申請就可以了
開戶口亦很快, 我只用了3天就已開了
你上網申請完後, 香港IB會聯絡你去交些身份証明文件
然後很快會開通的
之後你存USD10000去activate個account就可以
小弟經驗尚淺, 還是一個苦學生, 財力不夠, usd10000是最少的金額去維持個戶口嗎? 其實暫時有冇這個account 也不要緊, 因為我暫時focus 的是back test 找strategies, 只不過看到j 大的post 後才發現live trading 跟back test 原來有這些不同. 小弟知道在這裡有世界期貨(包括恆指期貨)每秒的data 3x.com.tw/FRAME/DataBank/
我在想, 雖然我冇live trading account, 但因為有每秒的data, amibroker 是不是能用以上data來模擬一下live trading 呢? 即利用以上每條data去refresh 我的afl code 模擬live trading. 如果能夠, 我便能用以上data 來做一下”live trading”從而學習一下live trading 時會遇上的問題.
我試了一下用apply stop + equity(1) function 來plot graph,不知道j 大懂不懂, 不懂的話也可以參巧一下:
Buy=Cross(MA(C,10),MA(C,50)); Sell=Cross(MA(C,50),MA(C,10));
"buy="+WriteVal(Buy); "sell="+WriteVal(Sell)+"\n";
ApplyStop(stopTypeLoss,stopModePoint,15,1);
Plot(MA(C,10), "movingaverage 10", colorRed, styleLine); Plot(MA(C,50), "movingaverage 10", colorBlue, styleLine);
PlotShapes(shapeUpArrow*Buy,colorBrightGreen); PlotShapes(shapeDownArrow*Sell,colorRed);
Equity(1); // THIS EVALUATES STOPS PlotShapes(shapeDigit2*(Sell==2),colorBlack);
"buy="+WriteVal(Buy); "sell="+WriteVal(Sell);
"buy="+WriteVal(Buy)這個句子是把每條bar variable 的數值input 在interpretation window, 當滑鼠 click 向每條bar 時, 數值便能顯示在 interpretation window. 這個interperation window 很好, 對於我地了解程序運行很有幫助. 原來equity function 會revise 了sell/cover 的數值, 1 - regular exit
2 - max. loss
3 - profit target
4 - trailing
5 - n-bar stop
6 - ruin stop
如果applystop的type 是max loss,equity(1) 便會把2 字assign 在sell/cover.
|