2010-10-24 1 views
0

Я пытаюсь написать программу, которая найдет общее количество пунктов (цена получена) со стратегией.торговая система в MATLAB

В принципе, стратегия, когда цена акции 5, и мы начнем торговать, и мы будем продолжать торговлю до тех пор, пока цена акции выше, чем 2 и ниже 9, то есть в диапазоне (2,9). Когда цена достигает 2 или 9, мы останавливаем торговлю.

Когда я запускаю программу, она не выполняется правильно, она не вводит второй цикл while. Чего не хватает?

% всего: общее кол-во пунктов, полученных с помощью стратегии % Разница: разница в цене акций BTW 2 последовательных дат % Лист1: матрицы данных, загруженной из Excel, где первый столбец является дата и второй один является цена акций акций

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

ответ

2

первый код будет идти только на первом ряду, как я = 1 всегда и никогда не увеличилось он будет идти бесконечный цикл
если я увеличил вы должны идти до «длины (Лист1) -1 «потому что из индекса

вы могли бы быть Более конкретно, как я не понимаю, что вы имеете в виду, чтобы помочь вам в алгоритме

+0

Я добавил приращения для переменных i и j. Кажется, что программа не вводит второй цикл while. – mtlb

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], в какой момент мы вычисляем сумму различий с того момента, когда мы начали с этого места (это то, что вы пытаетесь сделать?) И добавьте его в общую сумму ,

К сожалению, он использует для цикла, может быть, кто-то может улучшить его векторизации ...

0

я думаю, вы должны использовать только I или J не оба

Смежные вопросы