public void run_tick(Stock stock, TickData tickData) { stock.trend_30m.PreProcessData(tickData); Deal deal = stock.mStrategy.CalcDeal(stock, tickData); //sell while (deal.eType == Deal.ESell) { if (!isTradeTime(tickData.dt)) { break; } deal.sell_dt = new DateTime(tickData.dt.Ticks); deal.backtest_sell(deal.sell_price, deal.sell_shares, ESR.EPR_Normal); stock.position.AddDeal(deal); stock.mStrategy.ProcessDeal(stock, deal); deal.copy_position = Utility.Clone(stock.position); stock.position.Clear(); DataMining.DealList.Add(deal); TradingStrategy.AddCash(deal.sell_total_money); break; } FinalDateCloseTrading(stock, tickData); //buy while (deal.eType == Deal.EBuy) { if (!isTradeTime(tickData.dt)) { break; } if (isEndDate()) { break; } deal.buy_dt = new DateTime(tickData.dt.Ticks); if (!deal.canAfford()) { return; } deal.backtest_buy(deal.buy_price, deal.buy_shares); stock.position.AddDeal(deal); stock.mStrategy.ProcessDeal(stock, deal); deal.copy_position = Utility.Clone(stock.position); DataMining.DealList.Add(deal); TradingStrategy.AddCash(deal.buy_total_money * -1); break; } stock.trend_day.AddTickData(tickData); stock.trend_day.mStrategyData.ProcessData(stock.trend_day); stock.trend_30m.AddTickData(tickData); stock.trend_30m.mStrategyData.ProcessData(stock.trend_30m); }
public static void ProcessDay() { TickData tickData = new TickData(); tickData.dt = new DateTime(Utility.GetYear(TradingStrategy.RunData.cur_date), Utility.GetMonth(TradingStrategy.RunData.cur_date), Utility.GetDay(TradingStrategy.RunData.cur_date)); tickData.price = TradingStrategy.GetCurCapital(); MonthlyData.AddTickData(tickData); }
public int Calc(Stock stock) { double sum = 0; List <int> ls_key = new List <int>(stock.sdata.Keys); int index = stock.sdata.IndexOfKey(stock.runData.cur_date); if (index < CountNum) { return(EST.EST_SKIP); } high = stock.sdata[ls_key[index - CountNum]].high; low = stock.sdata[ls_key[index - CountNum]].low; for (int i = index - CountNum; i < index; i++) { if (stock.sdata[ls_key[i]].high > high) { high = stock.sdata[ls_key[i]].high; } if (stock.sdata[ls_key[i]].low < low) { low = stock.sdata[ls_key[i]].low; } sum += stock.sdata[ls_key[i]].close; } TR = Math.Max(Math.Max(stock.sdata[ls_key[index]].high - stock.sdata[ls_key[index]].low, stock.sdata[ls_key[index]].high - stock.sdata[ls_key[index - 1]].close), stock.sdata[ls_key[index - 1]].close - stock.sdata[ls_key[index]].low); if (PDN == 0) { PDN = TR; } N = ((CountNum - 1) * PDN + TR) / CountNum; PDN = N; if (N == 0) { //Debug.Assert(N != 0); Unit = int.MaxValue; } else { Unit = Convert.ToInt32(TradingStrategy.GetCurCash() * 0.01 * 0.01 / N) * 100; } //DollarPerPoint 100*0.01 = OneHand*BasePoint return(EST.EST_OK); }
public static void Start() { Init(); TradingStrategy TDStrategy = new TradingStrategy(); if (Config.bTrue) { TDStrategy.run_back_test(); } else { TDStrategy.pick_stock(); } }