protected override Boolean BuySignal(PI31001 pi31001) { //開盤篩選 if (pi31001.Match_Qty == pi31001.Total_Qty) { //Open < close 開盤低於左日收盤價:不監控 if (OpenPrice < ClosePrice) { BreakTrade(); return(false); } //開盤價大於CDP AH: 不監控 if (OpenPrice > CDP_AH) { BreakTrade(); return(false); } return(false); } else { //盤中篩選 //盤中變綠棒: 不監控 if ((double)pi31001.Match_Price < OpenPrice) { BreakTrade(); return(false); } //開盤介於左收與CDP_NH之間 if (OpenPrice > ClosePrice && OpenPrice < CDP_NH) { if ((double)pi31001.Match_Price > AdjustPrice(CDP_NH)) { return(true); } } //開盤介於CDP_NH與CDP_AH之間 if (OpenPrice > CDP_NH && OpenPrice < CDP_AH) { if ((double)pi31001.Match_Price > AdjustPrice(CDP_AH)) { return(true); } } return(false); } }
private void OnQuoteRcvMessage(object sender, PackageBase package) { if (package.TOPIC != null) { if (RecoverMap.ContainsKey(package.TOPIC)) { RecoverMap[package.TOPIC]++; } } StringBuilder sb; switch (package.DT) { case (ushort)DT.LOGIN: P001503 _p001503 = (P001503)package; if (_p001503.Code == 0) { AddInfo("可註冊檔數:" + _p001503.Qnum); if (quoteCom.QuoteFuture) { AddInfo("可註冊期貨報價"); } if (quoteCom.QuoteStock) { AddInfo("可註冊證券報價"); } } break; case (ushort)DT.QUOTE_STOCK_MATCH1: //上市成交 case (ushort)DT.QUOTE_STOCK_MATCH2: //上櫃成交 PI31001 pi31001 = (PI31001)package; if (!cbShow.Checked) { break; } sb = new StringBuilder(Environment.NewLine); sb.Append((package.DT == (ushort)DT.QUOTE_STOCK_MATCH1) ? "上市 " : "上櫃 "); if (pi31001.Status == 0) { sb.Append("<試撮>"); } sb.Append("商品代號: ").Append(pi31001.StockNo).Append(" 更新時間: ").Append(pi31001.Match_Time).Append(Environment.NewLine); sb.Append(" 成交價: ").Append(pi31001.Match_Price).Append(" 單量: ").Append(pi31001.Match_Qty); sb.Append(" 總量: ").Append(pi31001.Total_Qty).Append(" 來源: ").Append(pi31001.Source).Append(Environment.NewLine); sb.Append("========================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_DEPTH1: //上市五檔 case (ushort)DT.QUOTE_STOCK_DEPTH2: //上櫃五檔 PI31002 i31002 = (PI31002)package; if (!cbShow.Checked) { break; } sb = new StringBuilder(Environment.NewLine); sb.Append((package.DT == (ushort)DT.QUOTE_STOCK_DEPTH1) ? "上市 " : "上櫃 "); if (i31002.Status == 0) { sb.Append("<試撮> "); } sb.Append("商品代號: ").Append(i31002.StockNo).Append(" 更新時間: ").Append(i31002.Match_Time).Append(" 來源: ").Append(i31002.Source).Append(Environment.NewLine); for (int i = 0; i < 5; i++) { sb.Append(String.Format("五檔[{0}] 買[價:{1:N} 量:{2:N}] 賣[價:{3:N} 量:{4:N}]", i + 1, i31002.BUY_DEPTH[i].PRICE, i31002.BUY_DEPTH[i].QUANTITY, i31002.SELL_DEPTH[i].PRICE, i31002.SELL_DEPTH[i].QUANTITY)).Append(Environment.NewLine); } sb.Append("========================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_LAST_PRICE_STOCK: PI30026 pi30026 = (PI30026)package; #region Comfup Add UpdateStockComfup(pi30026); #endregion sb = new StringBuilder(Environment.NewLine); sb.Append("商品代號:").Append(pi30026.StockNo).Append(" 最後價格:").Append(pi30026.LastMatchPrice).Append(Environment.NewLine); sb.Append("當日最高成交價格:").Append(pi30026.DayHighPrice).Append(" 當日最低成交價格:").Append(pi30026.DayLowPrice); sb.Append("開盤價:").Append(pi30026.FirstMatchPrice).Append(" 開盤量:").Append(pi30026.FirstMatchQty).Append(Environment.NewLine); sb.Append("參考價:").Append(pi30026.ReferencePrice).Append(Environment.NewLine); sb.Append("成交單量:").Append(pi30026.LastMatchQty).Append(Environment.NewLine); sb.Append("成交總量:").Append(pi30026.TotalMatchQty).Append(Environment.NewLine); for (int i = 0; i < 5; i++) { sb.Append(String.Format("五檔[{0}] 買[價:{1:N} 量:{2:N}] 賣[價:{3:N} 量:{4:N}]", i + 1, pi30026.BUY_DEPTH[i].PRICE, pi30026.BUY_DEPTH[i].QUANTITY, pi30026.SELL_DEPTH[i].PRICE, pi30026.SELL_DEPTH[i].QUANTITY)).Append(Environment.NewLine); } sb.Append("=============================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_INDEX1: //上市指數 PI31011 pi31011 = (PI31011)package; sb = new StringBuilder(Environment.NewLine); sb.Append("[上市指數]更新時間:").Append(pi31011.Match_Time).Append(" 筆數: ").Append(pi31011.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi31011.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(pi31011.IDX[i].VALUE); } sb.Append("=============================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_INDEX2: //上櫃指數 PI31011 pi32011 = (PI31011)package; sb = new StringBuilder(Environment.NewLine); sb.Append("[上櫃指數]更新時間:").Append(pi32011.Match_Time).Append(" 筆數: ").Append(pi32011.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi32011.COUNT; i++) { sb.Append(" [" + (i + 1) + "]").Append(pi32011.IDX[i].VALUE); } sb.Append("=============================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_NEWINDEX1: //上市新編指數 PI31021 pi31021 = (PI31021)package; sb = new StringBuilder(Environment.NewLine); sb.Append("上市新編指數[").Append(pi31021.IndexNo).Append("] 時間:").Append(pi31021.IndexTime); sb.Append("指數: ").Append(pi31021.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_NEWINDEX2: //上櫃新編指數 PI31021 pi32021 = (PI31021)package; sb = new StringBuilder(Environment.NewLine); sb.Append("上櫃新編指數[").Append(pi32021.IndexNo).Append("] 時間:").Append(pi32021.IndexTime); sb.Append("最新指數: ").Append(pi32021.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_LAST_INDEX1: //上市最新指數查詢 PI31026 pi31026 = (PI31026)package; sb = new StringBuilder(Environment.NewLine); sb.Append(" 最新上市指數 筆數: ").Append(pi31026.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi31026.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(" 昨日收盤指數:").Append(pi31026.IDX[i].RefIndex); sb.Append(" 開盤指數:").Append(pi31026.IDX[i].FirstIndex).Append(" 最新指數:").Append(pi31026.IDX[i].LastIndex); sb.Append(" 最高指數:").Append(pi31026.IDX[i].DayHighIndex).Append(" 最低指數:").Append(pi31026.IDX[i].DayLowIndex).Append(Environment.NewLine); sb.Append("=============================================="); } AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_LAST_INDEX2: //上櫃最新指數查詢 PI31026 pi32026 = (PI31026)package; sb = new StringBuilder(Environment.NewLine); sb.Append(" 最新上櫃指數 筆數: ").Append(pi32026.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi32026.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(" 昨日收盤指數:").Append(pi32026.IDX[i].RefIndex); sb.Append(" 開盤指數:").Append(pi32026.IDX[i].FirstIndex).Append(" 最新指數:").Append(pi32026.IDX[i].LastIndex); sb.Append(" 最高指數:").Append(pi32026.IDX[i].DayHighIndex).Append(" 最低指數:").Append(pi32026.IDX[i].DayLowIndex).Append(Environment.NewLine); sb.Append("=============================================="); } AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_AVGINDEX: //加權平均指數 2014.8.6 ADD ; PI31022 pi31022 = (PI31022)package; sb = new StringBuilder(Environment.NewLine); sb.Append("加權平均指數[").Append(pi31022.IndexNo).Append("] 時間:").Append(pi31022.IndexTime); sb.Append("最新指數: ").Append(pi31022.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; } }
private void OnQuoteRcvMessage(object sender, PackageBase package) { if (package.TOPIC != null) { if (RecoverMap.ContainsKey(package.TOPIC)) { RecoverMap[package.TOPIC]++; } } StringBuilder sb; switch (package.DT) { case (ushort)DT.LOGIN: P001503 _p001503 = (P001503)package; if (_p001503.Code == 0) { AddInfo("可註冊檔數:" + _p001503.Qnum); if (quoteCom.QuoteFuture) { AddInfo("可註冊期貨報價"); } if (quoteCom.QuoteStock) { AddInfo("可註冊證券報價"); } } break; case (ushort)DT.QUOTE_STOCK_MATCH1: //上市成交 case (ushort)DT.QUOTE_STOCK_MATCH2: //上櫃成交 PI31001 pi31001 = (PI31001)package; //if (!cbShow.Checked) break; //sb = new StringBuilder(Environment.NewLine); //sb.Append((package.DT == (ushort)DT.QUOTE_STOCK_MATCH1) ? "上市 " : "上櫃 "); //if (pi31001.Status == 0) sb.Append("<試撮>"); //sb.Append("商品代號: ").Append(pi31001.StockNo).Append(" 更新時間: ").Append(pi31001.Match_Time).Append(Environment.NewLine); //sb.Append(" 成交價: ").Append(pi31001.Match_Price).Append(" 單量: ").Append(pi31001.Match_Qty); //sb.Append(" 總量: ").Append(pi31001.Total_Qty).Append(" 來源: ").Append(pi31001.Source).Append(Environment.NewLine); //sb.Append("========================================="); //AddInfo(sb.ToString()); if (pi31001.Status == 0) { var newLine = string.Format("{0},{1},{2},{3},{4},{5}", pi31001.StockNo, pi31001.Match_Time, pi31001.Match_Price, pi31001.Match_Qty, pi31001.Total_Qty, "<試撮>"); AddInfo(newLine); } else { var newLine = string.Format("{0},{1},{2},{3},{4}", pi31001.StockNo, pi31001.Match_Time, pi31001.Match_Price, pi31001.Match_Qty, pi31001.Total_Qty); AddInfo(newLine); String filename = string.Format("{0}_{1}_{2}.csv", "MATCH", pi31001.StockNo, DateTime.Now.ToString("yyyyMMdd")); WriteToCSV(filename, newLine); } break; case (ushort)DT.QUOTE_STOCK_DEPTH1: //上市五檔 case (ushort)DT.QUOTE_STOCK_DEPTH2: //上櫃五檔 PI31002 pi31002 = (PI31002)package; //if (!cbShow.Checked) break; //sb = new StringBuilder(Environment.NewLine); //sb.Append((package.DT == (ushort)DT.QUOTE_STOCK_DEPTH1) ? "上市 " : "上櫃 "); //if (i31002.Status == 0) sb.Append("<試撮> "); //sb.Append("商品代號: ").Append(i31002.StockNo).Append(" 更新時間: ").Append(i31002.Match_Time).Append(" 來源: ").Append(i31002.Source).Append(Environment.NewLine); //for (int i = 0; i < 5; i++) // sb.Append(String.Format("五檔[{0}] 買[價:{1:N} 量:{2:N}] 賣[價:{3:N} 量:{4:N}]", i + 1, i31002.BUY_DEPTH[i].PRICE, i31002.BUY_DEPTH[i].QUANTITY, i31002.SELL_DEPTH[i].PRICE, i31002.SELL_DEPTH[i].QUANTITY)).Append(Environment.NewLine); //sb.Append("========================================="); //AddInfo(sb.ToString()); if (pi31002.Status == 0) { StringBuilder buy_price = new StringBuilder(); StringBuilder buy_qty = new StringBuilder(); StringBuilder sell_price = new StringBuilder(); StringBuilder sell_qty = new StringBuilder(); for (int i = 0; i < 5; i++) { buy_price.Append(pi31002.BUY_DEPTH[i].PRICE).Append("_"); buy_qty.Append(pi31002.BUY_DEPTH[i].QUANTITY).Append("_"); sell_price.Append(pi31002.SELL_DEPTH[i].PRICE).Append("_"); sell_qty.Append(pi31002.SELL_DEPTH[i].QUANTITY).Append("_"); } var newLine = string.Format("{0},{1},{2},{3},{4},{5},{6}", pi31002.StockNo, pi31002.Match_Time, buy_price.ToString(), buy_qty.ToString(), sell_price.ToString(), sell_qty.ToString(), "<試撮>"); AddInfo(newLine); } else { StringBuilder buy_price = new StringBuilder(); StringBuilder buy_qty = new StringBuilder(); StringBuilder sell_price = new StringBuilder(); StringBuilder sell_qty = new StringBuilder(); for (int i = 0; i < 5; i++) { buy_price.Append(pi31002.BUY_DEPTH[i].PRICE).Append("_"); buy_qty.Append(pi31002.BUY_DEPTH[i].QUANTITY).Append("_"); sell_price.Append(pi31002.SELL_DEPTH[i].PRICE).Append("_"); sell_qty.Append(pi31002.SELL_DEPTH[i].QUANTITY).Append("_"); } var newLine = string.Format("{0},{1},{2},{3},{4},{5}", pi31002.StockNo, pi31002.Match_Time, buy_price.ToString(), buy_qty.ToString(), sell_price.ToString(), sell_qty.ToString()); AddInfo(newLine); String filename = string.Format("{0}_{1}_{2}.csv", "DEPTH", pi31002.StockNo, DateTime.Now.ToString("yyyyMMdd")); WriteToCSV(filename, newLine); } break; case (ushort)DT.QUOTE_LAST_PRICE_STOCK: PI30026 pi30026 = (PI30026)package; //sb = new StringBuilder(Environment.NewLine); //sb.Append("商品代號:").Append(pi30026.StockNo).Append(" 最後價格:").Append(pi30026.LastMatchPrice).Append(Environment.NewLine); //sb.Append("當日最高成交價格:").Append(pi30026.DayHighPrice).Append(" 當日最低成交價格:").Append(pi30026.DayLowPrice); //sb.Append("開盤價:").Append(pi30026.FirstMatchPrice).Append(" 開盤量:").Append(pi30026.FirstMatchQty).Append(Environment.NewLine); //sb.Append("參考價:").Append(pi30026.ReferencePrice).Append(Environment.NewLine); //sb.Append("成交單量:").Append(pi30026.LastMatchQty).Append(Environment.NewLine); //sb.Append("成交總量:").Append(pi30026.TotalMatchQty).Append(Environment.NewLine); //for (int i = 0; i < 5; i++) // sb.Append(String.Format("五檔[{0}] 買[價:{1:N} 量:{2:N}] 賣[價:{3:N} 量:{4:N}]", i + 1, pi30026.BUY_DEPTH[i].PRICE, pi30026.BUY_DEPTH[i].QUANTITY, pi30026.SELL_DEPTH[i].PRICE, pi30026.SELL_DEPTH[i].QUANTITY)).Append(Environment.NewLine); //sb.Append("=============================================="); //AddInfo(sb.ToString()); var lastprice = string.Format("{0},{1},{2},{3},{4}", pi30026.StockNo, 0, pi30026.ReferencePrice, 0, 0); AddInfo(lastprice); String targetfile = string.Format("{0}_{1}_{2}.csv", "MATCH", pi30026.StockNo, DateTime.Now.ToString("yyyyMMdd")); WriteToCSV(targetfile, lastprice); break; case (ushort)DT.QUOTE_STOCK_INDEX1: //上市指數 PI31011 pi31011 = (PI31011)package; sb = new StringBuilder(Environment.NewLine); sb.Append("[上市指數]更新時間:").Append(pi31011.Match_Time).Append(" 筆數: ").Append(pi31011.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi31011.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(pi31011.IDX[i].VALUE); } sb.Append("=============================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_INDEX2: //上櫃指數 PI31011 pi32011 = (PI31011)package; sb = new StringBuilder(Environment.NewLine); sb.Append("[上櫃指數]更新時間:").Append(pi32011.Match_Time).Append(" 筆數: ").Append(pi32011.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi32011.COUNT; i++) { sb.Append(" [" + (i + 1) + "]").Append(pi32011.IDX[i].VALUE); } sb.Append("=============================================="); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_NEWINDEX1: //上市新編指數 PI31021 pi31021 = (PI31021)package; sb = new StringBuilder(Environment.NewLine); sb.Append("上市新編指數[").Append(pi31021.IndexNo).Append("] 時間:").Append(pi31021.IndexTime); sb.Append("指數: ").Append(pi31021.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_NEWINDEX2: //上櫃新編指數 PI31021 pi32021 = (PI31021)package; sb = new StringBuilder(Environment.NewLine); sb.Append("上櫃新編指數[").Append(pi32021.IndexNo).Append("] 時間:").Append(pi32021.IndexTime); sb.Append("最新指數: ").Append(pi32021.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_LAST_INDEX1: //上市最新指數查詢 PI31026 pi31026 = (PI31026)package; sb = new StringBuilder(Environment.NewLine); sb.Append(" 最新上市指數 筆數: ").Append(pi31026.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi31026.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(" 昨日收盤指數:").Append(pi31026.IDX[i].RefIndex); sb.Append(" 開盤指數:").Append(pi31026.IDX[i].FirstIndex).Append(" 最新指數:").Append(pi31026.IDX[i].LastIndex); sb.Append(" 最高指數:").Append(pi31026.IDX[i].DayHighIndex).Append(" 最低指數:").Append(pi31026.IDX[i].DayLowIndex).Append(Environment.NewLine); sb.Append("=============================================="); } AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_LAST_INDEX2: //上櫃最新指數查詢 PI31026 pi32026 = (PI31026)package; sb = new StringBuilder(Environment.NewLine); sb.Append(" 最新上櫃指數 筆數: ").Append(pi32026.COUNT).Append(Environment.NewLine); for (int i = 0; i < pi32026.COUNT; i++) { sb.Append(" [" + (i + 1) + "] ").Append(" 昨日收盤指數:").Append(pi32026.IDX[i].RefIndex); sb.Append(" 開盤指數:").Append(pi32026.IDX[i].FirstIndex).Append(" 最新指數:").Append(pi32026.IDX[i].LastIndex); sb.Append(" 最高指數:").Append(pi32026.IDX[i].DayHighIndex).Append(" 最低指數:").Append(pi32026.IDX[i].DayLowIndex).Append(Environment.NewLine); sb.Append("=============================================="); } AddInfo(sb.ToString()); break; case (ushort)DT.QUOTE_STOCK_AVGINDEX: //加權平均指數 2014.8.6 ADD ; PI31022 pi31022 = (PI31022)package; sb = new StringBuilder(Environment.NewLine); sb.Append("加權平均指數[").Append(pi31022.IndexNo).Append("] 時間:").Append(pi31022.IndexTime); sb.Append("最新指數: ").Append(pi31022.LatestIndex).Append(Environment.NewLine); AddInfo(sb.ToString()); break; } }
protected override Boolean BuySignal(String UpdateType, String MatchType) { PI31001 pi31001 = (PI31001)MatchLog[0]; //最新成交明細 PI31002 pi31002 = (PI31002)DepthLog[0]; //最新五檔明細 //開盤篩選 if (pi31001.Match_Qty == pi31001.Total_Qty) { //Open < close 開盤低於左日收盤價:不監控 //if (OpenPrice < ClosePrice) //{ // BreakTrade("開盤低於左日收盤價"); // return false; //} //開盤價大於CDP AH: 不監控 if (OpenPrice > CDP_AH) { BreakTrade("開盤價大於CDP AH"); MatchLoger("開盤價大於CDP AH"); return(false); } return(false); } else { //盤中篩選 //盤中變綠棒: 不監控 if (pi31001.Match_Price < OpenPrice) { BreakTrade("盤中低於開盤價"); MatchLoger("盤中低於開盤價"); return(false); } //如果五分鐘後成交量未達門檻: 不監控 if (pi31001.Match_Time > 90500 && pi31001.Total_Qty < AmountThreshold) { BreakTrade("五分鐘後成交量未達門檻"); MatchLoger("盤中低於開盤價"); return(false); } //五分鐘前判斷是否超越CDP if (pi31002.Match_Time < 90500 && pi31001.Match_Time < 90500) { if (OpenPrice > ClosePrice && OpenPrice < CDP_NH) { if (pi31002.BUY_DEPTH[0].PRICE > CDP_NH) { ExceedCDP = true; if (pi31002.BUY_DEPTH[0].PRICE > CDP_AH) { BreakTrade("五分鐘內內盤最高價超越CDP_AH"); MatchLoger("五分鐘內內盤最高價超越CDP_AH"); return(false); } } } if (OpenPrice > CDP_NH && OpenPrice < CDP_AH) { if (pi31002.BUY_DEPTH[0].PRICE > CDP_AH) { ExceedCDP = true; BreakTrade("五分鐘內內盤最高價超越CDP_AH"); MatchLoger("五分鐘內內盤最高價超越CDP_AH"); return(false); } } } if (pi31002.Match_Time > 90500 && pi31001.Match_Time > 90500) { //紀錄5分鐘後第一筆成交與五檔 if (pi31001_5min is null) { pi31001_5min = pi31001; } if (pi31002_5min is null) { pi31002_5min = pi31002; } //開盤介於昨收與CDP_NH之間 if (OpenPrice < CDP_NH) { //五分鐘後第一筆內盤最高價超越CDP_AH: 不監控 if (pi31002_5min.BUY_DEPTH[0].PRICE > CDP_AH) { BreakTrade("五分鐘後第一筆內盤最高價超越CDP_AH"); MatchLoger("五分鐘後第一筆內盤最高價超越CDP_AH"); return(false); } //如果五分鐘後內盤最高已超過CDP_NH則等待突破CDP1才追買 else if (pi31002_5min.BUY_DEPTH[0].PRICE >= CDP_NH && pi31002_5min.BUY_DEPTH[0].PRICE < CDP_AH) { //priceflag = Security_PriceFlag.SP_FixedPrice; //BuyPrice = CDP_NH; if (pi31002.BUY_DEPTH[0].PRICE >= CDP_AH) { MatchLoger("五分鐘後內盤最高已超過CDP_NH, 突破CDP_AH追買"); return(true); } if (pi31002.SELL_DEPTH[0].PRICE < Math.Floor(CDP_NH)) { BreakTrade("五分鐘後內盤超越CDP_NH,但又跌破CDP_NH"); MatchLoger("五分鐘後內盤超越CDP_NH,但又跌破CDP_NH"); return(false); } } //五分鐘內有突破CDP_NH,但又掉下來,在五分鐘後第一筆沒有超過CDP_NH: 不監控 else if (ExceedCDP) { BreakTrade("五分鐘內有突破,但又掉下來,在五分鐘後第一筆沒有超過CDP_NH"); MatchLoger("五分鐘內有突破,但又掉下來,在五分鐘後第一筆沒有超過CDP_NH"); return(false); } else if (pi31002.BUY_DEPTH[0].PRICE >= CDP_NH) { MatchLoger("突破CDP_NH"); return(true); } } //開盤介於CDP_NH與CDP_AH之間 if (OpenPrice >= CDP_NH && OpenPrice < CDP_AH) { //五分鐘後第一筆內盤最高價超越CDP_AH: 不監控 if (pi31002_5min.BUY_DEPTH[0].PRICE >= CDP_AH) { BreakTrade("五分鐘後第一筆內盤最高價超越CDP_AH"); MatchLoger("五分鐘後第一筆內盤最高價超越CDP_AH"); return(false); } //五分鐘內有突破CDP_AH,但又掉下來,在五分鐘後第一筆沒有超過CDP_AH: 不監控 else if (ExceedCDP) { BreakTrade("五分鐘內有突破CDP_AH,但又掉下來"); MatchLoger("五分鐘內有突破CDP_AH,但又掉下來"); return(false); } else if (pi31002.BUY_DEPTH[0].PRICE >= CDP_AH) { MatchLoger("突破CDP_AH"); return(true); } } } if (pi31002.Match_Time >= 132400) { BreakTrade("已收盤,結束偵測"); } return(false); } }
protected override Boolean SellSignal(string UpdateType, string MatchType) { PI31002 pi31002 = (PI31002)DepthLog[0]; PI31001 pi31001_0 = (PI31001)MatchLog[0]; PI31001 pi31001_1 = (PI31001)MatchLog[1]; PI31001 pi31001_2 = (PI31001)MatchLog[2]; //判斷是否已突破成本 ExceedCost = isExceedCost(pi31002); if (ExceedCost) { if (UpdateType == "Match" && MatchType == "G") { GreenMatchCount += 1; //已突破成本後,如果連續出現兩筆錄單,賣出 if (GreenMatchCount >= 2) { MatchLoger("已突破成本,連續出現兩筆綠單賣出"); if (stoplossmode == StopLossMode.Auto) { return(true); } else { OnStatusChange(this.trade_status, stockid + ":已突破成本,連續出現兩筆綠單,可以賣出"); } } } else { GreenMatchCount = 0; } //連續2筆價位比前一檔低則跌停掛賣 if (pi31001_0.Match_Price < pi31001_1.Match_Price && pi31001_1.Match_Price < pi31001_2.Match_Price) { MatchLoger("已突破成本,連續2筆價位比前一檔低則跌停"); if (stoplossmode == StopLossMode.Auto) { return(true); } else { OnStatusChange(this.trade_status, stockid + ":已突破成本,連續2筆價位比前一檔低,可以賣出"); } } //距離漲停價位2檔時賣出 if (pi31002.BUY_DEPTH[0].PRICE >= RaiseStopPrice - (2 * TickInfo(ClosePrice))) { MatchLoger("距離漲停價位2檔時賣出"); if (lockgainmode == LockGainMode.Auto) { return(true); } else { OnStatusChange(this.trade_status, stockid + ":距離漲停價位2檔,可以賣出"); } } //停利賣出,內盤大於停利點 //if (pi31002.BUY_DEPTH[0].PRICE > LockGainPrice) // return true; } //停損賣出 if (isStopLoss(pi31002)) { MatchLoger("停損賣出"); if (stoplossmode == StopLossMode.Auto) { return(true); } else { OnStatusChange(this.trade_status, stockid + ":停損條件成立,可以賣出"); } } return(false); }