3rnie 發表於 13-4-12 14:35

抱歉,懸賞金只有10元而已!

各位前輩,大家好!小弟這裡有個簡單問題,希望前輩多多關照,謝謝!

美國SP500(包含電子盤)每天開盤時間是台灣大約0510,結束時間是隔天大約0450,雖然中間只有休息不到一個小時,但我還是不想冒那跳空的風險。

我會寫時間快到的平倉指令(應該沒有錯):
if time>0450 then sell next bar market;
if time>0450 then buytocover next bar market;

但時間快到不要進場的正確邏輯我一直想不通:
if marketposition=0 and time>0510 and time <0450 then begin
buy.......
sellshort.....
可能有些人已經看出這樣寫很搞笑了,所以接者我又寫:
if marketposition=0 and time>0000 and time<0450 and time >510 and time <2359 then begin
buy.......
sellshort.....

結果也不是我想的那樣,請問有沒有更聰明的寫法?

謝謝!

*抱歉尋賞金只有10金,這是我目前三分之一的財產。

sangi 發表於 13-4-12 14:35

本帖最後由 sangi 於 13-4-12 17:15 編輯

1. 交易國外期貨儘量用 Exchange Time 不要用 Local Time

2. 當沖交易區間 應該是 (Time >510) or (Time < 450) ,不要被 00:00 這個換日時間混淆。

3. 時間快到時不要進場,你必須先指定一個的時間比如 330,再把前述交易區間改為:

If (Time >510) or (Time < 330) Then
Begin
// Your Entry Condition
End ;

這個時間,又必須和接下來的[當沖出場時間] 錯開一段時間...

不然還是會有在交易區間進場,下一個K棒出了交易區間就可能面臨要立刻出場的情形...

4. 當沖出場時間:最簡單的到時出場,比如設為400之後出場,

或者400之後開始依據其他條件出場,再沒機會出場後,於特定時間強制出場 ...

If (Time > 400) AND (Time < 510) AND (MarketPosition <> 0) Then
Begin
// Your Exit Condition
End ;

5. 儘量不要用 SetExitOnClose


mewmi 發表於 13-4-12 14:49

本帖最後由 mewmi 於 13-4-12 14:53 編輯

if marketposition=0 and time>0000 and time<0450 and time >510 and time <2359 then<---- 這一段怪怪的..

1. 510 是不是 0510..
2. 0000< time < 0450 and 0510< time < 2359 <------ 這是不會成立的.. 因為時間若是在0000 ~ 0450 那就不可能在 0510 ~ 2359間.. 反之亦然.. 所以你可能想要的應該是.. 0000< time < 0450 or 0510< time < 2359
3. 這行寫這樣可能比較好.. if (marketposition=0) and ((time > 0000 and time < 0450) or (time >510 and time < 2359)) then ... 因為運算元件有優先順序所以用()來讓它更清楚你的條件..

通常寫這樣.. 實在很難幫.. 看不出來你到底要的是什麼.. {:4_120:}

3rnie 發表於 13-4-12 20:31

sangi 發表於 13-4-12 14:35 static/image/common/back.gif
1. 交易國外期貨儘量用 Exchange Time 不要用 Local Time

2. 當沖交易區間 應該是 (Time >510) or (Time < ...

抱歉!筆誤,*分享。

3rnie 發表於 13-4-12 20:54


我試著寫只要510就出場,但跑出來的結果卻顯示每根K棒的出場訊號都是doneSE和doneLE,好像每根K都是time=510,不知道我邏輯哪裡錯誤了?

if marketposition=0and(Time >610) or (Time < 500) then begin
if marketposition<>-1 then sellshort next bar market;
If marketposition<>1 then buy next bar market;
end;
If time=510 AND MarketPosition <> 0 Then
Sellshort("doneSE") next bar market;
Buytocover("doneLE") next bar market;





頁: [1]
查看完整版本: 抱歉,懸賞金只有10元而已!