2010-10-24 81 views
0

我正在尝试编写一个程序,该程序将通过策略找到总点数(获得的价格)。MATLAB中的交易系统

采用这个策略是每当股价5,我们将开始交易,并且只要我们将继续贸易为一体的股票价格比2高,比低9,范围(2,9)意义。当价格达到29时,我们停止交易。

当我运行程序时,它不能正确执行,它不会进入第二个while循环。什么不见​​了?

%总:从Excel,加载的数据矩阵,其中第一列是日期和第二个:股票价格顺便说一句2个连续的日期 %Sheet 1中的差异:使用策略 %DIFF获得点数的总#正股股价

total = 0; 
diff = 0; 
i =1; 
j = 1; 

while i <= length(Sheet1) 
     i 
     if Sheet1(i,2)==5 
       while Sheet1(j,2) > 2 
          j 
         diff = Sheet1(j+1,2) - Sheet1(j,2); 
         total = total + diff; 
         j = j + 1 ; 

         total 
         diff 

        end 
     end 
    i = i+ 1 ; 
end 
+2

这是关于什么? – Jonas 2010-10-24 21:06:30

回答

2

第一代码将只在第一行去,因为我始终为1,从来没有增加它会无限循环
如果我增加了,你应该去,直到“长度(工作表Sheet1)-1 “因为出于索引

你能更具体的,因为我不明白你的意思,以帮助你在算法

+0

我已经为变量i和j添加了增量。似乎程序不会进入第二个while循环。 – mtlb 2010-10-25 03:34:29

1

这里是我在这个问题的尝试(我的理解是这样!):

p = rand(100,1) * 10;    %# generate some prices with values in [0,10] 

s = 0;        %# index when we started trading 
flag = false;      %# flag to indicate trading 
total = 0;       %# total gain 
for i=1:length(p)-1 
    if p(i)>5 && ~flag    %# if price>5 and we're not currently trading 
     %# start trading 
     flag = true; 
     s = i; 
    elseif flag && (p(i)<=2||p(i)>=9)  %# if trading and price not in [2,9] 
     %# stop trading 
     flag = false; 
     total = total + sum(diff(p(s:i))); %# interval from p(s) to p(i) 
    end 
end 
if flag          %# in case still trading past end 
    %# stop trading 
    flag = false; 
    total = total + sum(diff(p(s:end))); %# interval from p(s) to p(end) 
end 

%# display total price gains 
disp(total) 

基本上,我们遍历向量的价格。当price>5我们开始交易,直到价格不在[2,9]的范围内,此时我们计算从我们开始到这个位置(您正在尝试做什么?)的差异总和并将其加到总计。

不幸的是,它使用一个for循环,也许有人可以通过矢量改善它。

0

,我认为你应该只使用i或j不能同时