Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB中的交易系统_Matlab - Fatal编程技术网

MATLAB中的交易系统

MATLAB中的交易系统,matlab,Matlab,我正试图编写一个程序,用一个策略来计算总的PIP(获得的价格) 基本上,该策略是每当股票价格为5,我们将开始交易,只要股票价格高于2且低于9,即在(2,9)范围内,我们将继续交易。当价格达到2或9时,我们停止交易 当我运行程序时,它没有正确执行,它没有进入第二个while循环。少了什么 %总计:通过策略获得的PIP总数 %差异:股票价格在两个连续日期之间的差异 %Sheet1:从excel加载的数据矩阵,其中第一列是日期,第二列是股价 total = 0; diff = 0; i =1; j =

我正试图编写一个程序,用一个策略来计算总的PIP(获得的价格)

基本上,该策略是每当股票价格为
5
,我们将开始交易,只要股票价格高于
2
且低于
9
,即在
(2,9)
范围内,我们将继续交易。当价格达到
2
9
时,我们停止交易

当我运行程序时,它没有正确执行,它没有进入第二个while循环。少了什么

%总计:通过策略获得的PIP总数 %差异:股票价格在两个连续日期之间的差异 %Sheet1:从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 
total=0;
差异=0;
i=1;
j=1;
而我2
J
微分=活页1(j+1,2)-活页1(j,2);
总计=总计+差异;
j=j+1;
全部的
差异
结束
结束
i=i+1;
结束

首先,当i=1时,代码将只在第一行上运行,始终不会增加,它将进入无限循环
如果我增加你应该一直到“长度(Sheet1)-1”,因为超出索引


你能说得更具体一点吗?因为我不明白你在算法上的帮助是什么意思。首先,代码将只在第一行上运行,因为i=1始终不增加,它将进入无限循环
如果我增加你应该一直到“长度(Sheet1)-1”,因为超出索引


你能说得更具体些吗,因为我不明白你在算法方面想帮你什么

以下是我对这个问题的尝试(我理解它的方式!):

p=rand(100,1)*10;%使用[0,10]中的值生成一些价格
s=0;%#我们开始交易时的指数
flag=false;%#表示交易的旗帜
总计=0;%#总增益
对于i=1:长度(p)-1
如果p(i)>5&&~flag%#如果价格>5且我们当前未进行交易
%#开始交易
flag=true;
s=i;
如果交易和价格不在[2,9]中,则elseif标志和(p(i)=9)%#
%#停止交易
flag=false;
总数=总数+总和(差异(p(s:i));%从p(s)到p(i)的间隔
结束
结束
如果标志%#如果仍在交易结束
%#停止交易
flag=false;
总计=总计+总和(差异(p(s:end));%从p(s)到p(结束)的间隔
结束
%#显示总价格收益
显示(总计)
基本上,我们在价格向量上循环。当
price>5
我们开始交易,直到价格不在
[2,9]
范围内,在这一点上,我们计算从我们开始到这个位置的差异总和(这是您试图做的吗??),并将其添加到总计中


不幸的是,它使用了for循环,也许有人可以通过矢量化来改进它…

以下是我对这个问题的尝试(以我理解的方式!):

p=rand(100,1)*10;%使用[0,10]中的值生成一些价格
s=0;%#我们开始交易时的指数
flag=false;%#表示交易的旗帜
总计=0;%#总增益
对于i=1:长度(p)-1
如果p(i)>5&&~flag%#如果价格>5且我们当前未进行交易
%#开始交易
flag=true;
s=i;
如果交易和价格不在[2,9]中,则elseif标志和(p(i)=9)%#
%#停止交易
flag=false;
总数=总数+总和(差异(p(s:i));%从p(s)到p(i)的间隔
结束
结束
如果标志%#如果仍在交易结束
%#停止交易
flag=false;
总计=总计+总和(差异(p(s:end));%从p(s)到p(结束)的间隔
结束
%#显示总价格收益
显示(总计)
基本上,我们在价格向量上循环。当
price>5
我们开始交易,直到价格不在
[2,9]
范围内,在这一点上,我们计算从我们开始到这个位置的差异总和(这是您试图做的吗??),并将其添加到总计中


不幸的是,它使用了for循环,也许有人可以通过矢量化来改进它…

我认为你应该只使用i或j,而不是两者都使用

我认为你应该只使用i或j,而不是两者都使用

这是关于确切的什么?这是关于确切的什么?我已经为变量i和j添加了增量。似乎程序没有进入第二个while循环。我已经添加了变量I和j的增量。似乎程序没有进入第二个while循环。
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)