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