以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  后台程式编写  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=172100)

--  作者:bill163
--  发布时间:2019/9/19 13:19:43
--  后台程式编写
老师好,如下策略需求,帮忙编写,感谢~

开多条件:买一价格-均价<=0.004并且多头持仓量小于500手;
KD:=DYNAINFO( 28)-DYNAINFO( 11)<=0.004 and holding<=500 and  holding >0;

开空条件:均价-卖一价格<=0.004并且空头持仓量小于500手;

平多:有多单就挂卖一价
平空:有空的那就挂买一价

//交易系统

buy(开多条件,500-多头持仓量,买一价)
buyshort(开空条件,500-空头持仓量,卖一价)

sell(平多,多单持仓量,卖一价格)
sellshort(平空,空单持仓量,买一价格)

//撤单追价系统
保持开多价格是买一,开空价格是卖一
保持平多价格是卖一,平空价格是买一;


谢谢老师!




--  作者:wenarm
--  发布时间:2019/9/19 13:28:04
--  
//撤单追价系统
保持开多价格是买一,开空价格是卖一
保持平多价格是卖一,平空价格是买一;

 

什么意思?追撤单需要给定条件。


--  作者:FireScript
--  发布时间:2019/9/19 13:32:14
--  
 需要非常明确的开平条件。你这里的都不是很明确,代码就没办法写的。
比如开仓:
开多条件:买一价格-均价<=0.004并且多头持仓量小于500手;
“均价” 这个均价姑且认为是持仓均价。但是如果前面都没有开仓 这个价格就是0 。相当于一个开仓的条件 是需要前面有一个开仓的。这就是个逻辑死循环了。


平多:有多单就挂卖一价
平空:有空的那就挂买一价

这个意思是有持仓就平?那开仓只要成交了 里面就下平仓单了啊?

//撤单追价系统
保持开多价格是买一,开空价格是卖一
保持平多价格是卖一,平空价格是买一;


这个撤单没看明白哦。

建议重新整理下思路,你这里没有说明白,就没办法转换成代码的。

--  作者:bill163
--  发布时间:2019/9/19 14:26:26
--  
老师,撤单追价系统我举例说明:

比如现在买一是3.87,卖一是3.90,我要开多挂单3.87(买一)

如果这个时候价格上涨0.01,买一从3.87到了3.88,那需要撤开多单3.87,重新挂3.88

我的策略核心就是买和买都不主动,都等着对手盘砸给我。

--  作者:bill163
--  发布时间:2019/9/19 14:30:52
--  
老师,
问题2解释:均价请用DYNAINFO( 11)
问题3解释:平仓条件就是有多单就挂卖一价,有空单就挂买一价。
比如3.87(买一)多单成交了,就立即挂3.88卖一价格平,买卖都等对方砸给我,不主动成交。

--  作者:bill163
--  发布时间:2019/9/19 14:41:22
--  
老师,图标程式化没有撤单追价,下面的编写代码供参考。

KD:=DYNAINFO( 28)-DYNAINFO( 11)>=0.004 and holding<=500 and  holding >0;

KK:=DYNAINFO( 34)-DYNAINFO( 28)>=0.004 and holding>=-500 and holding<0 ;

buy(KD,500-HOLDING,limitr,DYNAINFO( 28));

buyshort(KK,500-HOLDING,limitr,DYNAINFO( 34));

SELL(HOLDING >0,HOLDING ,limitr,DYNAINFO( 34));

SELLSHORT(HOLDING <0 ,HOLDING,limitr,DYNAINFO( 28));
[此贴子已经被作者于2019/9/19 14:42:06编辑过]

--  作者:wenarm
--  发布时间:2019/9/19 14:58:26
--  
老师,撤单追价系统我举例说明:

比如现在买一是3.87,卖一是3.90,我要开多挂单3.87(买一)

如果这个时候价格上涨0.01,买一从3.87到了3.88,那需要撤开多单3.87,重新挂3.88

我的策略核心就是买和买都不主动,都等着对手盘砸给我。

 

 

这个你太理想化了,行情活跃时跳动比较快时,委托刚发出去,就要发撤单指令。
和柜台之间交互要有预留时间的。


--  作者:FireScript
--  发布时间:2019/9/19 15:14:47
--  
 这是根据你图表代码直接修改,加上了追撤单代码:
KD:=DYNAINFO( 28)-DYNAINFO( 11)>=0.004 and TBUYHOLDINGEX(\'\',\'\',1)<=500;//开多

KK:=DYNAINFO( 34)-DYNAINFO( 28)>=0.004 and TSELLHOLDINGEX(\'\',\'\',1)>=500;//开空

tbuy(KD,500-TBUYHOLDINGEX(\'\',\'\',1),LMT,DYNAINFO( 28));//开多

tbuyshort(KK,500-TSELLHOLDINGEX(\'\',\'\',1),LMT,DYNAINFO( 34));//开空

TSELL(TBUYHOLDINGEX(\'\',\'\',1) >0,TBUYHOLDINGEX(\'\',\'\',1) ,LMT,DYNAINFO( 34));//这2个平仓,需要明确下,可能会导致刚开仓就平仓。
TSELLSHORT(TSELLHOLDINGEX(\'\',\'\',1) >0 ,TSELLHOLDINGEX(\'\',\'\',1),LMT,DYNAINFO( 28));


if TGLOBALSUBMITEX(1,\'\',\'\' ,1)>0 and DYNAINFO( 28)<>TORDERPRICE(1,1) then //如果挂单价不等于买一,撤单 按照买一挂单。
begin
TCANCEL(1,1);    //撤多头单
tbuy(1,500-TBUYHOLDINGEX(\'\',\'\',1),LMT,DYNAINFO( 28));
end

if TGLOBALSUBMITEX(3,\'\',\'\' ,1)>0 and  DYNAINFO( 34)<>TORDERPRICE(3,1) then
begin
TCANCEL(1,3);//撤空头单   
tbuyshort(1,500-TSELLHOLDINGEX(\'\',\'\',1),LMT,DYNAINFO( 34));
end


供参考。先用模拟账号测试下。

--  作者:bill163
--  发布时间:2019/9/19 15:42:13
--  
老师好,看起来没错。

1.平仓的也一样要写入撤单系统,保持平多是在卖一,平空是在买一。


2.这2个平仓,需要明确下,可能会导致刚开仓就平仓。
这个只要平多是卖一价委托,平空是买一价委托就行。
目的就是开多成交后立即挂卖一平仓,赚取1个价位。

--  作者:wenarm
--  发布时间:2019/9/19 15:46:32
--  

上面的代码建议你自己学习使用。

你撤单需求不符合实际交易情况,太过理想化,需要考虑撤单造成的时间间隔。柜台之间的交互必须预留时间。