Esempio n. 1
0
    /// <summary>
    /// 撤销所有未成交订单
    /// </summary>
    public async Task ClearOrders()
    {
        //获取所有未成交订单
        SwapApi api = CommonData.Ins.V_SwapApi;
        JObject obj = await api.getOrdersAsync(V_Instrument_id, "6", null, null, null);

        string       s      = obj["order_info"].ToString();
        List <Order> orders = Order.GetOrderList(s);

        foreach (var item in orders)
        {
            await api.cancelOrderAsync(V_Instrument_id, item.Order_id);
        }
    }
    /// <summary>
    /// 刷新历史数据
    /// </summary>
    public virtual async Task RunHistory()
    {
        Console.WriteLine(V_Instrument_id + ":获取历史数据");

        Debugger.Log(V_Instrument_id + ":获取历史数据");

        if (V_HistoryCache == null)
        {
            V_HistoryCache = new KLineCache();
        }

        List <KLine> history_data = new List <KLine>();

        SwapApi api = CommonData.Ins.V_SwapApi;

        int length = V_Min;

        DateTime t_start = DateTime.Now.AddMinutes(-length * 2000);

        DateTime t_end = DateTime.Now;

        while (t_start.AddMinutes(length * 200) < t_end)
        {
            JContainer con = await api.getCandlesDataAsync(V_Instrument_id, t_start, t_start.AddMinutes(length * 200), length * 60);

            List <KLine> d = KLine.GetListFormJContainer(con);

            d.AddRange(history_data);

            history_data.Clear();

            history_data.AddRange(d);

            t_start = t_start.AddMinutes(length * 200);
        }

        Console.WriteLine(V_Instrument_id + ":历史数据 " + history_data.Count + "条");

        Debugger.Log(V_Instrument_id + ":历史数据 " + history_data.Count + "条");

        V_HistoryCache.RefreshData(history_data);
        V_LastOpTime = history_data[history_data.Count - 1].V_Timestamp;
    }
Esempio n. 3
0
    /// <summary>
    /// 对手价平仓
    /// </summary>
    public async Task ClearPositions(int dir = 0, float percent = 1)
    {
        if (V_Positions == null || V_Positions.Count == 0)
        {
            return;
        }

        for (int i = 0; i < V_Positions.Count; i++)
        {
            Position p = V_Positions[i];
            if (dir == 0 || (dir > 0 && p.V_Dir > 0) || (dir < 0 && p.V_Dir < 0))
            {
                SwapApi api = CommonData.Ins.V_SwapApi;
                await api.makeOrderAsync(V_Instrument_id, p.V_Dir > 0? "3" : "4", (decimal)V_CurPrice, (int)(p.V_AvailVol * percent), "", 0, "1");
            }
        }

        Console.WriteLine("{0} {1}:  平仓: price {2},方向:{3},盈利率{4},平仓百分比 {5},剩余 {6}",
                          DateTime.Now,
                          V_Instrument_id,
                          V_CurPrice,
                          V_Position.V_Dir > 0 ? "平多" : "平空",
                          V_Position.GetPercent(V_CurPrice),
                          percent * 100,
                          GetAvailMoney());

        Debugger.Warn(string.Format("{0} {1}:  平仓: price {2},方向:{3},盈利率{4},平仓百分比 {5},剩余 {6}",
                                    DateTime.Now,
                                    V_Instrument_id,
                                    V_CurPrice,
                                    V_Position.V_Dir > 0 ? "平多" : "平空",
                                    V_Position.GetPercent(V_CurPrice),
                                    percent * 100,
                                    GetAvailMoney()));

        JObject obj = await CommonData.Ins.V_SwapApi.getAccountsByInstrumentAsync(V_Instrument_id);

        RefreshData(obj["info"].ToString());
    }
Esempio n. 4
0
    /// <summary>
    /// 对手价开仓
    /// </summary>
    /// <param name="dir">方向 >0 多</param>
    /// <param name="vol">金额</param>
    /// <returns></returns>
    public async Task <bool> MakeOrder(int dir, float vol, float percent = 1)
    {
        if (vol * percent > GetAvailMoney())
        {
            return(false);
        }
        else
        {
            //获取张数(BTC 1张=100USD EOS 1张=10USD)
            int     v   = GetOrderVol(vol * percent);
            SwapApi api = CommonData.Ins.V_SwapApi;

            double price = V_CurPrice * (dir > 0 ? 1.05f : 0.95f);

            await api.makeOrderAsync(V_Instrument_id, dir > 0? "1" : "2", (decimal)price, v, "", 0, "1");

            Console.WriteLine("{0}  {1}:  开仓:{2} 价格:{3} 张数:{4}", DateTime.Now, V_Instrument_id, dir > 0 ? "多" : "空", price, v);

            Debugger.Warn(string.Format("可用 {0} 量 {1}", GetAvailMoney(), vol));
            Debugger.Warn(string.Format("{0}  {1}:  开仓:{2} 价格:{3} 张数:{4}", DateTime.Now, V_Instrument_id, dir > 0 ? "多" : "空", price, v));
            return(true);
        }
    }
Esempio n. 5
0
    //public void Start() {
    //    Console.WriteLine("start {0}",V_Instrument_id);
    //    Update();
    //}

    public virtual async void Update()
    {
        if (V_TacticsState == EM_TacticsState.Stop)
        {
            return;
        }

        if (DateTime.Now.Minute % 30 == 0 && DateTime.Now.Second < 5)
        {
            debug = true;
        }

        try
        {
            SwapApi api = CommonData.Ins.V_SwapApi;

            //更新账号信息
            JObject obj = await api.getAccountsByInstrumentAsync(V_Instrument_id);

            V_AccountInfo.RefreshData(obj["info"].ToString());

            //更新持仓信息
            obj = await api.getPositionByInstrumentAsync(V_Instrument_id);

            V_AccountInfo.RefreshPositions(Position.GetPositionList(obj["holding"].ToString()));

            //更新未完成订单信息,全部撤销掉
            await V_AccountInfo.ClearOrders();

            if (V_AccountInfo.V_Position == null && (DateTime.Now - m_LastRefreshTime).Ticks > (long)m_TaticsHelper.V_Min * Util.Minute_Ticks * AppSetting.Ins.GetInt("RefreshSettingTime"))//更新设置操作
            {
                //更新参数
                await m_TaticsHelper.RunHistory();

                m_LastRefreshTime = DateTime.Now;

                Console.WriteLine("{0} {1}:更新设置", DateTime.Now, V_Instrument_id);
            }
            else
            {
                if (debug)
                {
                    Console.WriteLine("{0} {1}:获取数据", DateTime.Now, V_Instrument_id);
                }

                //获取近200条K线
                JContainer con = await api.getCandlesDataAsync(V_Instrument_id, DateTime.Now.AddMinutes(-m_TaticsHelper.V_Min * 200), DateTime.Now, m_TaticsHelper.V_Min * 60);

                cache.RefreshData(con);

                V_AccountInfo.V_CurPrice = cache.V_KLineData[0].V_ClosePrice;

                if (!V_AccountInfo.HasEnoughMoney(orderPercent) && V_AccountInfo.V_Position == null)
                {
                    Console.WriteLine("{0} 钱不够。。。。", V_Instrument_id);
                    Debugger.Error(string.Format("{0} 钱不够。。。。", V_Instrument_id));
                    TimeEventHandler.Ins.AddEvent(new TimeEventModel(600, 1, Update));
                    return;
                }

                await Handle();
            }
        }
        catch (Exception ex)
        {
            //Console.WriteLine(ex.ToString());
            Console.WriteLine("{0} {1}:处理数据异常", DateTime.Now, V_Instrument_id);
            error = true;
        }

        debug = false;
        Update();

        //TimeEventHandler.Ins.AddEvent(new TimeEventModel(1, 1, Update));
    }