按2%的風(fēng)險(xiǎn),1:2的盈虧比代碼,總是不對(duì),請(qǐng)老師幫忙看看 [開拓者 TB]
- 咨詢內(nèi)容:
本帖最后由 xiaokakaren 于 2015-12-15 11:21 編輯
1、我是新手,按2%的風(fēng)險(xiǎn)開倉個(gè)代碼寫不了,只能用一個(gè)資金的2%代替。思路是這樣:第一單總資金的2%做為虧損金額,用它來考量開倉的手?jǐn)?shù)。第二單在第一單沒有平倉的時(shí)候再次開倉的手?jǐn)?shù)就是資金-第一單止損的金額。舉例:我總資金是100000的話,第一單的開倉手?jǐn)?shù)=(100000*0.02)/(止損點(diǎn)數(shù)*一跳的價(jià)格),這個(gè)時(shí)候如果第一單沒平,再開第二單的話手?jǐn)?shù)=【(100000-第一單如果止損的金額)*0.02】/(止損點(diǎn)數(shù)*一跳的價(jià)格)。這個(gè)我在論壇上沒找到相似的例子。所以也不知道應(yīng)該怎么寫。有老師能指點(diǎn)一下最好了。
2、1:2的盈虧比的代碼如下,感覺很多問題,我也不知道是那個(gè)地方。
Params
Numeric FastLength(5);
Numeric SlowLength(20);
Vars
NumericSeries AvgValue1;
NumericSeries AvgValue2;
Numeric minpoint; //最小變動(dòng)單位,也就是一跳
Numeric myentryprice; //我的開倉價(jià)格
Numeric StopLossSet; // 止損設(shè)置(多頭)
Numeric StopLossSet1; // 止損設(shè)置(空頭)
Numeric MyExitPrice; // 平倉價(jià)格
NumericSeries HighestAfterEntry; // 開倉后出現(xiàn)的最高價(jià)
NumericSeries LowestAfterEntry; // 開倉后出現(xiàn)的最低價(jià)
Numeric lots; //開倉手?jǐn)?shù)
Numeric mycapital(1000000); //我的資金
Begin
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
//PlotNumeric("PL",Portfolio_TotalProfit);
// 集合競價(jià)和小節(jié)休息過濾
If(!CallAuctionFilter()) Return;
minpoint=MinMove*PriceScale;//=當(dāng)前公式應(yīng)用商品的最小變動(dòng)量*當(dāng)前公式應(yīng)用商品的計(jì)數(shù)單位
StopLossSet=open-Low[1]+300; //止損點(diǎn)數(shù)
StopLossSet1=High[1]-Open+300; //止損點(diǎn)數(shù)
If(MarketPosition <>1 && AvgValue1[1] > AvgValue2[1])
{
lots=mycapital*0.02 / StopLossSet*minpoint;//開倉手?jǐn)?shù)=總資金的2%/止損金額
Buy(lots,Open);
}
If(MarketPosition <>-1 && AvgValue1[1] < AvgValue2[1])
{
lots=mycapital*0.02 / StopLossSet1*minpoint;//開倉手?jǐn)?shù)=總資金的2%/止損金額
SellShort(lots,Open);
}
If(BarsSinceEntry==0)//如果此K線是開倉的K線
{
HighestAfterEntry = Close;//開倉后的最高價(jià)=收盤價(jià)
LowestAfterEntry = Close;//開倉后的最低價(jià)=收盤價(jià)
If(MarketPosition<>0) //當(dāng)前持倉狀態(tài)不等于0
{
HighestAfterEntry = Max(HighestAfterEntry,EntryPrice); // 開倉的Bar,將開倉價(jià)和當(dāng)時(shí)的收盤價(jià)的較大值保留到HighestAfterEntry
LowestAfterEntry = Min(LowestAfterEntry,EntryPrice); // 開倉的Bar,將開倉價(jià)和當(dāng)時(shí)的收盤價(jià)的較小值保留到LowestAfterEntry
}
}Else
{
HighestAfterEntry = Max(HighestAfterEntry,High); // 記錄下當(dāng)前Bar的最高點(diǎn),用于下一個(gè)Bar的跟蹤止損判斷
LowestAfterEntry = Min(LowestAfterEntry,Low); // 記錄下當(dāng)前Bar的最低點(diǎn),用于下一個(gè)Bar的跟蹤止損判斷
}
Commentary("HighestAfterEntry="+Text(HighestAfterEntry));//在超級(jí)圖表當(dāng)前K線添加一行注釋信號(hào)
Commentary("LowestAfterEntry="+Text(LowestAfterEntry));
myentryprice=EntryPrice;//我的開倉價(jià)格是當(dāng)前持倉的第一個(gè)建倉價(jià)格。AvgEntryPrice(當(dāng)前持倉的平均建倉價(jià)格),LastEntryPrice(當(dāng)前持倉的最后一個(gè)建倉價(jià)格)
If(MarketPosition==1)//有多倉的情況
{
If(HighestAfterEntry[1]>=myentryprice+StopLossSet*2*minpoint Or Open<=myentryprice-StopLossSet*minpoint)
{
Sell(0,Open);
}
}
If(MarketPosition==-1)//有空倉的情況
{
If(LowestAfterEntry[1]<=myentryprice-StopLossSet1*2*minpoint Or Open>=myentryprice+StopLossSet1*minpoint)
{
BuyToCover(0,Open);
}
}
End
3、請(qǐng)各位老師幫忙看看 - TB技術(shù)人員:
后面的注釋老師們可以不用看,好多是復(fù)制的
- TB客服:
xiaokakaren 發(fā)表于 2015-12-15 11:07
后面的注釋老師們可以不用看,好多是復(fù)制的
你表達(dá)的不太清楚,所以需要你再確認(rèn)你的需求。我的理解是,你想做到兩點(diǎn):1、每次開倉按照權(quán)益的2%為虧損額度來計(jì)算下單手?jǐn)?shù)。如果是反手就把權(quán)益先扣除2%。2、止損止盈做到,盈虧比是2:1
把你的需求放在一邊,你的代碼中存在一些語法問題。
1、你沒有止損的代碼。
2、你對(duì)變量類型numeric 和numericseries的錯(cuò)用。numeric換一根BAR,就恢復(fù)為初始值。numericseries則可以記錄下來,后續(xù)的BAR都可以使用。比如你代碼中的myentryprice,應(yīng)該用numericseries類型。
其他變量,你都要根據(jù)你的需求來選擇合適的變量類型。 - 網(wǎng)友回復(fù):
tbheyihao 發(fā)表于 2015-12-15 12:31
你表達(dá)的不太清楚,所以需要你再確認(rèn)你的需求。我的理解是,你想做到兩點(diǎn):1、每次開倉按照權(quán)益的2%為虧 ...
老師的理解是對(duì)的,1、每次開倉按照權(quán)益的2%為虧損額度來計(jì)算下單手?jǐn)?shù)。如果是反手(這里也可以是加倉)就把權(quán)益先扣除2%。2、止損止盈做到,盈虧比是2:1。
另外,我止損放在條件語句中不行嗎?
If(MarketPosition==1)//有多倉的情況
{
If(HighestAfterEntry[1]>=myentryprice+StopLossSet*2*minpoint Or Open<=myentryprice-StopLossSet*minpoint)
{
Sell(0,Open);
}
}
這里的Open<=myentryprice-StopLossSet*minpoint也就是說的止損。我不大清楚TB語言里 或者 是不是用OR來表示。
myentryprice這個(gè)變量我是參考止損止盈的模板設(shè)置了,我改改看看 - 網(wǎng)友回復(fù):
xiaokakaren 發(fā)表于 2015-12-15 13:53
老師的理解是對(duì)的,1、每次開倉按照權(quán)益的2%為虧損額度來計(jì)算下單手?jǐn)?shù)。如果是反手(這里也可以是加倉) ...
不好意思,沒看到那個(gè)或的條件。止損可以放在那里的。
1、每次開倉按照權(quán)益的2%,反手或者加倉先把權(quán)益扣除2%。
這個(gè)實(shí)現(xiàn)關(guān)鍵在于你要把權(quán)益給統(tǒng)計(jì)出來。你可以用一個(gè)序列變量來記錄權(quán)益。每當(dāng)平倉時(shí)自動(dòng)統(tǒng)計(jì)平倉盈虧。
你的開倉價(jià)、平倉價(jià)、開倉手?jǐn)?shù)已經(jīng)是有變量的。手續(xù)費(fèi)可以自己設(shè)定。
Numeric feerate; //手續(xù)費(fèi)比例
Numeric fee; //手續(xù)費(fèi)
Numeric traderesult(0); //單次交易盈虧
NumericSeries voidequity(100000); //資金權(quán)益
fee=2*myentryprice*ContractUnit*BigPointValue*feerate;
traderesult=(myentryprice-open)*ContractUnit*BigPointValue-fee;
voidequity=voidequity+traderesult;
2、止損止盈的的觸發(fā)價(jià)格,可以采用high/low這樣的,更及時(shí)。
你使用highestafterentry[1]來止盈,使用open來止損,也可以,做的會(huì)滯后一點(diǎn)。
不過你的myentryprice要改成序列變量。
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 511411198 進(jìn)行 有償 編寫!(不貴!點(diǎn)擊查看價(jià)格!)
相關(guān)文章
-
沒有相關(guān)內(nèi)容