2010-10-24 43 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不能同時