2013年8月20日 星期二

金融市場的致富之路

這是最近寫給我戰友的一封信。從08年金融海嘯前夕踏入這悲慘市場,已經有六年了,今年就是當初暗地立誓給自己的最後通牒期限,失敗了就老老實實夾著尾巴回職場賣命吧,這是我最不情願的退路了,雖然是貪婪的出發點,但我就是想要自由。

為了這背水一戰隔年我就離開了職場,並頃全力開發研究工具,大概沒人能體會頃全力有多瘋狂吧,如果我說夢境裡有個迴路偵測出程式寫錯,然後我就像做惡夢般驚醒彈起來修改程式你信嗎?用走火入魔來形容應該也是剛好而已!研究的後期已經不再著重開發工具了,而是在交易邏輯,那更是會讓人驚醒的惡夢,有次誤以為自己找到了通往天堂的門卡,一覺醒來就以光速重摔地獄,心情低落更是難以言喻。

其實08年後我就沒再交易了,也不再看盤,只是偶爾關心一下收盤或趨勢,我的壓力與恐懼也完全不在盤勢上,我約束自己如果沒有找到穩定的方法就永遠不再下單,但坐吃山空好一陣子著實讓我煩惱最後通牒的日子無情的逼近。 從前常常會想問金融交易到底有沒有聖杯,都已經付出到這樣的地步了...還不夠嗎!?

...直到一個輾轉的緣份,讓我看到了十年之後...這一眼十年突然就讓我豁達了,甚至提早夾著尾巴回到了職場...這封信只有一個公式外加一些廢話。

財富 = 本金 x ((報酬率?風險) ^ 時間)

如果你的研究也遇到了瓶頸,試著細細品嚐這個公式吧!

2013年8月19日 星期一

腳本運作的流程

AC裡腳本的執行流程與一般Java程式的執行流程不同,Java程式語言的進入點是一個static的main函數,進入後流程的控制權就完全交給程式設計師了,一旦離開main函數,程式完全消滅,但AC的腳本不是這樣。

在AC裡執行Java腳本時,是以事件驅動的方式執行,大流程是由事件觸發,小流程是由設計師控制。所謂事件,舉例來說,像是腳本一開始被執行時處在尚未初始化的狀態,AC就會呼叫腳本裡的init函數(大流程),執行開發者的初始化流程,開發者可以趁機做一些變數的宣告或初始化的動作(小流程),當離開init函數後程式也不會結束,只是靜靜的等待下個事件的到來,下個事件很可能是'發生新的報價'或'游標移動到某根K棒'。以事件觸發的方式來驅動流程,可以很容易的區別每個函數的工作,我們先簡單看看常用的三個事件函數:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public class MyScript extends ScriptCore
{
 public void init()
 {
 }

 public void run()
 {
 }

 public void endOfPeriod(int type)
 {
 }
}


---


public void init()
通知腳本可以開始執行初始化流程。


public void run()
通知腳本有新的報價資料出現(報價可能來自歷史資料,或即時接收到的報價),這時候可以做一些指標的運算,或數值的分析等。


public void endOfPeriod(int type)
通知腳本某種週期結束(EO事件),像是EOB(1根K棒結束)、EOD(一天結束)、EOH(歷史報價結束)等。此時就可以做一對應的工作,例如當歷史報價結束時(EOH),可以檢查選股邏輯是否成立等。

---

另外還有些比較不常用上...


public void eventShowInput()
通知腳本有顯示參數選單的需求,這時後可以決定要輸出什麼樣的選單給使用者看。


public void eventHilightMovin(int t)
通知腳本滑鼠游標移動到某根K棒上,這時候可以更新圖格標題顯示的時間或報價訊息。

腳本的基礎框架

原始

1
2
3
4
5
6
public class MyScript extends ScriptCore
{
 public void init()
 {
 }
}

public class MyScript是主腳本固定的開頭,也就是一定要命名為MyScript,並且繼承(extends)ScriptCore,這樣就已經是一個可以被執行的腳本了。ScriptCore就是腳本核心,是任何MyScript一定要繼承的對象。

本人僅以個人知識經驗分享,多所無知,難免有錯,還請見諒。