请问如何交易两种合约 (文华财经wh9)

投资者咨询:请问如何交易两种合约 (文华财经wh9)
来源:文华财经  日期:2018-7-1 16:30
我的需求是,模型加载在 pta1809上,然后满足一定条件后,判断是否有pta1901的多仓,如果有则平掉PTA1901的仓位,之后在PTA1809开同样数量的多仓


请问该如何编写代码?
技术人员回复
日期:2018-7-1 18:45

参考:

 

Data
DATA1:"PTA1809";          
DATA2:"PTA1901";      
Vars
Global_Numeric A;
Global_Numeric B;//指定条件
Begin
A=DATA2.A_BuyPosition();//1901多头持仓
If(B==1&&A>0)
{
DATA2.A_SendOrder(Enum_Sell,Enum_Exit,A,DATA2.Price("FallLimit"));
DATA1.A_SendOrder(Enum_Buy,Enum_Entry,A,DATA1.Price("RiseLimit"));
}
End

投资者咨询:请问如何交易两种合约 (文华财经wh9)
来源:文华财经  日期:2018-7-1 16:30
 谢谢老师,继续请教:这个执行速度会比比较慢么? 另外,这个代码是可以加载到各个级别K线图上的么?
技术人员回复
日期:2018-7-2 8:12
 不会慢的,MQ中的模型都是编译执行的,速度是非常快的

另外,上面的代码加载到各个级别K线图都可以的
投资者咨询:请问如何交易两种合约 (文华财经wh9)
来源:文华财经  日期:2018-7-1 16:30
 请问想获得的账户持仓,而不是交易池持仓,那么该如何修改前面的代码?  

另外,如果账户有持仓,但交易池没有持仓,发出的平仓指令能成功么?
技术人员回复
日期:2018-7-2 13:11
 1.代码用的是A_BuyPosition 取的就是账户多头持仓,不是模组的

2楼范例 是不支持回测的,您可以实盘运行看下

2.账户有持仓,但交易池没有持仓,发出的平仓指令能成功

因为条件上判断了,满足指定条件B同时账户多头持仓大于0,在发出的平仓指令,所以没问题的


投资者咨询:请问如何交易两种合约 (文华财经wh9)
来源:文华财经  日期:2018-7-1 16:30
 谢谢老师,继续请教

1、进一步的,如果我希望比较两个合约最新价格,该如何编写代码?

2、为什么使用Global_Numeric  而不直接用numeric定义变量? 




技术人员回复
日期:2018-7-8 18:17
 1、参考如下写法:

aa=DATA1.Price("new");
bb=DATA2.Price("new");

2、Numeric 是数值型临时变量 ;Global_Numeric 是数值型广域变量 

临时变量,表示对临时变量的计算和赋值当次计算生效,如果不做赋值临时变量直接取变量的初始值
 
广域变量和C语言的内部变量的概念是一致的,在一个公式的多次计算过程中,广域变量的计算是延续,这次计算是在上一次的结果基础上进行。 

广域变量和临时变量的区别,在于一个公式的多次计算的整个过程中永久有效。 
投资者咨询:请问如何交易两种合约 (文华财经wh9)
来源:文华财经  日期:2018-7-1 16:30
 1、参考如下写法:

aa=DATA1.Price("new");
bb=DATA2.Price("new"); 


谢谢老师,如果想去上一次的tick价格该如何编写?
技术人员回复
日期:2018-7-9 9:20
需要定义数据区,参考以下方法

Vars
   Var_TickData data0;
Begin
   data0=Def_TickData("rb1809",1,2); //data0中装有2笔rb1705的tick数据
   IF(data0.State == 1)
   {

   data0[1].TickPrice; // 表示上一tick数据的价格。

   }
End