单均线交易系统程式码部分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手。 程式码部分
文件名称:test.cpp
**** Hidden Message ***** 改动部分:[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就按默认的运行即可。 当然也需要在头文件里面加上变量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]