老师们好,想实现一个简单的实盘下单策略如下:
(ru2107买1价 - ru2105卖1价 小于150时; ru2107买价+一跳挂单;)
目前写法如下:
Params
//此处添加参数
String SymbolA("ru2107.SHFE");
String SymbolB("ru2105.SHFE");
Numeric StopPrice(150);
Vars
//此处添加变量
Integer cnt(0); //账户个数
Integer i(0); //遍历数组
Integer j(0); //遍历数组
Integer nstatus(0);
Integer ncount(0);
Numeric MinPoint; // 一个最小变动单位,也就是一跳
Numeric MyEntryPrice; // 开仓价格
Tick tickdata;
Global Integer K;
Global Array<Tick> lastTickData; // 缓存的最新 Tick 数据
Global Array<bool> tickDataValid; // Tick 数据是否有效标识
Global Bool dataReady; // 检查数据是否正确的标识
Defs
//确认tick数据有效
bool CheckTickData(TickRef tickData)
{
/*
Commentary("symbol="+tickData.symbol); //合约名
Commentary("time="+text(tickData.datetime)); //时间
Commentary("AskPrice="+text(tickData.bidask1.askP)); //申卖价 1
Commentary("AskVol="+text(tickData.bidask1.askV)); //申卖量 1
Commentary("BidPrice="+text(tickData.bidask1.bidP)); //申买价 1
Commentary("BidVol="+text(tickData.bidask1.bidV)); //申买量 1
Commentary("Last="+text(tickData.last)); //现价
Commentary("Open="+text(tickData.open)); //开盘价
Commentary("High="+text(tickData.high)); //最高价
Commentary("Low="+text(tickData.low)); //最低价
Commentary("Volume="+text(tickData.volume)); //现手
Commentary("TotalVolume="+text(tickData.totalVolume)); //总成交
Commentary("---------------separator---------------");
*/
If(tickData.last > 0 && tickData.totalVolume > 0)
Return True;
Else
Return False;
}
Events
//初始化事件函数,订阅2个合约
OnInit()
{
SubscribeBar(SymbolA,"tick");
SubscribeBar(SymbolB,"tick");
A_SubscribeTradeByCreateId(Enum_Trade_Source_ALL);//订阅账户的所有委托,默认只触发本策略发出的委托
}
OnBar(ArrayRef<Integer> indexs)
{
For k=0 To GetArraySize(indexs)-1
{
Data[indexs[k]].GetTick(tickdata);
if(CheckTickData(TickData))
{
tickDataValid[indexs[k]] = True;
lastTickData[indexs[k]] = TickData;
}
}
dataReady = True;
For k=0 To DataCount-1
{
If(!tickDataValid[indexs[k]])
{
dataReady = False;
Break;
}
}
if (lastTickData[0].bidask1.bidP-lastTickData[1].bidask1.askP > StopPrice)
{
MinPoint = MinMove*PriceScale;
MyEntryPrice = Q_BidPrice+MinPoint;
Data0.A_SendOrder(Enum_Buy,Enum_Entry,1,MyEntryPrice);
}
}
问题1 :下面这个条件,ru2107买1价 - ru2105卖1价 小于150时挂单,在运行程序的时候,这个条件不满足也会自动挂单,请问原因和程序问题在哪里呢?感谢老师!
if (lastTickData[0].bidask1.bidP-lastTickData[1].bidask1.askP > StopPrice)
问题2 :请问老师,A_SendOrder实时发单会满足条件后不停地发单,请问怎么样可以实现一次只发一个单
这个一时半会儿给不出解答
关于模型开发工作是一项很系统化的工作 论坛里只能回答零散的语法或者简单实例