首页 文章

Quantstrat:Backtesting自定义'bollinger band'就像策略一样

提问于
浏览
4

Premium 越过 Avg 时,我'm new with quantstrat and I would like to use then to simulate my strategy that essentially is a Bollinger Band. My code isn' t工作以关闭未平仓头寸 .

定义策略(信号/规则)的算法逻辑是:

  • Open short position :如果 Premium 大于或等于 Up 波段,则以市场价格开仓;

  • Close a open short position :如果 Premium 低于或等于 Avg 则关闭空头位置(越过平均值);

  • Open long position :如果 Premium 低于或等于 Dwn 波段,则以市场价格开仓多头;

  • Close a open long position :如果'Premium'大于或等于 Avg 则关闭长位置(越过平均值);

我的 xts Observed 将使用所有系列: Observed.ClosePremiumUpDwnAvg .

Observed 数据和我的代码下面:

> Observed
           Observed.Close      Premium        Up        Dwn           Avg
2015-06-26         3.1293  1.965206103 2.0527059 -1.5056387  0.2735335950
2015-06-29         3.1176  1.474362061 2.1247886 -1.4171072  0.3538407214
2015-06-30         3.1030  1.011736997 2.1689062 -1.3967265  0.3860898669
2015-07-01         3.1492  1.711709129 2.2667986 -1.3371877  0.4648054514
2015-07-02         3.0967  0.481718930 2.2727613 -1.3274414  0.4726599480
2015-07-03         3.1341  1.249455394 2.2682612 -1.3261065  0.4710773679
2015-07-06         3.1376  0.642722112 2.2174802 -1.3210587  0.4482107662
2015-07-07         3.1863  0.553009282 2.1123671 -1.2940353  0.4091659066
2015-07-08         3.2353  1.115494115 2.1592003 -1.2834765  0.4378618993
2015-07-09         3.2130  0.952882431 2.1922315 -1.2485792  0.4718261388
2015-07-10         3.1599  0.665690890 2.2048896 -1.2356460  0.4846218201
2015-07-13         3.1344  0.060862823 2.2047372 -1.2400712  0.4823329800
2015-07-14         3.1393  0.321069026 2.2023548 -1.1986208  0.5018670111
2015-07-15         3.1401 -0.236291845 2.1784579 -1.1417133  0.5183722920
2015-07-16         3.1568  0.139251221 2.0806787 -0.9452963  0.5676911948
2015-07-17         3.1881  0.620612235 1.9791898 -0.7194874  0.6298511901
2015-07-20         3.1958  0.189529583 1.9001714 -0.5685196  0.6658259294
2015-07-21         3.1716 -0.281733702 1.9072905 -0.5828426  0.6622239760
2015-07-22         3.2231  0.377200258 1.9024721 -0.5963551  0.6530584968
2015-07-23         3.2854  0.869682711 1.8167342 -0.3926226  0.7120558074
2015-07-24         3.3554  0.763388365 1.8161428 -0.3930004  0.7115711720
2015-07-27         3.3637 -0.149080328 1.8204624 -0.4690792  0.6756915849
2015-07-28         3.3567  0.637889087 1.8201526 -0.4694712  0.6753407023
2015-07-29         3.3314 -0.045153506 1.8164318 -0.4614529  0.6774894519
2015-07-30         3.3713  1.862338163 1.9326375 -0.4607578  0.7359398900
2015-07-31         3.4211  1.480222141 1.9896962 -0.4637566  0.7629698082
2015-08-03         3.4508  0.495918663 1.9781690 -0.4800864  0.7490412905
2015-08-04         3.4711  2.140586835 2.1054125 -0.5412551  0.7820787099
2015-08-05         3.4851  2.187488885 2.2239655 -0.5971571  0.8134042173
2015-08-06         3.5363  1.774638281 2.2836179 -0.6147908  0.8344135447
2015-08-07         3.5071  0.149059477 2.1786688 -0.6309181  0.7738753238
2015-08-10         3.4404  0.412479597 2.1236127 -0.6466542  0.7384792417
2015-08-11         3.4745  0.527214988 2.1055755 -0.6609185  0.7223285080
2015-08-12         3.4807  0.396682496 2.0145450 -0.6575564  0.6784942870
2015-08-13         3.5187  1.064117266 2.0390422 -0.6432271  0.6979075648
2015-08-14         3.4820 -0.247016300 2.0153374 -0.7192870  0.6480251750
2015-08-17         3.4810 -1.184774093 2.1094473 -0.9352301  0.5871086349
2015-08-18         3.4681 -1.212364308 2.1864729 -1.1299472  0.5282628485
2015-08-19         3.4926 -2.540271699 2.3911950 -1.5783870  0.4064039880
2015-08-20         3.4579 -1.968362932 2.4623598 -1.8443015  0.3090291426
2015-08-21         3.4998 -1.885025633 2.5160255 -2.0680150  0.2240052585
2015-08-24         3.5524 -1.918249920 2.5797446 -2.2636749  0.1580348337
2015-08-25         3.6172 -0.073792880 2.5672080 -2.2774624  0.1448727701
2015-08-26         3.5968 -0.654065425 2.5671136 -2.3052196  0.1309469841
2015-08-27         3.5526 -0.610844638 2.5571085 -2.3452209  0.1059437888
2015-08-28         3.5819  2.068485500 2.7023988 -2.3939864  0.1542062310
2015-08-31         3.6198  3.276461295 3.0488630 -2.5346551  0.2571039547
2015-09-01         3.6977  3.012968160 3.3252241 -2.5913694  0.3669273501
2015-09-02         3.7609  1.319458889 3.3770219 -2.5803500  0.3983359711
2015-09-03         3.7397  1.222954220 3.3992829 -2.5790596  0.4101116881
2015-09-04         3.8430  1.388474585 3.4389640 -2.5770682  0.4309478954
2015-09-07         3.8430  2.375363664 3.5963196 -2.5661276  0.5150960285
2015-09-08         3.8203  1.260535328 3.6288627 -2.5571609  0.5358509032
2015-09-09         3.7792 -0.913740775 3.6384359 -2.6246399  0.5068979942
2015-09-10         3.8499 -1.208280022 3.5534391 -2.7443510  0.4045440547
2015-09-11         3.8735  0.304095228 3.4879948 -2.7573152  0.3653398243
2015-09-14         3.8156 -0.824477698 3.4734482 -2.8307950  0.3213266123
2015-09-15         3.8625  1.928794976 3.4504366 -2.8219029  0.3142668836
2015-09-16         3.8286  2.441458663 3.4811182 -2.8356531  0.3227325429
2015-09-17         3.8986  3.571472359 3.7181269 -2.9528729  0.3826270121
2015-09-18         3.9446  3.297716378 3.9868045 -3.0116400  0.4875822422
2015-09-21         3.9851  2.407020170 4.1224922 -3.0143584  0.5540669280
2015-09-22         4.0504  2.445625463 4.2525916 -3.0165638  0.6180139438
2015-09-23         4.1790  1.414947088 4.2969844 -2.9930722  0.6519560969
2015-09-24         3.9370  0.142556643 4.2674254 -3.0249506  0.6212374095
2015-09-25         3.9765  0.543916266 4.2792205 -2.9840168  0.6476018283
2015-09-28         4.1106  1.102622777 4.2917663 -2.8440695  0.7238483906
2015-09-29         4.0608  3.146668217 4.4657099 -2.7274110  0.8691494748
2015-09-30         3.9471  1.002501203 4.3453160 -2.3708322  0.9872419049
2015-10-01         4.0098  0.207299529 4.2431416 -2.1236136  1.0597639869
2015-10-02         3.9325  0.257836640 4.1320883 -1.8697028  1.1311927293
2015-10-05         3.9115 -0.259679877 4.0108231 -1.6378663  1.1864783975
2015-10-06         3.8548 -0.229135670 4.0157575 -1.6531568  1.1813003044
2015-10-07         3.8857 -1.008262382 4.0383275 -1.6993401  1.1694937392
2015-10-08         3.7840 -0.827853080 4.0506966 -1.7261764  1.1622601245
2015-10-09         3.7662 -1.549022902 4.0721157 -1.9887627  1.0416765111
2015-10-12         3.7662 -1.182302729 3.9072692 -2.1211672  0.8930510436
2015-10-13         3.8931 -0.151540748 3.7150419 -2.1399071  0.7875674134
2015-10-14         3.8126 -1.394567527 3.7226588 -2.3284591  0.6970998662
2015-10-15         3.7994 -0.765332852 3.6955723 -2.4339250  0.6308236304
2015-10-16         3.9253  1.755707483 3.7232303 -2.4371008  0.6430647271
2015-10-19         3.8864 -0.005412208 3.5812295 -2.4538185  0.5637055313
2015-10-20         3.9053  1.240222611 3.5799145 -2.4538576  0.5630284407
2015-10-21         3.9399  0.481642094 3.5747994 -2.3557170  0.6095412030
2015-10-22         3.9070  0.595954568 3.5544745 -2.2151098  0.6696823560
2015-10-23         3.8771 -0.696022671 3.5614526 -2.2887624  0.6363450928
2015-10-26         3.9067 -0.097939430 3.5474039 -2.2262779  0.6605630350
2015-10-27         3.8884 -0.179690333 3.4519132 -2.2713528  0.5902801914
2015-10-28         3.9048  1.082021586 3.3272540 -2.2373228  0.5449656222
2015-10-29         3.8489 -0.227289592 2.9665999 -2.1299195  0.4183402238
2015-10-30         3.8568  0.272833919 2.6220541 -1.9870325  0.3175108085
2015-11-02         3.8568  0.300689669 2.4125588 -1.9179592  0.2472997918
2015-11-03         3.7694 -1.042205419 2.1792576 -1.9171801  0.1310387624
2015-11-04         3.8009 -0.700582164 2.0711547 -1.9501124  0.0605211207
2015-11-05         3.7802 -1.534101153 2.0973647 -2.0880996  0.0046325274
2015-11-06         3.7692 -1.330570385 2.0797085 -2.1954092 -0.0578503609
2015-11-09         3.7993 -0.612073064 1.9855301 -2.2155439 -0.1150068889
2015-11-10         3.7476 -1.570361354 1.4982723 -2.0427547 -0.2722412080
2015-11-11         3.7609 -0.918237575 1.3816348 -2.0541665 -0.3362658339
2015-11-12         3.7710 -0.360032867 1.3504101 -2.0607640 -0.3551769137
2015-11-13         3.8494  0.843071163 1.4118037 -2.0831419 -0.3356690963
2015-11-16         3.8190 -0.015521438 1.4236770 -2.0787380 -0.3275304817
2015-11-17         3.8138 -0.178323100 1.4258628 -2.0775363 -0.3258367293
2015-11-18         3.7648 -1.143696894 1.4293059 -2.0900083 -0.3303512130
2015-11-19         3.7177 -1.970379298 1.4828464 -2.2197173 -0.3684354203
2015-11-20         3.7080 -1.981097208 1.5126446 -2.2783204 -0.3828378971
2015-11-23         3.7323 -1.167446302 1.5122831 -2.2769685 -0.3823426829
2015-11-24         3.6990 -0.878883592 1.4944213 -2.3075962 -0.4065874444
2015-11-25         3.7450 -0.525190572 1.4872415 -2.2424579 -0.3776082126
2015-11-26         3.7430 -1.572016300 1.5061858 -2.3151811 -0.4044976608
2015-11-27         3.8467  0.413647231 1.3089202 -2.2073862 -0.4492330026
2015-11-30         3.8685 -0.446457318 1.2862198 -2.2140888 -0.4639345063
2015-12-01         3.8500 -0.700495892 1.1001380 -2.1573883 -0.5286251230
2015-12-02         3.8366 -0.420377493 1.0255951 -2.1429800 -0.5586924426
2015-12-03         3.7592 -2.162425617 0.9759674 -2.2772443 -0.6506384488
2015-12-04         3.7524 -1.897908529 0.9985287 -2.3799313 -0.6907013108
2015-12-07         3.7680 -0.268156500 0.9857446 -2.3784951 -0.6963752131
2015-12-08         3.7950  0.555521511 1.0620267 -2.4057630 -0.6718681516
2015-12-09         3.7502 -0.023184365 0.9144126 -2.3318293 -0.7087083500
2015-12-10         3.8134  0.280148176 0.9623660 -2.3459535 -0.6917937577
2015-12-11         3.8739  1.567306950 1.1690821 -2.4663714 -0.6486446567
2015-12-14         3.8733 -0.730348778 1.0990804 -2.4651056 -0.6830126049
2015-12-15         3.8710  0.857622984 1.2428005 -2.4821705 -0.6196849915
2015-12-16         3.8816 -1.199396846 1.2380302 -2.5106545 -0.6363121475
2015-12-17         3.8776  0.698808726 1.3420427 -2.4658063 -0.5618818182
2015-12-18         3.9833  1.647828074 1.5809573 -2.5061611 -0.4626018696
2015-12-21         4.0112  1.467803100 1.7670880 -2.5536334 -0.3932726642
2015-12-22         3.9886  1.320477177 1.9037072 -2.4975299 -0.2969113798
2015-12-23         3.9412  1.515472405 2.0679174 -2.4994928 -0.2157877138
2015-12-24         3.9420  1.716289282 2.2424613 -2.5356152 -0.1465769755
2015-12-25         3.9420  1.688648523 2.3379650 -2.5747472 -0.1183910635
2015-12-28         3.8594 -0.997041641 2.3256400 -2.6278568 -0.1511084036
2015-12-29         3.8649  0.188089543 2.3409104 -2.6186997 -0.1388946488
2015-12-30         3.9582  2.046467674 2.5407912 -2.6059028 -0.0325558299
2015-12-31         3.9640  2.582933285 2.7559608 -2.5175183  0.1192212562
2016-01-01         3.9640  2.121572573 2.8674074 -2.3554536  0.2559769155
2016-01-04         4.0391  2.152289688 3.0096318 -2.2763622  0.3666347819
2016-01-05         4.0084  0.971572282 3.0371844 -2.1805511  0.4283166444
2016-01-06         4.0295  1.853863615 3.1410698 -2.1258329  0.5076184506
2016-01-07         4.0441  1.363761742 3.1353008 -1.9243454  0.6054777187
2016-01-08         4.0248  0.890529765 3.1522020 -1.9094544  0.6213738032
2016-01-11         4.0534 -0.078758449 3.1465578 -1.8792969  0.6336304322
2016-01-12         4.0280 -1.184617382 3.1717497 -1.9367636  0.6174930492
2016-01-13         4.0152 -1.383070217 3.2166435 -2.0458369  0.5854032917
2016-01-14         3.9997 -0.606174520 3.1003405 -1.8257838  0.6372783283
2016-01-15         4.0483 -0.481316516 2.9961055 -1.6271094  0.6844980621
2016-01-18         4.0333 -0.880923406 3.0208986 -1.6927537  0.6640724986
2016-01-19         4.0643 -0.447985905 3.0220549 -1.7608104  0.6306222513
2016-01-20         4.0975 -0.728037769 3.0386534 -1.8243991  0.6071271379
2016-01-21         4.1548  0.286489957 3.0387483 -1.8240712  0.6073385306
2016-01-22         4.0934 -0.520269076 2.9749615 -1.8994562  0.5377526630
2016-01-25         4.0892 -0.620436957 2.9710559 -1.8882231  0.5414163904
2016-01-26         4.0514 -1.272880026 2.9848601 -2.0440609  0.4703996234
2016-01-27         4.1104  0.529935516 2.9621082 -1.9060201  0.5280440354
2016-01-28         4.0695 -0.365788116 2.9472741 -1.9621591  0.4925574740
2016-01-29         3.9991 -0.888213736 2.8727627 -2.0567172  0.4080227471
2016-02-01         3.9646 -0.318356773 2.7935068 -2.0965386  0.3484840846
2016-02-02         3.9910 -0.051768597 2.7237469 -2.1182617  0.3027425588
2016-02-03         3.8960 -1.151537473 2.6464162 -2.2187317  0.2138422296
2016-02-04         3.8899 -1.307516034 2.5385930 -2.3124955  0.1130487190
2016-02-05         3.9066 -1.256526416 2.4148118 -2.3850593  0.0148762211
2016-02-08         3.9066 -1.476647149 2.4328659 -2.4350872 -0.0011106292
2016-02-09         3.9066 -1.692138415 2.4456920 -2.5732618 -0.0637848945
2016-02-10         3.9295 -1.081713189 2.2363498 -2.5724650 -0.1680575899
2016-02-11         3.9925  0.316242386 1.9349288 -2.4221567 -0.2436139532
2016-02-12         4.0017  0.804481727 1.7417660 -2.3168000 -0.2875169814
2016-02-15         3.9973  0.596191436 1.5027630 -2.1815368 -0.3393869232
2016-02-16         4.0680  1.653877540 1.6075031 -2.2407900 -0.3166434146
2016-02-17         3.9895 -0.543827126 1.3450478 -2.1381807 -0.3965664393
2016-02-18         4.0294  0.704174652 1.2460574 -2.0831628 -0.4185526757
2016-02-19         4.0219  0.375323631 1.1829967 -2.0544492 -0.4357262135
2016-02-22         3.9459 -1.349452836 1.1682534 -2.1244187 -0.4780826930
2016-02-23         3.9586 -1.076238560 1.1659155 -2.1148556 -0.4744700656
2016-02-24         3.9577 -0.197325598 1.1716429 -2.0415333 -0.4349452450
2016-02-25         3.9565 -0.357598879 1.1788381 -2.0321569 -0.4266593903
2016-02-26         4.0007 -0.053616639 1.1986726 -2.0234781 -0.4124027277
2016-02-29         4.0163  0.173727893 1.2375459 -1.9920413 -0.3772476844
2016-03-01         3.9335 -2.093237169 1.3001281 -2.1643069 -0.4320893932
2016-03-02         3.8945 -2.571784512 1.4049666 -2.3920618 -0.4935476180
2016-03-03         3.7984 -3.290751806 1.5181302 -2.7437082 -0.6127890101
2016-03-04         3.7516 -3.126932239 1.6198580 -3.0192136 -0.6996777821
2016-03-07         3.7850 -2.557596088 1.6519965 -3.1804960 -0.7642497532
2016-03-08         3.7545 -0.586914375 1.6679179 -3.1506863 -0.7413842315
2016-03-09         3.6885 -3.361097208 1.6703319 -3.4125025 -0.8710853223
2016-03-10         3.6271 -2.079012644 1.6430604 -3.4994460 -0.9281928066
2016-03-11         3.5855 -0.526200873 1.6592984 -3.4915498 -0.9161257111
2016-03-14         3.6617 -1.163611935 1.6225427 -3.5111445 -0.9443008832
2016-03-15         3.7674  0.203375949 1.6449376 -3.5165298 -0.9357960650
2016-03-16         3.7422 -0.123362083 1.6946173 -3.4976644 -0.9015235520
2016-03-17         3.6276 -1.615663900 1.6934150 -3.5170053 -0.9117951476
2016-03-18         3.6248 -2.154775060 1.7002553 -3.5837288 -0.9417367690
2016-03-21         3.6182 -2.382728840 1.7156783 -3.6595573 -0.9719394920
2016-03-22         3.5803 -2.011436432 1.7193276 -3.6844931 -0.9825827593
2016-03-23         3.6854 -1.039122091 1.7205765 -3.6829026 -0.9811630560
2016-03-24         3.6771 -0.850682876 1.6376283 -3.6777495 -1.0200605647
2016-03-25         3.6771 -0.499577480 1.5120661 -3.6391245 -1.0635292049
2016-03-28         3.6280 -0.903713591 1.3858570 -3.6129091 -1.1135260391
2016-03-29         3.6383 -0.869539387 1.0760140 -3.4712939 -1.1976399367
2016-03-30         3.6065 -2.522360424 1.0460833 -3.5732654 -1.2635910466
2016-03-31         3.5928 -2.489158382 0.8572505 -3.5973214 -1.3700354811

码:

library(quantstrat)
library(quantmod)
library(TTR)
library(PerformanceAnalytics)
library(tidyverse)
library(xts)
library(zoo)

###################################### Initial Setup ######################################

initDate <- '2015-06-28'
from <- '2015-06-29'
to <- '2016-03-31'

currency('USD')
Sys.setenv(TZ = 'UTC')
symbols <- "Observed"

stock(symbols, currency = 'USD', multiplier = 1)

Observed <- merge(DfDygraphPredictionObservedComps$Observed, DfDygraphPremium) %>% na.exclude(.)
Observed <- xts(x = Observed, order.by = as.POSIXct(index(Observed)))
Observed <- Observed[2451:nrow(Observed),]
colnames(Observed) <- c("Observed.Close","Premium","Up","Dwn","Avg")

###################################### Initial Setup Backtest ###############################

strat.name <- "FactorModelBT"
portfolio.st <- "FactorModelBT"
account.st <- "FactorModelBT"

rm.strat(strat.name)
rm.strat(portfolio.st)

initPortf(portfolio.st,
          symbols = symbols,
          initDate = initDate,
          currency = 'USD')

initAcct(account.st,
         portfolios = portfolio.st,
         initDate = initDate,
         currency = 'USD')

initOrders(portfolio.st,
           initDate = initDate)

strategy(strat.name, store = TRUE)

###################################### Signals ##############################################

# Open Short

add.signal(strat.name,
           name = "sigCrossover",
           arguments = list(columns = c("Premium", "Up"), relationship = "gt"),
           label = "Premium.gt.Upper.Band")

# Close Short

add.signal(strat.name,
           name = "sigCrossover",
           arguments = list(columns = c("Premium", "Avg"), relationship = "lte"),
           label = "Premium.lte.Avg")

# Open Long

add.signal(strat.name,
           name = "sigCrossover",
           arguments = list(columns = c("Premium", "Dwn"), relationship = "lt"),
           label = "Premium.lt.Lower.Band")

# Close Long

add.signal(strat.name,
           name = "sigCrossover",
           arguments = list(columns = c("Premium", "Avg"), relationship = "gte"),
           label = "Premium.gte.Avg")

tmp <- applySignals(strategy = strat.name, mktdata = Observed)

################################ Trading Rules - Actions ###################################

# Open short Position

add.rule(strat.name,
         name = "ruleSignal",
         arguments = list(sigcol = "Premium.gt.Upper.Band",
                          sigval = TRUE,
                          orderqty = -1000,
                          ordertype = "market",
                          orderside = NULL,
                          threshold = NULL),
         type = "enter",
         label = "OpenShort",
         path.dep = TRUE)

# Close short Position

add.rule(strat.name,
         name = "ruleSignal",
         arguments = list(sigcol = "Premium.lte.Avg",
                          sigval = TRUE,
                          orderqty = "all",
                          ordertype = "market",
                          orderside = "short",
                          replace = TRUE),
         type = "exit",
         label = "CloseShort",
         path.dep = TRUE)

# Open Long Position

add.rule(strat.name,
         name = "ruleSignal",
         arguments = list(sigcol = "Premium.lt.Lower.Band",
                          sigval = TRUE,
                          orderqty = 1000,
                          ordertype = "market",
                          orderside = NULL,
                          threshold = NULL),
         type = "enter",
         label = "OpenLong",
         path.dep = TRUE)

# Close Long Position

add.rule(strat.name,
         name = "ruleSignal",
         arguments = list(sigcol = "Premium.gte.Avg",
                          sigval = TRUE,
                          orderqty = "all",
                          ordertype = "market",
                          orderside = "long",
                          replace = TRUE),
         type = "exit",
         label = "CloseLong",
         path.dep = TRUE)

################################ Apply Strategy ############################

out <- applyStrategy(strategy = strat.name, portfolios = portfolio.st)

#set up analytics

updatePortf(portfolio.st)

dateRange <- time(getPortfolio(portfolio.st)$summary)[-1]

updateAcct(portfolio.st,dateRange)

updateEndEq(account.st)

chart.Posn(portfolio.st, 'Observed')

任何帮助都会很棒!! :)

1 回答

  • 2

    您的代码/策略没有严格的错误 . 您可以在输入规则中将 orderside 指定为"long"或"short"作为良好做法/可读性 .

    查看 getOrderBook(portfolio.st) 作为支票,显示输入/退出的多头和空头头寸 .

    更新:

    完全可重复的示例,在任何给定时间只能打开多头或空头头寸 - 不会将额外交易堆叠到现有头寸 .

    library(quantstrat)
    library(quantmod)
    library(TTR)
    library(PerformanceAnalytics)
    library(tidyverse)
    library(xts)
    library(zoo)
    
    ###################################### Initial Setup ######################################
    
    initDate <- '2015-06-28'
    from <- '2015-06-29'
    to <- '2016-03-31'
    
    currency('USD')
    Sys.setenv(TZ = 'UTC')
    symbols <- "Observed"
    
    stock(symbols, currency = 'USD', multiplier = 1)
    
    
    x <- read.table(text = "Observed.Close      Premium        Up        Dwn           Avg
    2015-06-26         3.1293  1.965206103 2.0527059 -1.5056387  0.2735335950
                    2015-06-29         3.1176  1.474362061 2.1247886 -1.4171072  0.3538407214
                    2015-06-30         3.1030  1.011736997 2.1689062 -1.3967265  0.3860898669
                    2015-07-01         3.1492  1.711709129 2.2667986 -1.3371877  0.4648054514
                    2015-07-02         3.0967  0.481718930 2.2727613 -1.3274414  0.4726599480
                    2015-07-03         3.1341  1.249455394 2.2682612 -1.3261065  0.4710773679
                    2015-07-06         3.1376  0.642722112 2.2174802 -1.3210587  0.4482107662
                    2015-07-07         3.1863  0.553009282 2.1123671 -1.2940353  0.4091659066
                    2015-07-08         3.2353  1.115494115 2.1592003 -1.2834765  0.4378618993
                    2015-07-09         3.2130  0.952882431 2.1922315 -1.2485792  0.4718261388
                    2015-07-10         3.1599  0.665690890 2.2048896 -1.2356460  0.4846218201
                    2015-07-13         3.1344  0.060862823 2.2047372 -1.2400712  0.4823329800
                    2015-07-14         3.1393  0.321069026 2.2023548 -1.1986208  0.5018670111
                    2015-07-15         3.1401 -0.236291845 2.1784579 -1.1417133  0.5183722920
                    2015-07-16         3.1568  0.139251221 2.0806787 -0.9452963  0.5676911948
                    2015-07-17         3.1881  0.620612235 1.9791898 -0.7194874  0.6298511901
                    2015-07-20         3.1958  0.189529583 1.9001714 -0.5685196  0.6658259294
                    2015-07-21         3.1716 -0.281733702 1.9072905 -0.5828426  0.6622239760
                    2015-07-22         3.2231  0.377200258 1.9024721 -0.5963551  0.6530584968
                    2015-07-23         3.2854  0.869682711 1.8167342 -0.3926226  0.7120558074
                    2015-07-24         3.3554  0.763388365 1.8161428 -0.3930004  0.7115711720
                    2015-07-27         3.3637 -0.149080328 1.8204624 -0.4690792  0.6756915849
                    2015-07-28         3.3567  0.637889087 1.8201526 -0.4694712  0.6753407023
                    2015-07-29         3.3314 -0.045153506 1.8164318 -0.4614529  0.6774894519
                    2015-07-30         3.3713  1.862338163 1.9326375 -0.4607578  0.7359398900
                    2015-07-31         3.4211  1.480222141 1.9896962 -0.4637566  0.7629698082
                    2015-08-03         3.4508  0.495918663 1.9781690 -0.4800864  0.7490412905
                    2015-08-04         3.4711  2.140586835 2.1054125 -0.5412551  0.7820787099
                    2015-08-05         3.4851  2.187488885 2.2239655 -0.5971571  0.8134042173
                    2015-08-06         3.5363  1.774638281 2.2836179 -0.6147908  0.8344135447
                    2015-08-07         3.5071  0.149059477 2.1786688 -0.6309181  0.7738753238
                    2015-08-10         3.4404  0.412479597 2.1236127 -0.6466542  0.7384792417
                    2015-08-11         3.4745  0.527214988 2.1055755 -0.6609185  0.7223285080
                    2015-08-12         3.4807  0.396682496 2.0145450 -0.6575564  0.6784942870
                    2015-08-13         3.5187  1.064117266 2.0390422 -0.6432271  0.6979075648
                    2015-08-14         3.4820 -0.247016300 2.0153374 -0.7192870  0.6480251750
                    2015-08-17         3.4810 -1.184774093 2.1094473 -0.9352301  0.5871086349
                    2015-08-18         3.4681 -1.212364308 2.1864729 -1.1299472  0.5282628485
                    2015-08-19         3.4926 -2.540271699 2.3911950 -1.5783870  0.4064039880
                    2015-08-20         3.4579 -1.968362932 2.4623598 -1.8443015  0.3090291426
                    2015-08-21         3.4998 -1.885025633 2.5160255 -2.0680150  0.2240052585
                    2015-08-24         3.5524 -1.918249920 2.5797446 -2.2636749  0.1580348337
                    2015-08-25         3.6172 -0.073792880 2.5672080 -2.2774624  0.1448727701
                    2015-08-26         3.5968 -0.654065425 2.5671136 -2.3052196  0.1309469841
                    2015-08-27         3.5526 -0.610844638 2.5571085 -2.3452209  0.1059437888
                    2015-08-28         3.5819  2.068485500 2.7023988 -2.3939864  0.1542062310
                    2015-08-31         3.6198  3.276461295 3.0488630 -2.5346551  0.2571039547
                    2015-09-01         3.6977  3.012968160 3.3252241 -2.5913694  0.3669273501
                    2015-09-02         3.7609  1.319458889 3.3770219 -2.5803500  0.3983359711
                    2015-09-03         3.7397  1.222954220 3.3992829 -2.5790596  0.4101116881
                    2015-09-04         3.8430  1.388474585 3.4389640 -2.5770682  0.4309478954
                    2015-09-07         3.8430  2.375363664 3.5963196 -2.5661276  0.5150960285
                    2015-09-08         3.8203  1.260535328 3.6288627 -2.5571609  0.5358509032
                    2015-09-09         3.7792 -0.913740775 3.6384359 -2.6246399  0.5068979942
                    2015-09-10         3.8499 -1.208280022 3.5534391 -2.7443510  0.4045440547
                    2015-09-11         3.8735  0.304095228 3.4879948 -2.7573152  0.3653398243
                    2015-09-14         3.8156 -0.824477698 3.4734482 -2.8307950  0.3213266123
                    2015-09-15         3.8625  1.928794976 3.4504366 -2.8219029  0.3142668836
                    2015-09-16         3.8286  2.441458663 3.4811182 -2.8356531  0.3227325429
                    2015-09-17         3.8986  3.571472359 3.7181269 -2.9528729  0.3826270121
                    2015-09-18         3.9446  3.297716378 3.9868045 -3.0116400  0.4875822422
                    2015-09-21         3.9851  2.407020170 4.1224922 -3.0143584  0.5540669280
                    2015-09-22         4.0504  2.445625463 4.2525916 -3.0165638  0.6180139438
                    2015-09-23         4.1790  1.414947088 4.2969844 -2.9930722  0.6519560969
                    2015-09-24         3.9370  0.142556643 4.2674254 -3.0249506  0.6212374095
                    2015-09-25         3.9765  0.543916266 4.2792205 -2.9840168  0.6476018283
                    2015-09-28         4.1106  1.102622777 4.2917663 -2.8440695  0.7238483906
                    2015-09-29         4.0608  3.146668217 4.4657099 -2.7274110  0.8691494748
                    2015-09-30         3.9471  1.002501203 4.3453160 -2.3708322  0.9872419049
                    2015-10-01         4.0098  0.207299529 4.2431416 -2.1236136  1.0597639869
                    2015-10-02         3.9325  0.257836640 4.1320883 -1.8697028  1.1311927293
                    2015-10-05         3.9115 -0.259679877 4.0108231 -1.6378663  1.1864783975
                    2015-10-06         3.8548 -0.229135670 4.0157575 -1.6531568  1.1813003044
                    2015-10-07         3.8857 -1.008262382 4.0383275 -1.6993401  1.1694937392
                    2015-10-08         3.7840 -0.827853080 4.0506966 -1.7261764  1.1622601245
                    2015-10-09         3.7662 -1.549022902 4.0721157 -1.9887627  1.0416765111
                    2015-10-12         3.7662 -1.182302729 3.9072692 -2.1211672  0.8930510436
                    2015-10-13         3.8931 -0.151540748 3.7150419 -2.1399071  0.7875674134
                    2015-10-14         3.8126 -1.394567527 3.7226588 -2.3284591  0.6970998662
                    2015-10-15         3.7994 -0.765332852 3.6955723 -2.4339250  0.6308236304
                    2015-10-16         3.9253  1.755707483 3.7232303 -2.4371008  0.6430647271
                    2015-10-19         3.8864 -0.005412208 3.5812295 -2.4538185  0.5637055313
                    2015-10-20         3.9053  1.240222611 3.5799145 -2.4538576  0.5630284407
                    2015-10-21         3.9399  0.481642094 3.5747994 -2.3557170  0.6095412030
                    2015-10-22         3.9070  0.595954568 3.5544745 -2.2151098  0.6696823560
                    2015-10-23         3.8771 -0.696022671 3.5614526 -2.2887624  0.6363450928
                    2015-10-26         3.9067 -0.097939430 3.5474039 -2.2262779  0.6605630350
                    2015-10-27         3.8884 -0.179690333 3.4519132 -2.2713528  0.5902801914
                    2015-10-28         3.9048  1.082021586 3.3272540 -2.2373228  0.5449656222
                    2015-10-29         3.8489 -0.227289592 2.9665999 -2.1299195  0.4183402238
                    2015-10-30         3.8568  0.272833919 2.6220541 -1.9870325  0.3175108085
                    2015-11-02         3.8568  0.300689669 2.4125588 -1.9179592  0.2472997918
                    2015-11-03         3.7694 -1.042205419 2.1792576 -1.9171801  0.1310387624
                    2015-11-04         3.8009 -0.700582164 2.0711547 -1.9501124  0.0605211207
                    2015-11-05         3.7802 -1.534101153 2.0973647 -2.0880996  0.0046325274
                    2015-11-06         3.7692 -1.330570385 2.0797085 -2.1954092 -0.0578503609
                    2015-11-09         3.7993 -0.612073064 1.9855301 -2.2155439 -0.1150068889
                    2015-11-10         3.7476 -1.570361354 1.4982723 -2.0427547 -0.2722412080
                    2015-11-11         3.7609 -0.918237575 1.3816348 -2.0541665 -0.3362658339
                    2015-11-12         3.7710 -0.360032867 1.3504101 -2.0607640 -0.3551769137
                    2015-11-13         3.8494  0.843071163 1.4118037 -2.0831419 -0.3356690963
                    2015-11-16         3.8190 -0.015521438 1.4236770 -2.0787380 -0.3275304817
                    2015-11-17         3.8138 -0.178323100 1.4258628 -2.0775363 -0.3258367293
                    2015-11-18         3.7648 -1.143696894 1.4293059 -2.0900083 -0.3303512130
                    2015-11-19         3.7177 -1.970379298 1.4828464 -2.2197173 -0.3684354203
                    2015-11-20         3.7080 -1.981097208 1.5126446 -2.2783204 -0.3828378971
                    2015-11-23         3.7323 -1.167446302 1.5122831 -2.2769685 -0.3823426829
                    2015-11-24         3.6990 -0.878883592 1.4944213 -2.3075962 -0.4065874444
                    2015-11-25         3.7450 -0.525190572 1.4872415 -2.2424579 -0.3776082126
                    2015-11-26         3.7430 -1.572016300 1.5061858 -2.3151811 -0.4044976608
                    2015-11-27         3.8467  0.413647231 1.3089202 -2.2073862 -0.4492330026
                    2015-11-30         3.8685 -0.446457318 1.2862198 -2.2140888 -0.4639345063
                    2015-12-01         3.8500 -0.700495892 1.1001380 -2.1573883 -0.5286251230
                    2015-12-02         3.8366 -0.420377493 1.0255951 -2.1429800 -0.5586924426
                    2015-12-03         3.7592 -2.162425617 0.9759674 -2.2772443 -0.6506384488
                    2015-12-04         3.7524 -1.897908529 0.9985287 -2.3799313 -0.6907013108
                    2015-12-07         3.7680 -0.268156500 0.9857446 -2.3784951 -0.6963752131
                    2015-12-08         3.7950  0.555521511 1.0620267 -2.4057630 -0.6718681516
                    2015-12-09         3.7502 -0.023184365 0.9144126 -2.3318293 -0.7087083500
                    2015-12-10         3.8134  0.280148176 0.9623660 -2.3459535 -0.6917937577
                    2015-12-11         3.8739  1.567306950 1.1690821 -2.4663714 -0.6486446567
                    2015-12-14         3.8733 -0.730348778 1.0990804 -2.4651056 -0.6830126049
                    2015-12-15         3.8710  0.857622984 1.2428005 -2.4821705 -0.6196849915
                    2015-12-16         3.8816 -1.199396846 1.2380302 -2.5106545 -0.6363121475
                    2015-12-17         3.8776  0.698808726 1.3420427 -2.4658063 -0.5618818182
                    2015-12-18         3.9833  1.647828074 1.5809573 -2.5061611 -0.4626018696
                    2015-12-21         4.0112  1.467803100 1.7670880 -2.5536334 -0.3932726642
                    2015-12-22         3.9886  1.320477177 1.9037072 -2.4975299 -0.2969113798
                    2015-12-23         3.9412  1.515472405 2.0679174 -2.4994928 -0.2157877138
                    2015-12-24         3.9420  1.716289282 2.2424613 -2.5356152 -0.1465769755
                    2015-12-25         3.9420  1.688648523 2.3379650 -2.5747472 -0.1183910635
                    2015-12-28         3.8594 -0.997041641 2.3256400 -2.6278568 -0.1511084036
                    2015-12-29         3.8649  0.188089543 2.3409104 -2.6186997 -0.1388946488
                    2015-12-30         3.9582  2.046467674 2.5407912 -2.6059028 -0.0325558299
                    2015-12-31         3.9640  2.582933285 2.7559608 -2.5175183  0.1192212562
                    2016-01-01         3.9640  2.121572573 2.8674074 -2.3554536  0.2559769155
                    2016-01-04         4.0391  2.152289688 3.0096318 -2.2763622  0.3666347819
                    2016-01-05         4.0084  0.971572282 3.0371844 -2.1805511  0.4283166444
                    2016-01-06         4.0295  1.853863615 3.1410698 -2.1258329  0.5076184506
                    2016-01-07         4.0441  1.363761742 3.1353008 -1.9243454  0.6054777187
                    2016-01-08         4.0248  0.890529765 3.1522020 -1.9094544  0.6213738032
                    2016-01-11         4.0534 -0.078758449 3.1465578 -1.8792969  0.6336304322
                    2016-01-12         4.0280 -1.184617382 3.1717497 -1.9367636  0.6174930492
                    2016-01-13         4.0152 -1.383070217 3.2166435 -2.0458369  0.5854032917
                    2016-01-14         3.9997 -0.606174520 3.1003405 -1.8257838  0.6372783283
                    2016-01-15         4.0483 -0.481316516 2.9961055 -1.6271094  0.6844980621
                    2016-01-18         4.0333 -0.880923406 3.0208986 -1.6927537  0.6640724986
                    2016-01-19         4.0643 -0.447985905 3.0220549 -1.7608104  0.6306222513
                    2016-01-20         4.0975 -0.728037769 3.0386534 -1.8243991  0.6071271379
                    2016-01-21         4.1548  0.286489957 3.0387483 -1.8240712  0.6073385306
                    2016-01-22         4.0934 -0.520269076 2.9749615 -1.8994562  0.5377526630
                    2016-01-25         4.0892 -0.620436957 2.9710559 -1.8882231  0.5414163904
                    2016-01-26         4.0514 -1.272880026 2.9848601 -2.0440609  0.4703996234
                    2016-01-27         4.1104  0.529935516 2.9621082 -1.9060201  0.5280440354
                    2016-01-28         4.0695 -0.365788116 2.9472741 -1.9621591  0.4925574740
                    2016-01-29         3.9991 -0.888213736 2.8727627 -2.0567172  0.4080227471
                    2016-02-01         3.9646 -0.318356773 2.7935068 -2.0965386  0.3484840846
                    2016-02-02         3.9910 -0.051768597 2.7237469 -2.1182617  0.3027425588
                    2016-02-03         3.8960 -1.151537473 2.6464162 -2.2187317  0.2138422296
                    2016-02-04         3.8899 -1.307516034 2.5385930 -2.3124955  0.1130487190
                    2016-02-05         3.9066 -1.256526416 2.4148118 -2.3850593  0.0148762211
                    2016-02-08         3.9066 -1.476647149 2.4328659 -2.4350872 -0.0011106292
                    2016-02-09         3.9066 -1.692138415 2.4456920 -2.5732618 -0.0637848945
                    2016-02-10         3.9295 -1.081713189 2.2363498 -2.5724650 -0.1680575899
                    2016-02-11         3.9925  0.316242386 1.9349288 -2.4221567 -0.2436139532
                    2016-02-12         4.0017  0.804481727 1.7417660 -2.3168000 -0.2875169814
                    2016-02-15         3.9973  0.596191436 1.5027630 -2.1815368 -0.3393869232
                    2016-02-16         4.0680  1.653877540 1.6075031 -2.2407900 -0.3166434146
                    2016-02-17         3.9895 -0.543827126 1.3450478 -2.1381807 -0.3965664393
                    2016-02-18         4.0294  0.704174652 1.2460574 -2.0831628 -0.4185526757
                    2016-02-19         4.0219  0.375323631 1.1829967 -2.0544492 -0.4357262135
                    2016-02-22         3.9459 -1.349452836 1.1682534 -2.1244187 -0.4780826930
                    2016-02-23         3.9586 -1.076238560 1.1659155 -2.1148556 -0.4744700656
                    2016-02-24         3.9577 -0.197325598 1.1716429 -2.0415333 -0.4349452450
                    2016-02-25         3.9565 -0.357598879 1.1788381 -2.0321569 -0.4266593903
                    2016-02-26         4.0007 -0.053616639 1.1986726 -2.0234781 -0.4124027277
                    2016-02-29         4.0163  0.173727893 1.2375459 -1.9920413 -0.3772476844
                    2016-03-01         3.9335 -2.093237169 1.3001281 -2.1643069 -0.4320893932
                    2016-03-02         3.8945 -2.571784512 1.4049666 -2.3920618 -0.4935476180
                    2016-03-03         3.7984 -3.290751806 1.5181302 -2.7437082 -0.6127890101
                    2016-03-04         3.7516 -3.126932239 1.6198580 -3.0192136 -0.6996777821
                    2016-03-07         3.7850 -2.557596088 1.6519965 -3.1804960 -0.7642497532
                    2016-03-08         3.7545 -0.586914375 1.6679179 -3.1506863 -0.7413842315
                    2016-03-09         3.6885 -3.361097208 1.6703319 -3.4125025 -0.8710853223
                    2016-03-10         3.6271 -2.079012644 1.6430604 -3.4994460 -0.9281928066
                    2016-03-11         3.5855 -0.526200873 1.6592984 -3.4915498 -0.9161257111
                    2016-03-14         3.6617 -1.163611935 1.6225427 -3.5111445 -0.9443008832
                    2016-03-15         3.7674  0.203375949 1.6449376 -3.5165298 -0.9357960650
                    2016-03-16         3.7422 -0.123362083 1.6946173 -3.4976644 -0.9015235520
                    2016-03-17         3.6276 -1.615663900 1.6934150 -3.5170053 -0.9117951476
                    2016-03-18         3.6248 -2.154775060 1.7002553 -3.5837288 -0.9417367690
                    2016-03-21         3.6182 -2.382728840 1.7156783 -3.6595573 -0.9719394920
                    2016-03-22         3.5803 -2.011436432 1.7193276 -3.6844931 -0.9825827593
                    2016-03-23         3.6854 -1.039122091 1.7205765 -3.6829026 -0.9811630560
                    2016-03-24         3.6771 -0.850682876 1.6376283 -3.6777495 -1.0200605647
                    2016-03-25         3.6771 -0.499577480 1.5120661 -3.6391245 -1.0635292049
                    2016-03-28         3.6280 -0.903713591 1.3858570 -3.6129091 -1.1135260391
                    2016-03-29         3.6383 -0.869539387 1.0760140 -3.4712939 -1.1976399367
                    2016-03-30         3.6065 -2.522360424 1.0460833 -3.5732654 -1.2635910466
                    2016-03-31         3.5928 -2.489158382 0.8572505 -3.5973214 -1.3700354811")
    
    Observed <- as.xts(x, dateFormat = "Date")
    
    
    strat.name <- "FactorModelBT"
    portfolio.st <- "FactorModelBT"
    account.st <- "FactorModelBT"
    
    rm.strat(strat.name)
    rm.strat(portfolio.st)
    
    initPortf(portfolio.st,
              symbols = symbols,
              initDate = initDate,
              currency = 'USD')
    
    initAcct(account.st,
             portfolios = portfolio.st,
             initDate = initDate,
             currency = 'USD')
    
    initOrders(portfolio.st,
               initDate = initDate)
    
    strategy(strat.name, store = TRUE)
    
    ###################################### Signals ##############################################
    
    # Add position constraints for all symbols traded
    for (sym in symbols)
      addPosLimit(portfolio.st, sym, start(Observed), 30)
    
    # Open Short
    
    add.signal(strat.name,
               name = "sigCrossover",
               arguments = list(columns = c("Premium", "Up"), relationship = "gt"),
               label = "Premium.gt.Upper.Band")
    
    # Close Short
    
    add.signal(strat.name,
               name = "sigCrossover",
               arguments = list(columns = c("Premium", "Avg"), relationship = "lte"),
               label = "Premium.lte.Avg")
    
    # Open Long
    
    add.signal(strat.name,
               name = "sigCrossover",
               arguments = list(columns = c("Premium", "Dwn"), relationship = "lt"),
               label = "Premium.lt.Lower.Band")
    
    # Close Long
    
    add.signal(strat.name,
               name = "sigCrossover",
               arguments = list(columns = c("Premium", "Avg"), relationship = "gte"),
               label = "Premium.gte.Avg")
    
    tmp <- applySignals(strategy = strat.name, mktdata = Observed)
    
    ################################ Trading Rules - Actions ###################################
    
    # Open short Position
    
    add.rule(strat.name,
             name = "ruleSignal",
             arguments = list(sigcol = "Premium.gt.Upper.Band",
                              sigval = TRUE,
                              orderqty = -1000,
                              ordertype = "market",
                              orderside = NULL,
                              osFUN = osMaxPos, # Add position sizing function here
                              threshold = NULL),
             type = "enter",
             label = "OpenShort",
             path.dep = TRUE)
    
    # Close short Position
    
    add.rule(strat.name,
             name = "ruleSignal",
             arguments = list(sigcol = "Premium.lte.Avg",
                              sigval = TRUE,
                              orderqty = "all",
                              ordertype = "market",
                              orderside = "short",
                              replace = TRUE),
             type = "exit",
             label = "CloseShort",
             path.dep = TRUE)
    
    # Open Long Position
    
    add.rule(strat.name,
             name = "ruleSignal",
             arguments = list(sigcol = "Premium.lt.Lower.Band",
                              sigval = TRUE,
                              orderqty = 1000,
                              ordertype = "market",
                              orderside = NULL,
                              osFUN = osMaxPos, # Add position sizing function here
                              threshold = NULL),
             type = "enter",
             label = "OpenLong",
             path.dep = TRUE)
    
    # Close Long Position
    
    add.rule(strat.name,
             name = "ruleSignal",
             arguments = list(sigcol = "Premium.gte.Avg",
                              sigval = TRUE,
                              orderqty = "all",
                              ordertype = "market",
                              orderside = "long",
                              replace = TRUE),
             type = "exit",
             label = "CloseLong",
             path.dep = TRUE)
    
    ################################ Apply Strategy ############################
    
    out <- applyStrategy(strategy = strat.name, portfolios = portfolio.st)
    
    #set up analytics
    
    updatePortf(portfolio.st)
    
    dateRange <- time(getPortfolio(portfolio.st)$summary)[-1]
    
    updateAcct(portfolio.st,dateRange)
    
    updateEndEq(account.st)
    
    chart.Posn(portfolio.st, 'Observed')
    

相关问题