0

私はosMaxPosquantstrat をもう少しよく理解しようとして調べましたが、2 行のコードが混乱していて、タイプミスだと思います。

ソースコードはこのリンクで見つけることができますif(orderqty+pos>PosLimit[,"MaxPos"]) orderqty <- PosLimit[,"MinPos"]-pos簡単に言うと、2 つのタイプミスは次のとおりですif (orderqty+pos < PosLimit[, "MinPos"]) orderqty <- PosLimit[,"MinPos"]-pos。2. ソース コードの 226 行目は ですorderqty <- posが、コードは意図されていたと思います。orderqty <- -pos

近い将来、R-Forge トラッカーでこの質問に対する回答が得られる可能性があります。そうでない場合は、誰かがスタックオーバーフローを通じて私を助けてくれることを願っています。次の簡単な例を通して、2 番目のタイプミスを証明しようとしました。

この例は、ソース コードの一部を取り、いくつかの偽のデータを実行して、2 番目のタイプミスが実際に存在することを示しています。しかし、私はトレーディングと R に慣れていないので、完全に間違っている可能性があります。誰かが私を見てくれませんか、ありがとう。

# #### run a simplifed strategy to get values for pos and PosLimit
# portfolio <- "test"
# symbol <- "JQR_DAY"
# timestamp <- as.Date("2013-09-09")
# # get position quantity of timestamp
# pos <- getPosQty(portfolio, symbol, timestamp)
# # get positionlimits on timestamp
# PosLimit <- getPosLimit(portfolio, symbol, timestamp)


#### to make this example reproducible, I created pos and PosLimit values as following: 
pos <- -4000
PosLimit <- xts(t(c(4000, 4, -4000, 4)), order.by = as.Date("2000-09-09"))
colnames(PosLimit) <- c("MaxPos", "LongLevels", "MinPos", "ShortLevels")

orderside <- "short" # existing positions are shorting
ruletype <- "risk" # ruletype is "risk"

# senario1:  flatten all short positions
# orderqty <- "all" 
# in the end, orderqty will be 4000 to be able to close all short positions

# senario2: orderqty is not enough to close all short positions
# orderqty <- 2000  # orderqty will be finally set as 2000

# senario3: orderqty is more than enough to close all short positions
orderqty <- 5000  # orderqty should be finally set as 4000, 
                  # but it turns out to be -4000

# if using orderqty <- -pos, orderqty will be 4000


####################################################################
#### simplified code to perform buy_cover_short
####################################################################
# if orderside is short and orderqty > 0 to exit shorting
# if orderqty == "all", orderqty > 0 is true
if (orderqty > 0 & orderside == "short") {
    # orderside == "short" suggests pos < 0

    # if ruletype = risk
    if (ruletype == "risk") {

        # if orderqty = all
        if (orderqty == "all") 

            # return -pos 
            orderqty <- (-1 * pos) 
        # meaning exit all shorting positions

        # if orderqty != all, return orderqty itself
        # only exit order quantity of short positions
        else orderqty <- orderqty
    }

    # if orderqty > 0 but orderqty < |pos|
    if ((orderqty + pos) <= 0) {

        # return orderqty itself
        # meaning leaving some shorting position alive
        orderqty <- orderqty
    }

    # if orderqty + pos > 0
    # meaning orderqty > -pos
    # meaning orderqty > |pos|
    else {

        # it is a typo error ??????????????????? 
        #flatten position, don't cross through zero
        orderqty <- pos # orderqty <- -pos

    }
}
4

0 に答える 0