# Find minimum difference in arrays from exact value

조회 수: 60(최근 30일)
Artem Bielykh 3 Feb 2019
댓글: Artem Bielykh 7 Feb 2019
Hi!
I have option strike prices (Strike), date, and price index correspond to date.
I need to find the strike value (from Strike column) which is the nearest to Price for correspond day.
For example: The nearest price of 5848 for 05.02.2016 date is 5850.
The nearest price of 5689 for 08.02.2016 date is 5675.
The data is attached in excel file.
I should have only one Strike (column 1) price which is the nearest to the Price (column 3) for each date.
One simple table in the output, such as:
05.02 - one price,
08.02 - one price,
09.02- one price and so on.
Can you help me please how to solve this in MATLAB?
Thanks a lot

#### 댓글 수: 2

YT 3 Feb 2019
What have you tried yourself already (please provide some code)? It's not a difficult problem, so are stuck on how to solve it or do you have trouble with coding it yourself?
Artem Bielykh 3 Feb 2019
I tried to do it in Excel, and it does not work very good - a lot of hand job.
I have no code, and have no idea how to code this solution in Matblab.

로그인 to comment.

### 채택된 답변

YT 3 Feb 2019
편집: YT 3 Feb 2019
I've created this snippet for you with comments.
clear all;
close all;
%get unique dates
dates = unique(T.Date);
%loop over dates
for i = 1:numel(dates)
%get the indices for rows of current date
idx = ismember(T.Date, {datestr(dates(i))});
currentTable = T(idx,:);
%the amount of rows for each one
aoe = size(currentTable,1);
%get the absolute difference between price and strike and paste it into the field
for j = 1:aoe
currentTable.NearestPrice(j) = abs(currentTable.Price(j) - currentTable.Strike(j));
end
%get the smallest value for the difference and return index
[~,I] = min(currentTable.NearestPrice);
%create vector of zeros
vector = zeros(aoe,1);
%put in the strike value at the found index
vector(I) = currentTable.Strike(I);
currentTable.NearestPrice = vector;
%replace the current values in your old table
T(idx,:) = currentTable;
end
%save the table under new name
writetable(T,'OptionpricesV2.xlsx');
Because you're new to all this, I suggest reading some of the documentation and try to make your own snippets. The people here are glad to help but next time you should also provide a bit of code of what you've already tried.

#### 댓글 수: 1

Artem Bielykh 7 Feb 2019
Thank you very much!

로그인 to comment.

### 추가 답변(1개)

Image Analyst 3 Feb 2019
Subtract and then use min():
priceDifferences = strikePrice - dailyPrice;
[minDiff, indexOfMin] = min(priceDifferences);
strikeValue = strikePrice(indexOfMin)

#### 댓글 수: 0

로그인 to comment.

이 질문에 답변하려면 로그인을(를) 수행하십시오.

Translated by