2016-12-08 3 views
3

にF#配列に変換するために私は2つの引数1を取るMATLAB関数を、持っている)貿易日付2)OHLCと与えられた株式のボリュームとどのようにmwArray

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アセンブリを作成し、MWArrayをF#プロジェクトの参照に追加しました。 F#プロジェクトでは、在庫IDを取得し、株式の価格、量などを返す在庫情報という別の関数があります。

私は

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) 

を書かれているが、最後の行のテスト機能は、その2番目と3番目の引数としてのmwArrayを期待しています。F#でMATLAB関数を使用するには

日付とpvのシーケンスをMWArrayに変換するにはどうすればよいですか?

答えて

2

一つの方法は、私がこのように

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で私の結果を得るため、その場合には、F#配列を回避し、C#の方法に従うことです。