2016年5月13日 星期五

acs-api快速入門(2) - ScriptBasic

承接上篇未完的acscriptcore,還欠ScriptBasic沒介紹到。

ScriptBasic - 腳本基礎
ScriptBasic中沒有任何的執行機制,純粹就是宣告常數,與一些常用的數學與系統函數。ScriptCore也繼承了這個類別,所以這些常數與函數都是可以直接使用的。

---

基礎數學運算。
函數說明
double abs(double a)取絕對值
long round(double a)四捨五入
double round(double value, int digi)保留小數的四捨五入
double ceil(double a)無條件進位
double floor(double a)無條件捨去
double pow(double a, double n)次方運算
double sqrt(double a)開根號
double log(double a)取對數
double log(double a, double base)取對數
double random(double min, double max)取隨機值
double chgrate(Number value, Number base)回傳變動率


---

"動態陣列"運算。寫指標或策略時這部分是最常用的。
因為同名函數的變形太多,這裡僅列出函數名稱,並以avg做概括說明。
函數名稱說明
highest取最大值
lowest取最小值
sum取總和
avg取平均值
median取中位數
stddev取標準差
linear取線性回歸值
change取變動值
change_rate取變動率

函數說明
double avg(NumSet nset, int range)取nset陣列在range內的平均值
double avg(NumSet nset, int shift, int range)取nset陣列位移shift在range內的平均值
double ma5 = avg(close, 0, 5);



在函數參數裡有一個叫NumSet(數字集合)類別,其實就是MovinNum的父類別,所以丟"動態陣列"進去是完全ok的。

這裡大致解釋一下t跟sft的關係。t是我們比較習慣用來描述時間進行的方向,t等於零就是"最早的時候",t越大表示時間經過越久。而sft的概念剛好顛倒,sft等於零是最"接近現在的時候",sft越大表示離現在越遠,如下圖所示。
\前天昨天今天
t012
sft210
close100105108
在看K線時通常比較會用sft的角度看,也就是以今天為基準往以前看,所以這些函數也是一樣,例如avg(close, 1, 2),就是說基準定在昨天(sft等於1),取2日的平均值,也就是100跟105的平均值。

---

Java原生數字陣列運算
因為同名函數的變形太多,這裡僅列出函數名稱,並以highest做概括說明。
函數名稱說明
highest取最大值
lowest取最小值
sum取總和
avg取平均值
median取中位數
stddev取標準差
linear取線性回歸值


函數說明
double highest(double value, double... arr)highest(1.5, 4.3, 3.1) 回傳4.3
double highest(double[] arr)取最陣列中大值


---

時間函數。
函數說明
int YMD(Date date)日期轉數字 例如20130101
int HMS(Date date)日期轉數字 例如134500
long YMDHMS(Date date)日期轉數字 例如20130101134500
int getTimeOfDay(Date date)取得日期當天經過的毫秒數
int date2Int(Date date, String fmt)日期轉數字
String date2Str(Date date, String fmt)日期格式化
Date str2Date(String str, String fmt)日期字串轉物件
boolean sameDate(Date date1, Date date2)檢查兩個日期是否為同一天
boolean sameDate(long time1, long time2)檢查兩個日期是否為同一天
boolean sameHour(Date date1, Date date2)檢查兩個日期是否為同一小時
long daysBetween(Date date1, Date date2)取得兩日期的天數差



便捷條件或選擇。
函數說明
T iif(boolean bool, T a, T b)便捷條件。若條件成立則回傳a,否則回傳b
T iif(double a, double b, T r1, T r2, T r3)便捷條件。若數字a大於數字b則回傳r1,或數字a小於數字b則回傳r2,否則回傳r3
T select(int idx, T... obj)便捷選擇。回傳與索引值相當序數的物件, 例如select(0, a, b, c)會回傳a



排序與搜尋。
函數說明
T sort(T coll, int keyidx, boolean sortAsc)排序 (排序的集合需繼承或實作Sortable)
int find(T sroted_coll, int keyidx, boolean sortAsc, int find_type, double target)搜尋 (排序的集合需繼承或實作Sortable).
double[] sort(double[] arr)數字陣列排序. (衍生於Java的Arrays物件)
int[] sort(NumSet num, int shift, int range, boolean sortAsc)排序後回傳索引(偏移位置)陣列.
boolean isS2B(double... arr)檢查數字排列是否由小到大
boolean isB2S(double... arr)檢查數字排列是否由大到小
boolean isSeq(double... arr)檢查數字排列是否有順序



其他函數。
函數說明
void sleep(int us)暫停(微秒)
String hex(int value)十進制數字轉十六進制字串
String hex(Color color)顏色轉十六進制字串
Color transp(Color color, int transp)顏色加入透明度(透明度 0~255 0是完全透明)
Point getCrossPoint(Point L1A, Point L1B, Point L2A, Point L2B)取得兩線交叉座標
void mailto(String usermail, String password, String toaddr, String subject, String contents)寄出郵件 (僅支援gmail)
void sound(File file)撥放聲音
String[] getSymbolCates()取得符號分類選單陣列(做選單用)
String[] getCateSymbols(String cate)取得特定符號分類的全部符號
String[] listSymbol(String match)列出符號
String getSymbolName(String symbol)取得符號名稱
boolean confirmDialog(String title, String msg)彈出確認對話框
void msgDialog(String title, String msg)彈出訊息對話框
String inpDialog(String title, String msg, String init_value)彈出字串數入對話框
String fmtNum1(double value)鉅額數字格式化1 例如'1億2345萬'
String fmtNum2(double value)鉅額數字格式化2 例如'1.23億'
String readTextFile(File file)讀取文字檔(一次讀完)
String readTextFile(File file, String charsetName)讀取文字檔(一次讀完)
boolean saveTextFile(String text, File file)寫入文字檔
boolean saveTextFile(String text, File file, String charsetName)寫入文字檔
boolean saveImage(Component comp, String type, int width, int height, File file)儲存圖檔
void webBrowser(String url)開啟瀏覽器



--以下為常數定義--


方位。現僅用於畫字串(drawString)時指定方位。
型別名稱說明
intCENTRAL中央
intTOP
intBUTTON
intLEFT
intRIGHT
intTOP_RIGHT右上
intTOP_LEFT左上
intBUTTON_RIGHT右下
intBUTTON_LEFT左下



列表方向。用於列表物件,寫法大致如tbl.setListMode(TBL_LIST_UP);。
型別名稱說明
intLIST_DOWN向下表列
intLIST_UP向上表列



資料刻度。
型別名稱說明
intPRECISE_AUTO自動(通常會選擇'日')
intPRECISE_DAY
intPRECISE_MIN
intPRECISE_SEC
intPRECISE_TICKTick



K線週期。
名稱說明
PERIOD_AUTO自動(通常會選擇'日')
PERIOD_TICKTick
PERIOD_SEC
PERIOD_MIN
PERIOD_HOUR小時
PERIOD_DAY
PERIOD_WEEK
PERIOD_MONTH
PERIOD_QUARTER
PERIOD_HALFYEAR半年
PERIOD_YEAR
PERIOD_VOL
PERIOD_OC_CHANGE開收價格變動
PERIOD_OC_CHANGER開收價格變動百分比
PERIOD_HL_CHANGE高低價格變動
PERIOD_HL_CHANGER高低價格變動百分比
PERIOD_CUSTOM自訂



排序序向。
型別名稱說明
intS2B正序(小到大)
intB2S倒序(大到小)



搜尋。
型別名稱說明
intFIND_EQUAL相等
intFIND_BEFORE相等 或 前一個
intFIND_AFTER相等 或 後一個



過濾。
型別名稱說明
booleanIN_LIST名單內
booleanOUT_LIST名單外



例外(Exception)處理方式。
型別名稱說明
intEX_WRN顯示警告後繼續執行
intEX_ERR稍後中斷,顯示警告後走完這次執行再中斷
intEX_INT立即中斷,顯示警告後立即中斷



週期結束(EO)類型。
型別名稱說明
intEOBend of bar
intEODend of day
intEOWend of week
intEOMend of month
intEOYend of year
intEOHend of history
intEOAHend of all history(包含InnerCore)



特定常數轉為有意義文字陣列。
型別名稱說明
String[]PERIOD_TEXTK線週期文字陣列
String[]PRECISE_TEXT資料刻度文字陣列
String[]DAY_TEXT星期文字陣列
String[]EO_TEXTEO類型文字陣列



其他。
型別名稱說明
StringAC_LOCATION程式執行路徑

沒有留言:

張貼留言

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