开拓者期货期权程序化系统交易论坛

标题: 大侠出手 [打印本页]

作者: jvya    时间: 2007-12-26 14:10:38     标题: 大侠出手

拜托写段代码

中午休盘时,在图表上加个“休”字。
作者: pwqzc    时间: 2007-12-27 08:49:46

加两个字可以不:
一休
作者: jvya    时间: 2007-12-27 09:50:56


真是妙计啊
那该怎么写码??
作者: wg3k99    时间: 2007-12-27 12:39:29

乱写一下,不过提供了一个思想,大家应该还是能看懂,具体函数可能写的不对,查下资料吧:
if(currenttime>=11.15 && currenttime<11.30)
{
plottext("休市");
}
作者: nopain    时间: 2007-12-27 12:48:11

假设在1分钟图上。
Begin
If(Time == 0.1129)
{
    PlotString("Tips","休");
}
End
作者: jvya    时间: 2007-12-27 16:18:10

还望请教!

如何指定交易次数?
日内交易要控制交易次数。 次数过多,容易风险失控。
比如, 一天交易不能超过 8 次吧, 该用什么方法实现。
我有一些简单想法,还没想明白。
请老师指点

一是用
A_GetOrderCount   说明( 返回当前公式应用的帐户下当前商品的当日委托单数量。 )
取出值,再算出交易次数。 来进行控制次数


在开仓语句后加一个变量当计数器 ,记下交易次数 :数值型变量 tradelots
if(开仓条件)
{
buy()
tradelots=tradelots+1
}

望老师指点迷惑。
作者: 孤舟骑浪    时间: 2007-12-27 16:54:25

不用采用A函数,应该直接用交易函数就可以了,每次平仓都用全局变量记录一次,每次开仓都用此全局变量作判断,若小于某次即允许开仓。收盘前清零全局变量。A函数仅仅跟随回测帐户产生动作就可以了。
作者: jvya    时间: 2007-12-27 22:00:21

谢谢回复


下面代码正确否?交易次数限制为8次。



  1. Vars
  2. Numeric lots;

  3. Begin
  4. If(Time > 0.0900 && Time < 0.1450 && lots<=8)
  5. {        if(TotalTrades=0 )
  6.         {
  7.         、、、、、、、开仓代码;       
  8.        
  9.         SetGlobalVar(0,1);//第一次交易,记入全局变量(0)
  10.                        
  11.         }Else
  12.                 if(TotalTrades!=0 )
  13.                 {
  14.                 、、、、、、、开仓代码;
  15.                 SetGlobalVar(0,GetGlobalVar(0)+1);//交易次数加1,更新全局变量(0)
  16.                 lots=GetGlobalVar(0);        //交易次数的新值               
  17.                 }

  18. 、、、、、、
  19. }
  20. end
复制代码


我吃不准
函数 TotalTrades 获得交易的总次数。
的使用方法
或是

  1. Vars
  2. Numeric lots;

  3. Begin

  4. If(Time > 0.0900 && Time < 0.1450 && lots<=8)
  5. {
  6. 开仓代码、、、、、
  7. SetGlobalVar(0,GetGlobalVar(0)+1);//交易次数加1,更新全局变量(0)
  8. lots=GetGlobalVar(0);        //交易次数的新值
  9. }
复制代码



  1. lots=TotalTrades;
  2. If(Time > 0.0900 && Time < 0.1450 && lots<=8)
  3. {
  4. 开仓代码、、、、、
  5. }
复制代码

[ 本帖最后由 jvya 于 2007-12-27 22:14 编辑 ]
作者: 孤舟骑浪    时间: 2007-12-27 22:28:58

  1. vars
  2. numeric tradetimes;
  3. begin
  4. if(con1 and getglobalvar(0)<8)
  5. {
  6.    buy;
  7.   tradetimes=getglobalvar(0)+1;
  8.   setglobalvar(0,tradetimes);
  9. }
  10. if(con2 and getglobalvar(0)<8)
  11. {
  12.   sellshort;
  13.   tradetimes=getglobalvar(0)+1;
  14.   setglobalvar(0,tradetimes);
  15. }
  16. if(time>0.1455)
  17. {
  18.      if(marketposition==1)
  19.       {
  20.          sell;
  21.       }
  22.      if(marketposition==-1)
  23.      {
  24.          buytocover;
  25.       }
  26.    setglobalvar(0,0);
  27. }
  28. end
复制代码

作者: jvya    时间: 2007-12-27 22:37:06

再次感谢
我运行试一试,
其实这个思路我已经想到的。
但是我对全局变量吃不透。
主要是第一次运行
if(con1 and getglobalvar(0)<8)

getglobalvar(0) 里面还没有赋值,不知会出现什么结果。
作者: jvya    时间: 2007-12-27 22:39:21

思考 这段程序
想来是,在前面行情图表中。
已经将getglobalvar(0)赋值。
所以第一次运行时,不是个空值
应该是这样的吧?
如此就能成功解决

[ 本帖最后由 jvya 于 2007-12-27 22:41 编辑 ]
作者: 孤舟骑浪    时间: 2007-12-27 22:45:46

上述代码只是一个思路,其实要控制交易次数就是要控制连续亏损的次数,把全局变量放在止损平仓指令之后更好,可以分为三个全局变量去完成,一个负责连续做多亏损,一个负责连续做空亏损,一个负责总连续亏损更好解决问题.
作者: 孤舟骑浪    时间: 2007-12-27 22:47:44

第一次运行时,全局变量就是0呀,因为每天的收盘前已经清零了.
作者: 孤舟骑浪    时间: 2007-12-27 22:53:41

if(con1 and getglobalvar(0)<8)
其实就是当第七次以内可以通过,达到第七次还可再通过一次,总共交易次数就变为8次了,如果是<=8,则会交易9次.
作者: mht88    时间: 2007-12-28 15:58:38

原帖由 孤舟骑浪 于 2007-12-27 22:28 发表
vars
numeric tradetimes;
begin
if(con1 and getglobalvar(0)


请教孤舟骑浪,这个例子是控制总交易次数的,如果在此基础上增加控制亏损次数或赢利次数,该怎么写,谢谢!!!
作者: jvya    时间: 2007-12-28 19:48:05

楼上兄台
是尚无思路,
还是代码不知道怎么组织
作者: mht88    时间: 2007-12-28 22:56:28

原帖由 jvya 于 2007-12-28 19:48 发表
楼上兄台
是尚无思路,
还是代码不知道怎么组织


是不知怎么组织,惭愧啊.
作者: 孤舟骑浪    时间: 2007-12-29 08:28:32

params
numcric totalloss(5);
numeric seiresloss(3);
numeric wintimes(3);
vars
numeric totalloss1;
numeric seriesloss1;
numeric wintimes1;
begin
if(con1 and getglobalvar(0)<totalloss and getglobalvar(1)<seriesloss and getglobalvar(2)<wintimes)
{
    开仓指令;
}
if(con2)
{
    止损平多仓;
    seriesloss=getglobalvar(1)+1;
    setglobalvar(1,seriesloss);
    totalloss=getglobalvar(0)+1;
   setglobalvar(0,totalloss);
   setglobalvar(2,0);
}
if(con3)
{
    止损平空仓;
   seriesloss=getglobalvar(1)+1;
    setglobalvar(1,seriesloss);
    totalloss=getglobalvar(0)+1;
   setglobalvar(0,totalloss);
   setglobalvar(2,0);
}
if(con4)
{
   获利平多仓;
  wintimes=getglobalvar(2)+1;
  setglobalvar(2,wintimes);
  setglobalvar(0,0);
  setglobalvar(1,0);
}
if(con5)
{
   获利平空仓;
  wintimes=getglobalvar(2)+1;
  setglobalvar(2,wintimes);
  setglobalvar(0,0);
  setglobalvar(1,0);
}
if(times>0.1455)
{
  平多仓;
  平空仓;
  setglobalvar(0,0);
  setglobalvar(1,0);
  setglobalvar(2,0);
}
作者: mht88    时间: 2007-12-29 12:08:15

谢谢孤舟骑浪 ,万分感谢!!!
作者: jvya    时间: 2007-12-29 13:16:26

孤兄果然厉害
作者: 孤舟骑浪    时间: 2007-12-30 12:25:45

这里的代码表达是有问题的,还是应该把numeric seriesloss1;改为buyloss和sellloss,再增加一个全局变量,放在适当位置加一,适当位置清零即可实现连续买入亏损次数、卖出亏损次数、总亏损次数、获利次数的控制。




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2