加载中…
个人资料
王衣谷量化交易
王衣谷量化交易
  • 博客等级:
  • 博客积分:0
  • 博客访问:6,359
  • 关注人气:345
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

文华盘口的模型

(2015-03-30 22:31:03)
标签:

程序化交易

交易策略

实盘

私募

王衣谷

分类: 04量化IT技术

    文华功能越来越强了,感觉形成了两套语言体系,一个是编写趋势模型的麦语言,一个是编写盘口模型的类C语言。这个盘口开发语言,功能已经比麦语言强大很多,有条件语句,有循环语句,有函数,做为一个曾经的程序员,我想说,这才像是个语言。

 

下面是一个示例,更多功能我还要研究研究。


可以粘贴到盘口模型使用,wh8.2的
// 第一笔tick开盘价之上,先按照买一价格做多,之下卖一做空。
// 价格10秒内大于买一价格,撤多单挂单按照对手家买入。
// 持多仓成交后10秒内价格小于等于成交价格则按照市价挂单,5秒内不成交或者价格小于等于持仓成交价之下2点撤平仓挂单以对手价平仓。
// 成交后10秒内价格大于持仓价格2点则挂市价单,2秒内不成交撤单挂对手价成交。
// 持空仓类似。
VAR_TICKDATA data;
VAR CodeName; // 交易合约
VAR N; // 下单手数
VAR StopBit; // 止羸止损点数
VAR OPEN; // 开盘价
VAR StopBitPrice;
VAR PRICE;
GLOBAL_VAR SK_PRICE, BK_PRICE, SK_TIME, BK_TIME, BK_DEAL, SK_DEAL;
GLOBAL_VAR SP_PRICE, BP_PRICE, SP_TIME, BP_TIME;
GLOBAL_VAR BKID;
GLOBAL_VAR SKID;
GLOBAL_VAR BPID;
GLOBAL_VAR SPID;
GLOBAL_VAR COIN, COINN;

VOID MAIN()
{
   CodeName = "if1410";
   N = 1;
   StopBitPrice = 2 * MinPrice(CodeName); // 止羸止损2个点
   OPEN = Price(CodeName, "Open");
   data = Def_TickData(CodeName, 1, 1);
   IF(data.State != 1)
   {
          RETURN;
   }
   // 无持仓
   PRICE = data[0].TickPrice;
   IF( T_BuyPosition(CodeName)==0 && T_SellPosition(CodeName)==0 && COIN==0)
   {
          IF(PRICE > OPEN ) // 第一笔Tick开盘价之上
          {
                 BK_PRICE = data[0].Bid1;
                 MessageOut("买开");
                 BKID = T_Deal(CodeName, 0, 0, N, BK_PRICE); // 买一价做多
                 BK_TIME = CurrentTime();
                 BK_DEAL = 10;
                 COIN = 1;
                 RETURN;
          }
          IF(PRICE < OPEN && T_IsNoOrder()) // 第一笔Tick开盘价之下
          {
                 SK_PRICE = data[0].Ask1;
                 MessageOut("卖开");
                 SKID = T_Deal(CodeName, 1, 0, N, SK_PRICE); // 卖一价做空
                 SK_TIME = CurrentTime();
                 SK_DEAL = 10;
                 COIN = 1;
                 RETURN;
          }
          RETURN;
   }
   IF( T_BuyPosition(CodeName)==0 && T_SellPosition(CodeName)==0 && COIN==1)
   {
             IF(PRICE > BK_PRICE)
          {
                 // 价格10秒内大于买一价(挂单价),撤单,对手价买入
                 IF((CurrentTime()-BK_TIME) < 10)
                 {
                        T_DeleteOrder(BKID);
                        BK_PRICE = data[0].Ask1;
                        MessageOut("对手买开");
                        BKID = T_Deal(CodeName, 0, 0, N, BK_PRICE);
                        BK_TIME = CurrentTime();
                        COIN = 2;
                        BK_DEAL = 10;
                 }
                 RETURN;
          }
          IF(PRICE < SK_PRICE)
          {
                 // 价格10秒内小于卖一价(挂单价),撤单,对手价卖出
                 IF((CurrentTime()-SK_TIME) < 10)
                 {
                        T_DeleteOrder(SKID);
                        SK_PRICE = data[0].Bid1;
                        MessageOut("对手卖开");
                        SKID = T_Deal(CodeName, 0, 0, N, SK_PRICE);
                        SK_TIME = CurrentTime();
                        COIN = 2;
                        SK_DEAL = 10;
                 }
                 RETURN;
          }
   }


   // 多头持仓
   IF( T_BuyPosition(CodeName) !=0 )
   {
          IF(BK_DEAL == 10)
          {
                 MessageOut("买开成交");
                 BK_TIME = CurrentTime();  // 记录成交时间
                 BK_DEAL = 0;
                 COIN = 0;
                 COINN = 0;
                 SPID = 0;
          }
          // 持多仓成交后10秒内价格小于等于成交价格则按照市价挂单
          IF( PRICE <= T_BuyAvgPrice(CodeName) && COINN ==0)
          {
                 IF( (CurrentTime()-BK_TIME) < 10 )
                 {
                        SP_PRICE = data[0].TickPrice;
                        MessageOut("止损:卖平"+T_BuyPosition(CodeName));
                        SPID = T_Deal(CodeName, 1, 1, T_BuyPosition(CodeName), SP_PRICE);
                        SP_TIME = CurrentTime();
                        BKID = 0;
                        COINN = 1;
                        RETURN;
                 }
          }
          // 5秒内不成交或者价格小于等于持仓成交价之下2点撤平仓挂单以对手价平仓
          IF( (CurrentTime()-SP_TIME>=5 || PRICE<=T_BuyAvgPrice(CodeName)-StopBitPrice) && COINN ==1 )
          {
                 T_DeleteOrder(SPID);
                 SP_PRICE = data[0].Bid1;
                 MessageOut("止损:对手卖平"+T_BuyPosition(CodeName));
                 SPID = T_Deal(CodeName, 1, 1, T_BuyPosition(CodeName), SP_PRICE);
                 SP_TIME = CurrentTime();
                 BKID = 0;
                 COINN = 2;
                 RETURN;
          }
          // 成交后10秒内价格大于持仓价格2点则挂市价单
          IF( PRICE > (T_BuyAvgPrice(CodeName)+StopBitPrice) && COINN == 0)
          {
                 IF((CurrentTime()-BK_TIME) < 10 )
                 {
                        SP_PRICE = data[0].TickPrice;
                        MessageOut("止赢:卖平"+T_BuyPosition(CodeName));
                        SPID = T_Deal(CodeName, 1, 1, T_BuyPosition(CodeName), SP_PRICE);
                        SP_TIME = CurrentTime();
                        BKID = 0;
                        COINN = 3;
                        RETURN;
                 }
          }
          // 2秒内不成交撤单挂对手价成交
          IF((CurrentTime()-SP_TIME) >2 && COINN ==3)
          {
                 T_DeleteOrder(SPID);
                 SP_PRICE = data[0].Bid1;
                 MessageOut("止赢:对手卖平"+T_BuyPosition(CodeName));
                 SPID = T_Deal(CodeName, 1, 1, T_BuyPosition(CodeName), SP_PRICE);
                 SP_TIME = CurrentTime();
                 BKID = 0;
                 COINN = 4;
                 RETURN;
          }
   }
   // 空头持仓
   IF( T_SellPosition(CodeName) !=0 )
   {
          IF(SK_DEAL == 10)
          {
                 MessageOut("卖开成交");
                 SK_TIME = CurrentTime();  // 记录成交时间
                 SK_DEAL = 0;
                 COIN = 0;
                 COINN = 0;
                 BPID = 0;
          }
          // 持空仓成交后10秒内价格大于等于成交价格则按照市价挂单
          IF( PRICE >= T_SellAvgPrice(CodeName) && COINN == 0)
          {
                 IF((CurrentTime()-SK_TIME) < 10 )
                 {
                        BP_PRICE = data[0].TickPrice;
                        MessageOut("止损:买平"+T_SellPosition(CodeName));
                        BPID = T_Deal(CodeName, 0, 1, T_SellPosition(CodeName), BP_PRICE);
                        BP_TIME = CurrentTime();
                        SKID = 0;
                        COINN = 1;
                        RETURN;
                 }
          }
          // 5秒内不成交或者价格大于等于持仓成交价之上2点撤平仓挂单以对手价平仓
          IF( (CurrentTime()-BP_TIME>=5 || PRICE>=T_SellAvgPrice(CodeName)+StopBitPrice) && COINN==1 )
          {
                 T_DeleteOrder(BPID);
                 BP_PRICE = data[0].Ask1;
                 MessageOut("止损:对手买平"+T_SellPosition(CodeName));
                 BPID = T_Deal(CodeName, 0, 1, T_SellPosition(CodeName), BP_PRICE);
                 BP_TIME = CurrentTime();
                 SKID = 0;
                 COINN = 2;
                 RETURN;
          }
          // 成交后10秒内价格小于持仓价格2点则挂市价单
          IF( PRICE < (T_BuyAvgPrice(CodeName)-StopBitPrice) && COINN==0)
          {
                 IF((CurrentTime()-SK_TIME) < 10 )
                 {
                        BP_PRICE = data[0].TickPrice;
                        MessageOut("止赢:买平"+T_SellPosition(CodeName));
                        BPID = T_Deal(CodeName, 0, 1, T_SellPosition(CodeName), BP_PRICE);
                        BP_TIME = CurrentTime();
                        SKID = 0;
                        COINN = 3;
                        RETURN;
                 }
          }
          // 2秒内不成交撤单挂对手价成交
          IF((CurrentTime()-BP_TIME) >2 && COINN==3)
          {
                 T_DeleteOrder(BPID);
                 BP_PRICE = data[0].Ask1;
                 MessageOut("止赢:对手买平"+T_SellPosition(CodeName));
                 BPID = T_Deal(CodeName, 0, 1, T_SellPosition(CodeName), BP_PRICE);
                 BP_TIME = CurrentTime();
                 SKID = 0;
                 COINN = 4;
                 RETURN;
          }
   }
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有