以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  [求助][原创]tb改金字塔  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=73246)

--  作者:hksl1023
--  发布时间:2014/12/18 14:40:28
--  [求助][原创]tb改金字塔
Params 
Numeric RiskRatio(1); 
Numeric ATRLength(20); 
Numeric boLength(20); 
Numeric fsLength(55); 
Numeric teLength(10); 
Bool LastProfitableTradeFilter(True); 
Numeric TrailingStart1(50); 
Numeric TrailingStart2(80); 
Numeric TrailingStop1(30); 
Numeric TrailingStop2(20); 
Numeric StopLossSet(50); 

Vars 
Numeric MinPoint; 
NumericSeries AvgTR; 
Numeric N; 
Numeric TotalEquity; 
Numeric TurtleUnits; 
NumericSeries DonchianHi; 
NumericSeries DonchianLo; 
NumericSeries fsDonchianHi; 
NumericSeries fsDonchianLo; 
Numeric ExitHighestPrice;  
Numeric ExitLowestPrice; 
Numeric myEntryPrice; 
Numeric myExitPrice; 
Bool SendOrderThisBar(False); 
NumericSeries preEntryPrice(0); 
BoolSeries PreBreakoutFailure(false); 
Numeric MyExitPriceStop; 
NumericSeries HighestAfterEntry; 
NumericSeries LowestAfterEntry; 
Begin 
If(BarStatus==2 && Time==0.090000 && CurrentTime<=0.090000) Return;



If(BarStatus == 0) 
{
 preEntryPrice = InvalidNumeric;
 PreBreakoutFailure = false;
 }
 MinPoint = MinMove*PriceScale;
 AvgTR = XAverage(TrueRange,ATRLength);
 N = AvgTR[1];
 TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
 TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
 TurtleUnits = IntPart(TurtleUnits); 
 DonchianHi = HighestFC(High[1],boLength);
 DonchianLo = LowestFC(Low[1],boLength);
 fsDonchianHi = HighestFC(High[1],fsLength);
 fsDonchianLo = LowestFC(Low[1],fsLength);
 ExitLowestPrice = LowestFC(Low[1],teLength);
 ExitHighestPrice = HighestFC(High[1],teLength);
 Commentary("N="+Text(N)); 
 Commentary("preEntryPrice="+Text(preEntryPrice));
 Commentary("PreBreakoutFailure="+IIFString(PreBreakoutFailure,"True","False")); 
 If(BarsSinceentry == 0) 
 {

HighestAfterEntry = Close; 
 LowestAfterEntry = Close;
 If(MarketPosition <> 0) 
 {
 HighestAfterEntry = Max(HighestAfterEntry,AvgEntryPrice); 
 LowestAfterEntry = Min(LowestAfterEntry,AvgEntryPrice); 
 }
 } 
 Else 
 {
 HighestAfterEntry = Max(HighestAfterEntry,High); 
 LowestAfterEntry = Min(LowestAfterEntry,Low); 
 }
 Commentary("HighestAfterEntry="+Text(HighestAfterEntry));
 Commentary("LowestAfterEntry="+Text(LowestAfterEntry));
 MinPoint = MinMove*PriceScale;
 MyEntryPrice = AvgEntryPrice; 
If(MarketPosition == 0 && ((!LastProfitableTradeFilter) Or(PreBreakoutFailure))) 
{
 
 If(High > DonchianHi && TurtleUnits >= 1) 
 {
 
 myEntryPrice = min(high,DonchianHi + MinPoint);
 myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); 
 preEntryPrice = myEntryPrice; 
 Buy(1,myEntryPrice); 
 SendOrderThisBar = True;
 PreBreakoutFailure = False;
 }
 If(Low < DonchianLo && TurtleUnits >= 1) 
 {
 
 myEntryPrice = max(low,DonchianLo - MinPoint);
 myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); 
 preEntryPrice = myEntryPrice;
 SendOrderThisBar = True;
 SellShort(1,myEntryPrice);

SendOrderThisBar = True;
 PreBreakoutFailure = False; 
 }
 }
 // 长周期突破开仓 Failsafe Breakout point 
 If(MarketPosition == 0) 
 {
 Commentary("fsDfont-family: Verdana;"> If(High > fsDonchianHi && TurtleUnits >= 1) 
 {
 
 myEntryPrice = min(high,fsDonchianHi + MinPoint);
 myEntryPrice = IIF(myEntryPrice < Open, Open,myEntryPrice); 
 preEntryPrice = myEntryPrice; 
 Buy(1,myEntryPrice); 
 SendOrderThisBar = True;
 PreBreakoutFailure = False; 
 }
 Commentary("fsDfont-family: Verdana;"> If(Low < fsDonchianLo && TurtleUnits >= 1) 
 {


myEntryPrice = max(low,fsDonchianLo - MinPoint);
 myEntryPrice = IIF(myEntryPrice > Open, Open,myEntryPrice); 
 preEntryPrice = myEntryPrice;
 SellShort(1,myEntryPrice);
 SendOrderThisBar = True;
 PreBreakoutFailure = False; 
 }
 }
 If(MarketPosition == 1) 
 {
 Commentary("ExitLowestPrice="+Text(ExitLowestPrice));
 If(Low < ExitLowestPrice) 
 {
 myExitPrice = max(Low,ExitLowestPrice - MinPoint);
 myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); 
 Sell(0,myExitPrice); 
 }
 Else 
 {
 If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1) 
 {
If(Open >= preEntryPrice + 0.5*N) 
 {
 myEntryPrice = Open;
 preEntryPrice = myEntryPrice;
 Buy(1,myEntryPrice);
 SendOrderThisBar = True;
 }
 while(High >= preEntryPrice + 0.5*N) 
 {
 myEntryPrice = preEntryPrice + 0.5 * N;
 preEntryPrice = myEntryPrice;
 Buy(1,myEntryPrice);
 SendOrderThisBar = True;
 }
 }
 
 If(Low <= preEntryPrice - 2 * N && SendOrderThisBar == false) 
 {
 If(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart2*MinPoint) 
 {
 If(Low <= HighestAfterEntry[1] - TrailingStop2*MinPoint) 
 {

MyExitPriceStop = HighestAfterEntry[1] - TrailingStop2*MinPoint;
 If(Open < MyExitPriceStop) MyExitPriceStop = Open; 
 Sell(0,MyExitPriceStop);
 }
 } 
 else if(HighestAfterEntry[1] >= MyEntryPrice + TrailingStart1*MinPoint) 
 {
 If(Low <= HighestAfterEntry[1] - TrailingStop1*MinPoint) 
 {
 MyExitPriceStop = HighestAfterEntry[1] - TrailingStop1*MinPoint; 
 If(Open < MyExitPriceStop) MyExitPriceStop = Open;  
 Sell(0,MyExitPriceStop); 
 }
 } 
 else if (Low <= MyEntryPrice - StopLossSet*MinPoint)
 {
 MyExitPriceStop = MyEntryPrice - StopLossSet*MinPoint;
 If(Open < MyExitPriceStop) MyExitPriceStop = Open;  
 Sell(0,MyExitPriceStop);
 }
 PreBreakoutFailure = True;
}

}
 }
 Else If(MarketPosition ==-1) 
 {
 
 Commentary("ExitHighestPrice="+Text(ExitHighestPrice));
 If(High > ExitHighestPrice) 
 {
 myExitPrice = Min(High,ExitHighestPrice + MinPoint);
 myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); 
 BuyToCover(0,myExitPrice); 
 }
 Else 
 {
 If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1) 
 {
 // 
 If(LowestAfterEntry[1] <= MyEntryPrice - TrailingStart2*MinPoint) 
 {
 If(High >= LowestAfterEntry[1] + TrailingStop2*MinPoint) 
 {
 MyExitPriceStop = LowestAfterEntry[1] + TrailingStop2*MinPoint;

If(Open > MyExitPriceStop) MyExitPriceStop = Open; 
BuyToCover(0,MyExitPriceStop);
 }
 }
 else if(LowestAfterEntry[1] <= MyEntryPrice + TrailingStart1*MinPoint)
 {
 If(High >= LowestAfterEntry[1] + TrailingStop1*MinPoint) 
 {
 MyExitPriceStop = LowestAfterEntry[1] - TrailingStop1*MinPoint;
 If(Open > MyExitPriceStop) MyExitPriceStop = Open;  
 BuyToCover(0,MyExitPriceStop); 
 }
 }
 else If(High >= MyEntryPrice + StopLossSet*MinPoint) 
 {
 MyExitPriceStop = MyEntryPrice + StopLossSet*MinPoint;
 If(Open > MyExitPriceStop) MyExitPriceStop = Open; 
 }

 PreBreakoutFailure = True; 
 }

} End

--  作者:jinzhe
--  发布时间:2014/12/18 14:40:58
--  
把代码都注释一下
--  作者:kindjrp
--  发布时间:2015/11/14 20:37:15
--  
金字塔能兼容TB,或有没有工具直接把TB语言转换过来?
--  作者:jinzhe
--  发布时间:2015/11/16 8:57:50
--  
现在还不兼容,这个要等以后的开发方向是不是要改了