public override analysis.analysisResult Execute_CutLoss() { double[] minusDmi_14 = data.MinusDI((int)parameters.getParameter(0)); double[] plusDmi_14 = data.PlusDI((int)parameters.getParameter(1)); int CUTLOSS_LEVEL = (int)parameters.getParameter(2); double bought_price = 0, distanceStopLoss = 0; bool is_bought = false; analysis.analysisResult adviceInfo = new analysis.analysisResult(); analysis.tradeActions lastTrend = analysis.tradeActions.None; analysis.tradeActions currentTrend = analysis.tradeActions.None; for (int idx = 0; idx < minusDmi_14.Length; idx++) { currentTrend = ((plusDmi_14[idx] > minusDmi_14[idx]) ? analysis.tradeActions.Buy : analysis.tradeActions.Sell); //Buy Condition if (lastTrend == analysis.tradeActions.Sell && currentTrend == analysis.tradeActions.Buy) { adviceInfo.Add(analysis.tradeActions.Buy, idx); bought_price = data.closePrice[idx]; is_bought = true; } //Sell Condition if (is_bought && lastTrend == analysis.tradeActions.Buy && currentTrend == analysis.tradeActions.Sell) { adviceInfo.Add(analysis.tradeActions.Sell, idx); is_bought = false; } //Cut loss Condition if (bought_price > 0) { distanceStopLoss = (data.closePrice[idx] - bought_price) / bought_price * 100; } else { distanceStopLoss = 0; } if (is_bought && distanceStopLoss <= CUTLOSS_LEVEL) { adviceInfo.Add(analysis.tradeActions.Sell, idx); is_bought = false; } lastTrend = currentTrend; } if (fExportData) { analysis.ExportData(curStrategyCode + "-" + data.stockCodeRow.code + ".xls", data, plusDmi_14, minusDmi_14); } return(adviceInfo); }
public override analysis.analysisResult Execute_CutLoss() { double[] minusDmi_14 = data.MinusDI((int)parameters.getParameter(0)); double[] plusDmi_14 = data.PlusDI((int)parameters.getParameter(1)); int CUTLOSS_LEVEL = (int)parameters.getParameter(2); double bought_price = 0, distanceStopLoss = 0; bool is_bought = false; analysis.analysisResult adviceInfo = new analysis.analysisResult(); analysis.tradeActions lastTrend = analysis.tradeActions.None; analysis.tradeActions currentTrend = analysis.tradeActions.None; for (int idx = 0; idx < minusDmi_14.Length; idx++) { currentTrend = ((plusDmi_14[idx] > minusDmi_14[idx]) ? analysis.tradeActions.Buy : analysis.tradeActions.Sell); //Buy Condition if (lastTrend == analysis.tradeActions.Sell && currentTrend == analysis.tradeActions.Buy) { adviceInfo.Add(analysis.tradeActions.Buy, idx); bought_price = data.closePrice[idx]; is_bought = true; } //Sell Condition if (is_bought && lastTrend == analysis.tradeActions.Buy && currentTrend == analysis.tradeActions.Sell) { adviceInfo.Add(analysis.tradeActions.Sell, idx); is_bought = false; } //Cut loss Condition if (bought_price > 0) distanceStopLoss = (data.closePrice[idx] - bought_price) / bought_price * 100; else distanceStopLoss = 0; if (is_bought && distanceStopLoss <= CUTLOSS_LEVEL) { adviceInfo.Add(analysis.tradeActions.Sell, idx); is_bought = false; } lastTrend = currentTrend; } if (fExportData) analysis.ExportData(curStrategyCode + "-" + data.stockCodeRow.code + ".xls", data, plusDmi_14, minusDmi_14); return adviceInfo; }