iT邦幫忙

0

[R]交易策略回測,取出col中相同值的第一行

r
  • 分享至 

  • xImage

不好意思打擾大大們
小弟目前想回測資料,目前是把買進訊號設為1
但目前碰到的問題是連續五天都是1
而我的交易策略是只打算以第一天做買入就好
然而這情況發生很多次
也就是說有很多個連續天數的問題,想請教版上大大
https://ithelp.ithome.com.tw/upload/images/20201023/201243541cO866KJ0b.jpg
小弟目前有想到以下的想法
只要買進訊號不為1就中斷迴圈並取出第一筆row
然後想說用next的方式跳過買進訊號不為1的部分
進而把每次結果儲存起來就可以得到在每次遇到連續天數中的第一筆買進資料
但小弟資質駑鈍,希望有大大能幫小弟想法的部分
或是有更好的解法也可以,非常感謝您!!
#取出買進第一天
a <- c()
i <- 4
repeat{
i <- i+1
b <- data_ma[i,]
a <- head(rbind(a,b),1)
if(data_ma$buysignal_5[i]!=1)break
}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2020-10-23 10:41:23

我的做法比較笨一點
就是「記錄前一次的值」
1.一樣,用迴圈走完所有值
2.如果是 0,不處理
3.如果是 1,就判斷「前一次的值」是 0 的話才算

我不會 R,用 C 寫結果如下
https://ithelp.ithome.com.tw/upload/images/20201023/20001787u87MlT4Yh6.png

你可以到 Coding Ground測試以下程式碼
看看可不可行

#include <stdio.h>

int main()
{
    int prev = -1;
    int a[14] = {1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1};
    
    for (int i=0;i<14;i++) {
        printf("%2d %d ", i, a[i]);
        if (a[i]==1) {
            if (prev==-1) {
                printf("Buy  (First 1).\n");
            } else {
                if (prev==1) {
                    printf("None (Duplicate).\n");
                }
                else if (prev==0) {
                    printf("Buy  (1).\n");
                }
            }
        } else {
            printf("None (0).\n");            
        }
        prev = a[i];
    }

    return 0;
}

另外,點這裡是我這次鐵人賽唯一的一篇文章,喜歡的話左上角點 Like

0
sam989798
iT邦新手 4 級 ‧ 2020-11-13 17:52:23

碰巧看到~回覆一下
應該比迴圈快很多
abb = data.frame(編號 = seq(1,20,1),
值 = c(rep(1,5),rep(2,5),rep(3,5),rep(4,5)))

abb$num = sequence(rle(abb$值)$lengths)

我要發表回答

立即登入回答