HSP程式交易論壇 >> 程式交易 >> 論壇主區 >> 程式交易討論區 >> 指標交叉時,訊號忽有忽無?
指標交叉時,訊號忽有忽無? fkkshih,2009-06-11 02:10:10

大家好~
 
又是我來發問了,雖然現在是凌晨快兩點...不過這個問題讓我想了一天@@,希望有人可以幫我想一下..
 
今天盤中照著指標進出時,當均線交叉的時候會出現假訊號(5分K),
 
我想應該是當下那根5分K還沒跑完的關係,所以出現多訊後過幾秒鐘忽然又不見了...但是還是會輸出至下單策略檔,
 
像6/10 11:55建一筆空單後,卻看到12:05程式發出多訊..此時程式會立刻空單平倉並建立多倉,
 
不過那個多訊過幾秒就消失了,但我去看我輸出的文字檔已經是空單平倉並建多單...
 
請問版大有關這種假訊號我要怎麼去克服呢?是不是要當下K線跑完後再發出訊號比較好?
 
謝謝指導~
 

Hunta,2009-06-11 09:58:15

你的問題就是一般程式交易者經常會遇到的問題,也就是This Bar及Next Bar的操作差別。
所謂This Bar的意思,就是以當根K線做為進出場依據,而Next Bar是以上一根K線做為進出場依據。
當然,以程式寫作而言,This Bar肯定較Next Bar難度高,因為以當根K線來判斷的話,此K線尚未正式結束,所以還會持續變動,如此就有可能會造成訊號閃爍的情況。
至於,究竟要用This Bar或Next Bar的方式?當然這取決於作者本身之需求,唯若用This Bar的方式,就必需妥善處理訊號的問題,例如訊號一旦產生,程式就必須鎖定,第一、訊號不可以再消失,第二、更不可重覆送單;以下連結之範例可參考This Bar與Next Bar程式寫法之不同:
[URL=http://www.huntasoft.com/hsp/lesson24.htm]http://www.huntasoft.com/hsp/lesson24.htm[/URL]
 
※上例This Bar程式部份,「下單機輸出程式」可插入行號80、150、250、330、510及590處。

fkkshih,2009-06-11 22:15:32

小弟有點看不懂文章內的描述...下面是我的平空建多幾行程式..
如果我要以next bar當基準,那我該怎麼修改呢?
感恩!![EM14]
 
40  Va = 5分_開盤價 
50  Vc = 5分_最低價 - 12 
60  S2$ = '多' + Cstr( Va ) 
70  顯示文字[ S2$ , 主畫面 , ( 0 , Vc ) , 字型: 新細明體 , 大小: 009 , 顏色: 16777215 ] 
80  Show [ K線下方 , ↑ ] 
90  操作訊號( 空單平倉 , 1口 , Va ) 
100 操作訊號( 多單建倉 , 1口 , Va ) 
110 If 最後K線 = 是 And 單K計數器( 目前K線 , 0 ) = 0 Then 
120 GoSub date_time 
130 S1$ = S1$ + '1' + '多進' 
140 輸出文字檔( R:\KD.txt , S1$ ) 
150 單K計數器( 目前K線 , 0 ) = 1 
160 End If 
170 End If 

Hunta,2009-06-11 22:33:06

這幾行不是重點,而是之前的判斷式,例如:
If[COLOR=#cc0029] 前1[/COLOR]_5分_均價(10) > [COLOR=#ff0033]前1[/COLOR]_5分_均價(20) Then
以[COLOR=#ff0033]前1[/COLOR]根K線做為判斷條件,這就是所謂的Next Bar的寫法。

fkkshih,2009-06-12 21:40:50

版大你好:
如果我想寫當均線交叉時且"交叉持續3秒"才送出建倉訊號,
以版大你的這套軟體有辦法寫嗎?
我看到程式裡面有一個"時間延遲",不知道單位好像是秒還是分?..
感謝版大的指導~~

Hunta,2009-06-12 22:30:14

嗯!!很有創意,持續3秒,這個條件好像第1次聽到!!
是可以做到,只是要耍些手段。
 
  10 Vk = -1 
  20 
  30 // 多單進場 
  40 If 目前部位( 倉位多空 ) <= 0 Then 
  50  If 5分_均價( 10 ) > 5分_均價( 20 ) Then 
  60   If Vk = -1 Then 
  70    Vk = 目前時間( 秒 ) + 3 
  80   Else 
  90    Vh = 目前時間( 秒 ) 
 100    If Vh <= 2 Then 
 110     Vh = Vh + 60 
 120    End If 
 130    If Vh >= Vk Then 
 140     Va = 5分_收盤價 
 150     Show [ K線下方 , ↑ ] 
 160     操作訊號( 空單平倉 , 1口 , Va ) 
 170     操作訊號( 多單建倉 , 1口 , Va ) 
 180     Vk = -1 
 190    End If 
 200   End If 
 210  Else 
 220   Vk = -1 
 230  End If 
 240 End If 
 
注意!!此為雛型程式,你可以依此為骨架,進行修改。
其中變數Vk用於記錄滿足秒數(第一次發生時之秒數+3);若Vk等於-1代表尚未發生交叉。

fkkshih,2009-06-15 15:40:52

Dear 版大:
 
我照著你上面的程式去寫,寫出來執行後卻都沒訊號?
 
請你幫我看一下,感恩再感恩~~
 
10 Vk = -1 
  20 
  30 // 多單進場 
  40 If 5分_KD交叉( 9 ) = 是 Then 
  50  If 交叉類型 = 1 Then 
  60   If 目前部位( 倉位多空 ) <= 0 Then 
  70    If Vk = -1 Then 
  80     Vk = 目前時間( 秒 ) + 3 
  90    Else 
 100     Vh = 目前時間( 秒 ) 
 110     If Vh <= 2 Then 
 120      Vh = Vh + 60 
 130     End If 
 140     If Vh >= Vk Then 
 150      Va = 5分_開盤價 
 160      Vc = 5分_最低價 - 12 
 170      S2$ = '多' + Cstr( Va ) 
 180      顯示文字[ S2$ , 主畫面 , ( 0 , Vc ) , 字型: 新細明體 , 大小: 009 , 顏色: 16777215 ] 
 190      Show [ K線下方 , ↑ ] 
 200      操作訊號( 空單平倉 , 1口 , Va ) 
 210      操作訊號( 多單建倉 , 1口 , Va ) 
 220      If 最後K線 = 是 And 單K計數器( 目前K線 , 0 ) = 0 Then 
 230       GoSub date_time 
 240       S1$ = S1$ + '1' + '多進' 
 250       輸出文字檔( R:\KD.txt , S1$ ) 
 260       單K計數器( 目前K線 , 0 ) = 1 
 270       Vk = -1 
 280      End If 
 290     End If 
 300    Else 
 310     Vk = -1 
 320    End If 
 330   End If 
 340  End If 
 350 End If 
 360 
 370 Vk = -1 
 380 
 390 // 空單進場 
 400 If 5分_KD交叉( 9 ) = 是 Then 
 410 If 交叉類型 = -1 Then 
 420 If 目前部位( 倉位多空 ) >= 0 Then 
 430 If Vk = -1 Then 
 440 Vk = 目前時間( 秒 ) + 3 
 450 Else 
 460 Vh = 目前時間( 秒 ) 
 470 If Vh <= 2 Then 
 480 Vh = Vh + 60 
 490 End If 
 500 If Vh >= Vk Then 
 510 Va = 5分_開盤價 
 520 Vc = 5分_最高價 + 15 
 530 S2$ = '空' + Cstr( Va ) 
 540 顯示文字[ S2$ , 主畫面 , ( 0 , Vc ) , 字型: 新細明體 , 大小: 009 , 顏色: 16777215 ] 
 550 Show [ K線上方 , ↓ ] 
 560 操作訊號( 多單平倉 , 1口 , Va ) 
 570 操作訊號( 空單建倉 , 1口 , Va ) 
 580 Vk = -1 
 590 End If 
 600 End If 
 610 Else 
 620 Vk = -1 
 630 End If 
 640 End If 
 650 If 最後K線 = 是 And 單K計數器( 目前K線 , 0 ) = 0 Then 
 660 GoSub date_time 
 670 S1$ = S1$ + '-1' + '空進' 
 680 輸出文字檔( R:\KD.txt , S1$ ) 
 690 單K計數器( 目前K線 , 0 ) = 1 
 700 End If 
 710 End If

Hunta,2009-06-15 17:30:26

因為你的訊號要交叉3秒才成立,但是你在K線圖上它是瞬間掃描過去,可能不到0.1秒,沒有達到3秒的標準,所以全部不成立!!
因為你的條件比較特殊,而且使用This Bar方式操作,所以比較棘手,不過慢慢修正,應該還是可以搞定。
我想第一步先觀察此策略在盤中是否會出現訊號?
因為唯有在盤中實際在跑才會達到交叉3秒的標準,訊號才會出現。
若盤中訊號會出現,接下來就是要把訊號留住,不要讓它消失。
一步一步來...

fkkshih,2009-06-15 17:41:47

原來如此,我明天盤中用此程式run看看,感謝版大囉~
pop616,2009-07-23 13:44:39

板大∼
可以把這個式子的語法說明一下嗎?

1.為何在最後還要有下列幾行ㄋ???
 210  Else 
 220   Vk = -1 
 230  End If 
 240 End If 

2.若盤中都沒出現訊號∼可能是哪出問題ㄋ???

謝謝∼

Hunta,2009-07-23 14:26:13

1.此程式Vk是用於記錄訊號成立時間(滿3秒),若Vk = -1代表目前沒有任何訊號,因為此程式是MA10向上穿越MA20才開始計算3秒鐘,所以行號210 Else代表MA10沒有向上穿越MA20,自然訊號不成立所以Vk = -1。

2.此程式在事後執行是不會有訊號的,因為程式事後掃過當根K線時,根本不會超過3秒鐘(大約只有0.0幾秒而已)。

 97 1 8: 此主題共有11帖 此頁11帖 每頁12帖 

[查看完整模式]

LeadBBS 5.0 耗時62毫秒 請求2次