新手請(qǐng)教公式設(shè)置 - TradeBlazer公式 [開拓者 TB]
作者:
開拓者 TB 來(lái)源:
cxh99.com 發(fā)布時(shí)間:2012年06月01日 點(diǎn)擊數(shù):
【
收藏到本網(wǎng)的會(huì)員中心】
- 咨詢內(nèi)容:
// 自己新學(xué)TB,編了個(gè)公式卻不能實(shí)現(xiàn),請(qǐng)高手們指導(dǎo),謝謝。
// 以下為均線交易系統(tǒng),10日均線上穿20均線為買入,10日均線下穿20均線為賣出
// 均線買入/賣出時(shí)機(jī)均為平倉(cāng)反手
// 開倉(cāng)為二手,達(dá)到盈利預(yù)期值時(shí)平倉(cāng)一手,等回落后加倉(cāng)一手
Params
Numeric Length1(10); // 10日均線的參數(shù)值
Numeric Length2(20); // 20日均線的參數(shù)值
Numeric Lots(2); // 默認(rèn)的交易數(shù)量
Vars
NumericSeries MA1;
NumericSeries MA2;
Numeric MinPoint; // 一個(gè)最小變動(dòng)單位,也就是一跳
Numeric AddSet(50); // 加倉(cāng)設(shè)置
Numeric SubSet(50); // 減倉(cāng)設(shè)置
NumericSeries FirstPrice; // 第一次開倉(cāng)價(jià)格
NumericSeries LastPrice; // 最后一次開倉(cāng)價(jià)格
boolSeries Condition1;
boolSeries Condition2;
Begin
MA1 = XAverage(Close,Length1);
MA2 = XAverage(Close,Length2);
MinPoint = MinMove*PriceScale();
Condition1 = CrossOver(MA1,MA2);
Condition2 = CrossUnder(MA1,MA2);
If(MarketPosition==0) //空倉(cāng)狀態(tài)時(shí)
{
if(condition1[1])// 當(dāng)出現(xiàn)10日均線上穿20均線時(shí),下一個(gè)bar開盤價(jià)買入
{
FirstPrice = Open;
LastPrice = FirstPrice;
Buy(lots,FirstPrice);
}else if(condition2[1]) // 當(dāng)出現(xiàn)10日均線下穿20均線時(shí),下一個(gè)bar開盤價(jià)賣出
{
FirstPrice = Open;
LastPrice = FirstPrice;
Sellshort(Lots,Open);
}
}else if(MarketPosition==1) // 有多頭持倉(cāng)的情況
{
If(condition2[1]) // 當(dāng)出現(xiàn)10日均線下穿20均線時(shí),下一個(gè)bar開盤價(jià)賣出
{
Sellshort(Lots,Open);
}else if(CurrentContracts==2 && High>= LastPrice+SubSet*MinPoint) // 止贏減倉(cāng)
{
Sell(1,LastPrice+SubSet*MinPoint);
LastPrice =LastPrice + subSet*MinPoint;
}else if(CurrentContracts==1 && Low <=LastEntryPrice - AddSet*MinPoint) // 逢低加倉(cāng)
{
buy(1,LastPrice- AddSet*MinPoint);
LastPrice = LastPrice - addSet*MinPoint;
}
}else if(MarketPosition==-1);// 有空頭持倉(cāng)的情況
{
If(condition1[1]) // 當(dāng)出現(xiàn)10日均線下穿20均線時(shí),下一個(gè)bar開盤價(jià)平倉(cāng)并買入
{
Sellshort(Lots,Open);
}Else if(CurrentContracts==2 && Low <= LastEntryPrice - subSet*MinPoint) // 止贏減倉(cāng)
{
BuyToCover(1,LastPrice);
LastPrice = LastPrice - subSet*MinPoint;
}else if( CurrentContracts==1 && High >=LastPrice + addSet*MinPoint) // 逢高加倉(cāng)
{
sell(1,LastPrice);
LastPrice = LastPrice + AddSet*MinPoint;
}
}
End
- TB技術(shù)人員:
好像是這樣吧
// 以下為均線交易系統(tǒng),10日均線上穿20均線為買入,10日均線下穿20均線為賣出
// 均線買入/賣出時(shí)機(jī)均為平倉(cāng)反手
// 開倉(cāng)為二手,達(dá)到盈利預(yù)期值時(shí)平倉(cāng)一手,等回落后加倉(cāng)一手
Params
Numeric Length1(10); // 10日均線的參數(shù)值
Numeric Length2(20); // 20日均線的參數(shù)值
Numeric Lots(2); // 默認(rèn)的交易數(shù)量
Vars
NumericSeries MA1;
NumericSeries MA2;
Numeric MinPoint; // 一個(gè)最小變動(dòng)單位,也就是一跳
Numeric AddSet(50); // 加倉(cāng)設(shè)置
Numeric SubSet(50); // 減倉(cāng)設(shè)置
NumericSeries FirstPrice; // 第一次開倉(cāng)價(jià)格
NumericSeries LastPrice; // 最后一次開倉(cāng)價(jià)格
boolSeries Condition1;
boolSeries Condition2;
Begin
MA1 = XAverage(Close,Length1);
MA2 = XAverage(Close,Length2);
MinPoint = MinMove*PriceScale();
Condition1 = CrossOver(MA1,MA2);
Condition2 = CrossUnder(MA1,MA2);
If(MarketPosition!=1) //空倉(cāng)狀態(tài)時(shí)
{
if(condition1[1])// 當(dāng)出現(xiàn)10日均線上穿20均線時(shí),下一個(gè)bar開盤價(jià)買入
{
FirstPrice = Open;
LastPrice = FirstPrice;
Buy(lots,FirstPrice);
}
if(MarketPosition!=-1 and condition2[1]) // 當(dāng)出現(xiàn)10日均線下穿20均線時(shí),下一個(gè)bar開盤價(jià)賣出
{
FirstPrice = Open;
LastPrice = FirstPrice;
Sellshort(Lots,Open);
}
}
if(MarketPosition==1) // 有多頭持倉(cāng)的情況
{
If(condition2[1]) // 當(dāng)出現(xiàn)10日均線下穿20均線時(shí),下一個(gè)bar開盤價(jià)賣出
{
Sellshort(Lots,Open);
}else if(CurrentContracts>1 and CurrentContracts<3 && High>= LastPrice+SubSet*MinPoint) // 止贏減倉(cāng)
{
Sell(1,LastPrice+SubSet*MinPoint);
LastPrice =LastPrice + subSet*MinPoint;
}else if(CurrentContracts<2 && Low <=LastEntryPrice - AddSet*MinPoint) // 逢低加倉(cāng)
{
buy(1,LastPrice- AddSet*MinPoint);
LastPrice = LastPrice - addSet*MinPoint;
}
}
if(MarketPosition==-1);// 有空頭持倉(cāng)的情況
{
If(condition1[1]) // 當(dāng)出現(xiàn)10日均線下穿20均線時(shí),下一個(gè)bar開盤價(jià)平倉(cāng)并買入
{
Sellshort(Lots,Open);
}Else if(CurrentContracts>1 and CurrentContracts<3 && Low <= LastEntryPrice - subSet*MinPoint) // 止贏減倉(cāng)
{
BuyToCover(1,LastPrice);
LastPrice = LastPrice - subSet*MinPoint;
}else if( CurrentContracts<2 && High >=LastPrice + addSet*MinPoint) // 逢高加倉(cāng)
{
sell(1,LastPrice);
LastPrice = LastPrice + AddSet*MinPoint;
}
}
End
- TB客服:
謝謝,不過(guò)好像還是沒(méi)達(dá)到想要的效果
- 網(wǎng)友回復(fù):
回復(fù) 3# 青木
您的效果是想要怎樣的?
您可以將各個(gè)條件用commentary輸出查看你的條件,一步一步看就知道為什么不是你想要的效果了。
commentary的各種使用方法請(qǐng)看:http://tradeblazer.net/forum/vie ... B%E4%BD%BF%E7%94%A8
或者參考幫助文檔中相關(guān)函數(shù)說(shuō)明
- 網(wǎng)友回復(fù):
回復(fù) 4# lh948
這個(gè)建議非常好,謝謝!
我按照你的方法把公式調(diào)整了,效果出來(lái)了。不過(guò)奇怪的是有多單時(shí)符合預(yù)期效果,但惟獨(dú)有空單時(shí)不能止贏和補(bǔ)倉(cāng),只能平倉(cāng)反手。
多單和空單的代碼是同理的,為何效果不同捏?
以下是我修改會(huì)的代碼,請(qǐng)幫忙看看:
// 以下為均線交易系統(tǒng),10日均線上穿20均線為買入,10日均線下穿20均線為買出
Params
Numeric Length1(10); // 10日均線的參數(shù)值
Numeric Length2(20); // 20日均線的參數(shù)值
Numeric Lots(2); // 默認(rèn)的交易數(shù)量
Vars
NumericSeries MA1;
NumericSeries MA2;
Numeric MinPoint(1); // 一個(gè)最小變動(dòng)單位,也就是一跳
Numeric AddSet(20); // 加倉(cāng)設(shè)置
Numeric SubSet(20); // 減倉(cāng)設(shè)置
NumericSeries myFirstPrice; // 第一次開倉(cāng)價(jià)格
NumericSeries myLastPrice; // 最后一次開倉(cāng)價(jià)格
boolSeries Condition1;
boolSeries Condition2;
Begin
MA1 = XAverage(Close,Length1);
MA2 = XAverage(Close,Length2);
MinPoint = MinMove*PriceScale;
Condition1 = CrossOver(MA1,MA2);
Condition2 = CrossUnder(MA1,MA2);
If(MarketPosition==0 )
{
if(condition1) //空倉(cāng)狀態(tài)時(shí)出現(xiàn)10日均線上穿20均線,當(dāng)前bar收盤價(jià)買入
{
myFirstPrice = Close;
myLastPrice = myFirstPrice;
Buy(lots,myFirstPrice);
Commentary("空倉(cāng)狀態(tài)下,上穿20均線時(shí),當(dāng)前bar收盤價(jià)買入");
}Else if(condition2) // 空倉(cāng)狀態(tài)時(shí)出現(xiàn)10日均線下穿20均線時(shí),當(dāng)前bar收盤價(jià)賣出
{
myFirstPrice = Close;
myLastPrice = myFirstPrice;
Sellshort(Lots,myFirstPrice);
Commentary("空倉(cāng)狀態(tài)下,下穿20均線時(shí),當(dāng)前bar收盤價(jià)賣出");
}
}Else if(MarketPosition==1 )
{
If(condition2) // 有多單持倉(cāng),出現(xiàn)10日均線下穿20均線時(shí),當(dāng)前bar收盤價(jià)賣出
{
myLastPrice = Close;
Sellshort(Lots,myLastPrice);
Commentary("多單平倉(cāng)并反手");
}Else if(CurrentContracts==2 && High>= myLastPrice+SubSet*MinPoint) // 止贏減倉(cāng)
{
Sell(1,myLastPrice+SubSet*MinPoint);
Commentary("多單止贏1手");
myLastPrice =myLastPrice + subSet*MinPoint;
}Else if(CurrentContracts==1 && Low <=MA1) // 逢低加倉(cāng)
{
buy(1,IntPart(MA1));
Commentary("多單補(bǔ)倉(cāng)1手");
myLastPrice = IntPart(MA1);
}
}Else If(MarketPosition==-1 )
{
if(condition1)// 有空單持倉(cāng),出現(xiàn)10日均線上穿20均線時(shí),當(dāng)前bar收盤價(jià)平倉(cāng)并買入
{
myLastPrice = Close;
Buy(Lots,myLastPrice);
Commentary("空單平倉(cāng)并反手");
}Else if(CurrentContracts==2 && Low<=myLastPrice-SubSet*MinPoint) // 止贏減倉(cāng)
{
BuyToCover(1,myLastPrice-SubSet*MinPoint);
Commentary("空單止贏1手");
myLastPrice=myLastPrice-SubSet*MinPoint;
}Else if(CurrentContracts==1 && High>=MA1) // 逢高加倉(cāng)
{
sell(1,IntPart(MA1));
Commentary("空單補(bǔ)倉(cāng)1手");
myLastPrice = IntPart(MA1);
}
}
End |