请问:开仓条件 建立在K线模型上(比如1分钟K线模型),止损条件 建立在1秒钟固定时间查询的程序怎么写?
举例:
I. 开多条件是这样编写的 - 基于一分钟K线图的 前后两根K线的比较;前为阴线 后为阳线 则开多
CONDBUY:= REF(CLOSE,1)< REF(OPEN,1) AND CLOSE > REF(OPEN,1) AND CLOSE-OPEN>=2;
// 开多条件[看涨]
BUY(CONDBUY, 10, MARKET);
II. 止损条件是这样写的
PRICE:= (HIGH+LOW)/2; SELL(LOW < PRICE, 10, MARKET); // 止损价格= (HIGH+LOW)/2; 要求当价格跌破止损价时,立即平多
III. 需求:我需要每秒查询一次实时交易价格,如果加过跌破止损价立即平多。
IV. 问题:开多 是一分钟判断一次的;止损是每秒中判断一次的,这样的程序在 图标程式化交易中 怎么写? 如果图标程式化中无法写出,后台程式化怎么写?
可以给个简单的模板或范例吗?
CONDBUY:= REF(CLOSE,1)< REF(OPEN,1) AND CLOSE > REF(OPEN,1) AND CLOSE-OPEN>=2;
// 开多条件[看涨]
BUY(ref(CONDBUY,1), 10, MARKET);
PRICE:= (HIGH+LOW)/2;
SELL(c< PRICE, 10, MARKET);
就这样写,1秒固定轮询模式
使用IF语句的原因是要设置一些条件:比如HAVEBUY标志以开多(以开多的情况下才能平多)
原句:
IF CONDBUY AND HOLDING = 0 THEN
BEGIN
PRICE:=TEMP; // 设置多仓止损价格
BUY(1, 10, MARKET); // 全部买入
HAVEBUY:=1; // 以开多,为平多
END
为保证按K线周期开多,改写为:
IF REF(CONDBUY,1) AND HOLDING = 0 THEN
BEGIN
PRICE:=TEMP; // 设置多仓止损价格
BUY(1, 10, MARKET); // 全部买入
HAVEBUY:=1; // 以开多,为平多
END
可以吗?
----------------------------------------------------------------------------------------------------------------------------------
上面的办法是用固定时间的办法来实现走完k'线,所以信号上是有偏移的,简单的可行。如果代码里面有赋值之类的就不行了,偏移了的信号,赋的值也和原来的不一样
----------------------------------------------------------------------------------------------------------------------------------
看了一篇IF语句中不能使用REF函数的原因,好像理解的老师您的意思。
那 要实现这样的 复杂功能 接下来 应该怎么做呢?
IF CONDBUY AND HOLDING = 0 THEN
BEGIN
PRICE:=TEMP; // 设置多仓止损价格
HAVEBUY:=1; // 以开多,为平多
END
IF REF(CONDBUY,1) AND HOLDING = 0 THEN
BEGIN
BUY(1, 10, MARKET); // 全部买入
END
差不多这样改,让赋值先执行,
{
模型说明:
1. 开盘后5分钟不做交易
2. 5分钟后,分为30秒,1分钟,2分钟,3分钟 4中参数进行测试
3. 若前一根实体为 >= 2价位的 阴线,后一根K线的 收盘价>前开盘价,而且 最高价 - 收盘价 <= 1个价位
符合以上条件,而在最后一秒内开仓做多
止损点:前一根K线的均值(最高+最低/2)交易触到此价位有成交的,即止损平仓(低了3个价位确保成交)
止盈点:在前一根出现实体>=2个价位的阴险末止盈
4. 若前一根实体为>=2个价位的阴线,后一个K线的收盘价<前开盘价,而且最低价-收盘价<=1个价位
,在最后一秒内开仓做空
5. 收盘前10分钟全部清仓,不再开仓交易
开多条件:前为阴线且实体>=2 AND 后为阳线 AND (阳线收盘价 - 阴线开盘价) > 0
止盈条件:开多之后遇到第一根阴线(跌幅>=2价位),且收盘价没有低过止损点,按收盘价成交
止损条件:开多之后遇到第一根阴线(跌幅>=2价位),且收盘价低过止损点,按不得低于止损点价格卖出(?)
开空条件: 前为阳线且实体>=2 AND 后为阴线 AND (阳线开盘价 - 阴线收盘价) > 0
止盈条件:开空之后遇到第一根阳线(涨幅>=2价位),且收盘价没有高过止损点,按收盘价成交
止损条件:开多之后遇到第一根阳线(涨幅>=2价位),且收盘价高过止损点,按不得高于止损点价格卖出(?)
5.一次买入卖出多少:
全部买入,全部卖出
6. 当日开仓后, 一定要当日平仓吗?
7. 止损时机
目标:
开仓后,价格(任意一次交易的价格)第一次触及止损价,按市价(止损价以及止损价15个单位区间,防止极端情况)卖出。
否则,即出现异常情况(比如:剧烈波动,暴跌或者暴涨等)时,暂停机器平仓,转为人工操作
8. 如何人工操作
注意事项:
1. 选择哪种交易图:交易量丰富,数据量饱满
2. 时间跨度问题
中午吃饭时间
3. 适用范围: 秒线,分钟线等,相邻K线连续的情况;不适用于日线等,相邻K线不连续的情况
4. 缺点:无法应对震荡的情形(价格反复上下波动)
}
// 0. 设置全局变量
VARIABLE: HAVEBUY=0; // 标记以开多,为平多
VARIABLE: HAVEBUYSHORT=0; // 标记以开空,未平空
VARIABLE: PRICE = 0; // 止损价格
CONDBUY:= REF(CLOSE,1)< REF(OPEN,1) AND CLOSE > REF(OPEN,1) AND CLOSE-OPEN>=2;
// 开多条件[看涨] - OK
CONDBUYSHORT:= REF(CLOSE,1)> REF(OPEN,1) AND CLOSE < REF(OPEN,1) AND OPEN-CLOSE>=2;
// 开空条件[看跌] - OK
CONDSELL:=HAVEBUY AND CLOSE < OPEN AND (OPEN - CLOSE) >=2 AND CLOSE >= PRICE;
// 平多条件[止盈]
CONDSELLSHORT:=HAVEBUYSHORT AND CLOSE > OPEN AND (CLOSE - OPEN) >=2 AND CLOSE <= PRICE;
// 平空条件[止盈]
止损价格: PRICE, COLORGREEN, LINETHICK1;
TEMP:=(REF(CLOSE,1)+REF(OPEN,1))/2; // TEMP = (CLOSE+OPEN/2) - 止损价位
IF TIME > 090500 AND TIME < 145000 THEN // 限制开盘30分钟后收盘前10分钟进行交易
BEGIN
// 止损条件 - 最高优先级
IF HAVEBUY AND L < PRICE AND (PRICE - L) < 10 THEN // 开多后,监测何时止损
BEGIN
SELL(1, 100%, MARKET); // 全部卖出
MSGOUT(1,'以SELL止损');
HAVEBUY := 0;
END
IF HAVEBUYSHORT AND H > PRICE AND (H - PRICE) < 10 THEN // 开空后,监测何时止损
BEGIN
SELLSHORT(1, 100%, MARKET); // 全部卖出
MSGOUT(1,'以SELLOUT止损');
HAVEBUYSHORT := 0;
END
// 1. 平多条件(止盈)
IF CONDSELL AND HOLDING > 0 THEN
BEGIN
SELL(1, 100%, MARKET); // 全部卖出
MSGOUT(1,'以平多');
HAVEBUY := 0;
END
// 2. 平空条件(止盈)
IF CONDSELLSHORT AND HOLDING < 0 THEN
BEGIN
SELLSHORT(1, 100%, MARKET); // 全部卖出
MSGOUT(1,'以平空');
HAVEBUYSHORT := 0;
END
// 3. 开多条件
IF CONDBUY AND HOLDING = 0 THEN
BEGIN
PRICE:=TEMP; // 设置多仓止损价格
BUY(1, 100%, MARKET); // 全部买入
MSGOUT(1,'以开多');
HAVEBUY:=1; // 以开多,为平多
END
// 4. 开空条件
IF CONDBUYSHORT AND HOLDING = 0 THEN
BEGIN
PRICE:=TEMP; // 设置空仓止损价格
BUYSHORT(1, 100%, MARKET); // 全部卖出
MSGOUT(1,'以开空');
HAVEBUYSHORT:=1; // 以开空,未平空
END
MSGOUT(1,'运行测试');
END
IF TIME > 145000 AND TIME < 150000 THEN
BEGIN
IF HAVEBUY THEN SELL(1, 100%, MARKET);
IF HAVEBUYSHORT THEN SELLSHORT(1, 100%, MARKET);
END
// 输出资产
当前持仓:HOLDING,COLORGRAY,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORGRAY;//输出当前资产,但不影响坐标最高最低值
}
老师,以上是我的全部代码,图表交易模型;问题就是 止损我不希望按照K线周期来,想按照固定时间轮询来,应该怎么做?
补充一个问题:
IF REF(CONDBUY,1) AND HOLDING = 0 THEN
BEGIN
BUY(1, 10, MARKET); // 全部买入
END
条件 REF(CONDBUY, 1) 改为 REF(CONDBUY,0) 可以吗?或者说为什么要是REF(CONDBUY, 1) ?
这样的作用是引用上一个周期的条件,当新的k线出现时,上一根k线的已经形成和定型的条件就会被引用到。
这样在就相当于在固定轮询的模式下,实现了走完k线下单,ref后面参数写0就表示用当前周期的条件,并没有用。