簡體   English   中英

如何將F#Seq轉換為MWArray

[英]How to Convert F# Seq to MWArray

我在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

使用部署工具我創建了一個.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)

但是最后一行的測試函數期望MWArray成為它的第二和第三個參數。

如何將日期和光伏序列轉換為MWArray?

一種方法是避免使用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)

我讓我的結果y

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM