多個國外成熟交易策略分享交流-1 hans123突破系統
作者:開拓者 TB 來源:cxh99.com 發布時間:2012年09月08日
- 咨詢內容:
大家好,剛剛來到TB社區,我今年20歲,目前在美國讀書準備學習金融工程專業。我的父母是國內私募基金的操盤手,從大概八歲起就逐步接觸股票期貨和各種金融產品的交易。從最開始的巴菲特式的buy and hold策略,到后來研究長期資本管理公司的無風險套利策略,再到巴菲特,羅杰斯式的宏觀對沖策略,以及國內外著名炒單手的日內超短線策略。其間我還研究了德州撲克的打法并獲得了www.pokerstrategy.com的鉆石會員。我研究自動化交易很多年了,以前主要在MT4平臺上設計和制作用于外匯市場自動化交易程序,這是我的實盤賬戶在線網址:carpower007.mt4live.com過去六個月盈利超過300%資金回撤小于10%.最近受一個私募朋友的委托開發適應國內期貨市場的自動化交易程序.在這里我將分享我設計自動化程序的每一個步驟,包括測試報告和代碼,由于我在TB方面還是新手希望各位前輩能夠多多指點.大家如果常去國外的交易系統論壇的就會發現那里的老外非常有分享精神,一來有很多人把自己已經非常成熟的交易系統的源代碼分享出來,二來只要有人提出想法就會有很多智同道和的人幫助他完成交易系統編程工作,通過這樣的分享他們的平均水平越來越高.而國內的交易系統設計者們卻總是閉門造車,很少互相分享互相幫助.我希望通過我的分享在我們的社區里掀起分享互助的熱潮,有更多的高手分享出交易策略有更多的程序員愿意幫助論壇里的朋友編寫指標和交易策略使我們的整體交易水平越來越高.在接下來的幾篇帖子里我將和大家分享我收集破解的800多個國外自動化交易程序中最優秀的幾個的原理,并和大家一起探討如何把他們移植到國內的交易市場里.這些系統包括:
1.基于交易時段選擇和高低點突破的Hans123突破系統
2.適應震蕩市場的EA scalper pro剝頭皮系統(我外匯實盤用的系統)
3.適應震蕩市場的ea boss剝頭皮交易系統(匯友曾經有過2周22倍資金回撤0.89%的實盤交易記錄)
4.基于新聞公布和基本面瞬時變化的自動化交易程序Luckey news5基于隨機漫步原理和金字塔加碼的穩健盈利ea point Break 5和其升級版DTS6用于eurgbp eurusd gbpusd的三角套利程序。其中ea boss和ea scalper pro都有一套完整的震蕩市場過濾系統如果移植到國內相信對大家的交易應該很有幫助.由于外匯市場的交易手續費大都在百分之二以上.從賭博數學和金融數學的概率期望角度來分析,所有在外匯市場上有效的系統,在國內千分之三的手續費條件都應該是有效的而且利潤應該是國外系統的數倍.
首先我來介紹第一個系統Hans123突破交易系統.
大家知道外匯市場主要分為三個交易時段,亞洲盤.歐洲盤和美洲盤.還有一個是只有電子盤交易的時段.其中電子盤和亞洲盤由于參與者較少,和亞洲金融機構實力較小的緣故,行情主要以上下震蕩為主,這段時間是趨勢交易者的地獄,但是是逆勢剝頭皮交易的天堂,很多準確率超過99%且風險很小的暴利策略都是針對這個交易時段的設計的(比如ea scalper pro和ea boss)這里我們后面再詳細討論.歐洲盤和美洲盤是參與者最多的時段,是最適合進行突破交易的時段,hans123就是一個非常典型且非常有效的自動化交易策略,它的基本原理是開盤一定時間內突破前一個市場的最高價或最低價順勢做多或做空,經過對止損止盈等參數的優化這套系統可以應用到幾乎所有的外匯品種中并且盈利穩定,下面是具體的交易策略.
[ 本帖最后由 oliverzrl 于 2010-7-7 18:24 編輯 ]
-
-
hans123黃金測試報告.rar
2010-7-7 18:22:45 上傳
下載次數: 1414
多個國外成熟交易策略分享交流 1突破系統篇
- TB技術人員:
--交易規則—
初始策略
1)找出亞洲盤的最低最高點,在歐洲開市時.
2)掛單最高價+5點買進,最低價-5點賣出。
3)美洲盤開市前平掉所有倉位.
1)找出歐洲盤最高最低價在美洲盤開市時.
2)掛單最高價+5點買進,最低價-5點賣出。
3)美洲盤收市前平掉所有倉位
EUR/USD:
Buy Stop = 最高價 + 5;
止盈 = Buy Stop + 80;
止損 = Buy Stop - 50;
Sell Stop = 最低價 - 5;
止盈 = Sell Stop - 80;
止損 = Sell Stop + 50;
有30點浮動利潤時將止損移至開倉價位。(30點追蹤止損)
GBP/USD:
Buy Stop = 最高價 + 5;
止盈 = Buy Stop + 120;
止損 = Buy Stop - 70;
Sell Stop = 最低價 - 5;
止盈 = Sell Stop - 120;
止損 = Sell Stop + 70;有40點浮動利潤時將止損移至開倉價位。(40點追蹤止損)
每日早7點,平掉手上所有單子。
實盤使用的時候建議大家根據品種波動率來優化止盈止損等參數以達到最好的效果,這個mt4里可以用遺傳基因算法優化來搞定很快,TB上目前用的還是窮舉法,期待老大給咱們開發一下呵呵.
以下是原貼地址里面包括交易系統的模板和自動化交易程序國內好像給屏蔽了可能得翻墻
http://www.forex-tsd.com/expert- ... 785-hans123-ea.html
我各人優化以后這個系統的年均盈利在100%左右,資金回撤20%,使用的是分筆成交數據.后面我傳了一份國際黃金期貨的測試報告這個大家相對外匯還要熟悉一些,大家參考一下。
下面來談談如何把這個系統移植到國內的期貨市場中來.
我目前的基本想法是這樣的,hans123可以有以下幾種移植方法
1突破昨日最高最低點5點順勢開倉.收盤前關倉.設置止盈止損追蹤止損,止盈止損都設置成參數,以便根據品種波動率優化.這里最好加一個限制開倉時間的參數便于優化交易時段,因為根據我的經驗一般來講每個品種的有效突破都集中在一個特定的時段,并以此時段為中心進行正態分布排列。所以優化交易時段對這個策略來講非常重要。這個在后面我共享的一個外匯市場的統計表里有說明,大家可以參考(進一步優化的filter:交易時段優化,ATR,Keltner Channel,KDJ等)
2突破前一個交易時段的最高最低點5點順勢開倉,本交易時段結束前平掉所有倉位。設置止盈止損追蹤止損,止盈止損追蹤止損都設置成參數以便根據品種波動率優化。加一個限制開倉時間的參數便于優化交易時段。(進一步優化的filter:交易時段優化,ATR,Keltner Channel,KDJ等)
我在論壇里逛了下發現了幾個和我想法相似的朋友下面是他們已經完成的代碼的整理,有些功能還沒有實現各位前輩老大可否傾囊相授,告訴我如何實現這些功能,多謝了:)這個突破系統不要nextbar發送功能只要根據所有的即時價位來發出交易信號。另外希望能精確到分鐘
[ 本帖最后由 oliverzrl 于 2010-7-7 18:29 編輯 ]
- TB客服:
1簡單的昨日高低點突破系統:
原貼地址:http://www.tradeblazer.net/forum ... =%E7%AA%81%E7%A0%B4
這個系統我希望高手可以幫助我把那些加倉反手的功能都去掉,或者設置成可以開關的功能然后加入止盈止損和追蹤止損并加入交易時間限制,使得我可以針對品種波動率優化參數。
日內高低點突破交易系統
//------------------------------------------------------------------------
// 簡稱: todayHLCross
// 名稱:
// 類別: 交易指令
// 類型: 其他
// 輸出:
//------------------------------------------------------------------------
/*
日內開盤區高低點機械突破系統
*/
Params
Numeric maxLots(1);//單次開倉手數
Numeric maxTrad(4);//最大交易次數
Numeric minSpt(15);//最小開倉間隔bar數
Numeric splitRate(3); //交易滑點和傭金
Numeric tradBegin(930); //開倉時間
Numeric tradEnd(1430); //開倉截止時間
Numeric closeTime(1457); //bar的時間超過此值后平倉,一分鐘交易=1457
Vars
Numeric splitDot; //交易滑點
Bool bc(False);//開多條件
Bool sc(False);//開空條件
Numeric tradePrice(0);
NumericSeries hh;
NumericSeries ll;
Begin
splitDot=splitRate*MinMove();
If(BarStatus==0)
{
hh=High;
ll=Low;
Return;
}
if(Day !=Day[1])
{
hh=High;
ll=Low; }
Else
If(Time<0.0001*tradBegin)
{
if(High>hh[1]) hh=High; Else hh=hh[1];
if(Low<ll[1]) ll=Low; Else ll=ll[1];
}
Else
if(Time>=0.0001*tradBegin And Time<=0.1500)
{
hh=hh[1];
ll=ll[1];
//穿越模式
bc=CrossOver(Open,hh) Or CrossOver(High,hh) Or CrossOver(Low,hh) Or CrossOver(Close,hh) ;
sc=CrossUnder(Open,ll) Or CrossUnder(High,ll) Or CrossUnder(Low,ll) Or CrossUnder(Close,ll);
if(MarketPosition == 0)
{
// 當前無倉,開始建立多頭
if(bc)
{
if(BarStatus==2) tradePrice= Q_AskPrice +splitDot; Else tradePrice=hh+splitDot;
Buy(maxLots,tradePrice);
}
Else
// 當前無倉,開始建立空頭
If(sc )
{
if(BarStatus==2)tradePrice= Q_BidPrice -splitDot; Else tradePrice=ll-splitDot;
SellShort(maxLots,tradePrice);
}
}
//-----------------------------------------------------------------------------
Else
{
if(MarketPosition > 0 )
{
// 當前多倉,加倉多頭
if(bc And BarsSinceLastEntry>minSpt)
{
if(BarStatus==2) tradePrice= Q_AskPrice +splitDot; Else tradePrice=hh+splitDot;
Buy(maxLots,tradePrice);
}
// 當前多頭,要求反轉為空頭
if(sc)
{
if(BarStatus==2)tradePrice= Q_BidPrice -splitDot; Else tradePrice=ll-splitDot;
// 平多頭開空
SellShort(maxLots,tradePrice);
}
//持倉處理,止損止盈平倉
//........
}
//-----------------------------------------------------------------------------------------------
Else
if(MarketPosition < 0 )
{
// 當前空倉,加空頭
If(sc And BarsSinceLastEntry>minSpt)
{
if(BarStatus==2)tradePrice= Q_BidPrice -splitDot; Else tradePrice=ll-splitDot;
SellShort(maxLots,tradePrice);
}
// 當前空頭,要求反轉為多頭
if(bc)
{
if(BarStatus==2) tradePrice= Q_AskPrice +splitDot; Else tradePrice=hh+splitDot;
//平空頭,開多
Buy(maxLots,tradePrice);
}
//持倉處理,止損止盈平倉
//........
}
}
}
End
//------------------------------------------------------------------------
// 編譯版本 GS2004.06.12
// 用戶版本 2008/11/18 18:49
// 版權所有 fish0451
// 更改聲明 TradeBlazer Software保留對TradeBlazer平臺
// 每一版本的TrabeBlazer公式修改和重寫的權利
//------------------------------------------------------------------------
2定義時間段內高低點的函數:
- 網友回復:
原貼地址:http://www.tradeblazer.net/forum ... =%E7%AA%81%E7%A0%B4
vars
NumericSeries TmpHiLine;
Begin
If(Date!=Date[1])
{
TmpHiLine = InvalidNumeric;
}else
{
TmpHiLine = TmpHiLine[1];
}
If(Time >= 0.1100 && Time <= 0.1120)
{
If(TmpHiLine == InvalidNumeric )
TmpHiLine = High;
else
TmpHiLine = max(High,TmpHiLine );
}
PlotNumeric("MyHighLine",TmpHiLine );
End
3一個30分鐘突破的日內系統
原貼地址:http://www.tradeblazer.net/forum ... =%E7%AA%81%E7%A0%B4
這個系統我認為缺乏一個有效的過濾器會造成很多無效突破,在過濾器中最簡單有效的是交易時段過濾器正如我前面提到的有效突破總是集中在一天中的某一時段呈正態分布向兩邊展開。通過時間過濾器可以大大提高系統的成功率和穩定性。希望高手添加一下。
Params
Numeric nMins(30); // N分鐘的突破
Numeric nOffset(3); // 突破式的價格偏移
Vars
NumericSeries HighestOf30Min;
NumericSeries lowestOf30Min;
Numeric myPrice;
Numeric MinPoint;
Numeric lots(1);
Begin
MinPoint = MinMove*PriceScale;
If(Date <> Date[1])
{
HighestOf30Min = High;
lowestOf30Min = Low;
}Else If(Time < 0.0900+nMins*0.0001)
{
HighestOf30Min = max(high,HighestOf30Min[1]);
lowestOf30Min = min(Low,lowestOf30Min[1]);
}Else
{
HighestOf30Min = HighestOf30Min[1];
lowestOf30Min = lowestOf30Min[1];
}
If(High >= HighestOf30Min + nOffset*MinPoint && MarketPosition != 1)
{
myPrice = HighestOf30Min + nOffset*MinPoint;
If(Open > myPrice) myPrice = Open;
Buy(lots,myPrice);
}
If(Low <= lowestOf30Min - nOffset*MinPoint && MarketPosition != -1)
{
myPrice = lowestOf30Min - nOffset*MinPoint;
If(Open < myPrice) myPrice = Open;
SellShort(lots,myPrice);
}
If(Time >= 0.1459)
{
Sell(lots,Open);
BuyToCover(lots,Open);
}
End
3自適應動態突破系統(Dynamic Break Out II)tb版
- 網友回復:
3自適應動態突破系統(Dynamic Break Out II)tb版
原貼地址:
這個系統是我看到論壇內一個比較接近專業水準的系統,但是很多人不研究明白交易原理不進行優化就胡亂使用,這個代碼也缺少一個原版所擁有的交易時段篩選參數和其它一些filter,恩另外介紹一下dochian-channel,這是一個非常好的通道的指標,基于這個指標設計歐元美元剝頭皮策略準確率可以達到99%,大家可以參考這個外匯EA評測網站的測試報告:http://www.fx3721.cn/2009/1203/320.html
Numeric ceilingAmt(60);
Numeric floorAmt(20);
Numeric bolBandTrig(2.00);
Vars
Numeric lookBackDays(20);
Numeric todayVolatility(0);
Numeric yesterDayVolatility(0);
Numeric deltaVolatility(0);
NumericSeries buyPoint(0);
NumericSeries sellPoint(0);
NumericSeries longLiqPoint(0);
NumericSeries shortLiqPoint(0);
Numeric upBand(0);
Numeric dnBand(0);
Numeric MidLine(0);
Numeric Band(0);
Begin
todayVolatility = StandardDev(Close,30,1);
yesterDayVolatility = StandardDev(Close[1],30,1);
deltaVolatility = (todayVolatility - yesterDayVolatility)/todayVolatility;
lookBackDays = lookBackDays * (1 + deltaVolatility);
lookBackDays = Round(lookBackDays,0);
lookBackDays = Min(lookBackDays,ceilingAmt);
lookBackDays = Max(lookBackDays,floorAmt);
MidLine = AverageFC(Close,lookBackDays);
Band = StandardDev(Close,lookBackDays,bolBandTrig);
upBand = MidLine + bolBandTrig * Band;
dnBand = MidLine - bolBandTrig * Band;
buyPoint = Highest(High[1],lookBackDays);
sellPoint = Lowest(Low[1],lookBackDays);
longLiqPoint = Average(Close[1],lookBackDays);
shortLiqPoint = Average(Close[1],lookBackDays);
if(Close > upBand)
{
If(CrossOver(high,buyPoint))
{
Buy(1,max( buyPoint, Low ));
}
Commentary("多頭觸發價:"+Text(buyPoint));
}
if(Close < dnBand)
{
If(CrossUnder(Low,sellPoint ))
{
SellShort(1,min( sellPoint , High ));
}
Commentary("空頭觸發價:"+Text(sellPoint));
}
if(MarketPosition == 1)
{
If(CrossUnder(Low,longLiqPoint ))
{
Sell(1,min( longLiqPoint , High ));
}
Commentary("多頭退出:"+Text(longLiqPoint));
}
if(MarketPosition == -1)
{
If(CrossOver(high,shortLiqPoint))
{
BuyToCover(1,max( shortLiqPoint, Low ));
}
Commentary("多頭退出:"+Text(shortLiqPoint));
}
End |