期貨TB編程:
夾板交易系統(tǒng)
夾板在實(shí)盤中是一個(gè)很常見的運(yùn)用,用于吃住震蕩行情。它有個(gè)上軌和一個(gè)下軌,行情突破上軌就做空;突破下軌就做多,在上下軌之間來回吃。如圖:
代碼如下:
Params
Numeric upperLine(100);
Numeric lowerLine(100);
Numeric StopInterval(150);
Numeric
firstLots(4);
// 手?jǐn)?shù)(僅為正數(shù))
Numeric
today(26);
// 日期(5月22日,則填入22)
Vars
Numeric tem;
Numeric
needPosition; //
當(dāng)前需要建立的頭寸(正數(shù)為多頭,負(fù)數(shù)為空頭,零為全部平光)
Numeric
needPrice; //
建立頭寸時(shí)下單的價(jià)格
NumericSeries
wantStopLong; // 多頭止損的位置
NumericSeries
wantStopShort; // 空頭止損的位置
Begin
if(currentBar == 0)
{
// 初始化序列變量
wantStopLong = -1;
wantStopShort = -1;
}Else
{
wantStopLong = wantStopLong[1];
wantStopShort = wantStopShort[1];
}
if(day != today)
{
// 過濾非指定日期的BAR
return ;
}
// 計(jì)算多、空頭止損的位置
wantStopLong = lowerLine - stopInterval;
wantStopShort = upperLine + stopInterval;
// 把計(jì)算好的值輸出來看看(這是調(diào)試的重要技巧?。。。?!)
Commentary("wantStopLong:"+Text(wantStopLong));
Commentary("wantStopShort:"+Text(wantStopShort));
tem = 0;
if(NumLosTrades == 0) //
當(dāng)日從來沒有止損過,開始準(zhǔn)備計(jì)算。開平倉的方法都包裝在OpenCoverFor2Lines函數(shù)中
{
// OpenCoverFor2Lines函數(shù)包裝了開平倉算法,其用意如下:
// 1、返回值為零表示不做任何頭寸操作,非零表示要操作
//
2、返回值為非零時(shí),needPosition寫入了當(dāng)前要建立的頭寸大小和方向,needPrice寫入了以什么價(jià)格去建立該頭寸
tem =
OpenCoverFor2Lines(MarketPosition(),firstLots,upperLine,lowerLine,wantStopShort,wantStopLong,needPosition,needPrice);
}
Commentary("needPosition:"+Text(needPosition));
Commentary("needPrice:"+Text(needPrice));
if(tem == 0)
{
// 不操作任何東西,返回!
return ;
}
if(MarketPosition == 0)
{
if(needPosition > 0)
{
// 當(dāng)前無倉,開始建立多頭
buy(abs(needPosition),needPrice);
}Else
{
// 當(dāng)前無倉,開始建立空頭
SellShort(abs(needPosition),needPrice);
}
return ;
}
if(MarketPosition > 0)
{
if(needPosition < 0)
{
// 當(dāng)前多頭,要求反轉(zhuǎn)為空頭
|