COCO研究院

 找回密碼
 註冊
搜索
樓主: kilroy

[教學] [分享] 用AB踏入外期程式交易

  [複製鏈接]
 樓主| 發表於 14-10-25 21:01 | 顯示全部樓層
joshsmi 發表於 14-10-25 20:46
I was not talking to you but to that skyler dude who is constantly looking for bugs because of his i ...

I know you're doing good for us, keep going. ;-)
發表於 14-10-27 17:06 | 顯示全部樓層
kilroy 發表於 14-10-24 17:52
1. 像是 if 或是 for 迴圈的
    你要放 array 就要用 [] 這個東西

K大不好意思我想我沒有把問題描述的太清楚
造成您跟J兄的誤解

問題1.
我知道從陣列取值時指定 index 來取
只是我有些疑問
這三個值在回測時跑出來的差異
SelectedValue(MA20_UP)
MA20_UP[LastValue( BarIndex() )]
LastValue(MA20_UP)

假設回測的時間區間內有10根BAR
使用 _Trace() 顯示值的資料時


SelectedValue(MA20_UP) :
在回測中是沒有意義的


MA20_UP[LastValue( BarIndex() )]
在回測時
每根BAR開始前會跑AFL
那每根的
LastValue( BarIndex() ) = 9
還是當下 BarIndex() =
LastValue( BarIndex() )
即會列出 LastValue( BarIndex() ) = 1 ~ LastValue( BarIndex() ) = 9

LastValue(MA20_UP)
顯示 MA20_UP[0] ~ MA20_UP[9]

--------------------------------
在開始接觸AB做回測
一直有個疑問


for (i =0 ; i < BarCount ;i++ )
{
  //your formula
}


假設回測的時間區間內有10根BAR
回測是在K棒起始前會執行AFL

在BarCount = 10
也就是一根BAR 迴圈內的運算10次
因此 10 X 10 = 100 即跑了100次運算
是如此嗎?


--------------------
我之前已經在
Tools -> Preferences -> AFL 裡
_TRACE() output 勾選 Internal 和 External (DebugView)
因為我也記得只要勾這二個
所以才會發問
2014-10-27_145939.jpg









 樓主| 發表於 14-10-27 18:40 來自手機 | 顯示全部樓層
本帖最後由 kilroy 於 14-10-27 18:41 編輯
skyler 發表於 14-10-27 17:06
K大不好意思我想我沒有把問題描述的太清楚
造成您跟J兄的誤解



我的理解能力不是很好 ^^"

---

For 迴圈是這樣子的

i 是設定陣列的值

barcount是當根k的值

設定 i=0就是第一根開始跑

i會一直 ++上去

所以每根 k 會跑一次迴圈內的東西

假設範圍是 10根k

那迴圈會跑 10次

---

範例,取當根k的 close

語法就是 Close

取上一根k的 close值是 Close[i-1]

但此時 for( i=1; ....) 才行

---


Barindex() 會以該K線是圖表的第幾根K為主


如果是要抓當根k的barindex值

可以用 x=barindex();

For迴圈裡就是 x[ i ] 表示




有錯誤請指正^^",參考看看了~

評分

參與人數 1金錢 +2 收起 理由
skyler + 2 感謝分享

查看全部評分

發表於 14-10-28 00:49 | 顯示全部樓層
本帖最後由 joshsmi 於 14-10-28 00:52 編輯

What is that noob trying to achieve?
Why is he still using wrong stuff?
Is he still not getting it?
Google translator prints out some gibberish that makes not much translated sense.

I repeat again.

Lastvalue ALWAYS outputs last value of array. ALWAYS!
SelectedValue in analysis ALWAYS outputs last value of array. ALWAYS! You can not select values in analysis window via selectedvalue().


And this is improper use
MA20_UP[LastValue( BarIndex() )]

if you wanna get last value via [..] then use barcount-1
MA20_UP[barcount-1]

But that again will ALWAYS output last value. ALWAYS.


評分

參與人數 1金錢 +2 收起 理由
skyler + 2 u don't understand what i mean . thanks

查看全部評分

發表於 14-10-28 09:16 | 顯示全部樓層
本帖最後由 skyler 於 14-10-28 09:19 編輯
kilroy 發表於 14-10-27 18:40
我的理解能力不是很好 ^^"

---

哈~沒闗係啦~
謝謝您的回覆
我只是想了解AB在回測的運行而已
感恩~


joshsmi 發表於 14-10-28 00:49
What is that noob trying to achieve?
Why is he still using wrong stuff?
Is he still not getting it? ...

if u don't understand u should shut up !
thanks!

發表於 14-10-31 00:23 | 顯示全部樓層
本帖最後由 joshsmi 於 14-10-31 00:26 編輯

Then explain in English since most Chinese here don't understand proper AFL programming anyway.
Using Selectedvalue and Lastvalue in Analysis simply is plain stupid.
What is the reproducible code? What are you trying to achieve?
發表於 15-3-11 12:12 | 顯示全部樓層
kilroy大大的好文,感謝萬分
發表於 15-3-11 12:35 | 顯示全部樓層
有個問題要請教kilroy大大,不知道用AB的Scan功能來進行自動交易,AFL代碼會掃描所有的數據嗎?如何判斷portfolio中有的商品沒有missing bars呢?我研究過ADK的代碼,好像AB只是對Charting裡面Active的symbol進行持續的更新數據,而對非Active的symbol數據並不是持續的更新.
發表於 15-3-11 19:10 | 顯示全部樓層
開啟Realtime Quote視窗不要關閉
把你要監控的symbol全部加進去Realtime Quote視窗
這樣應該就不會漏資料了
 樓主| 發表於 15-3-11 19:52 | 顯示全部樓層
本帖最後由 kilroy 於 15-3-11 19:53 編輯
citrix 發表於 15-3-11 12:35
有個問題要請教kilroy大大,不知道用AB的Scan功能來進行自動交易,AFL代碼會掃描所有的數據嗎?如何判斷por ...

用 SCAN 會掃 symbol

你可以 scan all symbols 或是 current symbol 或是 filter (自己選取自定要掃的 symbol)

至於如何判斷是否某個商品斷線的話

應該說,如果你的即時報價源斷了,所有商品都不會動才是

除非是某個交易所掛了,沒給報價或是暫停交易,該交易所下的商品報價才不會跑

---
能判斷的方式大概就是看右下角報價的連線狀況

或是像上面提到的 realtime quote 去看

但是基本上程式交易是無法一直都守在電腦前監控的

真的還是建議使用 eSignal (如果你想做外期的話)


參考看看了
發表於 15-3-12 03:18 | 顯示全部樓層
kilroy 發表於 15-3-11 19:52
用 SCAN 會掃 symbol

你可以 scan all symbols 或是 current symbol 或是 filter (自己選取自定要掃的 sy ...

用了Scan這樣辦法,很好用,但是現在又有另外一個問題了,我發現chart裡面active的那個symbol數據不更新了,需要手動F5 refresh才行,在preference設置裡面把Realtime chart refresh interval 試著成1sec或者5sec,都不好用,感覺chart像是freeze了一樣,F5 refresh一下就reload所有的數據了,不知道各位大大有沒有碰到這種情況,有好的解決辦法沒有?
發表於 15-3-12 18:33 | 顯示全部樓層
citrix 發表於 15-3-11 12:35
有個問題要請教kilroy大大,不知道用AB的Scan功能來進行自動交易,AFL代碼會掃描所有的數據嗎?如何判斷por ...

你說的是 realtime quote嗎?
realtime是給人看的,不會進database
還有要update charts要呼叫::SendMessage,就要看每個data feed plugin怎麼寫了
發表於 15-3-12 22:49 | 顯示全部樓層
lwhuang 發表於 15-3-12 18:33
你說的是 realtime quote嗎?
realtime是給人看的,不會進database
還有要update charts要呼叫::SendMess ...

realtime data插件是自己開發的,然後到自己開發的數據服務器端取數據,在AB裡面設定每隔1 sec更新一次chart但是發現很多時候chart的更新會滯後1-5分鐘不等,不知道數據插件如何呼叫sendmessage,有示例嗎?
發表於 15-3-12 23:15 | 顯示全部樓層
我的測試是用DDE
沒有顯示在chart的symbol可能會發生資料庫停止更新的狀況
我發現只要把該symbol加入realtime quote視窗而且保持該視窗不隱藏或關閉
就能保證資料庫會持續更新即使chart沒有顯示該symbol

至於chart的refresh interval跟資料庫更新沒關係
那是指chart的refresh頻率而已
例如你設定refresh interval 5 sec而這5秒內有10筆DDE tick進來
你去看資料庫依然可以看到10筆tick資料
如果你希望有資料進來盡快更新chart可以把它設為0 sec
這時就看你的chart AFL的複雜度決定chart的更新速度有多快
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

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

GMT+8, 24-11-22 11:26

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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