本來我很天真的以為只要把 Next3rdFriday(1) 取回來的數值去減掉 2 ,就可以當做現在距離下次週三還有幾天,弄指標來看了後就會發現,代誌不是憨人想的那麼單純。有興趣的朋友可以去看看有什麼問題,為什麼不能把現在距離下次第三個週五的天數減掉 2 來作為現在距離下次第三個週三的天數?(比如 2014/05)
雖然我很討厭看人家的程式碼,不過在我沒有好好想出怎麼計算出 現在距離下次第三個週三的天數 的方式,我只好直接去看 Next3rdFriday 這個內建函數的 code,慢慢理解,然後做修改。以下就是我修改後的程式碼。希望有人那去驗證看看,是否有問題?如果這是正確的話,再去跟 Next3rdFriday 這個函數的程式碼對照,就能看出我改了哪些地方,思考一下之後,相信你要改出 第二個週四 或是別的你要計算的日子天數距離也就不是難事了。
inputs:
Series( numericsimple ) ;
variables:
var0( 0 ),
var1( 0 ),
var2( 0 ),
var3( 0 ),
var4( 0 ),
var5( 0 ),
var6( 0 ),
var7( 0 ),
var8( 0 ),
var9( 0 ),
var10( 0 ) ;
var0 = DayOfMonth( Date ) ;
var1 = Month( Date ) ;
var2 = Year( Date ) ;
var3 = DayOfWeek( var2 * 10000 + var1 * 100 + 1 ) ;
if var3 < 4 then
var4 = 4 - var3
else
var4 = 11 - var3 ;
var5 = var4 + 14 ;
if var5 > var0 then
var7 = var1 + Series - 1
else
var7 = var1 + Series ;
if var7 > 12 then
begin
var7 = var7 - 12 ;
var8 = var2 + 1 ;
end
else
var8 = var2 ;
var3 = DayOfWeek( var8 * 10000 + var7 * 100 + 1 ) ;
if var3 < 4 then
var4 = 4 - var3
else if var3 >= 4 then
var4 = 11 - var3;
var6 = var4 + 14 ;
var9 = DateToJulian( var8 * 10000 + var7 * 100 + var6 ) ;
var10 = DateToJulian( Date ) ;
_next3rdWendnesday = var9 - var10 ;
做個指標 plot1( _next3rdWendnesday(1) ) 放到圖表上去看看,是否正確? 2014年4月的第三個週三在 04/16 所以 2014/04/15 這天,距離下1次週三的天數就是 1。而寫文的今天是 201/04/29,下1次的第三個週三在 2014/05/21,看一下指標圖上最新數值是 22 ,表示還有 22天,是對的嗎?
這個函數我就有用來作為選擇權上的運用,比如:下單的月份。給定一個規則,結算日前五天以前的上半場下當月合約,之後下次月。當然會需要一些程式上的控制設計,以指標來顯現它的效果: