註冊  登入
 

 搜尋

迷你方式顯示論壇 RSS訂閱此版新訊息  

加入收藏 

使用幫助 

聯繫我們 
首頁 >> 程式交易 >> 論壇主區 >> HSQL語言討論區 >> 查看文章
 新帖 新投票 回覆文章 上篇 重新整理 下篇  


 97128: 此主題共有20帖 此頁12帖 每頁12帖
 


 主題:HSQL程式語言--策略實作範例(一) - 複製地址
 

帥哥,離線

Hunta 



門派 管理員
職務 總版主
級別 法老
聲望 +100000
財富 100002
積分 101915
經驗 642850
文章 1733
註冊 09-04-10 17:15
發表: 2009-04-20 23:11:54 人氣:137098樓主

HSQL程式語言--策略實作範例(一)

[COLOR=#333333][SIZE=2]本範例以MACD指標(參數為10,10,20)為操作標的,當MACD指標黃金交叉時多單建倉,當MACD指標死亡交叉時空單建倉。[/SIZE][/COLOR]
[COLOR=#333333][SIZE=2][/SIZE][/COLOR]
[COLOR=#333333][SIZE=2]範例網頁 [URL=http://www.huntasoft.com/hsp/lesson13.htm]http://www.huntasoft.com/hsp/lesson13.htm[/URL][/SIZE][/COLOR]
[COLOR=#333333][SIZE=2][/SIZE][/COLOR]

離線

bw5168 



級別 聖騎士
積分 462
經驗 49138
文章 331
註冊 09-04-16 16:35
發表: 2009-06-09 09:52:252

下單程式寫的很清楚!很棒!推一下 感謝囉

首先你要先判斷倉位(倉位:空手0,多單1,空單-1)
1. 作多 :首先判斷倉位空單 or 空手 >>  (if 目前倉位 <=0)
  操作訊號( 空單平倉 , 1口 , Va )然後  空單-1轉平倉>> 0 
  操作訊號( 多單建倉 , 1口 , Va )     空手 0轉多單>> 1

2.作空:  首先判斷倉位多單 or 空手 >>  (if 目前倉位 >=0)
   操作訊號( 多單平倉 , 1口 , Va )然後 多單1轉平倉 >> 0
   操作訊號( 空單建倉 , 1口 , Va )    空手0轉多單 >> 1



帥哥,離線

mingyi1973 



級別 職業俠客
積分 72
經驗 1777
文章 64
註冊 09-06-15 13:52
發表: 2009-06-15 14:31:373

我想請教:
如果我想要MACD指標一旦黃金交叉後就下單,然後三根k線以內不做反手或平倉的動作,要怎麼寫?

帥哥,離線

mingyi1973 



級別 職業俠客
積分 72
經驗 1777
文章 64
註冊 09-06-15 13:52
發表: 2009-06-15 17:49:364

請教:
無論多空一旦下單後10分鐘之內不做反手或平倉要的動作怎麼寫?

帥哥,離線

Hunta 



門派 管理員
職務 總版主
級別 法老
聲望 +100000
財富 100002
積分 101915
經驗 642850
文章 1733
註冊 09-04-10 17:15
發表: 2009-06-15 18:43:495

[QUOTE][B]下面引用由[U]mingyi1973[/U]發表的內容:[/B]

我想請教:
如果我想要MACD指標一旦黃金交叉後就下單,然後三根k線以內不做反手或平倉的動作,要怎麼寫?[/QUOTE]
程式碼如下,下載連結 [URL=http://www.huntasoft.com/hsp/9003.rda]http://www.huntasoft.com/hsp/9003.rda[/URL]
  10 Va = 5分_開盤價 
  20 
  30 // 多單進場 
  40 If 目前部位( 倉位多空 ) <= 0 Then 
  50  If 前1_5分_MACD交叉( 10 , 10 , 20 ) = 是 And 交叉類型 = 1 Then 
  60   Vb = 4 
  70   If 目前部位( 倉位多空 ) < 0 Then 
  80    Vb = K線序號( 目前K線 ) - 目前部位( 第 1 次建倉K線序號 ) 
  90   End If 
 100   If Vb >= 4 Then 
 110    Show [ K線下方 , ↑ ] 
 120    操作訊號( 空單平倉 , 1口 , Va ) 
 130    操作訊號( 多單建倉 , 1口 , Va ) 
 140   End If 
 150  End If 
 160 End If 
 170 
 180 // 空單進場 
 190 If 目前部位( 倉位多空 ) >= 0 Then 
 200  If 前1_5分_MACD交叉( 10 , 10 , 20 ) = 是 And 交叉類型 = -1 Then 
 210   Vb = 4 
 220   If 目前部位( 倉位多空 ) > 0 Then 
 230    Vb = K線序號( 目前K線 ) - 目前部位( 第 1 次建倉K線序號 ) 
 240   End If 
 250   If Vb >= 4 Then 
 260    Show [ K線上方 , ↓ ] 
 270    操作訊號( 多單平倉 , 1口 , Va ) 
 280    操作訊號( 空單建倉 , 1口 , Va ) 
 290   End If 
 300  End If 
 310 End If 
 320 
 330 // 多單出場 
 340 If 目前部位( 倉位多空 ) > 0 Then 
 350  If 前1_5分_MACD交叉( 10 , 10 , 20 ) = 是 And 交叉類型 = -1 Then 
 360   Vb = K線序號( 目前K線 ) - 目前部位( 第 1 次建倉K線序號 ) 
 370   If Vb >= 4 Then 
 380    Show [ K線下方 , ◎ ] 
 390    操作訊號( 多單平倉 , 1口 , Va ) 
 400   End If 
 410  End If 
 420 End If 
 430 
 440 // 空單出場 
 450 If 目前部位( 倉位多空 ) < 0 Then 
 460  If 前1_5分_MACD交叉( 10 , 10 , 20 ) = 是 And 交叉類型 = 1 Then 
 470   Vb = K線序號( 目前K線 ) - 目前部位( 第 1 次建倉K線序號 ) 
 480   If Vb >= 4 Then 
 490    Show [ K線上方 , ◎ ] 
 500    操作訊號( 空單平倉 , 1口 , Va ) 
 510   End If 
 520  End If 
 530 End If
 

帥哥,離線

Hunta 



門派 管理員
職務 總版主
級別 法老
聲望 +100000
財富 100002
積分 101915
經驗 642850
文章 1733
註冊 09-04-10 17:15
發表: 2009-06-15 18:45:556

[QUOTE][B]下面引用由[U]mingyi1973[/U]發表的內容:[/B]

請教:
無論多空一旦下單後10分鐘之內不做反手或平倉要的動作怎麼寫?[/QUOTE]
那就是2根5分鐘K線內不反手或平倉,請比照上例改一下即可。

帥哥,離線

mingyi1973 



級別 職業俠客
積分 72
經驗 1777
文章 64
註冊 09-06-15 13:52
發表: 2009-06-15 19:39:047

以下3點請教:
1.請問是將這裡:480   If Vb >= 4 Then 
  改為:480   If Vb >= 3 Then 就會變成2根5分鐘K線內不反手或平倉嗎?
2.如果是用This Bar可以嗎?
3.既然多單進場時已經空單平倉了,而空單進場時已經多單平倉了,那您最後為何還要再加多單出場和空單出場呢?

帥哥,離線

Hunta 



門派 管理員
職務 總版主
級別 法老
聲望 +100000
財富 100002
積分 101915
經驗 642850
文章 1733
註冊 09-04-10 17:15
發表: 2009-06-15 23:13:248

1.是的。
2.可以,但是會較複雜,編寫程式時要注意更多細節,否則很容易出錯,可以參考本論壇其他相關This Bar的討論。
3.沒錯,可以不用。(被你找到BUG[EM04])

帥哥,離線

mingyi1973 



級別 職業俠客
積分 72
經驗 1777
文章 64
註冊 09-06-15 13:52
發表: 2009-06-16 13:26:569

請教
我想以兩口操作
條件是5分_均線黃金交叉( 10 , 40 )則做多兩口
一旦5分_均線死亡交叉( 10 , 20 )先出一口
等5分_均線死亡交叉( 10 , 40 )則做空兩口
一旦5分_均線黃金交叉( 10 , 20 )先出一口
但我這樣寫結果將交易明細輸出到Excel 怎麼跟我想的口數都不一樣?
請幫我看看問題出在那裡!謝謝!

 150 Va = 5分_開盤價 
 160 
 170 // 多單進場 
 180 If 目前部位( 倉位多空 ) <= 0 Then 
 190 If 5分_均線交叉( 10 , 40 ) = 是 And 交叉類型 = 1 Then 
 200 Vb = 1 
 210 If 目前部位( 倉位多空 ) < 0 Then 
 220 Vb = K線序號( 目前K線 ) - 目前部位( 第 1 次建倉K線序號 ) 
 230 End If 
 240 If Vb >= 1 Then 
 250 Show [ K線下方 , 多 ] 
 260 操作訊號( 空單平倉 , 2口 , Va ) 
 270 操作訊號( 多單建倉 , 2口 , Va ) 
 280 If 最後K線 = 是 And 單K計數器( 目前K線 , 0 ) = 0 Then 
 290 GoSub date_time  
 300 S1$ = S1$ + '1' 
 310 輸出文字檔( C:\cur_cmd.txt  , S1$ ) 
 320 單K計數器( 目前K線 , 0 ) = 1 
 330 End If 
 340 End If 
 350 End If 
 360 End If 
 370 
 380 If 目前部位( 倉位多空 ) > 0 Then 
 390 If 5分_均線交叉( 10 , 20 ) = 是 And 交叉類型 = -1 Then 
 400 Vb = K線序號( 目前K線 ) - 目前部位( 第 1 次建倉K線序號 ) 
 410 If Vb >= 1 Then 
 420 Show [ K線上方 , ◎ ] 
 430 操作訊號( 多單平倉 , 1口 , Va ) 
 440 If 最後K線 = 是 And 單K計數器( 目前K線 , 0 ) = 0 Then 
 450 GoSub date_time 
 460 S1$ = S1$ + '1' 
 470 輸出文字檔( C:\cur_cmd.txt  , S1$ ) 
 480 單K計數器( 目前K線 , 0 ) = 1 
 490 End If 
 500 End If 
 510 End If 
 520 End If 
 530 
 540 // 空單進場 
 550 If 目前部位( 倉位多空 ) >= 0 Then 
 560 If 5分_均線交叉(10 , 40 ) = 是 And 交叉類型 = -1 Then 
 570 Vb = 1 
 580 If 目前部位( 倉位多空 ) > 0 Then 
 590 Vb = K線序號( 目前K線 ) - 目前部位( 第 1 次建倉K線序號 ) 
 600 End If 
 610 If Vb >= 1 Then 
 620 Show [ K線上方 , 空 ] 
 630 操作訊號( 多單平倉 , 2口 , Va ) 
 640 操作訊號( 空單建倉 , 2口 , Va ) 
 650 If 最後K線 = 是 And 單K計數器( 目前K線 , 0 ) = 0 Then 
 660 GoSub date_time  
 670 S1$ = S1$ + '1' 
 680 輸出文字檔( C:\cur_cmd.txt , S1$ ) 
 690 單K計數器( 目前K線 , 0 ) = 1 
 700 End If 
 710 End If 
 720 End If 
 730 End If 
 740 
 750 If 目前部位( 倉位多空 ) < 0 Then 
 760 If 5分_均線交叉( 10 ,20) = 是 And 交叉類型 = 1 Then 
 770 Vb = K線序號( 目前K線 ) - 目前部位( 第 1 次建倉K線序號 ) 
 780 If Vb >= 1 Then 
 790 Show [ K線下方 , ◎ ] 
 800 操作訊號( 空單平倉 , 1口 , Va ) 
 810 If 最後K線 = 是 And 單K計數器( 目前K線 , 0 ) = 0 Then 
 820 GoSub date_time  
 830 S1$ = S1$ + '1' 
 840 輸出文字檔( C:\cur_cmd.txt  , S1$ ) 
 850 單K計數器( 目前K線 , 0 ) = 1 
 860 End If 
 870 End If 
 880 End If 
 890 End If 
 900 
 910 Sub date_time  
 920 Vc = 目前時間( 西元年4碼 ) 
 930 S1$ = Cstr( Vc ) + '/' 
 940 Vc = 目前時間( 月 ) 
 950 If Vc < 10 Then 
 960 S1$ = S1$ + '0' + Cstr( Vc ) + '/' 
 970 Else 
 980 S1$ = S1$ + Cstr( Vc ) + '/' 
 990 End If 
1000 Vc = 目前時間( 日 ) 
1010 If Vc < 10 Then 
1020 S1$ = S1$ + '0' + Cstr( Vc ) + '' 
1030 Else 
1040 S1$ = S1$ + Cstr( Vc ) + '' 
1050 End If 
1060 Vc = 目前時間( 時 ) 
1070 If Vc < 10 Then 
1080 S1$ = S1$ + '0' + Cstr( Vc ) + ':' 
1090 Else 
1100 S1$ = S1$ + Cstr( Vc ) + ':' 
1110 End If 
1120 Vc = 目前時間( 分 ) 
1130 If Vc < 10 Then 
1140 S1$ = S1$ + '0' + Cstr( Vc ) + '' 
1150 Else 
1160 S1$ = S1$ + Cstr( Vc ) + '' 
1170 End If 
1180 End Sub 

帥哥,離線

Hunta 



門派 管理員
職務 總版主
級別 法老
聲望 +100000
財富 100002
積分 101915
經驗 642850
文章 1733
註冊 09-04-10 17:15
發表: 2009-06-16 14:12:3410

首先,你這支程式是以This Bar方式編寫,要用This Bar方式編寫策略程式一定要非常嚴謹,因為其中有許多陷阱存在,一不注意就會出現問題,所以建議初學者先從Next Bar方式開始練習,等功力到達一定程度再來嘗試This Bar方式,我知道大家使用This Bar是因為想搶第一時間下單,但是其中也衍生了一些問題,不得不注意,例如:
 
1.因為你是判斷最後一根K線,而此K線還未正式結束,所以有可能發生兩條均線交叉了,過一下子又分開了,請問這時候該如何處理?是算還是不算?
2.若你用This Bar方式編寫策略,在做「績效回測」時通常無法正確的回測績效,因為你的進出場點是在K線進行中發生,所以績效回測時不可能模擬回復到當時的狀態,電腦看到的價格已經都是收盤價了,所以一定會有不同。
 
至於,你上面寫的程式很明顯就會碰到上述問題,而且減碼程式的部份也有問題,例如380行你應該一併判斷單K計數器是否為0,若是0才往下執行,否則依照你的程式,會連續平倉兩次,等於全出了。
 

帥哥,離線

mingyi1973 



級別 職業俠客
積分 72
經驗 1777
文章 64
註冊 09-06-15 13:52
發表: 2009-06-16 14:24:1211

例如380行你應該一併判斷單K計數器是否為0,若是0才往下執行,否則依照你的程式,會連續平倉兩次,等於全出了。

請教減碼程式的部份該怎麼寫?

帥哥,離線

mingyi1973 



級別 職業俠客
積分 72
經驗 1777
文章 64
註冊 09-06-15 13:52
發表: 2009-06-16 15:15:4812

還要請教一個問題如果我每日都要在收盤前將口數平掉的話,那我是這樣寫嗎?但是這樣不一定是兩口啊!

  10 If 目前部位( 倉位多空 ) > 0 Then 
  20 If 前1_5分_K線時間 = 1335 Then 
  30 操作訊號( 多單平倉 , 2口 , Va ) 
  40 Show [ K線下方 , 收 ] 
  50 End If 
  60 End If 
  90 
 100 If 目前部位( 倉位多空 ) < 0 Then 
 110 If 前1_5分_K線時間 = 1335 Then 
 120 操作訊號( 空單平倉 , 2口 , Va ) 
 130 Show [ K線上方 , 收 ] 
 140 End If 
 150 End If 

還有要將平倉口數改為變數?這樣寫對嗎?不然要怎麼寫?
    10 If 目前部位( 倉位多空 ) > 0 Then 
  20 If 前1_5分_K線時間 = 1335 Then 
  30 操作訊號( 多單平倉 , Ve口, Va ) 
  40 Show [ K線下方 , 收 ] 
  50 End If 
  60 End If 
  70 
  80 Ve = 目前部位( 第 1 次剩餘口數 ) 
  90 
 100 If 目前部位( 倉位多空 ) < 0 Then 
 110 If 前1_5分_K線時間 = 1335 Then 
 120 操作訊號( 空單平倉 , Ve口 , Va ) 
 130 Show [ K線上方 , 收 ] 
 140 End If 
 150 End If 

感謝!


 97128: 此主題共有20帖 此頁12帖 每頁12帖
 

 新帖 新投票 回覆文章



回覆文章 注意: *為必填項
*驗證訊息
用戶名稱 密碼 註冊
*文章名稱 長度不得超過255字
內容(最大25K)

是否是UBB代碼

內容支持插入UBB標籤
使用方法請參考幫助
其它選項:  顯示簽名   鎖定文章  - 顏色表   Alt+S或Ctrl+Enter快速提交