private void CalculateSingleRow(object context)
{
CalculateSingleRowWithInterpolation(context);
return;
HestonCall hc = context as HestonCall;
int r = hc.row;
for (int c = 0; c < this.callMarketPrice.C; c++)
{
bool callCondition=this.callMarketPrice[r, c] > s0*optionThreshold && this.cpmd.CallVolume[r,c]>0;
bool putCondition=this.cpmd.PutPrice[r, c] > s0*optionThreshold && this.cpmd.PutVolume[r,c]>0;
if (callCondition)//||putCondition)
{
hc.K = this.strike[c];
var callPut=hc.HestonCallPutPrice();
hc.hestonCallPrice[r, c] = callPut[0];
hc.hestonPutPrice[r, c] = callPut[1];
if (callCondition)
{
if (HestonCallOptimizationProblem.optimizeRelativeError)
{
double mkt = pricingMin + this.callMarketPrice[r, c];
double model = pricingMin + hc.hestonCallPrice[r, c];
hc.sum += callWeight[r,c] * Math.Pow((model - mkt) / mkt, 2);
}
else
{
hc.sum += callWeight[r,c] * Math.Pow(hc.hestonCallPrice[r, c] - this.callMarketPrice[r, c], 2);
}
}
/*
if (putCondition)
{
if (HestonCallOptimizationProblem.optimizeRelativeError)
{
double mkt = pricingMin + this.cpmd.PutPrice[r, c];
double model = pricingMin + hc.hestonPutPrice[r, c];
hc.sum += putWeight[r,c] * Math.Pow((model - mkt) / mkt, 2);
}
else
{
hc.sum += putWeight[r,c]* Math.Pow(hc.hestonPutPrice[r, c] - this.cpmd.PutPrice[r, c], 2);
}
}
*/
}
}
return;
}