【MT4 程式(Program)專業代寫服務】
LMAX Exchange – FX trading




免責聲明 »
凡本網站註明來源網絡或其他網站,均為轉載稿,本網轉載出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其內容的真實性,也不構成任何投資建議。對於訪問者根據本網站提供的信息所做出的一切行為,本網站不承擔任何形式的責任。本網站僅提供經濟信息,並僅供參考;亦不提供證券、基金、銀行、保險、金融任何業務與服務;不推薦任何相關商品和服務;不與任何人簽署任何海外證券投資協議,不進行海外金融產品交易,不接受任何人投資資金。

2014/08/13

分享: facebook
最近蠻常被問到這個問題的,直接寫在這裡囉~
這是利用multicharts 自訂期貨功能去把每個月合約組成連續月
可以設定換月日期及遠近月價差調整,在台指上我們都習慣用資訊商提供的連續月換月方式就是結算日後才換,
但如果是做國外商品期貨通常離結算日前幾天近月的成交量就很少了
如果還是用結算日才換月組成的連續月資料,無論是用在回測或實際交易都是不適合的.
這類期貨資料我們需要自行用適當的換月日,組成連續月來使用~
以下使用比較常用的 interactive broker TWS 舉例
資訊源: interactive broker
下單到:interactive broker
其它資訊源及下單的期貨商都可以此類推.

A. 組成連續用並做資料回補,以PL(白金) 為例子
在做以下步驟前,先把MC 要跟TWS or IBG 串接設定好.
1.打開QM->新增商品->從數據源取得->interactive brokers
商品源找 PL (白金是PL)
圖片 1  
2.接下來選工具->期貨商品代碼表->interactive brokers,按新增
圖片 2  

接下來就照著該商品合約,規格寫,如白金交易月份為:1,4,7,10 ,結算日為倒數第三個交易日
說明那欄內容就寫自己高興的(要英文)
圖片 3  
這邊比較要注意的是結算日的設定,內建就有不少規則可以選,但像這個例子是倒數第三個交易日
內建沒有這個規則,所以要自己新增一個.
按編輯:
倒數第三個交易日,就從下個月第一天往前數3天,如下設定.其它以此類推都可以設定出來
圖片 4  
3.完成後就到QM->所有自訂期貨->新增自訂期貨
圖片 5  
商品源選剛從代碼表新增的PL,設定及交易時段這兩個都不用去填,會直接從代碼表內讀取
除非有特別要讓組出來的交易時段不同,才需要去改.
這裡是提前8天就換月,換月調整模式是選不去調整價差(也可以選差值,去做換月調整)
圖片 7  
4.接下來去Multicharts 開圖新增自訂期貨資料,就會開始回補資料並依設定條件組成連續月
圖片 8  

圖片 9  

B.使用自組連續月為資料源下單到近月合約
連續月組好後,下單設定就很簡單了
執行策略後,按商品轉換
圖片 003  

在這之前先確認沒有沒連線到IB
圖片 11  
接下來在商品轉換按新增,如果已經有名稱就直接使用,不需再新增一次
圖片 12  
在圖表代碼那格選圖形上的名稱
圖片 13  
下單代碼選要下單的月份合約名稱
圖片 14  
圖片 15  
最後按下自動交易,就可以下單啦.
這做法就是把資料源名稱和下單商品名稱分開~
資料來源:程式交易

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
分享: facebook
All Data Everywhere ,跨圖表資料傳送.原本是使用在Tradestation上

而跨圖表資料傳送可以幹嘛?
運用上很多, 如多策略口數控制,不同商品的套利策略(下單時間先後,當然也可以用下單機搞定)
但如果沒有要回測只是指標數值在不同圖表間互傳
那用內建的
GVSetNamedDouble (把要傳的值放入籃子裡)
GVGetNamedDouble (從籃子裡拿值出來用)
就可以了~

如果是像標題:連賠N次後才實際進場,並想要回測
那就必需用到ADE.
這個方式就是:
開兩個圖A,B,執行相同策略.圖A策略賠N次後送出允許訊號給圖B,圖B的策略才可以下單
那A送給B的訊號,就是用ADE來溝通.
(ADE 會呼叫DLL,卷商版的這個功能被鎖住了,如果是卷商版的無法使用,或是用特別的辦法去呼叫DLL..)

要用ADE首先要做一些設定方式

如果是裝64位元的,下載這個DLL取代原本的
剛下載的檔案內就有詳細的英文說明
Please perform the following steps to install ADE:

Install ELCollections as described in the “Collections for EasyLanguage” topic on TSW.
Create a directory called C:\ADE. This is the ADE root directory. You can use a different name and/or a different drive, but if you do, see Step 6 for additional instructions.
Create the following subdirectories in the ADE root directory:

C:\ADE\Data
C:\ADE\Classes
C:\ADE\Code

This is an important step. ADE uses these subdirectory names, and some functions will not work correctly if they do not exist.
The root directory name (C:\ADE) can be different, but the subdirectories must be called “Data”, “Classes”, and “Code”.
Extract the ADE.zip file into the ADE root directory. Some of the files used by ADE must be in the ADE root directory,
so this is the simplest way to ensure that they are there.
Move the OHLCV.txt file into the Classes subdirectory.
Import the AllDataEverywhere.ELD file into TradeStation.


如果不想看英文, DK有寫中文設定說明.
照著設定就可以了.

如何用?
(如果以下這邊看不懂,直接跳過從下面的圖示開始看)
說明檔內有舉個例子,使用在兩個圖表分別是5分和30分K 之間的RSI,ADX 指標傳送(30分的指標顯示在5分K上)

指標程式,執行在30分K的圖上,從30K上拿RSI和ADX資料
Vars:
   Class(“ADX&RSI”),   // identifies our metrics with a unique name
   InfoMap(MapSN.New); // used to pass data to ADE

// Put the information we want to store in our InfoMap
Value1 = MapSN.Put(InfoMap, "ADX", ADX(14));
Value1 = MapSN.Put(InfoMap, "RSI", RSI(Close, 14));

// Tell ADE to store this info for the current symbol and bar interval
Value1 = ADE.PutBarInfo(Class, GetSymbolName, ADE.BarInterval,
   ADE.BarID, InfoMap);

把拿到的RSI和ADX資料放到5K圖上並畫出來
Inputs:  Interval(30);
Vars:
   Class(“ADX&RSI”),   // identifies our metrics with a unique name
   InfoMap(MapSN.New), // used to retrieve data from ADE
   MyADX(0), MyRSI(0);

// Retrieve the info for the current symbol and bar interval into InfoMap
Value1 = ADE.GetBarInfo(Class, GetSymbolName, Interval,
   ADE.BarID, InfoMap);

// Fetch the values from the InfoMap into variables
MyADX = MapSN.Get(InfoMap, "ADX");
MyRSI = MapSN.Get(InfoMap, "RSI");

// Plot them
Plot1(MyADX, "ADX");
Plot2(MyRSI, "RSI");

==========================================================================================
以下為簡化版
如果上面的例子看不懂,且沒有要用到多對多,或雙向互傳,
只要使用到一對多,單向送資料(單圖運算結果,單向傳給多圖)
可以從下面說明開始看:
為了方便使用,我寫成兩個函數
ADE.Put
ADE.Get
以下用圖形說明這兩個函數
可以想像成一個載具(車),把值(人)從這個圖送到另一個圖.
2013-12-26_210201  

2013-12-26_204502
以下實際用程式舉例:
1.5k電子期的RSI值,顯示在1k台指期上

從5k 電子期上拿值(rsi)
vars: var1( 0 );
var1 = RSI(close,14);
value1=ADE.Put(var1,0,0);
將這個程式執行在電子期上得到rsi值
ADE.Put(     ,     ,     )->可以運送3個值,把要運送的值填入就行了
這裡是填入var1 就是rsi值,剩下兩個沒用到就寫0
 ==========================================
丟值出來在台指一分k圖上,並畫出來
vars:var1(0),var2(0),var3(0);
value1=ADE.Get(5,var1,var2,var3);
plot1(var1);

將這個程式執行在台指期圖上,就可以得到電子期的RSI值
ADE.Get(Bar_Type,var1,var2,var3)
->第一格填入送值過來的圖形k線週期,從5k電子期上拿的所以寫5
之後的三格就是要送出來的值啦
var1->rsi ,var2->0 ,var3->0
再把 var1畫出來就 ok 了.
很簡單吧  ^^
2013-12-26_212111  


2.連賠N次後才實際進場
有些勝率很低的策略,是靠幾次大賺來補小賠的金額,
這種策略有些特性是:大賺後都會有一直小賠的過渡期.
這時候就會想能不能大賺後先不要下單,等賠個兩三次後再下單呢?
+
程式方法如下:
用簡單的均線策略說明:
策略:
inputs:LengtH1(20),Length2(80);
vars:a1(0),a2(0);
a1=XAverage(close,LengtH1);
a2=XAverage(close,Length2);
condition1=a1 Crosses Above a2;
condition2=a1 Crosses Under a2;
//===
if condition1=true then Buy ("Long_in" ) next bar at market ;
if condition2=true then sellshort ("short_in") next bar market ;

將這個策略改寫成兩個,一個正常執行,但記錄賠錢次數,一個用這個條件來限制是否要下單
2013-12-26_204514

正常執行的程式,加入記錄程式碼
inputs:LengtH1(20),Length2(80);
vars:a1(0),a2(0);
a1=XAverage(close,LengtH1);
a2=XAverage(close,Length2);
condition1=a1 Crosses Above a2;
condition2=a1 Crosses Under a2;
//===
if condition1=true then Buy ("Long_in" ) next bar at market ;
if condition2=true then sellshort ("short_in") next bar market ;
//============ADE=======================================
vars:var5(0);
if positionprofit(1)>20000 then var5=0;
if positionprofit(1)<0 and positionprofit(2)<0 and positionprofit(3)<0  then var5=1 ;
value1=ADE.Put(var5,0,0);

->單筆賺超過2萬,讓var5=0,如連賠3次後讓var5=1 把var5值放上車

另一個有限制的策略程式
inputs:LengtH1(20),Length2(80);
vars:a1(0),a2(0);
vars:var1(0),var2(0),var3(0);
value1=ADE.Get(30,var1,var2,var3);
if var1=1 then begin
a1=XAverage(close,LengtH1);
a2=XAverage(close,Length2);
condition1=a1 Crosses Above a2;
condition2=a1 Crosses Under a2;
//===
if condition1=true then Buy ("Long_in" ) next bar at market ;
if condition2=true then sellshort ("short_in") next bar market ;
end;
 當傳過來的值等於1才執行,就是用傳來的值判斷這個策略要不要run

最後,開兩個相同的30k圖,分別執行這兩個策略
一個就是正常策略,一個就是大賺後賠三次才進場的策略
可以跑回測看報表績效如何.
如實際交易要用這種方式就一個開自動交易(有限制的),另一個不要開(要記錄值的)

還有很多可以運用的,如20個策略但最多只想同時有10口單,或破MDD後自動停止下單,等績效回來後再開始自動下單
(這也是用兩個圖執行相同策略一個有開自動交易,一個不要開->用來記錄是否破MDD或績效又起死回升丟值控制有開自動交易的圖下單,
當然也可以做回測)
另外還有賺多少後自動做口數調整等等比較複雜的資控,大部份都可以用這種方式達成~

 那兩個函數下載在 這裡

簡單的功能可以直接用,要較複雜的就不能用這個兩函數囉.

資料來源:程式交易
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

分享: facebook
一直以來看盤都是用tradestation 或muliticharts,.
算是比較自由,可以增加自己想要功能.
加上自己不看用價格運算的技術指標.
使用到的運算一般看盤軟體是沒有的,需要自己寫.

分享一個小程式,在圖表上畫趨勢線後,如果價格碰到線後發出警示聲.
提醒自己要注意.
因為有時盤很無聊不太動(如現在的台指),一直專注看還蠻累的.
可以讓程式分擔一下~
這程式很簡單,就是用tl_setalert 這個函數.
程式可到這 下載

程式說明:
參數:
touch_mode: 可填入1 或2
1 :k棒進行中,價格一碰線就警示.
2 :k棒跑完收盤價確定有穿過線才警示 

匯入後,
顯示設到副圖一
2013-11-24_105620  

並把警示打開
2013-11-24_105649  

接下來就可以畫線,價格碰到就會叫啦.
2013-11-24_111416  

把程式指標改成訊號後,畫線開自動交易就可以玩破線自動買賣了.
當然MC 7以上就有圖表交易了,但那只限於水平線價格突破
如果是斜線或三角收斂的突破,或什麼很主觀的型態,就可以手動畫線,利用這方式讓程式進場啦
算半自動吧~
訊號就會用到tl_getvalue 這個函數去讀現在趨勢線的價位.
接下來就可以用crosses over/under 或用at price stop 觸價進場.
編寫不難,會花較多時間在測試修正出自己想要的效果~
可以試著玩玩看啦.
2013-11-24_111846  
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

分享: facebook
之前在這篇 寫過利用dataN 的方式顯示多週期指標
那如果要加入訊號判斷或箭頭標示呢?
有兩種方式:
1.of dataN
2.利用陣列將主圖K線,組成其它長週期做運算.

一般看到常用的應該是 of dataN的方式
如 RSI(Close,14) of dataN;
(N=2,3,4....)
去抓其它週期的指標值.
優點是:
運算快速,編寫簡單
缺點是:
因為使用of dataN ,所以要DataN K棒Close,其值才會做運算變動.
如使用5分K配合60分K,遇到開盤跳空60分K的RSI要9:45數值才會反應
以下特別注意:
1.需將運算式寫成函數,再加上 of DataN.(如SlowKD( ) of dataN)
2.在訊號編寫時如有用到前一根指標值[1] ,或是DataN 資料的,都要加上of DataN

那如果要即時的指標反應,那就要利用陣列做編寫了.
只要一個資料就行,不需要其它dataN
不過缺點就是:運算慢,編寫複雜

如果是短長週期差異較小,建議用of DataN 就行了,若週期時間差異較大可以使用陣列的方式.

以下SlowKD 使用三種方式畫出的比較圖,有好有壞
可以比較看看~
2013-07-27_104656    

  2013-07-27_111236  


最後附上SlowKD 利用陣列編寫的多週期指標
可以自行修改成MACD,RSI,CCI..等等
因有包含函數,直接下載匯入吧~

參數說明:
Interval:
主圖如果是1分k,要顯示5分k就寫5,顯示60分k就寫60,
主圖是5分K要顯示60分K就寫12.....依此類推
要顯示日線則寫  -4
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
分享: facebook
有些商品較適合逆勢策略,像ES,YM 就是.
以下分享一個用在ES上的逆勢策略,也可直接套用在YM

ES這商品在長週期來看還是有大趨勢的,這裡說適合逆勢策略是指:
雖然長線走的是順勢,但在短週期內上下震盪是很大的,導至一些順勢策略很容易在這種行為上被掃出場

一般趨勢的形成可能會有以下3種走勢,而"第3種"是ES較常出現的走勢,而且上下震盪都蠻大的,我們就可以利用這個行為慣性來獲利
但ES少部份時間走勢還是會變成第1種和第2種.這時就會賠錢了,但只要把最大風險控制住就行了.
圖片 1  
接下來,我們就可以利用第3種常發生的走勢來制定策略.
最簡單的方式就是利用震盪指標: RSI,SKD,CCI,DMI....來捉逆勢轉折,當然也可以再配價格轉折( swingHigh,swingLow)
效果會更不錯,這裡我簡單利用CCI 指標做一個策略.

圖片1  

進場條件:
15分K
兩個參數:1.CCI  週期:Len ; 2. CCI 上下值:+N,-N
當CCI 大於+N 放空
當CCI 小於-N  做多

出場條件:
主要:
1.移動停損利
空單出場 :進場後價格創新低時,取 maxlist(h,h[1])*(1+0.007) ,掛STOP 單
多單出場 :進場後價格創新高時,取minlist(l,l[1])*(1-0.007) ,掛STOP 單

2.另一邊方向出現時,平倉順便反手.

3.進場價的2%停損.
在移動停損利還沒啟動前,做為保護用.
我是進場後過5根k棒才啟動移動停損利機制,也可以寫獲利maxpositionprofit>一定值後啟動


特別注意:
這裡進場是用 limit
buy next bar at open limit;
因為是做逆勢,掛limit出去的價幾乎都可以進場.但在回測時記得到把這個選項調整成穿價一點才成交
這樣回測不會失真(因為實際有時是觸價會不成交)
圖片2  

手續費來回設:5美元
滑價單邊1點,來回2點( es掛單量是很大的)
圖片 2  

回測績效結果如下:
K棒週期15分鐘
2008~2014/3
圖片 3  
圖片 4  
圖片 5  
最後一個小技巧:
剛提到出現第1,2種情況時會被一直巴(如下圖),所以可以加入:當被停損時,等個幾根k棒再進場.
圖片 6  

以上績效確實是由文章內所說的進出場方式寫成程式跑出來的,再加上最後所提的小技巧
但這個如果有去觀察進出訊號應該可以發現並改進的,或許可以有更好的方法
這策略可以直接套用在YM 上,有興趣可以試試看囉~

rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr



分享: facebook
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
一直以來價格和指標的背離是我們常用的判斷方式,

分享簡單的一個方法,當價格和指標發生背離時,

由程式直接在圖上標示出來,做為提醒或是下單判斷~

雖然我們可以很清楚在圖上指出那裡是背離,

但如交由電腦判斷就要轉換成電腦看的懂的語言,

這部份並不難只要把條件列出,

剩下的就是看我們使用什麼程式語言去寫了~

以下用KD 多頭背離做例子:

背離判斷方式每個人都不盡相同,

我是以轉折點做判斷

如下圖,A1,A2各為價格轉折點,A2價格大於A1,

但底下的KD(%D)值B2




那如何轉成電腦語言呢?

這樣做:

1.當KD指標產生一個轉折時,找出上方最高價格,並記下來.

判斷轉折如下圖所示: 當D2>D1 且D3


2.比較相鄰兩個轉折點及價格大小,如A1>A2 但B1 d1[0] then begin

KD=d1[2];

price=highest(close,8);

{找出轉折發生時,往後8根價格的最高值}

b=barnumber;

end;

{以上就是條件1的程式語言,加入b=barnumber ,

讓電腦記住轉折點是在第幾根K棒發生的}

Gap=b-b[1];

{算出兩次轉折點中間有幾根K棒}

if KD price[1] and Gap>8 then begin

plot1(high);

end;

{以上就是條件2的程式語言,加入兩次轉折要隔8根K棒才算數 }
好~完成,結果如下,看來還不錯~
這只是一個基本範例,可以再加入許多有趣的判斷,修改.
當然也可用在MACD,RSI等.





vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
分享: facebook
這幾天有朋友問到: 如何將均線的強弱力道判斷出
之前有用到角度或斜率的方式來定義強弱,以下為說明及指標程式,可以參考看看囉
有更好的方法也歡迎分享.

參數說明:
avg_length :均線週期
X_Length : 底邊長度 (就X軸,要用幾根K棒)
slop_or_angle : 0 or 1 ,寫0就是算出斜率,寫1就是算出 角度

執行後:
週期為40的藍色均線,底邊取20根 k棒長,計算出來現在角度是50.59度
有了角度判斷,應該可過濾掉一些noise
所以在條件判斷上可以加上:
當短均線大於長均線且短均線角度(力道)大於一定角度時,then buy next bar at h[1] stop;
圖片 1


eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 想請問一下,如果要把均線跳空或跳高的部分剔除,也就是中間的gap不列入均線的計算,這樣的構想大概要用神麼方法寫呢?
回答直接寫在這吧~
很簡單,只要把每天跳空的值加起來,然後扣掉就行了
程式:

vars:KC(0),KL(0),KH(0),KO(0),COLOR(0);
value1=OpenD(0)-closed(1);
if date<>date[1] then value2=value2+value1;
KC=close-value2;
KL=low-value2;
KH=high-value2;
KO=open-value2;
if KC-KO>0 then color=red else color=green;
plotpb(KH,KL,KO,KC,"",color );
執行後就會得到下圖:
2013-04-27_214800 


再把均線加上:
value3=Average(KC,60);
plot5(value3);
執行後就會得到下圖:
2013-04-27_215218