2014年8月11日 星期一

●外期 - 能源期貨 - 輕原油 [波段]

EasyTrader ArtNo 191
{ 策略產生器輸出一個高勝率策略 - 績效圖 }
     世界最早有關石油類產品的期貨契約,是由紐約棉花交易所於1971年所推出的丙浣期貨契約,但一直不受市場注意,直到1978年推出熱燃油期貨合約才算真正奠定能源期貨市場之基礎,隨後其他相關石油期貨契約紛紛出籠,但僅有NYMEX及IPE算是較成功的範例,1983年   NYMEX推出的輕原油合約更是大受歡迎,成為石油類期貨商品的主流,目前唯一能夠與其抗衡的只有英國倫敦的國際石油交易所(IPE)招牌商品布蘭特原油,因此我們選擇輕原油合約為能源類期貨的代表。
輕原油是目前世界上交易最活躍的商品期貨,在過去十年當中,由於其卓越的流動性及價格的透明度,紐約商業交易所(NYMEX) 所推出的此項期貨合約已經成為世界上交易量最大的商品,也深為國際間投資人及期貨玩家所喜好。投資人可以選擇在美國的Cushing, Oklahoma之現貨市場進行交割,也可以在國際的現貨市場上透過輸油管(Pipeline)進行交割,而由於其多樣化且便利的交割制度,所以相當方便於有實體交割需求的交易者。

輕原油合約尤其受到提煉者(Refiner)的喜愛,因為藉由提煉輕原油可以產生相當高價值的下游產品如無鉛汽油、熱燃油,石化燃料及航空燃料等。原油蘊藏量有限,隨著文明發展,消費量與日俱增,目前全球主要生產國有美國,加拿大,中東,委內瑞拉等,主要輸出國卻是政局相當不穩定的中東地區,印尼,及委內瑞拉各國,該地若傳出政變,罷工,衝突或油井意外事故,往往能令油價產生戲劇性波動。

價格影響因素

1.石油輸出國家組織(OPEC)的動向
主要有兩項觀察重點,即OPEC各國訂定之產量配額變動及遵守協議的態度與市場佔有率的變化。OPEC成立於1961年元月,目前有11位成員,下表為成員及其各自的市佔率資料

2.主要生產國的政經情勢及生產策略或提煉技術的變化
所謂主要生產國,乃指前蘇聯、美國、及沙烏地阿拉伯。在1990年以前以蘇聯產量最大,但共產勢力瓦解後產量大減,沙烏地阿拉伯則因波灣事件得以快速擴充產能,在1991年更佔有OPEC會員總產量的35%,而成為世界最大產油國。但OPEC國家仍掌握大部分油源,且可開採時間尚在100年左右,因此仍舊是一股舉足輕重的勢力。若以地區來劃分的話,可劃為六大地區,即北海、西非、地中海、中東、遠東及美國等。

3.戰爭,封鎖,禁運或經濟制裁的影響。如波灣戰爭,兩伊戰爭,以阿戰爭等。

4.油管和儲存槽的意外事故。

5.美國石油供需資料,特別是每週二美國石油協會(API)及周三美國能源部公佈的每週能源供需狀況變動表,尤其是美國原油庫存餘額的增減情形。由於目前美國是世界上最大的石油進口消費國,因此就需求面而言,此兩項數據的重要性可想而知。

6.太陽能,核能,天然氣等其他替代能源的發展情形,尤其是在環保意識抬頭後,天然氣更被視為最乾淨的能源之一,對原油的威脅大增。

7.政府政策及規範,如節約能源政策的推動及立法。

8.全球經濟狀況及工業發展需求情形。

9.季節性因素,一般來說無鉛汽油在每年的5-9月之間暑假旅遊旺季,價格有走高的趨勢;而熱燃油每年從10月到閣年4月間有走高趨勢天候狀況,特別是每年美國冬季時東部氣溫的高低,對其價格影響很大。

10.市場參與者行為預測,如各國基金,油品公司,航空公司及一般投機客等。
資料來源 - 元大寶來期貨資訊網


輕原油期貨 60 分K 留倉 交易週期 2008/04/16 ~ 2014/5/31 交易成本 美金 20 元




 60分K 測試程式碼

{ ***** System Code Start here *****}
{ Public inputs }
Inputs:LuckyNet(0),IntraDay(2), TradeStopLoss(0.052),TradeProfit(0.023) ;
Inputs:TradeInday(1),Time1SW(1),Time1B(400),Time1E(800) ;
Inputs:Time2SW(0),Time2B(900),Time2E(1300),Time3SW(0) ;
Inputs:Time3B(900),Time3E(1300),PositionSW(0) ;
inputs:Frac_LMM(3.30),NBar_LM(19),Frac_SMM(4.01),NBar_SM(7) ;

{ Public Variables }
Vars:Cond_LE(false),Cond_SE(false),CondNet_L(false),CondNet_S(false),
UBuy(0),USell(0),BuyStop(0),SellStop(0),BuyStopA(0),SellStopA(0),
NewBuyStopA(0),NewSellStopA(0),PL(0),PS(0),LastTradeDay(false) ;
Vars:TimeOK1(true),TimeOK2(true),TimeOK3(true),PosSW(true) ;

{ BuyMode Setup }
inputs:Bar_L1(30),NBar_LE(19),Frac_LE(2.05) ;

{ SellMode Setup }
inputs:Bar_S1(53) ;

{ Exit Long Position Setup }
inputs:NBar_LX(92) ;

{ Exit Short Position Setup }
{ BuyMode Variable Setup }
Vars:LE_ATR(0) ;

{ SellMode Variable Setup }
{ Exit Long Position Variable Setup }
Vars:LMM_ATR(0) ;

{ Exit Short Position Variable Setup }
Vars:TS_ATR(0),Trigger_TSA(false) ;
Vars:SMM_ATR(0) ;

{ ***** LastTradeDay ***** }
{LastTradeDay = _MagicQS268_LTD ;}

{ initial profit and loss }
if MarketPosition = 0 then begin
PL = AvgPrice*TradeProfit ;
PS = AvgPrice*TradeStopLoss ;
end ;

{ ATR calculate for code }
LMM_ATR = AvgTrueRange(NBar_LM);
LE_ATR = AvgTrueRange(NBar_LE);
SMM_ATR = AvgTrueRange(NBar_SM);

{ Entry and Exit prices }
UBuy = Average(Close, Bar_L1) + Frac_LE * LE_ATR ;
USell = Lowest(High,Bar_S1) ;

{ Long and Short Entry Condition Setup }
Cond_LE = (MOD(DayofMonth(Date),3) <> 1 and MOD(DayofMonth(Date),5) <> 2) ;
Cond_SE = DayofMonth(Date) <= 5 ;

{ Combine Trade Number in day }
Cond_LE = Cond_LE and EntriesToday(date) <= TradeInDay ;
Cond_SE = Cond_SE and EntriesToday(date) <= TradeInDay ;

{ Combine Trade time zone in day }
if Time1SW = 0 then TimeOK1 = true else TimeOK1 = (time >= Time1B and time <= Time1E) ;
if Time2SW = 0 then TimeOK2 = true else TimeOK2 = (time >= Time2B and time <= Time2E) ;
if Time3SW = 0 then TimeOK3 = true else TimeOK3 = (time >= Time3B and time <= Time3E) ;

Cond_LE = Cond_LE and TimeOK1 ;
Cond_SE = Cond_SE and TimeOK1 ;

{ Check Position status for entry}
if PositionSW = 0 then PosSW = true else PosSW = (MarketPosition = 0) ;
Cond_LE = Cond_LE and PosSW ;
Cond_SE = Cond_SE and PosSW ;

{ Entry Long orders }
if Cond_LE then Buy next bar at UBuy Stop ;

{ Entry Short orders }
if Cond_SE then SellShort next bar at USell Stop ;

{ Exit orders, long trades }
If MarketPosition > 0 then begin
PL = EntryPrice(0)* TradeProfit;
PS = EntryPrice(0)* TradeStopLoss ;
If BarsSinceEntry = 0 then begin
BuyStop = EntryPrice - Frac_LMM * LMM_ATR;
end;
SetStopLoss(PS * BigPointValue) ;
SetProfitTarget(PL * BigPointValue) ;
if BarsSinceEntry >= NBar_LX then Sell next bar at Market ;
end;

{ Exit orders, short trades }
If MarketPosition < 0 then begin
PL = EntryPrice(0)* TradeProfit;
PS = EntryPrice(0)* TradeStopLoss ;
If BarsSinceEntry = 0 then begin
SellStop = EntryPrice + Frac_SMM * SMM_ATR;
end;
BuytoCover next bar at SellStop stop;
end;

if IntraDay = 0 then SetExitonClose
else if IntraDay = 1 and LastTradeDay then SetExitonClose ;
{***************** End of Strategy ************}

輕原油期貨 15 分K 留倉 交易週期 2008/04/16 ~ 2014/5/31 交易成本 美金 20 元




{********************}
意料之外的績效曲線
輕原油期貨 15 分K 留倉 交易週期 2008/04/16 ~ 2014/5/31 交易成本 美金 20 元




歷史資料來源 : 追日全球歷史數據下載

0 留言:

張貼留言

如果有私人問題想請教,請透過網站右方『與站長聯絡』之表單,謝謝!

----------------------------------------------------------------------------------------------------
網站聲明(Disclaimer)
本教學網站內所提供之程式碼(包括函數、指標、訊號)屬開放程式碼,用意在於讓使用者學習程式語法之撰寫,使用者可以任意修改語法內容並調整參數。本網站所有之內容(包括文章、影片、歷史紀錄、程式碼、教材)限用於個人學習使用,請勿轉寄、濫用,嚴禁私自串接帳戶交易。
-------------------------------------------------------------------------------------------------