HSQL程式教學--範例說明(策略實作編1)

範例1.
本範例以MACD指標(參數為10,10,20)為操作標的,當MACD指標黃金交叉時多單建倉,當MACD指標死亡交叉時空單建倉。

10 If 前1_5分_MACD交叉( 10 , 10 , 20 ) = 是 Then 
20  If 交叉類型 = 1 Then 
30   If 目前部位( 倉位多空 ) <= 0 Then 
40    Show [ K線下方 , 多 ] 
50    Va = 5分_開盤價 
60    操作訊號( 空單平倉 , 1口 , Va ) 
70    操作訊號( 多單建倉 , 1口 , Va ) 
80   End If 
90  Else 
100   If 目前部位( 倉位多空 ) >= 0 Then 
110    Show [ K線上方 , 空 ] 
120    Va = 5分_開盤價 
130    操作訊號( 多單平倉 , 1口 , Va ) 
140    操作訊號( 空單建倉 , 1口 , Va ) 
150   End If 
160  End If 
170 End If 

下載式檔1001.rda (請下載至Huntap資#料匣內)

說明:
行號10 當前1根5分鐘線產生MACD交叉時執行行號20,否則結束執行;
   至於為什麼是檢查前1根K線而不是當根K線?因為若是當根K線,因為K線還在進行當中,價位可能忽上忽下,有可能造成MACD
   指標忽而交叉忽而分開,如此會造成訊號跳動的問題發生。
行號20 如果是黃金交叉執行行號30,否則執行行號100。
行號30 如果目前手中部位為空單或是空手則執執行行號40,否則結束執行。
行號40 在K線下方顯示一個「多」字。
行號50 變數Va等於目前K線之開盤價。
行號60 發佈空單平倉之操作訊號,平倉價位在Va(即開盤價);若目前為空手,系統內定不會處理空單平倉之動作。
行號70 發佈多單建倉之操作訊號,建倉價位在Va(即開盤價)。
....
行號100 如果目前手中部位為多單或是空手則執執行行號110,否則結束執行。
行號110 在K線上方顯示一個「空」字。
行號120 變數Va等於目前K線之開盤價。
行號130 發佈多單平倉之操作訊號,平倉價位在Va(即開盤價);若目前為空手,系統內定不會處理多單平倉之動作。
行號140 發佈空單建倉之操作訊號,建倉價位在Va(即開盤價)。

以上策略程式可在K線圖上即時顯示多空訊號,並且可以進行績效回測,畫面如下:



※加入下單機程式

以範例1程式為主體,介紹如何加入下單機程式:
(本範例是以雅策下單機為例,其下單機之命令檔為c:\cur_cmd.txt,格式為yyyy/mm/dd hh:nn 多空部位 )

10 If 前1_5分_MACD交叉( 10 , 10 , 20 ) = 是 Then 
20  If 交叉類型 = 1 Then 
30   If 目前部位( 倉位多空 ) <= 0 Then 
40    Show [ K線下方 , 多 ] 
50    Va = 5分_開盤價 
60    操作訊號( 空單平倉 , 1口 , Va ) 
70    操作訊號( 多單建倉 , 1口 , Va ) 
80    S1$ = '1' 
90    S2$ = Cstr( Va ) 
100    輸出命令檔( c:\cur_cmd.txt , [yyyy]/[mm]/[dd]□[hh]:[nn]:[ss]□[S1$]□[S2$] , 單次 ) 
110   End If 
120  Else 
130   If 目前部位( 倉位多空 ) >= 0 Then 
140    Show [ K線上方 , 空 ] 
150    Va = 5分_開盤價 
160    操作訊號( 多單平倉 , 1口 , Va ) 
170    操作訊號( 空單建倉 , 1口 , Va ) 
180    S1$ = '-1' 
190    S2$ = Cstr( Va ) 
200    輸出命令檔( c:\cur_cmd.txt , [yyyy]/[mm]/[dd]□[hh]:[nn]:[ss]□[S1$]□[S2$] , 單次 ) 
210   End If 
220  End If 
230 End If 


下載式檔1021.rda (請下載至Huntap資料匣內)

 

※加入進場價位及警示聲響

以範例1程式為主體,介紹如何加入顯示進場價位及警示聲響::

10 If 前1_5分_MACD交叉( 10 , 10 , 20 ) = 是 Then 
20  If 交叉類型 = 1 Then 
30   If 目前部位( 倉位多空 ) <= 0 Then 
40    Va = 5分_開盤價 
50    Vb = 5分_最低價 - 10 
60    S2$ = '多' + Cstr( Va ) 
70    顯示文字[ S2$ , 主畫面 , ( 0 , Vb ) , 字型: 新細明體 , 大小: 009 , 顏色: 16777215 ] 
80    操作訊號( 空單平倉 , 1口 , Va ) 
90    操作訊號( 多單建倉 , 1口 , Va ) 
100    If 最後K線 = 是 And 單K計數器( 目前K線 , 1 ) = 0 Then 
110     播放聲音( ALARM.WAV ) 
120     單K計數器( 目前K線 , 1 ) = 1 
130    End If 
140   End If 
150  Else 
160   If 目前部位( 倉位多空 ) >= 0 Then 
170    Va = 5分_開盤價 
180    Vb = 5分_最高價 + 15 
190    S2$ = '空' + Cstr( Va ) 
200    顯示文字[ S2$ , 主畫面 , ( 0 , Vb ) , 字型: 新細明體 , 大小: 009 , 顏色: 16777215 ] 
210    操作訊號( 多單平倉 , 1口 , Va ) 
220    操作訊號( 空單建倉 , 1口 , Va ) 
230    If 最後K線 = 是 And 單K計數器( 目前K線 , 1 ) = 0 Then 
240     播放聲音( ALARM.WAV ) 
250     單K計數器( 目前K線 , 1 ) = 1 
260    End If 
270   End If 
280  End If 
290 End If 

下載式檔1003.rda (請下載至Huntap資料匣內)

說明:
行號50 將目前K線之最低價減10點當做多訊文字顯示位置,存放於變數Vb。
行號60 組合文字字串S2$=文字「多」再加上開盤價,其中開盤價Va因為是數字,所以必須透過Cstr函數轉換為文字。
行號70 在K線圖上顯示多方訊息。
行號100 如果是最後一根K線並且單K計數器(1)為零,則執行行號110,其中單K計數器(1)用來控管警示聲響是否已發出。
行號110 發出警示聲響,聲音檔案c:\huntap/wav/ALARM.WAV。
行號120 單K計數器(1)標示為1,表示已發出警示聲響。

 

※加入即時績效資訊

以範例1程式為主體,介紹如何在K線圖右方之顯示資料欄加入目前多空部位及即時績效,如下圖:

10 If 前1_5分_MACD交叉( 10 , 10 , 20 ) = 是 Then 
20  If 交叉類型 = 1 Then 
30   If 目前部位( 倉位多空 ) <= 0 Then 
40    Show [ K線下方 , 多 ] 
50    Va = 5分_開盤價 
60    操作訊號( 空單平倉 , 1口 , Va ) 
70    操作訊號( 多單建倉 , 1口 , Va ) 
80   End If 
90  Else 
100   If 目前部位( 倉位多空 ) >= 0 Then 
110    Show [ K線上方 , 空 ] 
120    Va = 5分_開盤價 
130    操作訊號( 多單平倉 , 1口 , Va ) 
140    操作訊號( 空單建倉 , 1口 , Va ) 
150   End If 
160  End If 
170 End If 
180 
190 顯示資訊[ 目前部位 , 序號: 5 , 大小: 009 , 文字色: 0 , 背景色: 16777215 , 置中 , 字型: 新細明體 ] 
200 If 目前部位( 倉位多空 ) = 1 Then 
210  顯示資訊[ 多單 , 序號: 6 , 大小: 009 , 文字色: 255 , 背景色: 16777215 , 置中 , 字型: 新細明體 ] 
220 Else 
230  顯示資訊[ 空單 , 序號: 6 , 大小: 009 , 文字色: 32768 , 背景色: 16777215 , 置中 , 字型: 新細明體 ] 
240 End If 
250 顯示資訊[ 建倉價位 , 序號: 8 , 大小: 009 , 文字色: 0 , 背景色: 16777215 , 置中 , 字型: 新細明體 ] 
260 Vb = 目前部位( 第 1 次成本價位 ) 
270 顯示資訊[ Vb , 序號: 9 , 大小: 009 , 文字色: 12615680 , 背景色: 16777215 , 置中 , 字型: 新細明體 ] 
280 顯示資訊[ 目前績效 , 序號: 11 , 大小: 009 , 文字色: 0 , 背景色: 16777215 , 置中 , 字型: 新細明體 ] 
290 If 目前部位( 倉位多空 ) = 1 Then 
300  Vc = 5分_收盤價 - Vb 
310 Else 
320  Vc = Vb - 5分_收盤價 
330 End If 
340 If Vc >= 0 Then 
350  顯示資訊[ Vc , 序號: 12 , 大小: 009 , 文字色: 255 , 背景色: 16777215 , 置中 , 字型: 新細明體 ] 
360 Else 
370  顯示資訊[ Vc , 序號: 12 , 大小: 009 , 文字色: 32768 , 背景色: 16777215 , 置中 , 字型: 新細明體 ] 
380 End If 

下載式檔1004.rda (請下載至Huntap資料匣內)

說明:
行號190 在資訊欄位第5列,顯示「目前部位」文字。
行號200 ~ 240 在資訊欄位第6列,顯示目前部位多空。
行號250 在資訊欄位第8列,顯示「建倉價位」文字。
行號260 ~270 在資訊欄位第9列,顯示建倉價位。
行號280 在資訊欄位第11列,顯示「目前績效」文字。
行號290 ~ 380 在資訊欄位第12列,顯示目前績效。。