2010-10-24 3 views
0

J'essaye d'écrire un programme qui trouvera le nombre total de pips (prix gagné) avec une stratégie.système de négociation dans MATLAB

Fondamentalement, la stratégie est chaque fois que le prix des actions est 5, et nous allons commencer à négocier et nous allons poursuivre ses activités aussi longtemps que le prix des actions est supérieur à 2 et inférieur à 9, ce qui signifie dans la gamme (2,9). Lorsque le prix atteint 2 ou 9, nous cessons la négociation.

Lorsque j'exécute le programme, il ne s'exécute pas correctement, il n'entre pas dans la seconde boucle. Que manque-t-il?

% du total: le # total de pips obtenus avec une stratégie % diff: la différence du prix des actions entre 2 dates consécutives % Sheet1: une matrice de données chargée à partir d'Excel, où la première colonne est la date et deuxième est stock prix

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

C'est sur quoi exactement? – Jonas

Répondre

2

d'abord le code n'aller sur la première ligne comme i = 1 toujours et jamais plus il sera boucle infinie
si je vous augmenté devriez aller jusqu'à ce que « la longueur (Sheet1) -1 "parce que hors de l'index

pourriez-vous être plus précis que je ne comprends pas ce que vous entendez pour vous aider dans l'algorithme

+0

J'ai ajouté les incréments pour les variables i et j. Il semble que le programme n'entre pas dans la seconde boucle. – mtlb

1

Voici ma tentative de ce problème (la façon dont je l'ai compris!):

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) 

En gros, on boucle sur le vecteur des prix. Lorsque price>5 nous commençons à négocier jusqu'à ce que le prix ne soit pas dans la plage [2,9], à quel point nous calculons la somme des différences depuis quand nous avons commencé à cet endroit (est ce que vous essayez de faire ??) et l'ajouter à un grand total .

Malheureusement, il utilise une boucle for, peut-être quelqu'un peut l'améliorer par vectorisation ...

0

je pense que vous ne devez utiliser que i ou j pas les deux