龙听期货论坛's Archiver

C
+
+


 微信: QQ:

龙听 发表于 2024-10-15 10:26

单均线交易系统程式码部分2【.cpp文件】之bar进bar出范例

说明:

改进场景:最近我的电脑要频繁的开关重启,比方说我现在测试阶段,早晨8.00左右开电脑,晚上 11点夜盘结束后关电脑,而原来的策略关系统后,再开时就默认持仓是0了,需要重新开始初始化交易策略。我现在要做的就是在交易参数里面设置一个变量(cscc,初始持仓,也就是我昨天有没平的持仓,当是0时意思就是没有持仓,3时就是持有3手多单,-3时就是持有3手空单。我把这个参数写进去,在交易面板上面配置里面写上,点运行时就默认按这个持仓跑。就能接上昨天的交易继续跑了。)

[img]http://p.algo2.net/2024/1015/07ba159b8b48f.png[/img]初始持仓,0没有持仓,N持有多仓N手,-N持有空仓N手。

龙听 发表于 2024-10-15 10:27

程式码部分

文件名称:test.cpp
**** Hidden Message *****

龙听 发表于 2024-10-15 10:33

改动部分:[code]        //交易系统参数设置开始*******************************************************************************************************
        //Name 参数名, Value 默认值, Explain 参数说明, tend 表示一个参数结束
        t.Name = "均线周期"; t.Value = "20"; t.Explain = "均线周期参数,默认20"; tend(t);
        t.Name = "单笔风险"; t.Value = "1"; t.Explain = "交易手数,默认1手"; tend(t);
        t.Name = "滑点值"; t.Value = "1"; t.Explain = "每次交易滑点值"; tend(t);
        t.Name = "优先平仓"; t.Value = "0"; t.Explain = "优先平仓,1优先平今,0优先平昨"; tend(t);
        t.Name = "撤单时间"; t.Value = "5"; t.Explain = "委托后多少秒检查一下是否有未成交,小于0 不撤单"; tend(t);
        t.Name = "初始持仓"; t.Value = "0"; t.Explain = "初始持仓,0没有持仓,N持有多仓N手,-N持有空仓N手"; tend(t);
        t.Name = "策略说明"; t.Value = "0"; t.Explain = "价格超越均线入场开多,跌破均线入场做空,收盘价反向穿越均线出场,"; tend(t);
        //交易系统参数设置结束*******************************************************************************************************
        end();[/code]增加了这个:[code]        t.Name = "初始持仓"; t.Value = "0"; t.Explain = "初始持仓,0没有持仓,N持有多仓N手,-N持有空仓N手"; tend(t);[/code][code]        //交易系统参数变量传递开始*******************************************************************************************************
        jxzq = atoi(parm["均线周期"].Value.c_str());
        dbfx = atof(parm["单笔风险"].Value.c_str());
        hd = atoi(parm["滑点值"].Value.c_str());
        yxpc = atoi(parm["优先平仓"].Value.c_str());
        jg = atoi(parm["撤单时间"].Value.c_str());
        cscc = atoi(parm["初始持仓"].Value.c_str());
        //交易系统参数变量传递结束*******************************************************************************************************[/code]增加了:[code]        cscc = atoi(parm["初始持仓"].Value.c_str());[/code]同时为了平仓时平对手数和方向,我将持仓和方向调用也做了调整:[code]
                fx = atoi(wj[0].c_str());
                ss = atoi(wj[1].c_str());
[/code]将原来的直接调用,改为做了一个判断:[code]if (cscc != 0)
        {
                if (cscc > 0)
                {
                        fx = 1;
                        ss = cscc;
                        cscc = 0;
                }
                else if(cscc<0)
                {
                        fx = -1;
                        ss = -cscc;
                        cscc = 0;
                }
        }
        else
        {
                fx = atoi(wj[0].c_str());
                ss = atoi(wj[1].c_str());
        }[/code]即首先判断cscc这个变量是不是0,默认是0的,要是不是0那么就再判断是不是大于0,要是大于0那么持仓方向fx = 1 单,交易数量ss=cscc,然后让cscc = 0,这样它就在点运行后只运行一次。不影响后面的程序化运行。要是监控到cscc=0就按默认的运行即可。

龙听 发表于 2024-10-15 10:37

当然也需要在头文件里面加上变量cscc。[code]private:
        int numod = 0;
        HWND hwnd;
        string sName;
        string sPeriod;
        string sInst;

        string t1, t2, t3, t4, t0;
        int jxzq, jyfx, num, hd, yxpc, jg, fx, ss, tm,cscc;
        double jx, zg, zd, ma, rcjg, dbfx, ccjg;[/code]加到这里面即可
参考:[url]http://www.qhlt.cn/thread-159319-1-1.html[/url];

页: [1]