小编sie*_*gel的帖子

Python中最大亏损的开始,结束和持续时间

给定一个时间序列,我想计算最大亏损,我还想找到最大亏损的起点和终点,这样我就可以计算出持续时间.我想在这样的时间序列图上标记缩编的开始和结束:

一只忙碌的猫http://oi61.tinypic.com/r9h4er.jpg

到目前为止,我已经有了生成随机时间序列的代码,并且我已经有了计算最大亏损的代码.如果有人知道如何确定缩编开始和结束的地方,我真的很感激!

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# create random walk which I want to calculate maximum drawdown for:

T = 50
mu = 0.05
sigma = 0.2
S0 = 20
dt = 0.01
N = round(T/dt)
t = np.linspace(0, T, N)
W = np.random.standard_normal(size = N) 
W = np.cumsum(W)*np.sqrt(dt) ### standard brownian motion ###
X = (mu-0.5*sigma**2)*t + sigma*W 

S = S0*np.exp(X) ### geometric brownian motion ###
plt.plot(S)

# Max drawdown …
Run Code Online (Sandbox Code Playgroud)

python numpy time-series algorithmic-trading

19
推荐指数
3
解决办法
2万
查看次数

计数在矩阵的列中运行

我有一个矩阵1s,并-1s用随机穿插0s:

%// create matrix of 1s and -1s

hypwayt = randn(10,5);
hypwayt(hypwayt > 0) =  1;
hypwayt(hypwayt < 0) = -1;

%// create numz random indices at which to insert 0s (pairs of indices may  
%// repeat, so final number of inserted zeros may be < numz)

numz = 15;
a = 1;
b = 10;
r = round((b-a).*rand(numz,1) + a);
s = round((5-1).*rand(numz,1) + a);

for nx = 1:numz
    hypwayt(r(nx),s(nx)) = 0
end …
Run Code Online (Sandbox Code Playgroud)

matlab run-length-encoding

5
推荐指数
1
解决办法
148
查看次数

在第一个否定之后将元素转换为NaN

我在Matlab中有一个三维数组.第一个维度是时间,第二个维度是湿度,第三个维度是温度.如果温度值<0,我希望每个后续温度值都变为NaN.

例如,如果数组是:

>> sampl = randn(4,3,2)

sampl(:,:,1) =

  0.79487     0.71017     -0.39167
  0.51754     -1.3068     0.84166
  0.49461     0.74159     0.082784
  0.66393     1.4677      0.31467


sampl(:,:,2) =

  0.78981      1.3096        1.0434
 -0.80122      0.16037      -1.0682
 -0.32565      -2.1182      -0.31723
  0.28468      0.70708      1.4797
Run Code Online (Sandbox Code Playgroud)

将此转化为最有效的方法是什么:

sampl(:,:,1) = 

  0.79487     0.71017     NaN
  0.51754     NaN         NaN
  0.49461     NaN         NaN
  0.66393     NaN         NaN


sampl(:,:,2) =

  0.78981     1.3096      1.0434
  NaN         0.16037     NaN
  NaN         NaN         NaN
  NaN         NaN         NaN
Run Code Online (Sandbox Code Playgroud)

具体来说,对于特定切片,我们希望沿每列处理,并且一旦我们在一列中遇到负数,我们希望该位置与NaN该NaN值之后的同一列的所有行位置一样也是NaN.

matlab

4
推荐指数
1
解决办法
79
查看次数

在没有循环的结构中访问数据

我有一组字符串vals,例如:

vals = {'AD', 'BC'}
Run Code Online (Sandbox Code Playgroud)

我还有一个结构info,其中的结构嵌套在对应于数组中元素的字段中vals(在本例中为'AD'和'BC'),每个结构依次在一个名为的字段中存储一个数字lastcontract.

我可以使用for循环来提取lastcontract每个vals这样的:

for index = 1:length(vals)
    info.(vals{index}).lastcontract
end
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想找到一种没有循环的方法,但我没有运气.我试过了:

info.(vals{1:2}).lastcontract
Run Code Online (Sandbox Code Playgroud)

没有成功.我认为arrayfun可能是合适的方式,但我无法弄清楚正确的语法.

matlab struct anonymous-function

2
推荐指数
1
解决办法
1250
查看次数

仅保留间隔内具有最大元素的矩阵行

我有一个矩阵,其中最右边的元素以降序重复YYYYMMDD日期,例如:

      40        1630        1711    20140326
     169         700         950    20140326
      40        1630        1711    20140326
     169         700         950    20140327
      40        1630        1711    20140327
     169         700         950    20140327
      40        1630        1711    20140327
     169         700         950    20140328
      40        1630        1711    20140328
     169         700         950    20140328
      40        1630        1711    20140328
    3049         700         950    20140331
      40        1630        1711    20140331
    3049         700         950    20140331
      40        1630        1711    20140331
     169         700         950    20140401
      40        1630        1711    20140401
     169         700         950    20140401
      40        1630        1711    20140401
     169         700         950 …
Run Code Online (Sandbox Code Playgroud)

matlab

2
推荐指数
1
解决办法
83
查看次数

理解矢量化

我正在尝试使一些代码更有效,并且想知道如何对此进行矢量化:

%==========================================================================
% MinutesInDayTable.m
% 
% Creates a table identifying every minute as an integer from 0 to 2400.

minuteTableInDay=zeros(24*60,1);
k=1;
for i=1:24
    for j=1:60
        minuteTableInDay(k) = ((i-1)*100+(j-1))*100;
        k=k+1;
    end
end
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ end of code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

optimization matlab vectorization

1
推荐指数
1
解决办法
95
查看次数

替代matlab中的if elseif

我有一个叫做的字符串name.根据以下方案,第三个字符name是表示与哪个月name相关联的字母:

Jan  F
Feb  G
Mar  H
Abr  J
May  K
Jun  M
Jul  N
Aug  Q
Sep  U
Oct  V
Nov  X
Dec  Z
Run Code Online (Sandbox Code Playgroud)

我想重命名name标识的文件,以便使用数字代替任意字母系统:

01
02
 ...
12
Run Code Online (Sandbox Code Playgroud)

为此,我使用if/elseif以下列方式:

 if name(3) == 'F'                      
            monthdesignator = '01';
        elseif name(3) == 'G'
            monthdesignator = '02';
        elseif name(3) == 'H'
            monthdesignator = '03';
        elseif name(3) == 'J'
            monthdesignator = '04';
        elseif name(3) == 'K'
            monthdesignator = '05';
        elseif name(3) == 'M'
            monthdesignator = …
Run Code Online (Sandbox Code Playgroud)

string matlab if-statement

0
推荐指数
1
解决办法
724
查看次数