




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
RSl交易系統(TB版)核心交易邏輯:一、RSI計算函數參數定義NumericLength(14):計算周期,初始值為14。NumericOverSold(30):超賣閾值,初始值為30。NumericOverBought(70):超買閾值,初始值為70。變量定義NumericSeriesNetChgAvg(0):平均凈變化值序列,初始值為0。NumericSeriesTotChgAvg(0):總變化平均值序列,初始值為0。NumericSF(0):平滑因子,初始值為0。NumericChange(0):價格變化值,初始值為0。NumericChgRatio(0):變化比率,初始值為0。NumericRSIValue:RSI值,用于存儲計算后的RSI值。計算邏輯初始化階段(當前K線數小于等于周期數減1時):計算NetChgAvg為當前收盤價與14根K線前收盤價的差值除以14。計算TotChgAvg為當前收盤價與前一根收盤價差值的絕對值的14周期平均值。計算階段(當前K線數大于周期數減1時):更新NetChgAvg和TotChgAvg使用指數平滑法,平滑因子SF為1/周期數。RSI值計算:如果TotChgAvg不為0,則計算ChgRatio為NetChgAvg除以TotChgAvg。RSI值=50*(ChgRatio+1)。二、RSI信號交易邏輯參數定義(新增參數)NumericStopPoint(45):止損點,此參數直接用于RSI交易信號計算。NumericProfitPoint(100):盈利點,此參數在給出的文檔中未直接用于RSI交易信號計算。NumericStopLossSet(30):止損設置,用于計算止損價格。策略交易邏輯入場邏輯:當不在多頭倉位且RSI值小于30時,以開盤價買入。當不在空頭倉位且RSI值大于70時,以開盤價賣空。出場邏輯:當持倉多頭且價格觸及入場價減去止損設置乘以最小變動點時,以該價格賣出平倉。當持倉空頭且價格觸及入場價加上止損設置乘以最小變動點時,以該價格買回平倉。持倉期間價格跟蹤:跟蹤并記錄持倉后的最高價和最低價,用于可能的止損或盈利計算。三、輔助邏輯集合競價和小節休息過濾:通過CallAuctionFilter()函數過濾不適合交易的時段。交易日志記錄:通過Commentary函數輸出交易相關信息,如最高價、最低價、入場價等。四、RSI交易系統通過計算RSI值來判斷市場的超買和超賣狀態,并據此生成交易信號。系統包含入場、出場邏輯,以及持倉期間的價格跟蹤和交易日志記錄功能。通過參數配置和邏輯設計,該系統旨在為交易者提供基于市場動量的交易指導。函數Average(求平均)代碼解釋:ParamsNumericSeriesPrice(1);//聲明數值型序列參數Price,賦值為1.//NumericLength(10);//聲明數值型參數Length,賦值為10.//VarsNumericAvgValue;//聲明數值型變量AvgValude。//BeginAvgValue=Summation(Price,Length)/Length;//這個Summation函數,就是:求10個周期的平均價格。//ReturnAvgValue;//把AvgValue值返回給主函數。//EndRSI指標代碼:ParamsNumericLength(14);//聲明數值型參數Length,初始值為14.//NumericOverSold(30);//聲明數值型參數OverSold,初始值為30.//NumericOverBought(70);//聲明數值型參數OverBought,初始值為70.//VarsNumericSeriesNetChgAvg(0);//聲明數值型序列變量NetChgAvg,賦值0.//NumericSeriesTotChgAvg(0);//聲明數值型序列變量TotChgAvg,賦值0.//NumericSF(0);//聲明數值型變量SF,賦值0.//NumericChange(0);//聲明數值型變量Change,賦值0.//NumericChgRatio(0);//聲明數值型變量ChgRatio,賦值0.//NumericRSIValue;//聲明數值型變量RSIValue。//BeginIf(CurrentBar<=Length-1)//假如當前k線數位小于等于14-1,執行花括號語句。//{NetChgAvg=(Close-Close[Length])/Length;//一樣的Close[Length],就是從當前K線數位倒推回去14根,則句子意思:NetChgAvg=(當前收盤價-前14根k線的收盤價)/14.//TotChgAvg=Average(Abs(Close-Close[1]),Length);//先說這個Abs,意思為返回參數的絕對值,參數絕對值是參數去掉正負號后的數值。所以Abs里邊的括號得到數值肯定是正數。Average函數,同樣的,就是把參數的絕對值跟周期,返回去求值,再把值給反饋回來就行。語句意思:TotChgAvg的值等于,求當前收盤價-去前一根收盤價的14周期均值。//}Else//就是第14根k線后的,執行下列語句。//{SF=1/Length;//隨周期變化的比重系數SF。//Change=Close-Close[1];//當前k線收盤價-前一根收盤價。//NetChgAvg=NetChgAvg[1]+SF*(Change-NetChgAvg[1]);//這回不用改成數學式的表達式了,直譯它,NetChgAvg=前一個NetChgAvg值+比重系數SF*(變量Change-前一個NetChgAvg值。)TotChgAvg=TotChgAvg[1]+SF*(Abs(Change)-TotChgAvg[1]);//同理,記得英文字符后的[1],意思都是從當前往回推,中括號里的值是根據你的需求改的。//}If(TotChgAvg<>0)//從上面公式求得的TotChgAvg數值,假如不等于0.//{ChgRatio=NetChgAvg/TotChgAvg;//變量ChgRatio值等于變量NetChgAvg值除以變量TotChgAvg值。//}else//變量TotChgAvg等于0的情況。//{ChgRatio=0;//等于0。//}RSIValue=50*(ChgRatio+1);//用上面的得到的值,根據這個公式,可以求出RSIValue的值。//PlotNumeric("RSI",RSIValue);//線RSI的值為RSIValue。//PlotNumeric("超買",OverBought);//畫出超買線,值為OverBought=70。//PlotNumeric("超賣",OverSold);//畫出超賣線,值為OverSold=30。//EndRSI信號代碼:ParamsNumericLength(14);NumericOverSold(30);NumericOverBought(70);NumericStopPoint(45);NumericProfitPoint(100);NumericStopLossSet(30);VarsNumericSeriesNetChgAvg(0);NumericSeriesTotChgAvg(0);NumericSF(0);NumericChange(0);NumericChgRatio(0);NumericSeriesRSIValue;NumericSeriesHighestAfterEntry;NumericSeriesLowestAfterEntry;NumericMinPoint;NumericMyEntryPrice;Numericmyprice;Numericmyexitprice;BeginIf(CurrentBar<=Length-1){NetChgAvg=(Close-Close[Length])/Length;TotChgAvg=Average(Abs(Close-Close[1]),Length);}Else{SF=1/Length;Change=Close-Close[1];NetChgAvg=NetChgAvg[1]+SF*(Change-NetChgAvg[1]);TotChgAvg=TotChgAvg[1]+SF*(Abs(Change)-TotChgAvg[1]);}If(TotChgAvg<>0){ChgRatio=NetChgAvg/TotChgAvg;}else{ChgRatio=0;}RSIValue=50*(ChgRatio+1);//集合競價和小節休息過濾If(!CallAuctionFilter())Return;If(MarketPosition<>1&&RSIValue[1]<30){Buy(1,Open);}If(MarketPosition==1&&RSIValue[1]>70){Sell(1,Open);}If(MarketPosition<>-1&&RSIValue[1]>70){SellShort(1,Open);}If(MarketPosition==-1&&RSIValue[1]<30){BuyToCover(1,open);}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));Commentary("MyEntryPrice="+Text(MyEntryPrice));MinPoint=MinMove*PriceScale;MyEntryPrice=AvgEntryPrice;If(MarketPosition==1){if(Low<=MyEntryPrice-StopLossSet*MinPoint){MyExitPrice=MyEntryPrice-StopLossSet*MinPoint;Sell(0,MyExitPrice);}}elseif(MarketPosition==-1){If(High>=MyEntryPrice+StopLossSet*MinPoint){MyExitPrice=MyEntryPrice+StopLossSet*MinPoint;BuyToCover(0,MyExitPrice);}}End信號代碼注解:Params//參數定義NumericLength(14);//計算周期NumericOverSold(30);//超賣閾值NumericOverBought(70);//超買閾值NumericStopPoint(45);//止損點NumericProfitPoint(100);//盈利點NumericStopLossSet(30);//止損設置Vars//變量定義NumericSeriesNetChgAvg(0);//平均凈變化值系列NumericSeriesTotChgAvg(0);//總變化平均值系列NumericSF(0);//平滑因子NumericChange(0);//價格變化值NumericChgRatio(0);//變化比率NumericSeriesRSIValue;//RSI值系列NumericSeriesHighestAfterEntry;//入場后的最高值系列NumericSeriesLowestAfterEntry;//入場后的最低值系列NumericMinPoint;//最小變動點NumericMyEntryPrice;//入場價格Numericmyprice;//價格Numericmyexitprice;//出場價格Begin//主程序開始If(CurrentBar<=Length-1)//如果當前柱數小于計算周期減1{NetChgAvg=(Close-Close[Length])/Length;//計算平均凈變化值TotChgAvg=Average(Abs(Close-Close[1]),Length);//計算總變化平均值}Else//否則{SF=1/Length;//計算平滑因子Change=Close-Close[1];//計算價格變化NetChgAvg=NetChgAvg[1]+SF*(Change-NetChgAvg[1]);//更新平均凈變化值TotChgAvg=TotChgAvg[1]+SF*(Abs(Change)-TotChgAvg[1]);//更新總變化平均值}If(TotChgAvg<>0)//如果總變化平均值不為0{ChgRatio=NetChgAvg/TotChgAvg;//計算變化比率}else//否則{ChgRatio=0;//變化比率為0}RSIValue=50*(ChgRatio+1);//計算RSI值//集合競價和小節休息過濾If(!CallAuctionFilter())Return;//如果不滿足過濾條件,返回If(MarketPosition<>1&&RSIValue[1]<30)//如果倉位不為多頭且RSI值小于超賣閾值{Buy(1,Open);//買入}If(MarketPosition==1&&RSIValue[1]>70)//如果倉位為多頭且RSI值大于超買閾值{Sell(1,Open);//賣出}If(MarketPosition<>-1&&RSIValue[1]>70)//如果倉位不為空頭且RSI值大于超買閾值{SellShort(1,Open);//賣空}If(MarketPosition==-1&&RSIValue[1]<30)//如果倉位為空頭且RSI值小于超賣閾值{BuyToCover(1,open);//空頭平倉}If(BarsSinceentry==0)//如果入場柱數為0{HighestAfterEntry=Close;//初始化入場后的最高值LowestAfterEntry=Close;//初始化入場后的最低值If(MarketPosition<>0)//如果倉位不為0{HighestAfterEntry=Max(HighestAfterEntry,AvgEntryPrice);//更新最高值LowestAfterEntry=Min(LowestAfterEntry,AvgEntryPrice);//更新最低值}}else//否則{HighestAfterEntry=Max(HighestAfterEntry,High);//更新最高值LowestAfterEntry=Min(L
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論