Matlab 如何将F#Seq转换为MWArray

Matlab 如何将F#Seq转换为MWArray,matlab,f#,Matlab,F#,我在MATLAB中有一个函数,它接受两个参数1)交易日期2)OHLC和给定股票的数量,并返回一些技术指标,写为 function [MACD, ADO, CHAIK, STOCH] = test(date, pricevolume) tsObject = fints(date, pricevolume, {'Open','High','Low','Close','Volume'}); MACD = fts2mat(macd(tsObject,'Close')); ADO

我在MATLAB中有一个函数,它接受两个参数1)交易日期2)OHLC和给定股票的数量,并返回一些技术指标,写为

function [MACD, ADO, CHAIK, STOCH] = test(date, pricevolume)
    tsObject = fints(date, pricevolume, {'Open','High','Low','Close','Volume'});
    MACD =  fts2mat(macd(tsObject,'Close'));
    ADO = fts2mat(adosc(tsObject));
    CHAIK = fts2mat(chaikosc(tsObject));
    STOCH = fts2mat(stochosc(tsObject));
end
使用deploy工具,我创建了一个.net程序集,并在我的F#项目的引用中添加了它和MWArray。在F#项目中,我有另一个名为stockInfo的函数,它获取股票id并返回股票的价格、数量等

为了在F#中使用MATLAB函数,我编写了

open MathWorks.MATLAB.NET.Arrays
open MathWorks.MATLAB.NET.Utility
open test

//Creates instance of class created by matlab  
let x = new Class1()
//returns price for a stock
let price = stockInfo(1)
let mon = price.Monthly
//creates sequence of dates
let dates = mon |> Seq.map(fun x-> x.Date)
//creates sequence of OHLC and Volume
let pv = mon|> Seq.map(fun x-> x.Open, x.High, x.Low, x.Close, x.Volume)
//I have to call matlab function 
let y = x.test(4, dates, pv)
但最后一行中的test函数期望MWArray作为其第二个和第三个参数

如何将日期和pv序列转换为MWARRY?

一种方法是避免F#Seq,而遵循C#方式,在这种情况下,我必须以这种方式编写

let rows = mon.Count()
let dates = new MWCellArray(rows)
let pvs: double[,] = Array2D.zeroCreate rows 5

for i in 0 .. rows-1 do
    pvs.[i,0] <- mon.[i].Open
    pvs.[i,1] <- mon.[i].High
    pvs.[i,2] <- mon.[i].Low
    pvs.[i,3] <- mon.[i].Close
    pvs.[i,4] <- double mon.[i].Volume
    dates.[[|i+1|]] <- new MWCharArray( mon.[i].Date.Date.ToString())

let pv = new MWNumericArray(pvs)  
let y = x.test(4,dates,pv)
let rows=mon.Count()
让日期=新日期(行)
让pvs:double[,]=Array2D.zero创建行5
因为我在0。。第1行
pvs[i,0]