You are on page 1of 418

n4

面m·l

1'[
本書附有附件,
讀者可在服務台 ......'I.,


:'

借用 。
This book comes
with accompanying '—
material(s), which 百 1苜此只科E

is/are available for en renewing


borrowing at the omoanvino ;.,.,,
service counter.
~ .,'- ;, -i_
"

·一
.s ?

'
:'· `

',

•• . .. -· ·-
.-

...

563.23
_- ',',J
···
"

U- ` `

.. 1_ i
e香'3


..

I
f

c
【···可

4634
轡脷叩
l,

港山山川一

L
#、


Z,[

c
u u

1, ·
_
""

..
'3茄.

詐騙集團吸金的運作模式!
.d'

=
. 8 88

8

--
寰宇債劵鼴幣 388

外匯套利 II
套利實戰策略與風險掌控

楊 宗 桓著

附唯讀記镱光碟寸寸 :

述三3.2
寰宇出版股份有限公司
388882s3 1 08124 IN
一一一
推薦序 05

自序 06

口 建立正確外匯交易市場觀悆 ',
1-1 正確之外匯知識 20
1-2 透過外匯名義行使詐騙之各類手法 36

1-3 您對您的外匯經紀商知多少 5.6

1-4 外匯市場的整體產業人員之利益結構詳細剖析 74

. . 外匯交易平台工具再說明 79

2-1 新版 MT4 Build 600 十重點介紹 ,。

2-2 使用者必須知道的幾個 MT4 相關知識 &'5

2-3 MT4 Build 600 十之免費交易系統跟指標 95

`套息交易策略 99

3-1 套息交易策略概念及介紹 /00


3-2 套息交易策略風險與實務操作方法 /07

3-3 套息交易策略之程式交易方法 117

馬 T格爾策略及變異馬丁格爾策略 123

4-1 馬丁格爾策略概念及介紹 124


4-2 馬丁格爾策略風險與實務操作方法 130
4-3 馬丁格爾策略程式交易方法 135'
4-4 變異馬丁格爾策略概念及介紹 147
4-5 變異馬丁格爾策略風險與實務操作方法 152

4-6 變異馬丁格爾策略程式交易方法 155'


疇 Blessing 程式 全球下載率最高免費自動交易軟體 163

5-1 Blessing 程式開發 164


5-2 外部參數以及架構說明 169

5-3 主程式各類模組介紹 200

`反馬丁格爾策略 277

6-1 反馬丁格爾策略概念及介紹 275'


6-2 反馬丁格爾策略風險與實務操作方法 2&'6

6-3 反馬丁格爾策略程式交易方法 293

`連動交易策略 297

7-1 連動交易策略概念及介紹 295'


7-2 連動交易策略風險與實務操作方法 310

7-3 連動交易策略程式交易方法 322

`三角套利策略 333

8-1 三角套利策略概念及介紹 334


8-2 三角套利策略風險與實務操作方法 347

8-3 三角套利策略程式交易方法 3S6

疇曰全球資金流交易策略 361

9-1 全球資金流交易策略概念及介紹 362


9-2 全球資金流交易策略風險與實務操作方法 369

9-3 全球資金流交易策略程式交易方法 37.i'

電結論 3%9

401
附圖資料來源說明
推薦序

暢宗桓先生是我十分敬重的實戰型外匯投資理財專家,畢業淤電機工

程博士,多年來著力淤外匯程式化交易硏究 , 獨有一套自己的交易風格。

暢博士偏好淤各類套利理論及方法學,以低風險及低獲利的交易模式 ,

創造長期穩定的正赧酬。

近年來,楊博士為廣大的投資者開設了諍多外匯教學課程,努力不悔

她向投資者傳遞正確的交易方式、投資理念及心態。

除了一般的外匯碁礎課程的培訓 , 暢博士也透過自己的著作、授課丶

演講及部落格等方式,不斷的專注淤推廣外匯程式交易,希望提升國內交

推蘆序
易者的交易水平 , 並且建立一個好的投資環境。

多年來, MT4 交易平台受到全球外匯交易者所喜愛,其豐富且 人 性化

的功能及獨有的 MQL4 程式交易語言,可讓交易者 24 小時進行各種外匯交

易策略,其中包括 24 小時全自動交易。椅博士五年前的箸作《外匪套利 I 》
深受讀者所喜愛,這次出版《外匯套利 II : 套利實戰策略與風險掌控》以

• 深入淺出的方式呈現,並透過實務經檢的分享引導讀者在最短的時間內進
入外匯交易領域。

本書理論及實務兼具,本人深感榮幸應暢博士之邀作序 , 也相信對淤

鐨硏此領域的投資者有所助益。

Blackwell Global 集困
執行總裁

Michael Chai

_
05
自序

自從筆者的第一本《外匯套利 I 》在 2011 年 6 月出版第一刷以來,直


到今天才出版第二本《外匯套利 II : 套利實戰策略與風險掌控》,相隔了
將近五年的時光。這五年來,不僅國際外匯市場產生相當多的變化,甚至 帚
發生「瑞郎原爆」的「外匯市場黑天鵝事件」,而台灣的外匯交易環境也
超了很大的變化。好消息是,比超五年前,更多台灣投資者以及華人圈的

投資者對外匯投資越來越熱咯。壞消息是,比超五年前,外匯詐騙事件依

然層出不窮,同時,台灣的「零售外匯 (Spot Forex) 全融法規」跟五年前


比超來,完全沒進步。

筆者在第一本書籍出版時已經公開對政府呼籲相關的外匯全融應該要
跟國際同步,因為外匯全融在國際上已經是一個很成熟的「全融產業」,
五年過去了,台灣投資者都進步了,但立法院及政府機構看來逗是原地踏

步。不過台灣人很聰明,自己會想辦法透過各類管道獲取自己想要的資訊,

可惜的是,整個龐大的外匯全融產業的手續費幾乎都被境外的外匯經纪商

賺走,而台灣法規不健全的下場就是「外匯詐騙事件」更多。例如利用「保

譖固定報酬」的宣傳廣告做吸全的行為,因為法規不健全,加上資訊不透
明,行騙者喜歡利用「外匯交易」名義行使詐騙的手段。類似新聞事件裡
的「島勝全融集團吸全」、「 Power 8 吸全」、「外匯青年軍」等等打箸外
匯名義卻行使非法的全融犯罪新聞一直沒有中斷過。這真的是令人惑到遺
憾的事實。所以,對淤外匯投資新手而言,一定要遠離利用廣告行銷口號
來吸引投入資全的團體,尤其是打著「保讒固定赧酬」的商品,幾乎可以

晰言這些團體清一色都是吸全詐騙人員。

-I
《菜根譚》捏的一句名言:「大惡多從柔處伏,哲士須防綿裡針。深
仇當自愛中來,達人宜遠刀頭蜜。」
外匯金融是高度風險的投資,不是遊戲

在外匯市場禋,報酬是「波動」的才是合理的,而「保證固定赧酬」
這個言詞根本就「不存在」淤外匯市場。我們做任何投資,要關注的應該
是「合理」兩個字。「合理」的赧酬,「合理」的風險,與「合理」的利
益分配架構等等之邏輯推論。

事實上,許多讓投資者捅不欲生的詐騙手法,主因還是在淤投資者本

身對淤該項「全融商品」的架構及有經過「合理」分析,只看到了「利益」、
以及誘使你入甕的假造「漥明文件」、與行銷人員三吋不瀾之舌的「保讚」。

自序
「合理」的分析為何重要呢?因為只要經過「理性合理」的分析,那些「偏
離事實」或「可達成性」幾乎等淤零的投資两品,強烈建議可以直接放棄,
因為可能有鬼。

世界偉大的投資家兼恙善家巴菲特 (Warren Edward Buffett) 的名言就


是:「假如一家公司的財赧讓我看不懂,那就表示它不想讓人看懂」,而

巴菲特的波克夏· 海瑟威公司 (Berkshire Hathaway) 的平均年度報酬率


• 是 23% 左右。一個全世界最偉大的投資公司跟投資家每年的年度報酬還不
到 24%, 也就是說,若換算成月赧酬更是低菸 2% 。而網路上充斥箸「日戟

酬 1% 」或號稱「月赧酬 20% 」的外匯團體,有的還「掛保讒」,投資者難


道一點都不會感到驚恐嗎?外匯老手都很清楚,有時整個月的國際外匯市
場幾乎像一攤死水,完全沒有波動,那既然市場完全沒有波動,「固定日

報酬 1% 」或號稱「固定月赧酬 20% 」的這個報酬要怎麼生出來?其實只要


先冷靜把行銷人員的推銷擺一逞,稍微用推理的方式來分析,就可以很清
楚知道,這類言可,都是很明顥的謊言跟吸全詐騙。

_
07
外匯生意在世界上都是合法的交易生意 , 只不過每個國家的開放幅度

不同而定義上有差距,但再怎麼說,做生意還是要老老實實,更不能利用

資訊不對稱做出傷害投資者的行為。賺錢真的不能建立在讓客戶冒風險 ,
客戶賠光後再找另一批客戶這種 心 態。外匯金融是高度風險的投資, 它 不

是遊戲 !

投資者在進入外匯市場之前 , 先要有正確的外匯市場觀念。外匯零售

市場 ( Forex Spot Market ) 不能算是「投資」,這個市場是名符其實的「投


機」市場。因為外匯零售市場 ( Forex Spot Market ) 是保讒全市場 ( Margin
Market ) ' 有高度槓桿 ( High Leverge ) 的特性,其市場交易風險比超期貨丶
股票而言,不僅更高且更難預測,雖然而獲利高風險迷死很多 人, 但傾家
自序

陽產其實是大有 人在。

以 2015 年 1 月 15 日發生的「瑞郎原爆事件」為例。 2015 年 1 月 15


日當天台北時間下午在全世界投資者都毫無 心 理準備的情尤下,瑞耶對美

全報價瞬間直線升值了將近 26% 。 USDCHF 的報價從 1.02112 突然變成


0 . 75808 。瑞耶報價「瞬間」狂漲 26% , 如果轉換成台幣概念,那就是假設
台幣對美全是 30 : 1 的兑換匯率,在下一秒且國際市場在沒有任何預警情

,u 之下瞬間突然赧價叟成 22 : I 的兑換匯率。請看以下三個圄示。

08
USDCHF- 美金瑞郎

,..,'".~
u

7 1,--- 一·
n,lt,..,,,,J',,._/11"1,,ui'
,.,. ,,,
「|
I' 11
,,」 I \;-•'\ i11''\.i-11,.,
1,,.\ r'\_/ r• '\• 1) 戸
.,_,,「.,., 11•·~1,.-,t •,I' ,'I「,,
,........,lh r'l4,.,,.,.,
,,,.....,.•...1

I
丨r1,1

自序
EURCHF- 歐元瑞郎

···•····--一········ ·· ·····• ·· ··•····.... .. .I•···· 一 ·······- -··,

'' .', '· '


一二

' '
I
, .'·'`
'' h ` · ' ',~`~ ', '' `, ', ,'''' '. ,·, '', .' . ,.
L
'.I J . `.~, ' I i

I r

_
09
GBPCHF- 英鎊瑞郎

l怕 ,••,1·•·..1 .,., ··11 ,,...1,·•··,,1 r'·····ri·•,.•-·'


j.• -z
1.,1,·
'' , `r '
,
r

-
''
1
t' . ', I
|


, ,
·


____- nn ' "' !

, ' '
j , 1.· r 1L
;

.I
!

1,'
. .
!

~

`鬬--~-·-卹口一正庫-·-鸝·--·-富,蛐璽,.富,.富`.鸕·薑靄.......... ,............. 富·-富,. 富

世界上所有交易 「 瑞耶相關貨幣對 」 的投資者幾乎都受到嚴重的虧

損 。 除了放空瑞耶的策略之外,尤其當時如果有使用連動 「 EURUSD­

USDCHF 」 、 「 GBPUSD-USDCHF 」 、或 「 GBPCHF-EURCHF 」 策略的投


責者恐怕連逃命的時間都及有 。 這個事件讓全球將近百萬個外匯投資者帳

戶瞬間化為鳥有,還產生帳戶餘額是負值,也就是 「 負淨值 」 的荒謬現象 。


這個事件也讓全球第五大外匯經纪商 Alpari UK 當天倒閉,更讓全球最大
的外 匯 經紀两 FXCM 必須向外求援,以月息 10% 代價對外借了 10 億美金

來度過難開 。 幾乎所有世界的大型銀行,包含花旗銀行、德意志銀行、摩
根銀行等等都虧損數以億計美金,更有許多外區對沖基全在事件發生的同
一天即宣告破產 。 那誆在此事件當中得利呢?當然忒是瑞士央 行。

- 想起了 《 紅棲夢 》 裡描寫鳳焯兒的詩句:


卿卿性命!生前心已碎,死後性空 靈。 家富人寧,終有個,家亡人散各奔

騰 。 枉費了意懸懸半世心,好一似蕩悠悠三更夢 。 忽喇喇似大廈傾,昏慘
慘似燈將盡 。 呀!一場歡喜忽悲辛 。 歎人世,終難定! 」
「 機 關算 盡太聰明,反 算 了
這真的就是外匯市場的寫照。

外匯市場絕非廣告所標榜的最快致富的途徑

在外匯市場裹待久了,當然也就看過非常多次的巨幅震盪,也就是說

市場上的大風大浪筆者差不多都經歷過了。筆者多位外國朋友們玩了七丶
八年、甚至十年以上的外匯還是依然沒賺到錢,其實個人分析的結果就是

一個字:「貪」。

在外匯市場捏,「不能貪」,這三個字稱之為「三字真言」。也不能

自序
把它當成賭博似的,押大押小胡亂交易一通,那再多的錢都不夠賠。同時,
即使是使用碁本面分析或技術分析其實仍有其極限,常當容易賺個七八次,
但只要一次虧損就把以前的獲利全吐回去。不管是基礎分析也好,技術分
析也罷,只要「交易紀律」及「風險控管」及有做好,一眨眼時間帳戶就
會歸零。某位從事外匯交易投資的友人也因為「貪念」使得原本賺錢的帳
戶旻成鈕額虧損。這位朋友因為「貪念」把自己的資產全部虧光,目前過

署打零工躲債的生活。所以想學外匯的朋友,第一要克服的其寶就是「貪
• 念」,再來才是想辦法没計-個可以「長期穩定獲利」的交易模式。外匯
市場的風險是非當而的,不管是初學者或者是正想要進入這個市場的投資
者,一定要;忍清一個事實,外匯市場絕非廣告所標榜的最快致富的途徑!
相反的,假如你封外匯市場不甚了解,或者以睹徒心態入市,外匯市場其
實是「最快令你破產的途徑」。在外匯交易市場有一定時間經臉的投資者
應該是更能體會「富貴無常」這個詞。

《大乘戒經》:水沫無實,不可損序。富貴無帝,不可久住。

色相如花,須臾變異。

壽如熟果,不可久停,如急流渡船,如朽屋暫住。

11
所以,筆者當俞一直在強調,要致富必須有一套「長期穩定獲利」的

計畫或方法,而不是貪求短期的暴利。時間是無價的,時間所產生的砹利

效果更是「蕪價中的無價」!而想深入學習外匯市場的知識是一場長期作
戰,對淤「專業外匯交易者」而言,「外匯市場」就是一場水無止盡的學習。
封淤想老年時「富而幸福」的所有投資者而言,一個「長期穩定獲利」的「策
咯」及「方法」比你的任何技能可能都還要來的重要。以前,筆者也是跟

很多人一樣,喜歡看個幾篇報導或電視財經名嘴或聳動的理財廣告就跑去
買某個「綦全」或「股票」,、結果當蕾是一段時間過去了,沒賺到錢反倒
哈銀行賺了不少錢。講白一點,其實就是拿錢給碁全經理人及上市公司老
闆去吃香喝辣。現在筆者才比較清楚,其實這都是投介的大忌。現在筆者
比較懂得若要「致富」一定要有一個可以「被實行的計畫」。同時這個計
畫也絕不能架構在「不確定性的風險」之上,有時只要一個「不殯定性的
風險」就能讓你長時問辛苦累積的錢瞬間付諸流水。

所以在投資心態跟實際運作上,個人建議投資者可以利用 80/20 法則。

也就是,假使投資者有 100 萬台幣的閒置資全,可以使用 100 萬裡面其中

的 20 萬元來操作外匯投資,想辦法使每月的獲利達到基本的生活所需。其
他的 80% 資產的 80 萬元都用淤比較安全且較低風險投資。例如,「本國
幣及外國幣定存」、「黃金存摺」、「月配息債券」、「高股息或藍籌股
ETF 」、「住家/商用不動產」等。讓這 20% 的外匯收入僅僅只是你創造「現

全流」 (Cash Flow) 的一個工具,若把全部家當押在較高風險的外匯或期


貨操作,其實是極為不恰當的。

,,, 複利的效果比原子彈還驚人

從幾年前開始,「富爸爸、窮爸爸」系列的書籍風靡世界,我跟多數投
資者一樣也拜讀過他的幾本書,內容其實還算不錯,只不過後續出的書一直
重就梠同的理念,有點在「騙讀者花錢買書」的感覺,同時,他談的都是「概
念性」的致富方法與理財觀念,但若要實際上運用,似乎一直找不到着力點。
所以,我也推薦另一本知名理財作家博多· 雪佛 ( Bodo Schafer) 的書,我很
認同在他的書中所提到的「三個水桶理論~、經濟安全、經濟自
由」。我的心得很簡單,利用「富爸爸、窮爸爸」的「概念」,盡力去找「現
全流資產」的「工具」,然後實行「博多雪佛」的「方法」,來實現財務自
由的人生,我相信每個人都可以達到。也就是說,先從「概念上認知」,然
後去尋找「可實行的工具」,透過「操作的方法」,達到自己心中想要的目的。
愛因斯坦曾說,二十世紀最偉大的發明是「誤利」而非他的「相對論」。

「旗利的效果比原子彈逗笠 人 」 ,這是大家都知道的常識 。一個簡單

自序
的公式相信大家都有算過:

5000 元美金,苯每月獲利 3%' 七年後會變成 59,882 美金(相當菸


191.6 萬台幣,獲利 12 倍),若每月獲利 5%' 會變成 301,211 美金(相當
於 968.3 萬台幣,獲利 60 倍),若每月獲利 10%' 則變成 14,995,313 美全(相
當於 4 億七千多萬台幣,獲利 3,000 倍)。

但前提是「每月都必須獲利」。巴菲特成為世界首富,他的操作也只
是「年」報酬 20~30% 的穩定獲利而已,但簡單的原則卻不是每個人都做
得到!絕大部分的投資者都是隨波逐流,看到利多消息就投進去,看到利
空就設出,這其實都是因為沒有自己的計畫,也不清楚到底如何才是真正
能讓自己致富的「關鍵」,所以社會上才會變成中產階级及窮人佔最大比

例的原因。

當聽人說,高獲利意味署高風險,其實就如同「富爸爸」系列作者所
言,「高投利不一定是高風險,沒有知識才是高風險」 ,個人非當贊同!
在外匯市場,低風險也可以是高獲利,就看投資者是否真的懂而已。想利
用外匯賺取金錢並成為富翁,不是很簡單,但也不是難如登天。在外匯裹
90% 的人是虧錢的, 5% 的人不賺不賠,只有 5% 的人賺錢 。所以 ,要賺錢
_
13
決不能人云亦云,還沒有搞清楚策略或擬可獲利的方法就進場,這樣通噹
失敗的機率很高。

多少利潤並不是什麼是重要的,因為獲利就是獲利

外匯市場真是個充芮誘惑的 J也方,要想賺錢就如同「在毒蛇口中取
珠」。所以,「低風險策略且穩定的長期獲利模式」才是真正能在外匯市
場立足的王道。以下是在某外匯論壇 (Forex Forum) 看到的句子,寫的真
好:

To make money as an investor the first thing you need to know is how to
survive. ….. The goal of a successful trader is to gain the ab山ty to survive
any market condition yet still MAKE PROFIT even if the profit is minimal.
How much profit is not what is important because a profit is a profit.

為了成為一個成功的投背者,首先你需要知道的是如何在市場上生存
下來。…..其目標是,一個成功的交易者,是可以在沒有任何市場條件
下,仍然可以獲利而生存下去,即使利潤微乎其微。多少利潤並不是
什麼是重要的,因為獲利就是獲利。

以前閱讀過許多財經名人以及世界上事業財富都很成功的人的傳記以
及相闕書籍。這些書籍的殯對自己在財經上的知識有很大的幫助。然而,

-· 回顧自己,自從專心從事「外匯自動交易」以來的種種過程,歷經了詐咋
多多的挫折,現在回想起來,事實上,要成功且擁有財富,只有一句至理
名言,但我以前卻是一直把這句活當「廢話」而不去深思它所真正內涵以
及其所深刻步及的思維架構,從這個思维架構裡而叟成操作的規則。

記得好久以前,讀過巴菲特的書,內容洋洋灑灑,但並沒那麼重要,
因為都只是在速說,巴菲特之所以成為巴菲特的「過程」。裡面有句;;舌,
我至今一直都沒忘記,但在實務操作上,卻一直及放在心上,也就是說,
我一直把它當成「廢活」看待。有人問巴菲特 : 「為何您投資如此成功,
最重要的核心訣竅是什麼?」巴菲特慎重的回答:「不要虧損」。

是的,就是這四個字,「不要虧損」。的殯像廢話。

尤其在還及歷經這些年來辛苦經營且好好壞壞的經營過程,我一直沒

自序
有屎刻認識到一個世界首富的「誠實之言」。直到猛然醒悟,所有的投資
或投機,尤其是高度槓惑的外匯投資,核心的價值與規則,就是這四個字:

「不要虧損」。

「套利」才是王道

因此本書才會強調說,我們希望利用理論或特殊的策略技巧在外匯交
易市場上來執行「套利」,而非「暴利」或「預測」取向的投資思維。

如果你已經準備好要進入外匯市場,我強烈建氓讀者幾個資產財務控

管原則:

15
1. 不能過度使用借貸投入外匯市場,尤其是使用「個人信貸」、「信
用卡貸款」、「地下錢莊貸款」等等高息貸款,這些支出會嚴重影
零個人操作判斷以及吃掉原本該有的利潤。

2. 投入外匯市場的資全必須低菸個人「凈資產」的 20%, 以 20% 為


上限,因為即使這 20% 的爭資產都賠光了,個人的生活還不至菸
受到致命性傷害。

3. 不要輕信美麗包裝下的廣告術語。也就是不要一下子就相信外匯老

手所告訴你的一切(包含對筆者也一樣,筆者建;;義你也不要一下子
就太相信筆者,因為筆者也會犯錯),多下功夫去閱讀文章做功課,
以免自己被欺騙都不知道。

以上的這三點原則如果讀者都可以連守,筆者相信讀者在外匯市場存
活下來,甚至賺到生活所需的現全流財富的機率,會比大部分盲目跟從的
投資者高很多。

本書延續上-本《外匯套利 I 》的主要內容,但更為深入且提供更多
實務上的操作說明。本書內容的固襠依然有大部分是藉由 MetaTrader 4 這
套軟體的圖檔來做直接的截圄說明,但此書所使用的是新版本 MT4 Build
600十以上版本。因此筆者由衷感謝 MetaQuotes 公司可以免費提供軟體供
交易者使用以及下載。另外也感謝啁路上的免費外匯論壇提供大量可供參
考的外匯資訊以及參考囹示得以讓本書的內容更為豐富生動。

祈請有緣眾生財如雨下

.日 最後,身為-個程式開發者以及虔誠佛教徒身分,筆者願為所有讀者
跟客戶祈福,誠墊祈望讀者、客戶們在讀了此本書籍之後,都可以財如雨
下,源源不絕。
雨寶陀羅尼經云。「培有善男子。書寫受持。受諸快樂。安穩豐饒。」
聖持世陀鼉尼經云。「芸有人素食梵行。斷食酒肉。日夜恆誦。獲大富實。
又云。蒞人誦持。應先凈心誦八百遍。此陀羅尼。日三時誦。所願必應。
菩蔭加佑。」

佛教的求財咒語《佛說雨寶陀羅尼心咒》:「嗡 . 乏蘇 · 達咧 · 司
乏哈。」

祈願所有的讀者、客戶們投資外匯都可以獲利並日日財如雨下。

自序

17
建立正確外匯交
易市場觀悆

I can calculate the motions of heavenly bodies, but not the madness ofpeople.
我能計算出天體運行的軌跡,卻難以預測人們的瘋狂 。

牛頓

- -<1;~•

. ,
蕈」
..
正確之外匯知識

進入外匯市場前的正確態度跟觀悆

「 無 知」 與 「 貪婪 」 常常是傷 害 自身最重兩大因素, 甚 至 讓 自己身

敗名裂,走向自我毀威之境 。

前 一 本書籍,《外匯套利 I 》已經利用相當大的篇幅在介紹有

關於外匯市場的基礎知識,這裡反而是要希望建立讀者們在進入外

匯市場之前所該要有的正確觀念 。 正確的外匯觀念沒有那麼艱深困

難,當然更不是吸金詐騙集團行銷的無風險保證獲利的配息商品 。

外匯零售市場 (Forex Spot Market) 本身是 一 個可以使用高度槓


桿、以保證金模式、在高度波動、且沒有漲跌幅限制的高風險投機

性之金融衍生性商品。因為市場的波動,所以交易者利用市場波動

所下的多空部位會產生獲利或虧損,因此,在真正的外匯交易市場

裡,不會有「保證固定獲利」這種事情會發生,即使使用的是「套

利理論」,市場的波動當然也可能對績效產生影響,因此不會有「每

月固定配息」的效果出現 。

所有利用外匯名義,對外 宣 稱固定配息來招攬客戶的金融商品

-
幾乎清 一 色全部都是吸金詐騙人員想出來的花樣 。 我們投資者在面

對任何的金融商品時,都要以「合理」的心態面對,要有合理的報

酬,有合理的風險,更應該要有合理的邏輯推論 。
外匯市場跟投資者所熟悉的期貨市場其實都是保證金市場

(Margin Market)' 但是外匯市場有幾項跟投資者所熟悉的期貨市


場有些差異:

1 外匯市場是每天 24 小時,週 一 到週五都可以交易的市場。

2 外匯市場的槓桿甚至可高達 500 倍,完全取決於外匯經紀

商提供的槓桿倍率。

3. 外匯市場對於散戶投資者來說,只能透過外匯經紀商下單,

而每 一 家外匯經紀商在同 一 個時間的外匯報價不盡相同。

主要是因為每 一 家的外匯經紀商所對接的 InterBank 不同,

所以國際貨幣匯率報價有些微差異。

4. 因為外匯市場的高度波動,所以沒有「追繳保證金」這項

正確之外匯知識
規定,當保證率不足,帳戶會直接被斷頭。投資外匯因而

傾家盪產 一 般來說不會是 一 次性的,因為外匯帳戶 一 但虧

光,就只是帳戶內那些錢虧光,外匯經紀商不會強制要求

投資者再補充繳納保證金。但投資者在虧光帳戶之後再入

金的確是非常受外匯經紀商歡迎的。

5. 外匯市場並非期貨,它是現貨市場。所以不會有像期貨有
到期換約的問題。

6 外匯市場的市場交易量非常龐大,每日國際市場的交易量

高達 6 兆美金以上。以目前來說,除了美國聯準會,幾乎

沒有任何 一個單 一 機構可以左 右國際外匯市場。

但是因為外匯市場的高度風險、高度槓桿、眾多龍蛇混雜、詐

騙伎倆橫行等等,上從 InterBank' 下到經紀商、 IB/IA 及操盤手等

等 一層 一層的利益結構,每 一層幾乎心裡只想著如何從「最下 一 層」

_
21
的客戶 (Client) 口袋裡撈錢到自己口袋。這種畸形的心態,以至

於到最後,投資者幾乎都成了投資受害者。在第一本書籍裡就曾一

直強調,一個正確的外匯知識、概念跟投資心態是非常重要的。尤

其是對想進入市場的外匯新手而言,在進入外匯市場之前,先別只

想到如何賺錢,而是先要有完整且正確的外匯知識。這比一切都重

要!!!

交易前的準備工作

因為只要你沒有完整且正確的外匯知識,很容易被欺騙,滿坑

滿谷的外匯詐騙,過去曾經發生,現在正在發生,未來還是一樣不

斷的會繼續發生。原因很簡單,就是投資者的無知與貪婪。剛進入
市場的投資者一般來說對市場了解都不深,認為外匯市場是一個有

賺錢機會的場所,所以連基礎知識都不具備就想進入外匯市場,且

一進來就迫不及待 地進行交易,似乎若不抓緊時間財 富會很快從手

邊溜走。其實,投資者做好交易前的準備比急匆匆地交易更加重要。

沒有充分準備的交易往往只能帶來災難性的後果。做交易也同樣如

此。筆者認為,交易前的準備工作至少應包括以下幾個方面:

基本準備以及學習曲線

基本外匯市場知識的準備是個初步認識和了解外匯市場的過

程,也是進行交易所必不可少的過程,它包括:

1. 學習基本交易理論。

2. 了解常用的平台以及技術工具。

.. 3. 熟悉交易貨幣符號及特性。
4. 掌握市場交易的交易規則。

5. 了解你的外匯經紀商 。

6. 熟悉開戶、交易流程等。

這是一個學習過程,任何人都可以通過一段時間的學習來掌握 ;

既可以通過看書來掌握,也可以通過培訓班來掌握。在這個過程中,

投資者應特別注意的是:不要認為書上的理論和方法完全可以在實

際交易中發揮理想作用,真正的交易遠比書本上寫的更加複雜,不

能以為學完之後就認為財富等著你去「賺取」而迫切地開始交易。

很多人認為學習交易就是看幾本書或者跟一位老師學習幾天就

可以學到交易的秘訣,從而可以賺到很多的錢,這個想法是完全的

錯誤。學習完基本知識只是對市場有了一個基本的初步的認識而已,

正確之外匯知識
但離有效的交易還差得很遠。譬如說,一個馬拉松選手看了很多有

關馬拉松的經典書籍,也找了很好的教練,假若他並不努力地去練

習 ,那麼,也無法成為優秀的馬拉松運動員 。

書本和老師只能告訴我們學習方法 ,但是我們必須要體驗其中

的過程。如果僅僅是通過幾天的學習,就可以達到長期穩定的獲利,

那麼交易也就不會是一個非常具有誘惑力行業。初學者在最初的學

習熟悉階段期間,不要心急,且一定要注意保護自己的原始資本。

因為在這最初的學習熟悉期間,交易者一定會遇到重大的挫折,但

這些挫折並不可怕,因為挫折是投資者最寶貴的經驗。投資者在外

匯市場中活的時間越長,越可能積累非常多的財富。開始交易的幾

年,是我們學習的時間,而學習的過程是一條曲線,它不會是一條

直線。

_
23
模擬交易

進入外匯市場,進行模擬交易是非常重要的。因為這是投資者

在真正進入市場前需要自我練習的重點。模擬交易可說是對投資者

所學習交易知識的一個驗證。也就是說,在投入真實的資金以前,

交易者不僅僅要建立自己的交易模型,也要開始模擬交易。在投資

者不具備交易能力之前,就進場去實單交易 一定會付出慘痛的代價。

所以,多做幾次模擬交易可以減少和緩衝這個痛苦過程。嚴格來講, •
模擬交易是紙上談兵,也可以叫做實習階段,它不可能帶來如同真

實交易般那種刻骨銘心的體會和威覺。

我們常常會聽到外匯投資者的說詞是,很多投資者模擬交易都

獲利,但一進入實單交易就虧損。這包含很多原因,尤其是外匯市

場裡影響損益的除了交易之外,還包含經紀商的問題,但我們至少

在正常的模擬交易當中必須是獲利的。因為投資者必須做的是真實

的模擬交易 : 必須要有真實記錄自己的模擬交易過程,以及驗證自

己的交易理論和紀律。

其實,真正嚴格紀律的模擬交易並不像我們聽說的那樣都賺錢,

只是因為很多人把虧損忘記了或因為對虧損沒戚覺而沒當回事,但

卻把利潤牢牢記在心裡,所以才會給人一種錯覺:模擬交易都賺錢!

投資者所要注意的是,模擬交易的本質是要驗證你所學的知識,而

非模擬單上的利潤。

所以正確的態度必須是以模擬交易當作真實的帳戶來看 必

須當成真正的資金而一絲不苟地進行交易,這樣才會讓投資者在未

來的真實交易中少交學費。很多人開立新的模擬帳戶,都是當作一

.. 種遊戲,能做好就作,做不好重新再開一個新的帳戶,這是 一 種對

自己不負責任的態度。
每當我們學習 一 種新的交易方法,都應該認真學習且誠實面對

這種新的交易方法來進行模擬交易,以體會這種新的交易方法的優

點和缺點。很多交易者學了 一 種新的交易方法以後,開始進行模擬

測試, 一 但發現這種方法沒有產生高績效,就把它放到 一 邊,繼續

學習新的交易方法 。 這對增加交易功力沒有太大幫助,反而造成投

資抉擇上的錯亂。改正的態度應該是,把學到的策略放在所對應的

市況上,例如碰到震盪市場必須使用 A 策略、碰到趨勢市場必須改

用 B 策略等等。

實單帳戶的小單量交易

實單帳戶的小單量交易是對模擬交易學習之後的進 一 步考驗。

在這個階段,即使獲利,仍然處於學習階段。實單帳戶的小單量交

易可以減少虧損給你帶來的對市場的恐懼戚,投資者可以最真實地

正確之外匯知識
體驗到外匯市場中發生的各種始料不及的情況,以及這種情況給你

帶來的傷害或意外的驚喜,真實地體會交易的各個環節及可能的交

易障礙,全面了解真實的交易過程,這也是對投資者所學的知識的

真正考驗 。 在這個過程當中,投資者才會切實戚悟到交易理論和技

術工具在交易中的作用究竟如何,以及正確率,這是進行真正交易

前的實際驗證作業 。

通過實單帳戶的小單量交易,交易者 一 定會再次從新認識自我

和實際的外匯市場,這種從新認識是 一 個重要的過程。因為在外匯

市場裡,除了市場因素之外,外匯經紀商因素也是造成交易者盈虧

的因素之 一 ,所以,利用實單帳戶除了可以檢驗己的交易理論是否

正確之外,也可以觀察自己所開戶的外匯經紀商是否是正直且不坑

殺投資者 Forex Scam (外匯騙子) 這個階段會決定投資者是否

應該繼續交易 。

_
25
投資者一定會戚覺到外匯市場不像自己最初所認識的那樣,外

匯市場遠比自己最初認識的還要複雜得多。這時,投資者才會真切

地戚受到自己的風險承受能力和市場可能帶來的傷害以及你現實的

利潤目標和市場機會。而到了這個時候,你才可能面對現實,對市

場做出客觀的評判,而不至於掉入暴利的虛幻陷阱中。

交易紀律

外匯市場中沒有專家,只有輸家跟贏家;也沒有老師,如果有

老師,這個老師就是市場本身。沒有人敢說自己是真正的老師,因

為沒有人敢說自己保證能夠在外匯市場中長期穩定獲利。

在高度槓桿的外匯交易中,很重要的一項能力就是自律;因為

即使是 一套非常好的交易系統,如果不按照系統執行 ,這套系統也

不能夠讓你獲利。而一般初學者,如果沒有養成一種良好的自律習

慣,將會給自己在未來的交易中帶來種種困難。所以,剛剛進入外

匯交易這個領域裡,一定要養成非常良好的交易習慣,這種良好的

交易習慣,要在一種交易紀律的情況下來培養。

對於真正的外匯市場不甚理解的人會認為外匯交易的行業是一

個暴利行業,他們認為輕輕鬆鬆地就可以獲得大利 這最大可能的

緣由都是來自於整個外匯市場行銷人員為了獲取自己的佣金,在拉

客戶投資時所散播的超級大謊言,以及部分外匯經紀商的行銷廣告。

喜歡重倉操作的交易者或代操人員在外匯市場的存活時間都不

長,因為下重倉如果發生虧損,將會給帳戶帶來非常大的損失;而

這種損失的也會給心理造成非常大的壓力。實際上,外匯交易和其

.. 他行業 一樣,並不是 一 個暴利行業,它需要交易者細心的經營。


外匯保證金風險剖析

在筆者的第一本書籍,《外匯套利 I 》裡,對於外匯交易的風

險已有略作說明,此篇是對於外匯初學者再次的做說明。

外匯市場是全球最大的金融市場,涵蓋的交易品種包括現貨外

匯交易(又稱即期外匯交易)、遠期外匯交易、掉期外匯交易、外

匯期貨交易、外匯期權交易等等,單日交易額平均高達 5~6 兆億美

元。其中 OTC (Over The Counter) 稱為場外交易,或稱櫃外交易之

外匯衍生性金融商品交易。而外匯交易主要採用兩種方式:

1. 交易所方式:這種方式有固定的交易場所,如德國、法國、荷

蘭等國的外匯交易所,以及進行外匯期貨交易的芝加哥商品交

易所;這些交易所有固定的營業時間和營業場所。

正確之外匯知識
2. OTC 方式:這種方式是 24 小時運轉,沒有具體的交易場所,

交易雙方靠電話或網路等通訊設備達成交易。以現在的科技而

言,已經再也沒有靠電話達成交易的模式了,幾乎全部都是透

過網路交易平台下單交易。 OTC 方式是外匯市場的主要組織形

式 --它不同於傳統意義上的市場,並不具有一個中心交易場

所。這種沒有統一場地的外匯交易市場被稱之為「有市無場」。

全球外匯市場每天近數兆美元的交易額,超過 500 萬個獨立交

易帳戶,就是在這種既沒有中央清算系統的監督,也沒有政府

的管制下完成清算和轉移的。

電子交易的興起

早期的外匯交易主要通過電傳、電報和電話等通訊方式來實現;

隨著電腦技術和網路技術的發展,電子交易開始興起,並引發了外

匯交易機制和外匯交易技術的變革。

_
27
2003 年之後, MetaQuota 公司正式推出 Meta Trader 交易平台,

自此,外匯交易透過電腦網路平台下單開始蓬勃發展。過去只對銀

行間交易者開放的實時報價現在通過網路垂手可得,外匯定價變得

更加透明,資訊的傳達更有效率。同時,電子交易也改變了外匯市

場的特性和交易者行為,資訊的光速傳輸使得羊群效應在國際範圍

內瞬間傳遞,加劇了外匯市場的波動。

電子交易主要有兩種模式,一種是服務於機構客戶的 ECN

(electronic communications network• 電子通訊網路)模式,或 STP


(Straight Through Process 直接丟市處理)模式;另 一種是服務於零
售客戶的詢價 (Dealer) 和單一造市商 (Market maker) 模式。我們

平常接觸到的外匯保證金經紀商通常採用後一種交易方式。

銀行和機構投資者的 ECN

ECN 是 一個電 子交易網路,交易者的單子都直接且匿名的掛在

這個網路上,買賣價格由參與這個 ECN 上的所有交易者競價產生,

所以 ECN 上的價格是真實的市場價格。 ECN 的運營者 一般不參與交

易而只收取交易佣金,所以他們會盡可能提供給客戶更好的服務。

隨著網路尖端技術的發展,服務於小型銀行、大型投資機構、

對沖基金的 ECN 開始出現,包括 Currenex 、 Fxall 、 FX Connect 、


Hotspot 等。 ECN/STP 的發展方向是融合交易所模式和 OTC 模式的

優點,提供給客戶較好的交易體驗。例如 FXMarketSpace 號稱是全

球第 一 個中心結算的外匯市場;通過中心結算,將降低交易的信用

門檻和非市場風險,使得更多的中小投資者也能參與其中。

- \
外匯保證金交易的模式:詢價、單一造市商

雖然 ECN 模式較為公平透明,但是這些「真正的」外匯市場

門檻較高,通常只向大交易量和高資產凈值的金融機構開放,所以

個人投資者主要透過外匯保證金或以外匯實際貨幣進行外匯現貨交

易。

由於外匯現貨交易有點差高、單向交易、無槓桿比率等缺點,

有經驗的外匯投資者通常會選擇外匯保證金交易。外匯保證金交易

通常是採用詢價和單一造市商模式。個人投資者面對單一的經紀商

(在台灣通常稱為券商)進行詢價和交易,報價的公正性依賴於經

紀商的誠信。許多經紀商本身就是造市商 (Market Maker)' 他們

一般先匯總和過濾銀行或 ECN 的價格,然後加上自己的利潤再報價

給客戶,因此客戶實際上是在與造市商做交易(在 ECN 上是與匿名

正確之外匯知識
的交易者進行交易)。客戶所看到的市場報價價格可能並非是市場

的真實價格,並且交易的執行價格由外匯經紀商決定,所以成交價

格常常有利於經紀商。

客戶的單子進入造市商的系統後,首先進行多頭頭寸(也稱為

多頭部位)和空頭頭寸(也稱為空頭部位)之間的內部對沖,然後

將餘下的凈頭寸拿到他們所依附的銀行或者 ECN 上對沖,也可以部

分對沖或者乾脆不對沖,這就屬於對賭的範疇。

對賭就是這些造市商們不把所有的凈頭寸拿到 ECN 或銀行去對

沖。比如,某家外匯經紀商收到客戶 1000 手(外匯交易單位,通常

是指 10 萬單位基本貨幣)買入歐元/美元的指令和 800 手賣出歐元

/美元的指令,那麼內部對沖後餘下 200 手歐元 /美元 的凈多頭頭寸,

但是該公司願意承擔了這部分頭寸的市場波動風險,並沒有把這 200

手歐元/美元凈多頭頭寸放到銀行或 ECN 上做反向交易,這就叫做

_
29
和客戶「對賭」。在歐美國家的相關法律法規中並沒有硬性規定如

何管控對沖風險,這完全取決於交易商自己的風險控制策略。

如果客戶的單子能及時完全對沖掉,那麼造市商幾乎不用承擔

額外的市場風險,獲得的收益比較穩定。但是現實中造市商一般或

多或少的會進行對賭,這加大了其本身的風險。

這種對沖/對賭模式的存在,意味著在某些特定時段(比如美 .
國重大數據公佈的時候,或者市場價格劇烈波動的時候),你可能

經常性的無法連接到經紀商的交易系統上進行有效迅速的交易,因

為此時經紀商很難在有限成本區間內及時地把市場風險轉嫁出去,

所以乾脆限制客戶下單,或者採用一些其他的方式,這個部分的細

節描述請讀者參閱筆者的《外匯套利 I 》書中〈第 一 章:外匯基礎知

識概述〉。

高風險的 OTC 市場

在 OTC 市場中個人客戶是與 一個經紀商直接達成交易,是 一 種

點對點的交易方式,並且沒有統 一 的清算機構來支援和監管這種交

易。所以, OTC 交易中的非市場風險較高,資訊不對稱交易普遍且

易於被經紀商所操縱。

由於 OTC 市場本身的運作特點和各國金融法規的進步或落後程

度不同,決定了其受到的監管相當有限;比如內線交易在證券交易

中是屬於違法的,但在 OTC 外匯交易中,銀行利用大客戶的交易資

訊等內線消息為自己謀取交易利益並不被視為違法,例如在序文裡

提到的瑞郎暴漲事件裡,世界上所有受到損失的投資人及銀行皆無

.. 法對瑞士央行提出違法訴訟。
缺乏監管的外匯保證金交易

以美國為例,美國對外匯保證金經紀商並沒有真正形成有效的

監管。美國期貨市場監管機構美國商品期貨交易委員會 (Commodity

Futures Trading Commission' 以下簡稱 CFTC) 依據的法律主要為:


Commodity Exchange Act (1936 年商品交易法,以下簡稱 CEA) 、
Commodity Futures Trading Commission Act (1974 年商品期貨交易
委員會法,以下簡稱 CFTCA) 、 Commodity Futures Modernization
Act of 2000 (2000 年商品期貨現代化法,以下簡稱 CFMA)• 賦予
CFTC 對在交易所和場外交易的期貨和商品期權的唯一管轄權,同時

也賦予了它監管市場仲介機構的權利,如期貨佣金經紀商 (Futures

Commission Merchant' 以下簡稱 FCM) 。

不過,場外外匯交易並不受 CEA 監管,除非這些交易涉及未

正確之外匯知識
來在商品交易所交割。 CFTCA 賦予了 CFTC 對期貨合約的專屬管轄

權,但是有關外匯合約的監管沒有給出明確的界定。由於日新月異

的金融衍生品市場的變化,所以美國政府在 2000 年制定了 CFMA 。

CFMA 在很大程度上放鬆了對 OTC 衍生品交易的限制,但是 CFTC

對 OTC 外匯衍生品的管轄權只是被限定在期貨和期權產品上,遠期

和現貨外匯合約並不在 CFTC 的管轄範圍之內。

從以上可以看出,即使美國的金融法律針對期貨業的監管而有

效設立監管,但實際上仍然並未考慮到對外匯現貨交易的監管,因

此在 2011 年美國 CFTC 才又再度規定,所有美國的外匯經紀商僅

能提供最高 1 : 50 的槓桿比率,不允許客戶執行同貨幣對沖 (No


Direct Hedge)' 以及外匯投資必須比照期貨先進先出原則 (First In
First Out) 。但這些措施,依然無法對進行外匯保證金交易的客戶得

到有效的保護。

_
31
外匯保證金交易的潛在風險

1. 資金安全

交易中最重要的問題就是資金安全。 NFA 在針對 OTC 外匯交


易零售客戶的官方宣傳內容文宣中明確指出: OTC 外匯交易沒有結

算機構的擔保,客戶用於買賣外匯和約的入金不受任何監管機構保

護,且在破產時不被優先考慮;即便客戶的資金由經紀商存放在擁

有 FDIC 保險的銀行帳戶中,在經紀商破產的情況下客戶的資金也 •
得不到保護。 l

即使 RCM (Refco Capital Markets Ltd • 瑞富資本市場公司)像


Refco FX (瑞富外匯) 一 樣在 NFA 和 CFTC 進行註冊並受其監管,
世界各地區域(如台灣)客戶的資金也一樣得不到保護,甚至連「客

戶」都算不上。根據美國破產法的規定,股票客戶或商品客戶擁有

清算理賠的優先權,所以當經紀商破產時他們保全全部資金的可能

性相當高。但是,由於外匯現貨既不屬於股票也不屬於商品,所以

外匯現貨客戶既不是股票客戶也不是商品客戶。

正是由於法律地位的缺失,使得在 RCM 開戶的世界各地區域外

匯投資者無法在破產清算中享有「客戶」待遇,只能以無擔保債權

人的資格進入破產清算程式 , 這將可能導致血本無歸。

2. 市場風險

外匯市場是 24 小時運轉且沒有漲跌幅限制,波動劇烈的時候在

一 天之內就有可能走完平時幾個月才能達到的波動幅度。外匯的走

勢受眾多因素影響,沒有人能確切地判斷匯率的走勢。在持有部位

.. I 參見 NFA 官方網站 , http : //www.nfa.futures.org/investor/ fore x/forex.pdf


的時候,任何意外的匯率波動都有可能導致資金的大額損失甚至完

全賠光的損失。

3. 高槓桿風險

每種投資都包含風險,但由於外匯保證金交易採用了高資金槓

桿模式,放大了損失的額度。尤其是在使用高槓桿的情況下,即便

出現與你的部位相反的很小變動,都會帶來巨大的損失,甚至包括

所有的開戶資金。所以,用於這種投機性外匯交易的資金必須是風

險性資金;也就是說,這些資金即便全部損失也不會對你的生活和

財務造成明顯影響。

4. 網路交易風險

外匯保證金交易目前主要是通過國際互聯網進行交易。由於互

聯網本身的特性,所以可能出現無法連接到經紀商交易系統的的現

正確之外匯知識
象,在這種情況下,客戶可能無法下單,或無法停損現有的部位,

這將導致無法預料的虧損的出現。經紀商對此是免責的,甚至經紀

商的交易系統出現當機他們也不會承擔責任。

5. 外匯經紀商本身的道德風險

這個部分比較複雜,請讀者直接閱讀本章第 三 節 1-3 及第四節

1-4 的相關說明。

經濟新聞對外匯市場波動之影響

在影響外匯市場波動的經濟新聞中,以美國政府公佈的關於每

月或每季度美國經濟統計數據的作用最大,同時,美國聯準會所公

布的升息或降息的訊息也會反映在外匯市場的波動,其主要原因是

美元是外匯市場交易的最重要的貨幣。從經濟統計數據的內容來看,

_
33
按作用大小排列可分為利率變化、就業人數的增減、國民生產總值、
工業生產、對外貿易、通貨膨脹情況等。

這種排列並不是絕對的,例如,美國對外貿易的每季度統計數
曾是最重要的影響美元走勢的數據之一。每當美國經濟數字公佈前
幾天,外匯市場就會出現種種猜測和預測,尤其是非農數據最容易

引起外匯市場的劇烈波動。以下是幾項外匯投資者不得不注意的經

濟數據:

利率政策

在各種經濟數據中,各國關於利率的調整以及政府的貨幣政策
動向無疑是最重要的。對外匯匯率和利率的相互關係,本文不做詳

細介紹,但這裡要強調的是,有時政府雖然沒有任何表示要改變貨

幣政策,但只要市場有這種期待,或者說其他國家都採取了類似的

行動,那麼,外匯市場會繼續存在這 一 政府會改變政策的期待,使

這一國家的貨幣匯率出現大幅度波動。

通常各國央行只要宣布升息或降息,該國對美金報價就會產生
波動,如果是出乎市場預期的數字,則波動更大。在利率部分,以
美國聯準會所公告的利率消息對市場的影響最大 。

美國非農就業人口

美國關於非農業人口就業人數的增減數和失業率是近幾年影響
外匯市場短期波動的重要數據。這組數字由美國勞工部在每月的第
一 個星期五公佈。在外匯市場看來,它是美國宏觀經濟的晴雨錶,

.. 數字本身的好壞預示著美國經濟前景的好壞。因此,在這組數字公

佈前的一 、兩天,只要市場上有任何關於這一數字可能不錯的市場
預期時,美元拋售風就會嘎然而止 。 而公布後的數據若超乎預期,

不管是好或壞,市場波動幾乎都會產生劇烈震盪 。
其他經濟數據

其他一些經濟統計數據對外匯市場也有影響,這些數據包括工

業生產、個人收入、國民生產總值、開工率、庫存率、經濟綜合指

標的先行指數、新住房開工率、汽車銷售數等,但它們與非農業就

業人口數相比,對外匯市場的影響要小得多。除了經濟統計數據之

外,其他關於經濟活動的重大新聞也會對外匯市場產生很大的影響。

外匯價格的變動在很大程度上是外匯市場上的投資者對外匯波

動的期待所呈現出的現象反映,換言之,如果人們期待外匯有某一

個長期的均衡價格,那麼,現貨價格的波動就會朝這個價格的方向

移動。而這種期待是主觀性的東西,它必然會受到客觀經濟環境的

影響。因此,在連續幾天沒有關於經濟活動數據分佈的情況下,有

關國家貨幣當局官員的講話、《華爾街日報》關於外匯市場的有影

正確之外匯知識
響力的 一篇文章、某研究機構或大企業關於外匯走勢的研究報告等,

都可能會在某 一 天造成外匯市場的劇烈波動。這種現象對那些身處

外匯市場以外的人來說,似乎很難理解,為什麼一個官員的講話會

使美元猛跌或猛漲 2 至 3 美分(即 200 至 300 點)?如果把人們主

觀期待的因素考慮在內,這種現象就不難解釋了。一個官員的講話

中 一 篇關於外匯的重要文章僅僅是提供了某種信號,給人們的合理

預期起了催化劑的作用,最後導致外匯市場的波動。

外匯套利交易的概悆以及基礎思維

套利思維不像是技術分析,只做漲跌預測,其所偏向的思考以

較屬於演算法或利用數學模型執行可行的套利。有關於外匯套利交

易的概念,本書會在稍後的章節裡會提出大約七種各類套利模式來

詳細說明 。

_
35

透過外匯名義行使詐騙之各類
手法

保證保本保息,保證騙你

筆者以前寫過許多篇有關「吸金詐騙模式」一貫的伎倆,不論

在本人的部落格、書籍、甚至臉書上都有提及,但是戚覺怎麼好像

還是無法幫到台灣投資者認清詐騙模式的手法,仍有 一 大堆人對各

類詐騙趨之若鶩,不僅趨之若鶩,還自動幫忙好甲道相報自己去拉

親朋好友加入,結果詐騙集團 一 出事, 一 大整掛全部都血本無歸、

欲哭無淚。為何筆者已經寫過、並很仔細的分析過這麼多次了,台

灣投資者還是喜歡見小利而忽視許多根本就完全不合邏輯的潛在風

險呢?其實也有許多客戶曾經問起筆者,獲利能否「保證」?筆者

當然是無能為力,如果筆者能保證,還這麼辛苦每日寫程式幹什麼

呢?自己關起門來自己保證獲利就好了。很奇怪的是,只要筆者說

無法保證獲利,許多外匯投資客戶就會擺出 一 臉嗤之以鼻的樣子嫌

棄筆者的低能。這類客戶,今日有可能都被市場上的那些保證獲利

的團體、個人、操盤手所燙傷吧。

對於「保證獲利」以及「保本保息」這種名詞,筆者真的無能

為力,筆者所能做到的,最多也只能為筆者的客戶盡力獲利而已。

以「保證獲利」「保本保息」」等等類似的口號來行銷金融商品很

- 早就存在於台灣。「你貪他的利息,他要你的本金。」這句話已經

被多少人警告過,這類吸金事件已經不知被檢調抄過多少次,從早

期「宏源百貨」吸金,到幾年前的「濤京」吸金,到近期的馬勝、
Power 8' 等等真的是不勝枚舉,今日還是有眾多人為了小利而不顧
一切往前衝。

歷史的教訓就是學不會?

1980 年代的鴻源百貨吸金案是台灣史上最大型的集團型經濟犯

罪。 1981 年,沈長聲、劉鐵球、於勇明等人以投資公司名義成立鴻

源機構,所執行的就是後金補前金模式的老鼠會,藉由提供誘人的

「高利率」,非法吸集民間資金將近台幣一千億元。結果鴻源機構

在 1990 年突然宣布倒閉,留下十六萬個受騙的投資受害者與新台幣

九百多餘億元負債的殘局,一時間還造成台灣整個金融體系動盪不

安。而接下來的日子裡,台灣不斷出現拷貝鴻源機構吸金詐騙模式

的團體在行使類似的吸金詐騙手段。

透過外匯名義行使詐騙之各類手法
例如, 2004 年的台中濤京案,吳信宏等人從 2004 年 11 起陸續

成立昇宏、強盛等多家公司紺成濤京集團,並從同年 11 月起對外以

「只有濤京,才能幫你完成淘金夢」等口號招攬客戶投資,並以老
鼠會多層次傳銷作法,由公司業務員向社會大眾以「高利率」招攬

資金。

最近比較知名的兩個吸金詐騙案件是馬勝集團吸金以及 Power

8 。

以下是有關馬勝集團吸金的新聞內容。

「巧勝集圉」铇裁張全素等 人佯稱投資外匯,找理財專家廖泰宇、楊

秀娟與鼉冰樂等人鼓吹民眾掏錢投資,大肆吸全之後將錢拿去買豪宅、名

車、名牌包等名蕡物品,極盡豪奢。新北地檢署今年 5 月底破獲後,調查

認定集固非法吸全的現金加上紅利轉投資的全額高達 13 9 億元,今依違反

_
《銀行法》、洗錢等罪嫌超訴鋹金素等 13 人。

37
超訴指出,島勝集困由張金素擔任總裁、妹妹張牡丹擔任帳房,男子

賈翔傑擔任铇裁特助,並找曾合箸《就是要你變有錢》的廖泰宇、暢秀娟,

以及曾接受《今周刊 》採訪的投資專家糴冰樂(本名羅志偉) ,以理財專


家身分擔任講師,一夥人與星、島地區境外成員,從 2013 年 3 月間開始對

外宣稱,馬勝金融集團是美國皇家控股公司的關係企業,專營投資全球外

匯、黃全交易等等,在全台各地舉辦說明餐會,再由集團幹部、講師們遊

說參加說明會的民眾掏錢投資。

集團將投資全額分為美金 1000 元至 3 萬元不等的單位,並按月付哈 3%

至 8% 不等的紐利,換算年利率最高可達 96%, 吸引多達上千名民眾砥大

錢投資。但巧勝集固成員騙到手後,卻拿這些錢大買豪宅、名車、名牌包

等奢侈品,揮全如土。 2

以下是有關 Power 8 集團吸金的新聞內容:

高雄檢調 l 日宣布破獲一個跨國違法吸金世紀詐騙案,高雄冠宙、台

中銳聚、台北允豪等公司步嫌以跨國投資西班牙足球博彩公司、庚門賭場丶

黃金買賣等專案名義,以資產管理名義,引誘被害人投資 3 百萬到 2 千萬

元不等,吸金近 19 億元。檢調兵分 28 路搜索後,傳喚 20 多人到案調查,

查扣市值 1500 萬元的精品皮包、 11 顆名牌手錶、 5 部高級轎跑車,主嫌暕

修安、陳柏諺、鄭翔瑪經檢察官訊問後,向高雄地方法院嵒請勗押獲准,

另有 4 名幹部交保。

調查指出,陳修安 (37 歲)是冠宙公司負清人,陳枱諺 (39 歲)係

冠宙公司業務經理、鄭翔鴉 (49 歲)是銳聚公司負潰人,這個集囹最初利

用「紐利賡賡廳」專案,招攬民眾投資澳門銀河娛樂渡假城睹場業務,磬

稱可以獲得取固定紅利,從 2013 年 l 月超,至少吸全近 11 億元。

.. 2 游仁汶·錢多到摺鈔票花馬勝集團吸金百億被訴 (2015 年 9 月 16 日),蘋果日報.取自:


www.appledaily.com.tw/realtimenews/article/new/20 ! 50916/6930 I 7I
http: //
2014 年 6 月超,再以冠宙公司名義舉辦說明會,聲稱與西班牙

POWERS 公司負責人菲利浦合作,招攬不特定民眾投資西班牙「 Power8 」

公司入股專案,還帶投資人到西班牙去觀賞由 POWERS 公司贊助的國際足

球隊的現場比賽,取得主場冠名權為由,用以取信投資人,磬稱入股 150

萬元後,每週可因定領取達 7 成的獲利,從去年 6 月起至今年 l 月間,吸

引 400 多人入股,利用投資非法吸收資全至少 5 億 8500 餘萬元。

在 POWER8 贊助的西班牙球隊投資案後,陳修安等人又推出「 GCG


外匯保讒全」專案,去年初以冠宙公司名義陸續舉辦說明會,招攬不特定

民眾投資 Goldland City Group Limited 黃金外匯保證全專案,可固定配息,


至今年非法吸金上億元。 3

以上這類利用「後金補前金」的詐騙吸金手法,筆者以前曾經

寫過跟分析過,市場上都知道有所謂的 18 個月吸金法則,就是前 6

個月,吸金集團一定很慷慨每月高額配息,當到了第一個 6 個月之

透過外匯名義行使詐騙之各類手法
後,投資者已經開始漸漸誤信這是真的,然後開始協助吸金公司拉

客戶,拉親友甚至到處好心幫忙推銷。第二個 6 個月就是吸金集團

大肆擴大招攬生意的時候,滾進來的資金會越來越龐大,到了第三

個 6 個月時,吸金集團開始以各種名義來推遲配息,甚至要求行銷

人員去市場吸取更多投資者的資金。就在第三個 6 個月後的某一天,

.吸金集團把所有資金都匯出並準備脫逃時,吸金公司會突然宣布倒

閉,留下爛攤子給貪求客戶佣金的行銷人員,而吸金首腦從此可能

逍遙法外,或改名換姓,或莫名其妙從地球上消失再也找不到該吸

金機構負責人。

3. on.cc 東網專訊,檢調破跨國投資賭場大騙局吸金 19 億元 (2015 年 10 月 l 日),東網新聞,取自·

_
址 http : //tw.on.cc/tw/bkn/cnt/news/20151001/bkntw-20151001165208705-1001~04011~001.html

39
是商品,還是詐騙?

這類藉由「外匯」名義行使詐騙花樣的手法,過去層出不窮,

現在依然有許多是正在發生的進行式,筆者相信,未來還是會再次

發生,受害者從來就不會少過,因為人類的貪婪跟無知從來就不曾

中斷過。詐騙的源頭很可惡沒錯,但若沒有一大群搖旗吶喊大力推

銷的行銷業務,這類詐騙也不可能讓如此眾多的人進場。通常為了

客戶的佣金,行銷人員才會如此地肆無忌憚。其實,筆者也收過有 .
讀者私下訊息給我要推銷類似吸金的商品,這真的讓人很搖頭嘆息。

貪婪的人永遠見不到蜜糖裡面的毒藥,筆者對於市場上被詐騙集團

騙取資金而血本無歸的投資者深藕遺棫;也對那些拿詐騙集團的佣

金來拉客戶的行銷人員建議,不要再做這種損人不利己的行為。

現在筆者最戚到傷心的是,詐騙團體每每都利用「外匯」這個

商品來行騙,讓原本正正當當交易外匯行為被汙名化甚至妖魔化。

因為有太多太多只想到利益而不顧客戶資金風險的業務員樂於當詐
騙團體下線,因為業務人員(不管是 IB 還是任何角色)只看到佣金

利益,而風險卻都讓客戶去承擔。這類新聞事件我相信未來還是會

再爆發,會再有人被收押,會再有受害者咬牙切齒咒罵。但,投資

者若不貪它那完全不合理的利息收入,又怎會損失本金呢?真正的

外匯是有「交易」的、有買有賣、有獲利有虧損。在有交易的情況

之下,怎會有「保本保息」這種商品呢?打著「保本保息」文宣的

商品 一 定不是外匯,它只是打著「外匯名義」行使「吸金」的行為,

因為只要有正常買賣,如何保證能夠「保本保息」?況且,「保本

....... 保息」這種文宣恐怕已經觸法,且嚴重欺騙投資者。

.. 所以初進入外匯市場的初學者要有正確觀念,在外匯交易這
個市場裡,不存在保本保息、保證獲利這種金融商品。若有人打著
「保本保息、保證獲利」口號,它不是跟外匯交易有關的商品,不

管這類商品是月息 6% 還是年息 6%' 這類商品就是典型的金融遊戲

(Money Game) 。 讀者必須小心謹慎才不會誤信此類金融商品 , 而


導致自己辛苦錢血本無歸 。

帳戶完全不交易也可領利息

筆 者曾收到某位讀者的詢問,就是有關於在外匯市場上有某家

外匯經紀商提供 一個很特殊的金融服務,就是客戶只要開戶且入金,

這個有入金金額在裡面的實單帳戶可以完全「不必交易」,而且這

樣 一 個「實單帳戶」可以領取年息將近 6% 的利息 。 當然,該外匯

經紀商的確有提供種種能夠說服客戶它是「合法且安全」的資訊.

包含各類的保證、信託、公司合法性等等足以取信於客戶的資料。

我們來看以下圖(圖 1-1)• 這是近期台灣的兆豐銀行對外公告的外

透過外匯名義行使詐騙之各類手法
匯外幣存款利息,以及美元短期借貸利率的 一 個表 。

兆豐銀外匯存款利率
.., _,. a,
. - -M
鼻畫西
蛔 ·一
00鹹lOO Ol!IOO 0一蕊 0.2國
=" 。.2500
一月

0 3000

0 5000

0 5500 0.7500
-•
0 9000


lttWI
売矗Jail
....
US I I 0150

,.. . , 四 一 o 0100 o 0100 o0100 o a200 o0300 o oeoo o 1000 o 2000

"一
。 0200 0 0200 0 0國。 0500 0 0:,00 0 1~ 0 2500 0 JOOO O ~ 0 3600


瀛•uot

'°"'
u這匕

••JPVJ
0.3000

00100

0001 。

0 0010
一, 1 函

0 0010
0 0200

0 0010

0 0010
1 2000

0 0200

0 0010

0 0010
I 3000

0 Q20l

0 0010

0 0010
1.!Wl()C)

O 0500

0 oo,o

0 0010
1 酬JOO

0 1000

O 0010

0 0010
1 7000

0 1500

0 0010

0 0010
1 7500

0 2000

0 0010

0 0010
I IIOOO

0 2000

0 0010

0 0020

.,..`
ui..• 00國 00砸 o,soo 01500 o, 洳 03000 0 鹹泗 0.5000 。磁 00000

-
ISCKJ

........
"""'
.嚼"
!ZARI
。 00,0

。 2000

0,函

,0000
0 0010

0 2500

。 0000

2 1000
0 0010

0 2500

0 (l(l(l0

2 7000
0 0010

0~画

0 (l(l(l0

2 1000
0 0010

0 5000

1.4000

• eooo
0 0010

0 e000

1 亟

• eooo
0 0010

0 7000

1 4500

• 3000
0 0010

0 UICI

1~心,

嵋 ,000
0 0010

O 0000

(l(l(l0

4 JOOO

贏~田I 00010 。 0010 0001 。。 0010 00010 00010 00010 00010 000,0

0~0 鷉500 0 0500 1 2500 1 鹹 1 蕊 18500 17500
'""
·-
IQ<YJ

-~-賣
惡I

_
41
在這個圖 1-1 裡,我們很明顯可以看到利息最高的是南非幣,

一年期年息 3.75%; 其他貨幣的利息較高的是澳幣年息 1.8%' 紐幣

年息 1.8%' 人民幣年息 1.75% ; 而美金的短期借貸利息是 6.25%•


是借貸利息,不是存款利息。

金錢遊戲的共犯結構

我們回到該位讀者的問題,「入金之後不交易」就會有 6% 利息, .
既然上方的圖表明顯的顯示,現今國際體質正常國家的貨幣定從利

率都不超過 4%' 一個外匯經紀商能夠提供年息 6% 的配息率是相當


令人起疑的。如果,有家外匯經紀商期提供給客戶只要入金就享有

高額利息,即使它是存入了該國的銀行,至少得要有「利差」,這

樣經紀商才會有利益。不然外匯經紀商要如何生出錢來配利息給客
戶呢?且外匯經紀商既非銀行也非壽險公司,它只能提供交易平台,

不能提供給客戶任何抵押或非抵押貸款,所以,幾乎很難有借貸利

差類的金融商品可以提供給客戶。除非該家外匯經紀商利用客戶的

入金資金,去做非法地下金融,像非法高利貸或非法洗錢等等。

「入金之後不交易」就會有 6% 利息,筆者很簡單的打個比方,

我們拿 100 萬放到 A 家裡的的倉庫,因為 A 不僅不會,也證明跟我

們說絕對不會動用我們的錢,那放倉庫或保險櫃都可以,反正就是

不能曝險在任何交易之上,然後每個月付我們 0.5% 的利息。年息雖

然也不是很高,因為完全不動用到我們的錢, A 只必須想辦法生出

我們的利息就可以了。天底下有這種事嗎?奇怪的是,還很多人相

信這種事!

..
我們可以嚴肅的來討論這整個共犯結構。最上層是提供利息給

最底層入金客戶的外匯經紀商,假如它是外國的外匯經紀商,那它

就會找當地的總代理來執行這項業務,然後總代理再找區域代理,
區域代理再找下層的業務員來推廣這項業務,然後最後把對外宣稱

的這個利息給客戶。所以,外匯經紀商在發出年息 6% 之前,已經

至少發出三層的佣金給推銷該項金融商品的業務人員。假設最底層

入金的客戶拿到的是年息 6%' 那跟客戶推銷的業務員要不要賺呢?

區域代理要不要賺呢?總代理要不要賺呢?然後,最上層的經紀商

要不要賺呢?假設從外匯經紀商開始一直到業務員每一個層級都只

賺客戶入金額的 1% 好了, 一 共是 4% 的利益必須再加上去,然後

再加上給客戶的 6%' 所以,光是這個金融遊戲的「成本」就高達

10% 。且外匯經紀商還跟客戶你掛保證喔!

外匯是一種買賈交易,不是金錢遊戲

那也就是說,推廣這項金融商品的外匯經紀商 一 定應能夠「保

證年利益超過 10% 」,否則該外匯經紀商一定是賠錢。那我們再倒

透過外匯名義行使詐騙之各類手法
回來看,所有能提供「保證利益」的大概只剩下「定存」,因為完

全沒有交易,所以任何的有交易行為的金融商品都排除了。但最大

的問題是,全世界有那 一 個國家的貨幣定存可以提供 10% 以上利

息?即使有,也沒有定存價值,因為該國家的貨幣貶值率會更高於

銀行的定存。難道該外匯經紀商是把客戶的錢都存放在這類國家的

銀行嗎?不然如何將如此高額的利息配給客戶呢?除了該外匯經紀

商在當地或國際上做洗錢或放高利貸,或是利用上 一 個章節所說的

「後金補前金」的詐騙手段之外,筆者實在想不出其他的答案。因

為在邏輯上,筆者實在完全找不出 一 絲絲的合理性。

曾經有位讀者客戶跟筆者爭論,「全世界最大的外匯經紀商」

也公然對外做這種類似金融商品的生意,難道這家全世界最大的外

匯經紀商也是吸金嗎?是的,就筆者的認定,這種金融商品本身就

是「吸金」,因為真正的外匯市場不是這樣的。真正的外匯市場是

_
43 .
有交易,有賺有賠,有利潤有風險的。對於這家「全世界最大的外
匯經紀商」為何會推出類似的金融商品 , 筆者只能推理認為它可能
拿吸金來的錢來支付在「瑞郎原爆事件」時慘賠後為了度過難關而
對外借錢的高利貸。因為該全世界最大的外匯經紀商得付月息 10%

的高利給這家公司 , 所以即使提供「年息 10% 」給入金客戶的金融


成本都划得來。

但是這跟「外匯交易」一點關係都沒有,這是純粹的 Money

Game 。讀者在投入資金到這類商品想獲取其利息利益之前,應該先
思考其風險性。

球員兼裁判開賭場兼提供賭具

前一陣子台灣有一件相當大的經濟犯罪新聞,引起相當多人注

意的原因是受害者大部分都是年輕人 , 且都是受過教育的知識份子,
卻被一個學歷不高又自稱為「柯博文」的「外匯青年軍」騙的血本

無歸。新聞上指出有的年輕受害者還為了入金參與這個遊戲要求家

長去貸款,結果當然是賠光所有資金。以下是這個新聞內容 :

打著「戰爭遊戲,自動化獲利程式」旗幟在網路號召下單的「外匯青
年軍」,遭檢舉不法吸全數 10 億元,台北地檢署今天上午指揮台北市調處
發動大規模搜索,橫跨北、中、南等處,查扣保時捷、藍寶堅尼等至少 5
輛超跑及多部重型機車,並約談化名「柯博文」的青年軍最高统領吳姓男
子及多名集圉成員到案,預計傍晚陸續移送台北地檢署蝮訊。

據了解,吳姓男子學歷不高,卻從 2012 年開始,設計自動化外匯交


易程式,再利用年輕人沉迷埭上遊戲、追求時尚、明牌等特性,以直銷概

- 念及綱軍模式包裝、經營「外匯青年軍」、「戰爭遊戲綱」等 10 多個網站,
還自封最高统帥「柯博文」,宣稱青年軍旗下自 1000 美元入門的指揮官级,
依投入全額沿级起跳,吳男下有 10 餘個軍圍,在全台各」也舉辦投資說明會,
以老鼠會方式吸引年輕又有錢的富家子弟投入,將金錢化為遊戲戰爭方式

搏殺,宣稱每次可快速獲利 5% 到 10%' 每月可獲利 10% 到 20% 的報酬,

l 年就可償還全部本金 。

不僅如此,集圉還以經驗分享、展示超跑、重型機車或出國旅遊等方

式炫富,吸引年輕人投資,但實際投入資金的投資人,最後幾乎都血本氣

歸,吳男等人則將坑設投資人的全額拿去購買豪宅、超跑,受害者多為 2 、

30 歲的年輕人 。 ……

檢警追查,年近 50 歲的吳枱緯自稱外匯經纪商, 3 年前創立「外匯青

年軍」投資固體,宣稱開發了一套自動化外匯交易程式。透過戰爭遊戲模

式,投資境外外匯保;;登全。至菸投資策略,就用「達摩戰艦」、「神鬼戰

士」、「超级天綱」等名稱包裝拍出。入門會員得徼交 1000 美全當指揮官,

可快速獲利 5% 到 10%, 每月獲利高達 20% 。會員們最好能一個拉一個加

入,因為每找一人還能抽取傭全 。

透過外匯名義行使詐騙之各類手法
只是,一名前幹部級會員曾在網路上爆料,所謂自動化操盤根本是假,

錢全進了吳柏續等創始幹部口袋,用來買瑪莎拉蒂、保時捷等名牌跑車,

貼在臉書社困上炫富,吸引更多懵懂無知年輕人參加。前會員強調,所有
公佈的獲利赧表、要分給「下線」多少傭全,全由高級幹部自行填寫,只

要不斷招募新會員,不斷辦活動,讓會員使用程式,就能「冼」出一堆錢,

簡直和老鼠會及兩樣。 4

有位讀者也曾經與筆者討論這個金融犯罪案例,上面這則新聞

裡被收押的「外匯青年軍」不是有在外匯平台上交易嗎?怎會是詐

騙?這其實是比較複雜的問題。這個團體除了吸金之外,可能真的

有交易,不過我們需要先釐清一些觀念。

4 法庭中心,「柯博文」率外匯青年軍 吸金數 10 億遭搜索 (2015 年 9 月 16 日).蘋果日報,取自:

_
http : //www.appledaily.eom.tw/realtimene、vs/article/new/20150916/692731/

45
Market Maker 經紀商:跟客戶對賭

我們需要知道,外匯市場裡真正受監管的外匯經紀商是不能以

自己的名義來為客戶做操盤行為,除非它本身也有另一個允許代客

操盤的合法牌照,這在以英國金融法規為基礎的金融法律都是不允

許這樣做的。一般來說,一家合法的外匯經紀商就是很單純的只提

供交易平台給客戶下單,然後服務客戶在下單上的任何問題,外匯

經紀商的利益就是客戶下單時 ASK-BID 之間的點差利益 (Spread) 。 .


如果是跟客戶有對賭行為的 Market Maker 經紀商,其利潤除了點差

利益之外,還包含客戶在市場上賠掉的錢,不過這都是在「合法」

的法律範圍之內。這是讀者需要知道基本觀念。

而「外匯經紀商」所能做的,就是行銷它們的交易平台,也

就是透過自身公司的業務行銷人員,也拉攏市場上知名的外匯操盤

手或程式設計商成為它們的 Money Manager (MM) 、 Introducing

Agent (IA) 、或 Introducing Broker (IB) 等等來讓客戶在該外匯經


銷商平台上開戶,成為該公司的客戶。而這些市場的外匯操盤手或

程式設計商本身不能又具備是外匯經紀商的身分,所以,這兩者不

能有利益對價關係。外匯經紀商僅提供平台及交易服務,外匯操盤

手或程式設計商僅提供代操下單為客操盤服務,兩者必須是 100%

獨立的,這在全世界外匯開放國家的金融法規裡幾乎都有這樣的明

文法令的規範。

客戶的錢賠到經紀商口袋

再者,如果外匯經紀商本身就是跟客戶對賭的 Market Maker 公

- 司,也就是說,它本身跟客戶有「利益衝突」的關係時(即當客戶
獲利它會虧損,而當客戶賠錢它才能賺錢的情況之下),若外匯經

紀商本身又拿出「交易程式」來給客戶下單,那根本就是「球員兼
裁判」,開賭場然後教客戶如何賭錢。那客戶簡直就是與虎謀皮,

完全沒有勝算。在與客戶有利益衝突的情況之下,全世界有哪一家

Market Maker 性質的外匯經紀商會希望客戶賺錢呢?當然會希望客


戶賠光光,然後把客戶的錢洗到自己的口袋去。

「外匯青年軍」跟此類情況有些類似。筆者並沒有非常清楚「外

匯青年軍」這個團體的犯罪行為細節,它們或許並不明目張膽的吸

金,但該團體的確是有透過這種自設對賭 Market Maker 性質的「外

匯經紀商」模式來把客戶帳戶的錢「賠」到他們自己的口袋。雖然

交易程式或操盤手無法為客戶獲利時是不能定罪的,也不可能定罪。

(如果這個能定罪,那全世界成千上萬的基金經理人都要入監獄了,

因為賠錢的基金多如牛毛 。 )但是利用交易程式或操盤來讓客戶賠

錢,且客戶賠掉的錢就是流入自己口袋,這個絕對 100% 會被定罪。

不僅僅外匯市場,台灣也有知名合法的銀行投顧公司操盤經理人這

透過外匯名義行使詐騙之各類手法
樣做而被收押。

跟單跟到入火坑

曾經有位筆者的舊學員詢問有關「跟單系統」的問題,因為最

新版本的 MT4 已經有增加了這個功能,請見圖 1-2 。

MT4 Signal Page

___.,,r 一
·--
___/ """-"""'"""'"'

一=
~=:- , _ , , .嶋 -, ~ I - "

----=
~~
_,,,,,,.,-==--
""'囑 1 四 ,一 , ,,_

., 磾
,..,,..
_,,,.
,,. ,. .
N氬 O

~,., *
贓 O

~ ==-- `譯.,_ _,u, 辶, "

_
47
在外匯市場裡,最知名且最多人提起或使用的跟單系統是一個

「跟單系統平台外匯網站」,稱之為 Zulutrade5 。這個網站剛開始就

是讓程式設計者公開讓投資者「跟單」,透過複雜的轉嫁系統,大

玩三邊遊戲(外匯經紀商、投資者以及程式設計商),最熱門的程

式設計商聽說每個月的收入號稱高達百萬美金;因為全世界有無數

的投資者期望透過這樣的系統幫它或取利益。也因為這樣的服務是

有利可圖,所以 MetaQuote 公司在新版本 (MT4 Build 600+) 的軟


體裡加了這個功能,也提供給全世界投資者做跟單的服務。

「虧損陷阱」的把戲

嚴格來說,這其實是一個很棒的商業模式,但卻是很容易讓投

資者掉入「虧損陷阱」的把戲。也就是說,這種模式,最賺錢的是

「跟單系統平台外匯網站」 Zulutrade 本身(因為 Zulutrade 可以跟程


式供應商 6/4 拆帳),接下來是「程式供應商」以及外匯經紀商,

而面對最大風險的仍然是終端投資者 Client 。也就是說,這其實又再

一次的 把投資者當傻瓜。世界上為何有那麼多的投資者甘願投入陷

阱呢?這同樣是投資者看了表面的績效圖而讓貪念蒙蔽了自己理性

的判斷。筆者為何這麼說呢,因為跟單其實有非常多隱藏性風險。

外匯的交易類似一個生態系統 (Ecosystem)• 最上層是

InterBank 以及 Liquid Provider' 也就是國際報價銀行,接下來是

Forex Broker• 外匯經紀商,最後才是 Traders• 即 Clients 終端投資


者。而當一個 Clients 終端投資者要送信號出去交易時,是一層一層

出去的,假設我們規避掉所有跟你對賭的 Market Maker 對賭經紀商,

光是透過 ECN/STP 經紀商的對市場丟單之「下單」模式,一般投資

.. 5 參見 ZuluTrade 網站,網址 http : //www.zulutrade.com/?Lang = en


客其實已經落後「真正市場」價格好幾個 Ticks• 尤其是價格在「快

市」時,也就是在價格快速變動的市況下,報價早就跑到天邊去了,

更何況是利用「跟單」系統來下單,不僅延遲過久,資訊也是落後

的資訊。

系統問題與潛在風險

筆者可以很簡單的列幾個問題來請讀者思考有關於跟單系統的

問題跟潛在風險:

1. 如果跟單系統下單價格成立之後,但是到了 Client 端終端


投資者時價格卻已經跑掉,那 Client 端該下單還是不該下

單?

2. 跟單系統其實有點像一種黑箱作業,跟單系統不會提供程

透過外匯名義行使詐騙之各類手法
式的設計理念跟進出場邏輯。

3. 當跟單系統的信號讓 Client 端終端投資者也同步進場開倉


了之後,如果發生這三方之間(跟單系統 Client 端終端

投資者~ 的其中一方發生網路中斷現象,若

跟單系統已經出場,不管是獲利還是虧損,但「 Client 端終
端投資者」卻因為沒收到出場信號,這時該怎麼辦?

4 跟單系統的風險設定值如果大於「 Client 端終端投資者」本


身可以承受的風險,「 Client 端終端投資者」該怎麼調節?

所以,想投資獲利的終端投資者,若只是看到表面的獲利曲線

就去套上「跟單系統」的信號,在上述技術上的幾個問題不解決之

前,一個外匯終端的 Client 交易者怎可能獲利呢?且其潛在隱藏性

風險其實是不低的。

_
49
聖杯傳說的謊言:任何市場裡至少有兩種市況

在網路上有許多類似「外匯自動交易研討社」的社團,筆者認

為這是好事。健康良性外匯專業金融知識互相討論並學習是一件很

不錯的事。在筆者的觀念裡,這類的研討社在實質內容的定義上是

必須有內涵性的教學或分享,例如程式策略、下單模式、資金管理

方法、理論架構、指標屬性、各類程式優缺點等等課程。

當免費下載的程式行不通時?

但如果只是到處宣揚該社團所開發出來的自動交易程式 EA 有

多厲害,一個月幫客戶賺幾 10% 利潤,那讀者就必須要有警惕。因

為有推銷自己 EA 行為恐怕就不叫「研討社」,而稱之為「外匯自

動交易推銷社」。其實這種行銷方式早在多年前國外就流行過了,

現在台灣流行時,其實是拷貝早期國外的「外匯程式商業推銷模

式」。

這種商業模式完全「零成本」,因為自動交易程式的下載者不

需付出任何開發的心力,只要拿別人的心血就可以滿街叫賣。據筆

者所知,外傳在台灣就有某位在大學教書的老師可能連程式都不太

會寫,但卻多次架設不同網站在吹噓自己的程式有多厲害。筆者擔

心,在外匯市場裡,連學術殿堂的人都這樣了,更何況是一般的唯

利是圖的行銷業務人員?如果連「程式」的交易邏輯都無法對外說

明,卻老是吹噓該 EA 的績效,這其實會誤導投資者對外匯的投資

心態。投資者要小心的是,一般的行銷人員都沒有程式開發技術能

........ 力,當下載來的程式出現問題時,行銷人員最常用的方法就是「再

換另一套程式」,因為他們沒有能力可以即時解決投資者的問題。

其實現今在全世界可以完全免費下載的「自動交易程式」真的
是多如牛毛,筆者手上的免費指標跟免費自動交易程式 EA 就各超

過 1500 套。尤其新版 MT4 Build 600十以後的 MT4 版本,新增了投


資者可以自行下載的免費程式資源,只要投資者夠用功,網路上免

費資源其實非常龐大。最常看到的就是利用回測資訊的圖表來標榜

該程式可以無所不摧,獲利無限。經過這些年來的市場洗禮,尤其

歷經過「瑞郎原爆事件」的投資者都很清楚 , 免費提供下載的自動

交易程式幾乎沒有 一 套可以獲利,同時只靠單一種程式策略是無法

長期存活於外匯市場的。

兩套以上策略才能因應市場萬變

以下圖 1-3 是 EURUSD• 它是日線圖,我們看從 2014 年的 4 月

一 直到 2015 年的 二 月,它 一 直都是「趨勢向下」,如果有投資者在

這段期間使用「馬丁格爾策略」或類似馬丁格爾策略,也就是賠錢

透過外匯名義行使詐騙之各類手法
加碼策略,不管是在何時何點位進場,帳戶結局恐怕都不樂觀。相

反的,如果在 2014 年的 4 月 一 直到 2015 年的 2 月這段期間,投資

者所使用的是「反馬丁格爾策略」或類似反馬丁格爾策略,也就是

賺錢加碼策略,那「獲利加碼」的威力將使得投資者大賺數倍甚至

十倍以上的利益 。

EURUSD Daily
-一~-.,- .....
'I
'"''"'V"'~

~ [
·-· 一一. ·-一 曰- - - -一.\竺鬥昱 _
51
EURUSD H4

我們再來看圖 1-4 。這也是 EURUSD• 它是 4 小時線圖,它從

2015 的 2 月 一直到今天的 2015 年的 8 月,它 一 直都是「震盪巿況」。

在這個市況之下,如果投資者使用的「馬丁格爾策略」或類似馬丁

格爾策略,至少每個月一定的利潤應該是跑不掉的。

因此,只靠 一 個策略程式想打敗市場,其實是很天真的思維,

因為市場本身即使最粗分類也分成「震盪市況」跟「趨勢巿況」。

所以,至少最低的市場應對也得要拿出「兩種以上」的「策略」來

對付市場才可能長期存活。

例如,在「震盪巿況」下使用馬丁格爾策略或類似馬丁格爾策

略可以 一直獲利。我們不管該市場是向下震盪還是向上震盪 ,只要

市場的模型是有 一 定程度的「震盪」,馬丁格爾策略 一 般來說都是

會獲利的。但是,任何商品的市況並非只有震盪,它還有「趨勢」

模型的市況,當市況是處於「趨勢」模型,馬丁格爾策略要嘛就是

一直停損,不然就是帳戶爆倉。所以在趨勢市況之下來說,我們就

.. 必須使用「反馬丁格爾策略」來執行「順勢加碼」的操作,而不可

使用馬丁格爾策略讓帳戶處於溫水煮青蛙般地慢慢邁向死亡的境
地。所以 , 筆者並沒有 100% 同 意並認同真的有某種「聖杯型套 利

程式」可以 一 套策略走天下 , 雖然筆者 也 是一直努力在嘗試 開 發類

似聖杯型套利程式 , 但以目前筆者的智慧還不足達成這個目標。

增加外匯知識強化自身投資技巧

以下是筆者分享給讀者 的 幾個 相 當不錯 的 外匯知識來源 , 透過

這些網站 , 讀者可以慢慢日積 月 累的增 加 自己的外匯知識 , 並能很

清楚的識破市場的謊言或騙局 :

BabyPips
www.babypips.com

-
透過外匯名義行使詐騙之各類手法
...,~.,•-•mc.t,a
Uli
C 」
18

Forex Trading Signals

一 一
-
- .. ... . ....

. 西 ' `重 U
•. ·- , ......-

....-~_, ............ ,...... ....
鼬"這如-凸山- . . - . . . . . . . . 缸鹹西m, .,,..,,.,.
輯`虹. 缸~-----

-·'·-''·-
ZFXCITI - "

ForexFactory
www.forexfactory.com/forum .php

~-,--
. 記'·=
__
.,..,,
·--,,~·
·~-..
. ,''~'""~

.....
-,~~··~--·-·-

""' " .
一·
-
-......
·--· 一·~ ·-.
-~~•-一 ·

,•-n•~·

_
53
Forex-TSD
www.forex-tsd .com/articles

-體國鼬辛盅~. ..i.":'I
--
..... 辛辛r,.~-:.:-:..~--::...."::'::"'"...:.~ 至互;云;;::.-=.·::.."'::.:.."'.:,":::-....--=
巳 •
~
硼回____ ........ .,_..__ .
11n,.,.,.,,,1 F,°"'A<Mfflr Toorw, Mr油•of'ilmm面(印
. . . . . . . . . . . . . . . 荸. .,... 心,. . . . . . . . . . .
--一...
''
...,_心
,. 母國.,.....,, mm ""一一一,..
..-...
r.-. <iARlir州''"情,~+>I·fo,m 伯「`面""面-"
云亡 ....
~, 心""'- ·
. - ...
a,m . . . . . . . _ ...... ., 心一一·-
圖., 啊 ........
仁 「面面.....

蛐-~ 這""""'"叫9 血 w,
11 ... .....面廑面「面,_西-

m m ,.,...-_ .. o,m,.-=·""......_",.,.,,..-,._
... 量 ""'
鼬一·賈,., 一洫屮屮U這
r.-.
户亡? 硒........
m m 一~--·""'·--·可缸·-一叫....
_ _ _ ., 囑`重 ·-

"""'·•., _ . . . ~-,··,, 抨""'"'­

N ::.,~:=..'"-":.::."'~=-"""=':::..:,."-= 囯罕=-:::::..=::--.!.."',:.':".:::::..":!:".::.
"'"'這 m 面"而O<itltmrw,HJ一a!H""

""''"""" _.,__ ---~ 心 L.

I
圖 1-8

I
investopedia
www.,nvestopedia.com/
I 、 II丶1(11'1 Ill I
, ., , ., __缸..... """'"'"= <tt鱸心四·- '心璸,,, __ ,._."'的m
'""品 1...
干.,,.,,心·~''""""'-
, 0 l I

- j -~~
Active Trading


Active Traders Tum Bullish on Become a Binary Brol<er
Utilities
R•MO~oh<,Ou~d 一 -Jin,证氥"""· 心
""'""""""""一一``鹹
., .....如「~ 「4 「""-·"

M=•
,.,....,_
OOllioin=M-~ 氐'"'~~ 「Mi"-~
'°""'鳴...... Free Day Trading Chatroom •

Trade「sToolkit

Free Forex Trade Copier •


+ Cl +

以上是筆者最常造訪的國際外匯網站。如果讀者能靜下心來每

天到這幾個專業的外匯網站逛逛,每天花點時間好好閱讀,不出 一

年,你所學到的專業知識就不可能會讓外匯行銷人員所騙,因為你

-
的外匯相關知識早已經勝過這類外匯行銷人員千百倍了。

/
免費課程 DIV

而筆者本身也有錄製一系列免費的外匯基礎教學放在 YouTube

上提供給所有外匯初學者參考 , 筆者希望通過免費 YouTube 課程能

帶給讀者正確的外匯市場知識 , 跟正確的外匯投資觀念。

以下的網址提供給大家做參考 :

外區課程一一外匯套利交易基礎篇 1/8
https : //www.youtube.com/watch?v = Bc-68Jk33JO
外區課程—一外匝套利交易基礎篇 2/8
https : //www.youtube.com/watch?v = qlNOoFlfNMo
外匯課程 外匯套利交易基礎篇 3 /8
https : //www.youtube.com/watch?v = _fvBldotZeo

透過外匯名義行使詐騙之各類手法
外匯課程—一外匯套利交易基礎篇 4/8
https : //www.youtube.com/watch?v = na6N55WGudEl
外匯諜程—一外匯套利交易基礎篇 5 /8
https : //www.youtube.com/watch?v = 9waD1ZsiWvk
外匯課程一一外匯套利交易基礎篇 6/8
https : //www.youtube.com/watch?v = PuONLFQ_nLQ
外匯課程 外匯套利交易基礎篇 7/8
https : //www.youtube.com/watch?v = Qy6HDcbo01U
外匯課程 外匯套利交易基礎篇 8/8
https : //www.youtube.com/watch?v = 6Rl YNktgXGY

_
55

您對您的外匯經紀商知多少

有關於外匯經紀商 (Forex Broker) 的詳細介紹,在《外匯套利 .


I 》書籍裡的〈第 三章外匯經紀商介紹〉已經有非常完整且清楚 地介

紹跟分析,本書不針對基礎知識方面在多述贅言。如果讀者對於外

匯經紀商相關的基礎知識不是很了解,請讀者自行參閱筆者的《外

匯套利 I 》書籍裡文章內容。

如何判斷外匯交易公司的正規合法性

本書會稍微介紹一下一家合法外匯經紀商該有的相關資訊,以
及讀者該如何去查證該外匯經紀商是否是真的具有合法性。同時,
筆者建議新進外匯的投資者不要輕信外匯經紀商或外匯經紀代理人

的廣告,在投入實際資金申請開實單帳戶之前,應該先下載你有興
趣經紀商的交易平台,先做觀察;並盡量找英、美、紐澳、瑞士、

日本、香港(英國法),註冊合法的經紀商較佳,其中以英國牌照

最為嚴格。因為資金的安全性也是投資者在選擇外匯交易商的過程

中必須重點考量的要素之一。

以上這幾個國家或地區是對外匯交易商的客戶資金安全,交易

規則監管最嚴格的,有專門的管理法律,所以,希望投資者盡量找

在這幾個國家和地區接受政府金融監管單位監管的交易商來開戶。

..
如果某家外匯經紀商同時具有上述多個國家或地區的合法且受金融

監管執照的公司,那更佳,至少可以顯示該家外匯經紀商並非是開

公司來騙取客戶入金的 Forex Scam (外匯騙子)。


以下有幾個簡單判斷經紀商是否合法且不坑殺客戶的特點可以

安心往來 :

1. 該外匯經紀商具有不只一個地區或國家之金融單位金融監

管的業務證明。

2. 該外匯經紀商之上手合作銀行必須是知名全球或當地之大
型銀行。

3. 客戶金錢的存入 ( Deposit ) 跟匯出 (Withdraw ) 透明迅速。

4 除了交易平台之外,提供完善的客戶後台系統。

5. 避開最常被網友評論是 SCAM 等級的經紀商。

6 多國語支援,即時障礙排除 24 小時服務等。

您對您的外匯經紀商知多少
以下是幾個網址供讀者參考。

_,___- c-
英國金融服務授權機構 FSA
www.fsa.gov.uk
1,,,.祈..... ,.... 1 mm

......'""· About the FSA

' ·Who=wv?
·What-do
• Aims .... ...,..,..

·The"""°""'
·C..-•
. c..,_,,_,..,FSA
-
As the financial regulat0< for the UK, we use a wide range ol rule-
making , investigatory a面 en缸cement powers to fulfil our statut叩
。bjectives

缸-· 面叫汨--"'~ 切鼬.. 叫屯"'"· 這國山造~


2000 (FSMA;
Wo 鼴•-loµ 吵占聶芍,叫..,, .... 國 U 叫屯, ...........

,_,,,,,.i,. 曲臼1 而 mnlOlim

W•-~•...............
......,,., 山四叫出·-- . . , .....~ ~ - · 血.,........,_

. . . . . . . . . .璽o,r磁阯,叫,.
..........
硒'"'哼...... 富•-k>lheT-,yand,

鹵叫而"諷[油.,,..,_ . . do 國圖..這面""·
`
lllllnlllllllla
上一.. .,..,..... 心 FSA'- I
5
一7
美國聯邦期貨業協會 NFA
區日珥
www.nfa.futures.org

硐[三三,已
-
AboutNFA J 洫 l滷, 1 宓洫>NFAI如tact•咧

Regi>t,.tion Cornphance Elect,on,c F,Hngs tnve,tor Informal叨庫 ""tion / Med;,oon Regula氐,n B,oker I F,rm lnformat;on (BASIC)

News Cente, Swap, lnlormaboo lnloonat面 fo, DCM, and SE斥 NFAManual Fi聶 a Cornplamt Ca,eer, at NFA

Online Registration System (ORS)


NFA's Ooli"'Rogislral~o Syslom (ORS) all函,fi,=
'""'"'"""'""''"瑋1,, w,~1ho CFTC ood ap函回
NFA =mbarah,p. ORS. 函画直哂'""函"""'
匹 wrthdrawa, o=ss NFA, 訳呻ttydoploy函'"'"
ool,yway ,o ORS 1ho NFA Dash氐,.,d,wmah
'"-屯, .. 1100蕊laod,og'""'roq"'rem,o"

Appli~o1'aod 叩"'"'"'這"'""~,'"''" """"

-
ru,ea,mo
018-"NFAR町,,可"""'如 ~~m
POoaodCTA,"("'"'"'"°""""'2018) , ~的•Pa蕊丶=d' E面呻 Now (New ORS U~,s)
27/2016-0澶.e,富-痂°'"""""這, •.「0
O..,, IB,, CPO, ond CTA," (H, ,,, "°""""''°

6/2016-NFAla<,«J•,- 一
面,._,..,,,,~」.. 罩~~--rro

匾,一··"=-霍霉lab

投資者對於外匯經紀商的須知

常見虛假宣傳用語

1. 零佣金 , 固定點差

外匯保證金經紀商聲稱不收佣金,但是收取 3 到 5 個點的點差

(spread 匯率的買入價格和賣出價格之間的差額),如果按買賣 l

手合約計算 , 也就是相當於付出了 3 0 美元到 50 美元的交易成本。

所謂零佣金只是將佣金變換了一個名字而已 , 潛在用意是誘導客戶

頻繁交易。經紀商通常承諾給客戶固定的點差,但是這樣經紀商就

承擔了額外的風險。因為 ECN 的點差不是固定的,會隨著市場的交

易活躍程度而變化;比如歐元/美元在通常情況下為 1 個點,但在

某些特定情況下點差可能會放大到 5 個點 , 甚至幾十個點差。正常

市場狀況下,經紀商以 3 個點差出售給客戶,然後以 1 個點差的成

本放到 ECN 上對沖掉客戶頭寸 , 這之間有足夠的利潤空間。但當

.. E CN 上的點差很高的時候 , 經紀商如果把客戶單子放到 ECN 上對沖

實際上就變成虧錢了。這就是為什麼客戶在某些時刻無法登入到交
易系統進行交易的原因之一,因為經紀商無法在有限成本區間內及

時地把市場風險轉嫁出去,所以乾脆限制客戶交易。

2. 不滑點和保證執行停利/停損單

經紀商通常承諾客戶所見到的價格既是可以立即成交的價格,

並且保證執行停利/停損單,正常情況下的確可以實現。但是各級

別的外匯現貨 ECN 上都不保證停損,經紀商承諾不滑點和保證執行

停利/停損單,也就意味著他們承擔了一定額外風險。當行情波動

劇烈時,風險如果超過了經紀商的承受能力,則可能不能保證原價

成交。

3. 銀行間報價

國際頂尖銀行主要在 EBS 和 Reuters 上交易,這上面的價格才

是真實的外匯市場價格。外匯保證金經紀商通常不夠資格在上面交

您對您的外匯經紀商知多少
易,他們 一 般從某家銀行或某個數據商拿到價格數據,過濾加工後,

然後再報價給客戶,所以客戶從經紀商看到的報價一般都是延遲的。

ECN 上的點差是浮動的,歐元/美元的點差通常在 1 點,而經紀商

的點差如果是固定點差,例如,歐元/美元的點差定為 3 點,這樣

的報價顯然不可能是銀行間報價。

4. 隔離賬戶或客戶資金與公司資金完全分離

為保證客戶的資金安全, NFA 要求 FCM 將客戶保證金與自有

資金的賬戶分開,且 FCM 應當在隔離賬戶 (Segregated Account)


中存入準備金。隔離賬戶指單獨存放客戶保證金的專用賬戶;準備

金是 FCM 的自有資金,數量與客戶保證金量成正比。 NFA 的賬戶

隔離要求是防止 FCM 挪用客戶保證金的有效手段。在 RCM (Refco


Capital Markets Ltd' 瑞富資本市場公司)破產事件中,其子公司
Refco LLC 的期貨客戶仍然可以自由提款,這就是隔離帳戶的功勞。

_
59
但是, NFA 只是對從事期貨交易的交易商要求建立隔離帳戶,

並沒有要求從事 OTC 外匯現貨交易的交易商為客戶建立隔離帳戶。

所以外匯保證金經紀商宣稱他們為客戶提供隔離帳戶只是一種宣傳

手段;即使經紀商真的將客戶保證金單獨存管,也可以隨時挪用,

因為沒有任何機構能夠監管這種行為。

5. 受 FDIC 或 SIPC 保護
某些外滙經紀商宣稱在其公司開戶的客戶的資金受到聯邦存款

保險公司 (Federal Deposit Insurance Corporation• 以下簡稱 FDIC)

或證券投資者保護公司 (Securities Investor Protection Corporation•


以下簡稱 SIPC) 的保護,但事實並非如此。 FDIC 的主要職能是存

款保險,它為全美 9900 多家獨立註冊的銀行和儲蓄信貸機構的 8 種

存款賬戶提供限額 100,000 美元的保險,在銀行破產的情況下(而

非在外匯經紀商破產的情況下)為儲戶提供一定額度的補償;並且

FDIC 只對支票賬戶、儲蓄賬戶、存單、退休金賬戶等銀行存款賬戶

進行保險,對共同基金投資、股票、債券、國庫券等其他投資產品

不予保險。 SIPC 則是對證券投資者進行保護的,所以 OTC 外匯現

貨交易並不在其保護範圍之列。

與 Market Maker 外匯經紀商打交道的基礎知識

整個外匯市場架構,最上層是國際銀行玩的遊戲,那叫

Interbank' 也可以稱之為 Liquid Provider• 亦即資金供應商。世界上

的各大型銀行,如 Citi Bank 、 JPMORGAN 、 BOA 、等等都是參與者 。

這一層次的集團是真正的球員兼裁判,它們也會進場去做外匯買賣,

-
但最大宗的是,它們提供報價給下游,而這個下遊就是外匯經紀商。

好 一 點又有良心的外匯經紀商會在伺服器上執行直接使用 Best-和 d

Best Offer 來做對外報價,所謂的「對外」指的是對所有外匯投 資者


客戶做報價,所以,交易平台上才會產生價格變動,而報價之後,客

戶之間的買或賣,再由外匯經紀商丟單到市場,這就是我們所熟知的

ECN/STP (Electronic Communication Network/ Straight Through


Process) 。

1. 外匯市場的層級

外匯市場就是像圖 1-11 所顯示由上到下的 一 層 一層的層級:

外匯市場的利益結構層級圖

- •
- •
您對您的外匯經紀商知多少
-
[ f~

亡竺芒巴 ]

- •
- •
以上這些層級代表的是外匯市場整個架構的商業往來模式。

我們本身,也就是外匯投資者,就是處於整個產業鏈的最低 一 級,

Client 終端投資者。

_
61
2. 避 免有利益衝突的 經紀 商

但是有更多的外匯經紀商其實是不對市場丟單 , 直接承接客戶

的單來反向對做 , 這即是「 Market Maker 」。筆者在《外匯套利 I 》

裡提過,基本上外匯經紀商分成跟客戶對賭的 Market Maker 以及跟

直接丟市場的 ECN/STP 。筆者的建議都是希望投資者盡量避開跟投

資者有「利益衝突」的對賭性質經紀商,因為只要跟客戶產生利益

衝突,在伺服器掌握在外匯經紀商手裡的情況下,終端投資者比較

容易吃悶虧。因為終端投資者無法完全掌握真實的市場情況 , 甚至

連報價 、 連線等等情況都可能因為經紀商為了自我利益保護的關係

而犧牲他的客戶利益。

這種情形在對賭性質經紀商很常發生,所以 一 般投資者在選擇

經紀商時 , 不能只因外匯經紀商的行銷廣告 、 入金就送金、或低點

差等等行銷語 言 就相信並投入資金。什麼叫做跟客戶對賭的 Market

Maker 呢?用最簡單的圖示說明好了。下圖的圖 1 - 12 是 MT4 交易平

台系統簡易圖示,這個圖示可以很簡單的讓讀者知道什麼是跟客戶

對賭的 Market Maker ' 而什麼是對外丟單的 STP/ECN 經紀商 。

MT4 交易平台系統簡易圖示

Dealing Center

,-------一--一一一一 1
l

..
I
I
: program .,n ,
十 一-`
1 MOL.4
!'
I I

'
L 一一一-- - 一一一一一--一」
圖 1-12 就是典型的 MT4 架構。圖裡的 D ealing Centre 就是連到

投資者的經紀商伺服器,在工程語言裡,就是連到 MT4 Server 。從

架構圖就知道,「任何一個」終端外匯投資者的下單,其途徑就是

先經過外匯經紀商在送出去外匯市場。但如果你的外匯經紀商是一

個 Market Maker• 則架構圖裡的「 Market 」是不存在的,因為你的


外匯經紀商角色取代掉「 Market 」的角色,換句話說,就是你的外

匯經紀商跟你是對賭的關係。所以讀者只要把圖 1-12 上的 Market 雲

圖拿掉,那就是不則不扣跟客戶直接對賭的 Market Maker 經紀商。

因為沒有丟單,所以,客戶所下的單,到經紀商的伺服器就結束了。

所以,這類經紀商跟客戶在面對市場波動時 , 完全是「對賭」的角

色,所以,這類經紀商是跟客戶會有利益衝突關係的。

3. 認 清 Market Maker 的 真面目


早在數年前筆者開始經營外匯自動交易軟體開發時,令筆者印

您對您的外匯經紀商知多少
象最深刻的就是外匯 Market Maker 的行為。為何外匯 Market Maker
的行為會令筆者至今難忘呢?因為外匯 Market Maker 會利用各類
Dirty Trick (骯髒技巧)來令外匯投資者賠錢的手段,在其它的金

融交易市場裡幾乎是不會發生的,但在外匯市場卻被發揮的淋漓盡

致。目前整個外匯市場佔最大量的外匯經紀商型態其實也幾乎都是

·Market Maker' 因為跟客戶對賭性質的 Market Maker 的利益除了點


差利益之外,還有客戶賠錢的利益。又因為整個市場幾乎 90% 的

外匯投資者都是虧損收場,所以對賭性質的 Market Maker 才如此

蓬勃發展,並大發利市。因此,如果你所開戶的外匯經紀商是一個

Market Maker' 投資者就是進入一個可能有球員兼裁判的賭場,然

後跟它玩梭哈,你不僅得先付出賭金成本,還得防它出老干。

什麼叫做外匯市場的 Market Maker ? 如果很難懂,我們就先把


這類型態的經紀商想成類似是台灣「地下期貨的盤口商」,只不過

_
63
台灣地下期貨的盤口商的報價公開透明,所有價格來自於台灣證券

交易所的報價,而期貨投資者的角色就是跟你所入金的「期貨盤口

商」對賭,投資者的錢並沒有真正投入台灣期貨市場,當你賠錢的

時候,錢當然就歸期貨盤口商所有,當你賺錢的時候,期貨盤口商

必須付給你利潤。而外匯市場裡的 Market Maker 就像類似的遊戲 。

除此之外,因為外匯市場裡的 Market Maker 都有自己的後台


系統,其報價其實完全沒有公開透明可言。相反的,而台灣的地下

期貨盤口商所有價格來自於台灣證券交易所的報價,跟客戶的關

係只有賭輸跟賭贏的問題,不會有詐賭的現象。但是外匯市場裡的

Market Maker 會常常使出讓投資者拿不到證據的詐賭手段來讓投 資


者賠錢。

為何要讓外匯投資者賠錢呢?因為 Market Maker 跟客戶是利益

衝突的,沒有任何一家公司開張的目的是為了賠錢,當客戶獲利時

就是此類經紀商賠錢,所以,常常聽聞 Market Maker 使用 一些 Dirty


Trick 來讓客戶由獲利變虧損 。所以 ,當投 資者的「入金」資金歸零

的時候,其實就是投資者的錢都被洗到 Market Maker 的口袋去了 。

在上一篇章節裡有提到外匯青年軍詐騙犯罪新聞,筆者就是要

提醒投資者,當一個 Market Maker 型態的經紀商到處推廣該公司官

方的交易策略或外匯自動交易軟體時,投資者其實要非常小心。請

問,有哪個 Market Maker 型態的經紀商會推銷真正會令投資者「獲

利」的策略或程式 EA 呢?那它豈不是做賠錢生意?如果是 STP/

ECN 型態的經紀商對投資者提出交易策略或外匯自動交易軟體建議

-
時,因為他們要的是「交易量」,只要客戶越賺錢,才越會交易,

他們才有手續費可以拿,雖然這樣是不被金融法令所允許的,不過

就筆者個人認為至少在「可信度方面」是比較高的。
4. Market Maker 常見的手 法
Market Maker 類經紀商讓客戶賠錢,或讓客戶由獲利變賠錢,
大概會有幾個常見手段:

1. Slippage 滑價:這個最常發生。

2. Disconnection 斷線 : 工程師從伺服器端將 port 關掉,

外部 MT4 Client 就全連不進來,但網路連網一切正常。

3. Spike Order 幽靈單 : 客戶沒有下此價位跟手數的單 ,

卻自己跑出來的單子。

4. Fake Signal 假訊號:報價瞬間上沖下洗,把客戶的在

倉單全部去碰停損(因為對賭的關係,客戶的停損,就是

經紀商的停利)。

您對您的外匯經紀商知多少
5. Always Re-Quote 一-重新報價 : 為了讓客戶的成交價成交
在很差的價位,所以經紀商一直不讓客戶成交而重新報價。

滑價 Slippage 之解決方案

「滑點」即是 S lippage 。在任何的金融商品,滑點幾乎是無可

避免。但是滑點的頻率以及滑點的大小的確是會影響績效。尤其是

外匯市場,滑點更是常常發生;而不同的經紀商讓終端客戶交易所

產生的滑點也不盡相同。

在 一 個真正有對外丟單的外匯經紀商而言,把客戶的訂單丟出

去產生「滑價」的現象是非常有可能發生的,真正不跟客戶對賭的

經紀商產生滑價是市場造成而非經紀商私下動手腳造成。以前在市

場上曾有某家經紀商對外宣生他們的交易平台是「絕不滑價」,那

其實他已經很明確的告訴他們的終端投資者,客戶的訂單是「絕不

_
65
對外丟單」。說白話一點,也就是說,他們「絕對是跟客戶對賭」

的 Market Maker 。當初打出此宣傳口號來招攬客戶的經紀商竟然會

這麼坦白對外宣稱他們就是對賭的 Market Maker• 真的是令人戚到

有點好笑。

其實 MT4 平台本身在伺服端是可以「製造滑點」。因為伺服端

可以製造滑點,所以外匯市場上竟然也有「零點差 0 SPREAD 」這

樣的外匯經紀商公司。這都是市場行銷用的噱頭。零點差只要利用

製造滑點的方式,隨隨便便就可以讓客戶付出更高的交易成本。所

以,零點差或是絕不滑價都是典型 Market Maker 的行銷手法,就是

引誘投資者投錢進去,再一步一步把客戶口袋裡的交易資金變成自

己口袋的錢。因此,盡量避免在 Market Maker 經紀商開戶是比較能

避開這類問題的方法。

而在程式解決方面,避免太高滑價交易的設計並不困難,如下:

extern intAllowedSlippage = 3; -先限制「最大能容忍的滑價點數」。


BUY_TICKET = OrderSend (Symbol () ,OP_BUY,Lots,Ask,AllowedSli
ppage,0,0,TradeComment,Magic,O,Blue) ; -再把這個「最大能容忍的滑
價點數」送進開倉指令裡。

以上是最簡單且最被常拿來使用的方式。而在避開嚴重滑價問

題時,投資者也可以寫一個簡單觀測交易成本 Spread 的小程式,因

為藉由觀測交易成本 Spread 的小程式,可以觀察出經紀商在市場快


市時,是否會產生嚴重的滑價現象。以下的程式碼讓你輕鬆得知你

的即時報價的交易點差 (Spread) :

- //+------------------------------------------------------------------+
//I Show Spread Function I
//+------------------------------------------------------------------+
void ShowSpread ()
double spread;
spread = (Ask-Bid) /Pip;
strings = "Spread : "+DoubleToStr (spread, l) +" pips" ;
if (Ob」 ectFind (OBJ_NAME) <O)
{
Ob」 ectCreate (OBJ_NAME, OBJ_LABEL, 0, 0, 0) ;
Ob」 ectSet (OBJ_NAME, OBJPROP_CORNER, I) ;
Ob」 ectSet (OBJ_NAME, OBJPROP_ YDISTANCE, 260) ;
Ob」 ectSet (OBJ_NAME, OBJPROP_XDISTANCE, 10) ;
Ob」 ectSetText (OBJ_NAME, s, 12, "Arial Boid" , Labe!Color) ;
}
Ob」 ectSetText
(OBJ_NAME, s) ;
WindowRedraw () ;

斷線 Disconnection 之解決方案

您對您的外匯經紀商知多少
當家裡網路老是在「市場高潮」時連不上經紀商伺服器?若發
生這個情況,有很大機率跟你的經紀商脫離不了關係。筆者說何為
「市場高潮」, 一 般指的就是重大市場資訊發布的日期或期間。舉

個例來說,如果你發現你家電腦裡的 MT4 平台對經紀商的連線平台

網路常常在周五就出現「 No Connection 」字樣,這是因為你的經紀

• 商不希望在周五讓交易者入市獲利,所以幾乎可以確定這是 一 家跟
你對賭的 Market Maker 。

我們都知道外匯經紀商分三 大類, ECN 、 STP 、 Market Maker 。


其中的 ECN 跟 STP 都是往外丟單,它們的利潤來源來自於你交易手

續費,投資者的交易越多,它們才會有利潤,投資者的輸贏跟它們

沒有關係,若它們的系統 No Connection 斷線,那它們就沒辦法從你


的交易中獲利,基本上 ECN 跟 STP 類型的經紀商不會那麼無聊去刻

意選在周五斷線。

_
67
但是 Market Maker 可就不一樣了,當市場重大訊息公佈絕對
會讓市場明顯的「偏一邊」,這時 Market Maker 因為跟投資者是對

賭的角色,在這段期間 Market Maker 會賠錢的機率比較大。為了避


免自己賠錢,他們當然會想盡辦法保護它們自己,但又讓你找不到

證據。而 MT4 系統的通訊 Port 是使用 Port21• 因此,這類 Market


Maker 經紀商並不會做你所想像的去把網路線拉掉。因為如果是這
樣的話,連它們公司自己的連網都會有問題。他們為了要讓 Client
端的客戶都連不進來,只是請 IT 技術人員在遠端電腦上對「 MT4 •
Server 電腦」下達「關閉 Port21 」這個動作。此時全世界跟此經紀
商往來的投資者 Client 端全部出現「 No Connection 」,但是經紀商
卻可以大辣辣的對外宣稱,它們的網路連線是沒有問題的,同時把
所有斷線的責任都推到投資者自己本地的網路設備問題。

對於這個問題,投資者怎麼解決?筆者的建議,不要跟這類經

紀商往來。程式只能做簡易的防備,因為交易的伺服器在經紀商手
上,若經紀商真的要搞客戶,功能再強大的程式依然無法改變什麼 。

例如,經紀商若在美國非農數據公布後斷線 4 個小時,那任何程式
都變成廢物,帳戶只能眼睜睜看著「爆倉」或虧損而「無法停損」
的窘境。

幽靈單 Spike Order 之解決方案

所謂的 Spike Order 幽靈單的意思是指,投資者在自己的 Client


端平台根本就沒有下某 一 張單,但帳戶卻出現 一 張不是自己下的單

的倉位 (Position)' 這就叫做 Spike Order 幽靈單。筆者自 2006 年


開始接觸外匯以來,歷經過許多家外匯經紀商,在筆者本身自己的

-
案例上,發生過兩次類似幽靈單的情況,而兩次都跟外匯經紀商提

出申訴,但都沒有得到很好的答案。以筆者的經驗來看,遇到幽靈

單,經紀商本身不太願意承認,所以很難要求賠償或滿意的答覆 。
我們僅能建議投資者在交易的時候,將您所下的每 一 張單都要加上

註解。類似如下之程式碼:

extern string TradeComment = "GanaTrader IntelliSystem Ltd. ver


6.0.Demo" ;
ticket_buy = OrderSend (Symbol () ,OP_BUY,buylots,Ask,AllowedS!tpp
age,0,0,TradeComment,Magic,O,Blue) ;
ticket_sell = OrderSend (Symbol () ,OP_SELL,StartingLot,B 」 d,A l lowed
Slippage,0,0,TradeComment,Magic,O,Red) ;

上面不管是買單還是賣單,每 一 筆送出去所成交的倉位,都會

有註解。當你發現,在你的帳戶在倉單上出現不是你所下單的註解

或註解是空白(通常幽靈單在註解欄位是「空白」),你就能判斷

這應該就是經紀商伺服器所產生出來的 Spike Order 幽靈單。

而手動下單的投資者,可以在下單的 Comment 欄位上打上註

您對您的外匯經紀商知多少
解,如下圖 1-13 。

。refer Tab

Symbol: USDCAD, US Dollar vs Canadian Dollar


Volume: !0.02~ I
Stop Loss: I 。 00000 , : Take Profit: I 。00000 : :
I
Comment: GanaTrader IntelliSystem L~ I
Type: Market Execution
Market Execution

1.39563 / 1.39610
-鼴榊`',一
Attention! The trade will be executed at marlcet conditions, difference with
requested price may be significant!

_,...
_
69
假訊號 Fake Signal 之解決方案

假訊號,或稱之為假報價,這種情況比較會發生在交叉貨幣對,

例如 EURJPY 、 EURCHF 、 GBPCHF 、 AUDJPY 等等非美之間的交


叉貨幣對 (Cross Symbol) 。因為交叉貨幣的報價是兩兩直接貨幣的

相互報價,經紀商比較容易做上沖下洗來洗掉客戶的停損部位,這

種惰況幾乎無法對經紀商求償。而在直接貨幣上,通常假訊號比較

不常見,因為全世界各個經紀商在直接貨幣的報價上不會差異太大,

如果某家經紀商在直接貨幣的報價上產生假訊號,很容易被投資者

發現。但交叉貨幣因為交易者少,同時又因為是兩兩直接貨幣的相

互報價產生的價格,所以在市場的快市時,投資者的停損部位容易

被經紀商洗掉。

假訊號的問題無法利用程式規避,同時,終端投資者也無法有

證據證明是經紀商所搞的鬼,筆者的建議通常是盡量減少交易交叉

貨幣對。減少交易交叉貨幣對除了可以規避掉可能被洗掉部位的假

訊號問題之外,又因為交叉貨幣對的點差成本偏高,可以減少交易

的成本支出。

Always Re-Quote 重新報價之解決方案

手動下單時若產生重新報價 (ReQuote) 情況,平台會出現對話

窗,並秀出目前變更後的價格,手動投資者可以自己決定是否要接

受新的進場價格,可以自己按下「確定」或「取消」的選擇按鍵。

但是若是自動交易程式的下單遇到重新報價情況,建議是使用 While

-
迴圈來讓程式可以成交或出場;尤其是出場的部分。以下這段程式

碼,就是用來避免程式交易下單或出場情況招受干擾時的防備。以

下 while 迴圏裡的 Tries 可以加大,例如改為 1000 等等。


II+------------------------------------------------------------------+
//丨 Open Order Funtion
II+------------------------------------------------------------------+
void OpenOrderFuntion ()

Tries = 100;
ticket_sell = O;
Error= O;
while (Tries>O&&ticket_sell< = 0)

ticket_sell = OrderSend (Symbol () ,OP_SELL,selllots,Bid,AII


owedS!ippage,0,0,TradeComment,Magic,0,Red) ;
Error = GetLastError () ;
switch (Error)

case ERR_SERVER_BUSY:

您對您的外匯經紀商知多少
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_BROKER_ BUSY :
case ERR TRADE CONTEXT
BUSY:
Tries--;
break;
case ERR INVALID TRADE
VOLUME:
Print ("INVALID_TRADE_
VOLUME error on this pair, Please check order lots") ;
Tries= O;
break;

case 149: //ERR_TRADE_HEDGE


PROHIBITED :
Print ("Hedge trades are not
allowed on this pair") ;
Tries= O;

. .
71
_
break;
case ERR_OFF_QUOTES:
case ERR_INVALID_PRICE:
Sleep ( 5000 ) ;
case ERR_pRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates () ;
Tries--;
continue;
case ERR TRADE TIMEOUT :
case ERR NO ERROR: //ERR NO
ERROR:
Tries = O;
break;

default :
Tries = O;

-
經紀商及各類交易軟體評價參考的網站

如果讀者對於自身所交易的外匯經纪商沒有太多可信或評 比 的

資訊 , 以下這個網站 : Forex Peace Army (外區和平軍)可提供钅合讀

者去搜尋外匯綢友的評價。

ForexPeaceArmy
www.forexpeacearmy.com/ public/forex_broker_reviews

匠遍~.!,!~!紅呾·- .,;.._" -~-·-一;,:


,M............ 曰,'°""'"" IDT mOOOHC)\JOlT EOUCATK>< & FO<UMS FOR EX UW<>,. . TOOLS
.. «c: •;. .. ccJ . ; ·~J之-一

..... J
-- -- - -

. ,.,_,..,_.
lnf=atlon

,,,,.,,,,__ i 丞 Forex is about to change 11111111


I exness ..x-·- - , _

您對您的外匯經紀商知多少
• , _ . , . mm ... -。

73
ID
外匯市場的整體產業人員之利
益結構詳細剖析

外匯交易市場之產業利益結構

所有金融交易行為、包含保險從業人員都很清楚;一般來說業

務人員的獎金都是相當的高。但是,所有交易行為,因為出錢的人

要承擔風險,所以,最起碼的利益是一定要有所保障或分享;因為

一旦行銷通路商拿走絕大部份的利益,這樣不容易讓終端交易者獲

利。其實,終端交易者有大部份只是想要穩定不錯的利潤,並不會

真的很介意行銷通路商拿走佣金;但如果行銷通路商的佣金比起終

端交易者超過太多,且讓終端交易者根本就無利可圖,這種的商業

模式就無法持久。

外匯金融在國際上已經是一個成熟的金融產業,這個產業已經

可以養活數以百萬計的家庭。因為國際外匯市場至少有 500 萬個有

紀錄的實單交易帳戶,外匯交易在全世界都是合法的金融交易商品,

只是在台灣因為法令落後,處於金融法規的灰色地帶。整個外匯市

場架構,最上層是國際報價銀行 Interbank' 也可以稱之為 Liquid


Provider 資金供應商;例如世界上的各大型銀行,如 Citi Bank 、 JP

MORGAN 、 BOA 等等都是參與者。

- 一般來說 ,他們提供報價給下游,而這個下遊就是外匯經紀商

或大型對沖基金法人團體,然後進行買賣搓和。接下來才是經紀商

/平台商 (FX Broker)• 而此經紀商/平台商 (FX Broker) 如果是


丟單到市場的 ECN/STP 經紀商,他們會有 一 個橋接器 (Bridge) 來

跟有報價合約關係的國際報價銀行 (InterBank) 作對接,此橋接器

(Bridge) 市價在經紀商對外的伺服器之上,橋接器 (Bridge) 會執

行 Best-Bid Best Offer 來做對外報價。

直接與客戶對做的 Market Maker

所謂的「對外」指的是對所有外匯投資者客戶做報價,所以,

交易平台上才會產生價格變動,而報價之後,客戶之間的買或賣,

再由此外匯經紀商丟單到市場,這就是我們所熟知的 STP (Straight


Through Process) 。但若外匯經紀商不丟單,直接承接客戶的單來反
向對做,這即是 Market Maker 。而這時,國際報價銀行 (InterBank) 丶

或資金供應商 (Liquid Provider) 會有 ASK-BID 的點差利益 (Spread


Profit)• 當然,經紀商/平台商 (FX Broker) 對外的報價也會加上

外匯市場的整體產業人員之利益結構詳細剖析
他本身要獲利的利益,所以,他也會有 ASK-BID 的點差利益 (Spread

Profit) 。

如果此時的終端投資者 (Client) 是直接開戶在經紀商/平台

商 (FX Broker) 之下,那終端投資者 (Client) 所需承擔的成本就

是國際報價銀行 (InterBank) 以及經紀商/平台商 (FX Broker) 的

點差利益 (Spread Profit) 。以 EURUSD 為例,目前市場上大部分

的經紀商/平台商 (FX Broker) 的點差都落在 2-3 點 (Pips) 。也

就是每 一 手 (Lot) 投資者客戶需付出 20-30 美金的點差成本。然而

在實際清況下,外匯經紀商之下有些是直接的外匯投資者。但有更

多的投資帳戶其實都在外匯經紀商跟外匯投資者之間都會再掛了幾

「層」的「人員」,如代理商/行銷商 (IB/IA) 或程式供應商/顧

問/代操手 (EA Provider, Advisor) 等等。

_
75 .
依靠交易量抽取佣金

例如筆者本身是自動程式開發商,算是在這幾層人員的頂層。

接下來就是給 一般的銷售人員利益的小經銷商 IB 。每個小 IB 一層 一

層拿取交易者交易後的利益,類似整個社會的商業經銷層級架構。

所以,這幾層或 一 大層的架構利益,就吸引為數龐大的外匯從業人

員進場撈食。為何這麼吸引人呢?很簡單,銷售人員只要找到客戶,

上有自動交易程式,下有客戶資金,只要客戶交易,這 一 大層的行 .

銷人員都有利益可以拿。也就是從最上層的自動程式開發商到底下

可能只有一兩位客戶的小 IB 都有利益。風險是客戶在承擔,程式是

自動程式開發商所開發,行銷人員只要負責找到有錢的客戶就可以

有源源不絕的交易佣金利益入口袋。

如果客戶虧錢呢?外匯市場的行銷人員通常是把責任全部都推

給自動程式開發商或代操員,然後再去找看有無替代方案,或有無

更好的自動程式開發商。因為,客戶的交易量跟行銷人員的佣金息
息相關,因此,筆者常常被問到問題的第 一 名是:

「每個月交易量可以有多少個 Lot? 」

而不是:

「每個月可以幫客戶賺多少錢?」

為什麼會有這種現象?因為幫客戶賺錢並非行銷人員的主要工

作,有大量的交易量並能從中抽取大額佣金才是大部份外匯市場行

銷人員所考量的重點。也因為這樣的結構,讓整個外匯市場變成了

- 唯利是圖導向,造成整個外匯市場的發展變的很畸形。
資訊不對等衍生的點差

在任何的金融市場,沒有任何一個客戶是希望經紀商、業務以

及理專賺得很爽,而投資者自己卻一直都沒看到獲利。筆者的真實

戚觸是,目前在整個外匯市場裡,因為資訊的不對稱,在架構上,

真的很容易出現經紀商、業務、通路商賺錢,而終端客戶卻是不容

易獲利。客戶可能因為信任、想投資獲利等等因素而願意把錢交給

IB 或業務來執行外匯投資,但久而久之,發現自己帳戶無法獲利,

而自己的 IB 或業務卻喝香吃辣,自己帳戶的手續費支出竟比利潤還

高。通常利用下載來的 MT4 交易平台並開啟模擬帳號,就可以很清

楚看到自己的點差成本。例如下圖之圖 1-15 的「!」欄位就是經紀商

報出給終端交易者的點差。

MT4 Market Watch


—'

龘市
~';/'-::'.,_",,
`
Bid Ask High low Time" I
• USDCHF 0.96905 0.96959 54 0.97137 0.96535 21:58:58

• GBPUSD 1.44766 1.44833 67 1.45125 1.44099 21.58:58
• USDJPY 111533 111.563 30 111.747 110.817 21:59:41 的
• AUOUSD 0.75996 0 76149 153 0 76790 0 75938 2159:41 整
• USDCAD
曇 AUDCAD
1.30020
0.98842
1.30109
0.98986
89
144
1.30409
0.99580
129215
0.98630
21:58:52
21 59:41 閂
• NZOUSO 0.67977 0.68022 45 0.68719 0.67811 21,sg,41 II 業
• AUOCHF 0.73652 0.73810 158 0.74147 0.73480 2159:41 人
• AUDJPY 84.771 84.908 137 85.337 84.658 2159:41 員

uI~
• EURCAD 1.46535 1.46628 93 1.47109 1.45864 21 58:58 之


• AUDNZD 111770 112022 252 1.12195 111565 21 58:49
• AUDSGD 103029 103424 395 1.03782 1.03029
2158:59
+ CADCHF 0.74碚6 0.74616 130 0 74827 0.74261 21 58:52

,
• CADJPY 85 733 85.810 77 86.262 85.340 21 59:41
• CHFJPY 115 031 115129 98 115365 114.541 21 58 58
• CHFSGD
• EURAUD
<> EURCHF
1.40142
1.48166
1.09214
1.40318
1.48336
1.09270
176
170
56
1.40301
1.48459
1.09461
1.39503
1.47497
1.09042
21 58:58
21:58:52
21:58:58
I 剖
• EURGBP 0.77813 0.77863 50 0.78285 0.77732 21 58 58 析
+ EURJPY 125.696 125.758 62 126.180 125.282 21:58:58
• EURNZD 1.65732 165958 226 166178 164755 21.58:58
• EURSGD 153028 1.53327 299 1.53430 152633 2158:35
1.90278 1.90580 302 1.90711 1.88702 21 58:58
1.88244 1.88390 146 1.88759 1.87334 21.58:58 ..,

77
_
所以,如果讀者是自己直接透過經紀商開戶並自己交易,點差
成本通常就會是經紀商對外公告的點差。但如果讀者是透過經紀商

旗下的 IB/IA/MM 等開戶,則有兩種可能:

1. 交易點差沒有增加:這時是因為經紀商將他的原本要從客戶取

得的利潤撥出部分點差利益給 IB/IA/MM 人員,所以是經紀商


犧牲他自己的利潤,終端交易者並沒有增加交易成本。這對經

紀商當然也有好處,因為經紀商不需要花錢請業務人員做行銷,

該經紀商旗下的 IB/IA/MM 人員自己會去跑業務找客戶。

2. 交易點差有增加或增加佣金欄位的成本:這通常是因為在經

紀商跟客戶之間又多架上了程式供應商/顧問/代操手 (EA

Provider, Advisor) 的層級,因為業務並不 一定有操盤能力 ,或


程式設計能力,所以,會多架上了程式供應商/顧問/代操手

(EA Provider, Advisor) 這個層級 。這個層層的利益架構關係對


於外匯投資新手而言,應該要有一定程度的理解;理解了整個
外匯市場的利益結構之後,才不容易被行銷業務人員所蒙蔽。

..
外匯交易平台工
具再說明

子曰: 「 工欲善其事,必先利其器 。」

一 《 論語 · 衛靈公 》 第十五

.. 't

新版 MT 4 Build 600+
重點介紹

交易介面小幅改變

新版本的 MT4Build 60 研跟舊版本的 MT4 以起來算是一項很大

的改變。說老實話,我們長期以來都是跟在老美後面屁股走,忽略

了俄羅斯的軟體工業能力其實也是非常的紮實跟創新,如圖 2-1 。

MT4 Market Page


'iii
;i_ - °"'" ~ ~-,.....
.. . 画 · ~ ❖ 'i> (] .,;. IL 11 c ' ~ '13 IL I-'ij. • Cl · 霑 · , 羣
\ + I 一/ lit , A' >,• •• -血- "'*" ., 庄

新版 MT4 (Build 840) 就是長這樣,介面配置沒有改變多少,

但下方的 Terminal Window 有多了幾個選擇頁面,像是 Exposure'

- 用來顯示分析下單在倉單各貨幣商品的比例分析,像 Market 提供給


使用者多項服務,主要是商業化方面的服務,例如找策略、找 EA 、

找授課課程、找雜誌、找 書 籍等等 。 舊版本的 MT4 沒有這項服務 。


還有 Signal' 這應該是用來打類似 Myfxbook 或 ZuluTrade 網站的目

的,因為有 一 大堆跟單的商業交易下單信號提供給投資者選擇。

MQL4 以及 Meta Editor 大幅改變

下圖 2-2 中,整個系統變更最大的莫過於 MQL4 以及

MetaEditor• MQL4 架構已經由原本的「純 C 架構」改成「 CIC++


OOP 模式混和架構」,也就是說,程式開發人員可以在 MetaEditor

編輯器裡面同時開發 MQL4 以及 MQL5 的程式語言。圖 2-2 也說明

了 MT4 從 Build 600十以後,全部大更新。新舊版本的 MQL4 有許

多的差異性。自從 MT4 Build 600 之後, MetaQuota 公司就大幅改版

MT4 。最大的不同就是在於,新版 MT4 的 MQL4 語言有把 MQL5

的 OOP (Object Oriented Programming : 物件導向程式)概念整進來,


所以有了 Class 的定義。

新版
MT4
當然,不是只有這樣而已, MetaQuote 公司把原本就是 C 語言

的語法架構都整編進來。例如 Structure 語法,這是在原本的 ANSIC Build

就有的,而舊版 MQL4 並無支援,新版的 MQL4 就加入了 enum 的

60
空重點介紹
保留字。一些原本在 ANSI C 就有的語法,新版的 MQL4 把它們整

. 進來。對於以前就非常熟悉 ANSIC 語法的程式設計師來說,新版的

MQL4 反而更接近以前習慣的設計模式。舊版 MQL4 有許多的 C 語


言語法都省去,因此早期筆者在寫 MT4 程式時老是戚覺礙手礙腳,

就是因為舊版本的 MQL4 把原本 ANSI C 的保留字例如 struct, uint,


uchar, float 等等都移除,而新版本的 MQL4 全部都可以使用。對於
以前曾經長年累月使用 ANSIC 來寫系統核心程式的程式設計人員來

說,新舊版本的 MQL4 在轉換方面,不會有很大的困難。

_
81
MT4 Build 600 + New version MQL4

" Whot's Hew in M叩


.鼴........
....,111. .1
., ',_ -一碸嶋心-丑 ' ..........._,.._~,
"' ,, _,0'' ...... _.L_, ... ,..,_.,
.... 曰, ''」 一_,., .,,_ 一一 . ..

_____,... , '
.,......... "
,.'-...... ~--'''··-
.,',', - ' 嶋·- 一一 ~-L-" ■'•'"'
鼴`"一一'',_

,,,,, ___ ,,, • ,, ' -


一·--—,,.

,- ,
' .`' ''一-'`'廎---一,,· 一.
"'-·"-
..,-, --•~TI七--一 , w,.u ''
... ,_L_..,,_'-, 一"' "'•--•~-U-• IO•--.. - - ,, ,.. , 0"• n .o. .. -, """'"''" ,_.,_.,..,,'"'"

.
,
......
~ -」 _;
..

十-一-- · ''~;----,
一「-一......一·一""""'·" · ·· - · --·-·------一_..,_._
, "
·-霾'""
' __ ..., ...__ ... ,. ' ____ __.,_ . . ..,,_,._,
""
.........

言-~ 声声苔5.t't:::SE:1罕苧苧严
··-一 「-·一一止己鹹汜,'" p_ 矗曰三--一·一`. ',一一___ __
·•-·
, ' ' ·" 一.,.,,,.,,,,, .. 一一一·
~-一一一_, 一一'',....,, ,

.' . 七 _, "". "一·屮 , _「一--一,...._,,,, • 一·一緬··· • ·-


鬮`"" .
• T '

.,._, '
.一-­~~-----rCL,-._ . . . ,.._.
. ^-一一 '
,'''.
___ , ,.
_._ ____ . ,. ___ . ___
一一..UL•O一

__,
研-十-----· 國一一... 一日=~-·

「 ~n~ 一 --'-'- • -· 日砸_ ,..


蛔,_ ... .,._ .. __ . .. _ _ ..
贏,,, ____員叩.''"
, , .. ,
,
一·
,M_,__
這一 4 曰-一 ..
一.
'"'"-~--巴....

,,
__一一 d

"'''"
.由..這月「 I - ~ - - , , · , 一'十富 ~W -
-~-鼻--
.'"''"""""""'''""""''"""贊`
. . . . , 頃"

'「" - ~-一

MT4 Old/New version Folders

..
m=n一

三 1U1

n a• 大1•

'
````下"'""' •一.
.,,.,.,,,_,...,,,,
• 賈貫亮
.,.,
Z 如.-. .. .,., . . .H*
疝 W'6HG10l &U鼴
Hli

砌 ""''n""" au 瓜烹
{l=

"'""".t'I' 四" ••aw•


""""'下午邙道 ·贏篔員只
"''""'噌_,....,, ..篔烹
""""''下"'"""' ...料昊
晝0

.,,.,,w 上,.,,~... ..

,.,.,.,,._
'°'""'
>n,nn;
,o,v,n,
面 wn;
.,,,,,,勺;

`'

加強開發者保護

新版 MT4 也有許多令人讚賞的改變,如圖 2-3 。

圖 2-3 的左邊是舊版 MT4 安裝完後的目錄列項,右邊是新版

- MT4Build 60 姸安裝完後的目錄列項。新版 MT4EA 、 Indicator 、


Script 等等用來執行下單程式的目錄全部都歸到一個 MQL4 去,同
時又做很好的「機器碼保護」機制。這個「機器碼保護」功能方
面,筆者在很久以前(至少超過 4 年以前)就在 筆 者早期的部落格

有批評過 。 因為舊版的 MT4 執行檔程式 (EX4) 很容易被反組譯

(De-Compile) 成原始碼,新版的 MT4 算是很圓滿地將其漏洞補

起來 。這 是我們學軟體工程人所學的 Co d i n g Theory 裡面的加密學


( Encryption ) 。 不僅如此,新版還做了系統性保護,這部分新舊版
本的 MT4 真 的有很大 差 異 。

舊版程式碼無法直接編譯

在我們有提到新舊版本的 MQL4 存在許多的 差 異性 。 因為從

MT4 Build 600 之後, MetaQuota 公司就大幅改版 MT4• 所以導致


非常多以前放在網路上提供自由下載的軟體,在新版的 MetaEditor

無法編 譯 成功( 請看 圖 2-4 ) 。 這是網路知名的馬丁格爾程式,

Blessing 3.9.2 版的原始碼在新板 MetaEditor 無法 Compi l e 成功 。 按

新版
下 F5• 一 按下 Compi le 按鍵之後,出現許多的錯誤訊息 。 所以 舊 有

已開發 完 成的程式 若 要移植到 MT4 Build 60 姸版本平台 上 , 在 原始

MT4
碼編寫上,通常需要做小幅變更 。 Build

600
Blessing 3.9.2 Compiling Error
p -; IM +重 點介紹
'
- `20,»a``1=i ;-
l

I
苣自言

3
P

g 〒,

gO
4


-- p"
,

ir [
:~-

! J
• "'却五心""'"'"•
m

.h=lhi-i.
二iIl

5m :
~~~~~

..
,' I
· 2' //•
JO
.一一-一-一一一
1/1 ........, • .,_._,. ...
一一一一一一---- ••• 一- •
'1 II• 一一一一一--一-一一 一 一一一一一一--一 -----一-一一一一一-- .一----一---一..... 一-一一一·•

" .,..,. ...,..


".,...,. •trlnq
..,.,_ _,., .,
.,,_.-,
. .....,u-.-, ·,
• • .,...工.. J •• ,
_,..,_ i . t
_,..,_ bool
Hr-....,
_ , 严,,,,_.,, •
• l·
<alN ,
II ""'"' • -m.lTH
II .., u .. thi• ~
. -, to .-.u ry
" " " rlll clON al

"
'.正·-•trt.., ,,.,.,.~ • ••=•mt Tn<l"\J ,.,u平.• ,

`
.,' `,`
.

_
83
MetaQuota 官方對於新版 MQL4 變更的介紹

有關新版本的 MT4• MetaQuota 官網有做一些簡介。我們順便


為讀者介紹新版本 Build 600十的 MT4 有改了哪些比較重大的功能。

1. 新版 (Build 600+) MQL4 已經幾乎達 100% MQLS 相容。

2. 新版 (Build 600+) MQL4 編譯後之 .EX4 執行程式績效比 .


舊版快 4~20 倍的速度。

3. 新版 (Build 600+) MQL4 編譯後之 .EX4 比舊版提高程式


保護(如筆者以前文章所提過的,有加了 Coding Theory 的
Algorithm 做初步保護)。

4. 新版 (Build 600+) MQL4 支援 OOP (Ob」 ect Oriented Programming


物件導向程式)

5. MetaEditor 新增許多程式開發所需的工具,如 debugging,


viewing variables, profiling, code completion, snippets 等等,
以及支援 MS Visual Studio 。(新版 MetaEditor 的程式開環
境比舊版好很多,舊版真的很不完善。)

6 新增加 WebRequest ()函式。這項函式可以做 GET 以及


POST 即時財經新聞。這對利用財經資做下單判斷的投資者

算是很棒的新增函式。例如以下程式碼抓取 Google 的即時

財經網頁 (https : //www.google.com/finance) 。

就筆者的實際使用及開發新程式的經驗來說,事實上新版本

MQL4 所變更的遠比上述的還要多,讀者可以自行閲讀 MetaQuota

.. 所提供的說明文件。
ta
使用者必須知道的幾個 MT4
相關知識

MT4 基本架構

我們自第 一 章節裡有提到 MT4 的工程概念上的基礎架構 , 如下

圖 2-5 就是典型的 MT4 架構。

MT4 架構圖

Dealing Center

使用者必須知道的幾個
Informational
Environment MT4

Embedded
controls
MT4相關知識

「一一一一一一一一一一一一一一 1
!, Programm
. I
,
I-一一一主
l, MQL4 ,'
, ,
' '
L---------------'

圖 2 -5 裡的 Dealing Centre 就是連到投資者的經紀商伺服器,在

工程語 言 裡,就是連到「 MT4 Server 」。從圖 2-5 裡的 MT4 系統架

構圖中我們可以看出, MT4 的客戶終端 (Client Terminal) 與 MT4


的伺服器端 (Server Terminal) 其實只有彼此傳輸數據,所有的市場

_
85
報價透過 MT4 的伺服器端送到 MT4 的客戶終端,然後再利用 MT4

平台程式內軟體在 MT4 的客戶終端上將線圖畫出來。這種通信架

構,在我們通信軟體工程上有所謂 Request-Acknowledgement—
Confirmation—Accept/Re」 ect 的通信溝通模式。 MT4 的系統架構細

節部分,筆者希望未來能寫一本有關 MT4 平台的書籍再來跟讀者分

享。此本書因為篇幅的關係,在這個部分上無法做詳細的介紹。

基本畫面簡介

通常一個外匯投資新手在接觸外匯時,最常聽到的交易平台名

詞應該就是「 MT4 」這個名詞。 MT4 平台是由一家蘇俄的軟體科技

公司所開發,在所有外匯交易平台裡,其實它不算是最頂尖或最好

用,但因為 MetaQuote 公司的商業策略成功,使得它的開放式平台

在網路時代大大的成功。筆者建議外匯新手的初入門要進入外匯市

場之前還是要先懂 MT4 的一些基礎知識。至於 MTS 其在 Server 端

是一個不錯的商品,因為其可以解決很多經紀商在 Bridge 部份的問

題,但是 Client 端的 MTS 在市場上比較不受歡迎,因為光是使用手

冊(英文版)高達兩千多頁,很少投資者會有時間去研究這個龐然

大物,因為就投資者而言,只要能協助獲利,是不是使用最尖端的

高科技不見得那麼重要,因為利潤比較重要。

請參考下圖 2-6• 這是典型 MT4 安裝完後的畫面。

..
MT4 安裝後畫面


\ p

- -蛐

A. Menu Bar 主菜單畫面 (Main Menu) :用於操作程式的主

使用者必須知道的幾個
要功能菜單及設定。

B. Toolbar 工具吧圖 (Toolbars) :用於快速執行程式特殊功能

及設定。

C. Market Watch 市場行清視窗 (Market Watch Window) :顯

示即時市場的商品報價。 MT4相關知識

D. Navigator 導航視窗 (Navigator Window) : 顯示帳戶名稱、

自動交易程式、指標、客制化指標等。

E
Terminal 終端視窗 (Terminal Window) : 可顯示帳戶之即

時交易以及開倉部位情形、歷史交易情形、預掛單或程式

執行歷史等等功能。

E
Status Bar 狀態 Bar 。

_
87
G. Chart window 線圖視窗 (Chart Window) : 顯示各類商品之
線圖。

H. Connect window (目前大部分經紀商沒有提供這項模組) 。

重要資訊須知

對於投資者而言,一個投資工具平台所呈現的不是只有圖型, .
還有許多重要的資訊是即時在揭露並更新。 MT4 交易 平 台當然也是

不例外。下圖 2-7 顯示了投資者需要知道的帳戶訊息。

Account Information
O rdtr I Tim, Type Size Sym .. , Price S/ l T/ P Price Com... Swap Pro!~
C- 183 o.o 1291.6 0.00 0.00 . -0.嶋 `

2
E
!!II Trade 丨 Ao:ounl Hosto<y I News I Alo五 I Mailbox I Market I C<心函.. I 巨pe-ts I Jou:nai I

1. Balance 餘額:此金額在賬戶餘額 。 這並沒有考慮到浮動的


P/L (Profit/Loss) 中保持的任何部位 。

2. Equity 淨值: Balance 餘額- Net Floating P/L 淨浮盈/虧(帳


戶餘額減去浮動虧損) 。

3. Margin 保證金:現金用於打開當前未平倉合約的數量 。

4. Free Margin 剩餘保證金:可用來打開新的部位的現金 金


額。這可被計算為: Equity Margin 。

.. 5. Margin Level 保證金準位:這可被計算為 Equity/Margin

投資者在下單開倉後,帳戶的 Margin Level 一 般不建議低於


1000% 以下,因為外匯市場波動極大,且大部分的經紀商在客戶之

帳戶保證金準位低於 80% 時會強制將客戶的在倉部位斷頭關倉 。

MT4 的線圖物件 (Object) 的觀悆

MT4 平台在設計時間線圖上,使用的物件 (Object) 的觀念,


每 一 個時間線圖都是 一 個物件 (Ob」 ect) 。例如,圖 2-8 是某 一 個帳

戶的 Market Watch 報價圖,這個報價圖是以「貨幣對 Symbol 」後面


有 一 個「小數點」的線圖,這通常是客製化的帳號,也就是說,它

的交易成本的設定跟經紀商的公開對外之預設值可能不同,所以在

「貨幣對 Symbo l 」後方加入 一個特殊符號,如.%#$等等 。

Symbol with•. •
-琿:08:24
`

使用者必須知道的幾個
I
Bid Low
' j-
Symbol Ask ' High Time "
~ CAOCHF. ,,
~ CAOJPY. A5_i;lj9 8°7~1 8~llC1 852118 '0:Jl!,·11
• CHFJPY. 116.186 116.268
`
82 116.271 115.712 10:08:19
令 EURAUO. 1.48182 1.48244 62 1.48829 1.48089 10:08:24
~ EURCAO. 14,e1 1 4·1x<J4 >l2 148;.:0ll '41"1記 , ):Jl!,·_)4

,c> EURCHF. 1.09026 1 .。磁 42 1.09203 1.08999 10:08:11


令 EURGBP. 0.78774 0.78811 37 0.79003 0.78761 10:08:23
令 EURJPY. 126.723 126.760 37 126.872 126.396 10:08:23
令 EURNZD. 1.66683 1.66785 102 1.67221 1.66559 10:08:19 MT4相關知識
• EURUSD. . 1.116791 1.11711i 32 1.117131 1.11515; 10:08:16 1
令 GBPAUD. 1.88075 1.88147 72 1.88453 1.87684 10:08:24
• GBPCAD. 1.87603 1.87705 102 1.87663 1.87113 10:08:20
• GBPCHF. 1 l6351 '屯44, 92. 1 l8438 138022 lJ:08:l.J
;1 GBPNZD 0.00000 0.00000
。 0.00000 0.00000
, 61 .t•·;
00:00:00
• GBPJPY. 1LO.dl7 'ti('.c</~ ,t 6l,..•75 ltraB:Oll
• GBPUSD. 1 4171 '417'/4 p 1 41700 141•sq 10:08:21
• NZDJPY. 75_9·,,1 , , .050 le , ~--04 , 5.v2i 10:J8:1'l
• NZDUSD. 8.6ti967 0.f>,009 4~ Cf,l(JlQ O.b666~ 111:08:21
• USDCAD. 1.32356 132393 37 132835 132275 10:08:23
• USDCHF. ) 976,lt om~却 42 0.91'14.< 0.97~96 1 「ns:2~
令 USDJPY. 113.456 113.488 32 113.672 113.221 10:08:11
• XAGUSD. 15.168 15210 42 15261 15.124 10:08:06

苣 踩k Chart
1215.66 1216.18 52 1218.52 1208.18 10:08:19 "
I

_
89
當我們開啟了類似以上「特殊符號 」 帳戶時,我們 登 入了 經 紀

商的模擬帳號, USDJPY 4 小時線圖竟 然 無法 將 MT4 伺服器所 送 來

的報價訊號吃進來進來,而 呈現完全黑色的 畫面。請看 圖 2-9 。 圖 2-10


是 再利用此特殊模擬帳號,重新在 MT4 平台 上 的 Market Watch 把

USDJPY 1 小時線 圖秀 出 來 , 這 時,圖形就 畫 出 來了。

USDJPY H4 Symbol with"."


"" ""·-匝ffl°""',_
q. . ~ - -~ ❖ ~ tJ ,i. -+
- ~"''•"""'"""'ll II. i, ...'a. il3 ll 比 4 · 0 · 國 · , P fl
丶 -:- I 一/ #. • 矗·, ... . .. ~ 心心 「"'````膚

.. •
會.... 邙,..,,

***** """"

11 USDJPY H1 Symbol wit hout 11 . 11

,c ,.. -匝ffl°""' 「硒叩心~吡


` 呈_· §<>苓百~+ & "B....,'•-IL!lc 'l.€\ il3 1?.L>lj. • 0 · 霉 ·
丶 +1-/f\c;•'l: >.· •·~-· 心., ~., ., ~
-I',

88'la

I i -
i-

EVEVEVEVEVEV"EVEV~
-{兄
'主
{m惡 -3 『

,..,_ ,...,_ . M••

-
·
·•~ 富' .. ~ 一·-一`-一·-一·學-· 學琫,檸- --.-·-一·-·這•-- 蛐
......
...,.,.,w;,, 畠"'
0-.. 屈"-·
""''. 一-· 一 "lru氙以'"' ""山"''" 皿•,so,」.

區 ,.._...._.,......,_,.,._«-,w..Ool 如 5一一
...,,, .
•••• 會 磾3這
.,.. .
責 'tro 夤 0 ~一 磾缸鴴
***** 画紅n

會*含*.台*.**"* . 画. ., ,
為何會這樣呢?因為 MT4 設計時,就是將每一個貨幣對以及對
應的時間線圖都當成物件 (Ob」 ect) 。所以, MT4 的終端 (Client 端)
與 MT4 伺服器端 (Server 端)只是傳輸數據資料 (Data) 而已,並
無傳輸任何線圖或圖形。所以我們可以很清楚理解 MT4 的程式為何
如此小,且系統執行起來並沒有非常占空間,所以我們一旦將線圖
越開越多時,電腦系統負載才加大,且記憶體越吃越多,原來每一
個 MT4 的貨幣符號線圖都被定義成 一個物件 (Ob」 ect) 。

因此, USDJPY 1 小時線圖跟 USDJPY 30 分鐘線圖是兩件事,


因為是兩個物件 (Ob」 ect)• 其所畫的 Bar 代表不同意義。因此
MetaQuote 公司才很聰明的設計了 Magic Number 這個很重要的「定
義變數」。我們看下面 一 定會被使用到的程式函式 (OrderSend) 。

int OrderSend (
string symbol, II symbol

使用者必須知道的幾個
int cmd, II operation
double volume, II volume
double price, II price
int slippage, II slippage
double stoploss, II stop loss
double takeprofit, II take profit
string comment= NULL, II comment
int magic = 0, II magic number
MT4相關知識

datetime expiration = 0, II pending order expiration


color arrow color = clrNONE II color

上面就會有 一 個 Magic Number' 因為 MT4 Server 伺服器端必


須很清楚的知道,投資者 MT4 Client 終端所送的 Magic Number 屬
於哪個貨幣對 (Symbol) 的哪個時間線圖 (Time Frame) 。因此,
同 一 程式,套在 1 分鐘線圖跟套在 l 小時線圖的佈單不僅僅只是時
間線圖上的意義不同,它們其實是分屬「不同群組」,因為其所屬

的 Ob」 ect 根本就不一樣。

_
91
MT4 程式回測真正的功能

有關 MT4 平台「績效回測」的問題,在《外匯套利 I 》的書籍


裡有提過。在本書裡,再次列出來與讀者分享有關自動交易系統「績

效回測」正確觀念。在 MT4 的「主菜單」選項裡,有一個「檢視」

(View) 的選項,裡面有一個「策略測試」 (Strategy Test) 選項,

相信很多有在玩 MT4 的外匯投資者都會使用這項功能。請看圖 2-11 。

Strategy Tester
$ \!l"'•'•- , u. 卫 I> ' tt, E、 iB . l!. 比 ~- 0 - 四 - ,, .
v-,.,,> -
,....,._一

`示 st,p

>001) .-`....,_ ,,..


``
黷`

~
. . . ~
'心

這項功能有沒有用呢?

筆者的回答是:「如果是測試程式的『未來績效』,恐怕沒有

多大的參考價值,但如果是用來當成『程式除錯』功能,很有用處」。

「歷史回測績效」真的可代表未來的績效嗎?

- 我們知道,任何的程式做績效回測 一 定要有足夠的歷史數據,

同時,也要有精準的價格資料,但是在外匯市場裡,這種要求,其

實有點奢望。主因在於,每一家的外匯經紀商能提供給你的外匯歷
史資料幾乎都是不完整的。即使是技術開發者,想要拿到以 Tick 為

單位的歷史報價資料都有些困難,因為大部分的經紀商即使有保留

以 Tick 為單位的歷史報價資料,資料的期間都不會太長,三個月或

半年已經是最多了。因為以 Tick 為單位的歷史報價資料其資料量太

過於龐大。據聞網路上有些團體在販賣「以 Tick 為單位的歷史資

料」,但是因為每家經紀商的外匯價格在報價上會有些許不同,即

使是以 Tick 為單位的歷史資料,在不同時間點位上,也不太可能會

相同。例如,拿 A 經紀商的歷史報價資料去測試程式,然後拿此程

式在 B 經紀商的 MT4 平台交易,誰能保證其穩定度跟獲利率可以等

同「回測的績效」呢?

而大部份的投資者所下載的報價資料通常如何呢?通常都只是

線圖裡一根 Bar 的「開倉 Open 、關倉 Close 、最高祏 gh 、最低價


格 Low 」報價價格而已。以這種歷史資料來測試程式的可獲利性,

使用者必須知道的幾個
其失真的程度真的非常大。在我們工程上有所謂的「量化誤差」

(Quantization Error)' 使用這麼精簡的報價資料來測試程式的可獲


利性,嚴格來說,不具參考價值。因此,利用回測來測試某個自動

交易程式 EA 的績效,其實是是一個嚴重的迷思。另一個迷思是,

即使完全精準的取得交易經紀商的數年「以 Tick 單位報價資料」來 MT4相關知識

• 執行回測,那也僅僅讓程式吃進「靜態」的歷史報價資料,這跟把
程式直接套用在「動態」激烈變化的市場,其結局依然不同。因為

不同點不僅僅在於「資料」本身而已,同時還牽涉到市場滑點、浮

動點差、網路連線、執行速度、成交位置等等非常多項目的不確定

因素。因此,許多投資者依賴回測績效來採購市場上販售的自動交

易程式,到最後還是虧損收場,其主因就在這裡。因為這種績效回

測的「實際參考價值」真的是有待商榷。

既然如此,這項 MT4 的功能是否就沒有用處了呢?當然不是。

_
93
這項功能對於程式開發人員來說,用處極大,只不過用處並不

適用於績效測試。讀者要了解, MT4 平台在程式除錯 Debug 方面的

支援很差,講難聽一點-- 幾乎沒有太多的除錯功能。一般工程上

所謂的「除錯」,一定會包含有模擬器 (Simulator)• 但是 MT4 的

MetaEditor 並沒有這項功能 。所以 , MT4 的編譯器 (Compiler) 只

能檢查出「語法錯誤」 (Syntax Error)• 卻檢査不出來「邏輯錯誤」

(Logical Error) 。這會讓程式開發者在這方面很難預防程式的「邏


輯錯誤」,尤其當程式變得很龐大時,一個邏輯錯誤在關鍵時刻恐

怕會讓交易者付上龐大代價。令人更痛苦的是,這種邏輯錯誤當不

出現在「測試的市場清況」之下,很難察覺出來,但當察覺出來時,

損失恐怕已經造成。

而為了解決邏輯錯誤 (Logical Error) 的檢測,只好求助於

MetaQuote 本意不在「邏輯錯誤檢出」功能的「策略測試」 (Strategy

Test) 。這有些荒謬,但這是唯一在 MT4 平台上能讓我找到「類似」

模擬器 (Simulator) 功能的選項。雖然功能並不是很強,但至少聊

勝於無。所以,請所有投資者要認真思考,「歷史回測績效」真的

可代表未來的績效嗎?外匯投資者如果真的認為歷史回測績效真的

就是未來參考的績效,恐怕在實際交易時,期待跟實際會有很大的

落差。

..
at
MT4 Build 600 十之免費交易
系統跟指標

自動交易系統思維

在任何的金融商品的交易平台裡面,自動交易系統是系統設計

者思想、理念的濃縮,是系統設計者思想、理念利用邏輯方式的物

化表現形式。而自動交易系統的設計模式,其所引領的思想在此簡

稱「投資哲學」,是交易系統的靈魂和核心,其表達了系統設計者

對於投機市場的「世界觀」。有了正確的投資哲學是設計交易系統

的前提,將投資哲學運用於市場交易實戰是發現與表達的過程,該 MT4

過程是將「世界觀」轉化為「方法論」的過程。
Build

60
在外匯貨幣市場裡,其所顯現出來的投資哲學比起其他金融市

空之免費交易系統跟指標
場更為明顯;而一個交易系統最基本的品質是應該要具有正確的投

資哲學。一個交易系統的投資哲學如果存在邏輯錯誤和明顯的安全

• 漏洞,那麼投資者應當放棄使用它。交易系統所表達的是一種的思
維性質偏向社會科學的概念,它並非是少數人掌握的真理,它僅僅

是設計者智慧利用邏輯來表達概念的輸出,其都屬於「搏弈論」的

範疇,也就是都存在機率統計以及勝率等等相關概念。

交易系統的穩定性

一個交易系統的穩定性,通俗地講,就是它具有高度穩定的存

活能力和穩定的獲利能力。通常一個交易系統的穩定性具有以下幾

個方面的涵義:

_
95 ,
1. 該交易系統可以生存於各種市場,如股票市場、期貨市場、

外匯市場等等。

2. 該交易系統可以生存於各國市場。

3. 該交易系統可以生存於各種品種。

4. 該交易系統可以生存於各個歷史時期。

5. 該交易系統可以捕獲所有的原始波動。

而一個交易系統的穩定性的度量指標有:勝率、凈利潤、總虧

損、強制平倉盈虧、強制平倉筆數、總交易次數、平均年交易次數、

盈利交易次數、虧損交易次數、單筆最大盈利額、單筆最大虧損額、

盈利交易平均每筆盈利額、虧損交易平均每筆虧損額、盈利交易平

均持有時間、虧損交易平均持有時間、每次交易平均收益率、最大

浮動虧損、平均每筆凈收益等。在上述穩定性度量指標中,「勝率」

和「每次交易平均收益率」最為重要。

如果設計的交易系統在實際運行過程中其收益率概率分佈呈不

規則分佈,那麼這種交易系統是一個不穩定的系統。一旦使用其指

導實際投資必將引起投資業績的不穩定性,其直接表現就是投資業

績大起大落,作為職業投資人來說,這顯然不是我們所要求的 追

求長期持續穩定的獲利是衡量投資人是否專業的判斷標準。而現在

市面上流行的自動交易系統其往往斷章取義,用局部的顯著性代表

了全局的普遍性,誇大投資業績,一旦投資入實單帳戶就會很快暴

露出風險,更有甚者,某些交易系統會讓投資者的帳戶虧損直到歸

- 零才停止。這都不算是穩定的自動交易系統。
MT4 Build 600 十之免費交易系統 EA

在舊版本的 MT4 平台上,並無提供免 費 的自動交易系統 EA

( Expert Advisor ) 給使用者下載測試,而新版本的 MT4 Build 600+


平 台上 在 Terminal Window ( 交易終端視窗 ) 增加了 Code Base 這
個 頁 面,且所有使用者、投資者都可以免費下載公開在 Code Base
這 個 頁 面上的所有程式;因為這些自動交易程式都是免 費 的 。 如圖

2 - 12 。

MT4 Buil 600+ Code Base EAs


.-..... ~_............ __..,,.,.._o.. __
。.....

....,,.._., 一一............
.'-。~... 蛐~mn,.,,_,..,,,,,,,T,_n,,
_,,..._
_ _ .,,_..,_O.U•""'•-•-,__.,._
....囑
......,,......
'°'"'"'
.,
.......一"'-""""'-""'""""• ":>!亟~-_........_.. 呾~ .... ·-g;,,
'°'"''鴯
"'"""
,,.,,,,,,
,•,llMIII
.
.....,,
·--UL.
···"""'" . . . .. _,.._ ..•------,..
d_. .. .,.,. ._,...,•._.....,,. ""
~、 . . """""
..,,,....,,.,_.....,.,.,,_,_的圖, '- . -
電一一,卹 L . 鄘這,.
MT4
, <, <, " <,

.-....---·-c,
-~"'缸"'-·--''..._ 嘈- • • • • ,, .,,,,,,.
` 昞-加~ ""'-'一'"'"''"''-'"""'一 d 面心, . . . . . . . . . . . _ . 一一..., eoo<>< """'-"
. . . .和下
鯽L 懾........... "'...
_,,.._.,_一曰-~·-·'"'一一 "''-+4-••~·迅庄-一"'''~屮·~""""蘸·-----~ ~····
導匾.. ,........

. . . ,,,,
`'"蛐3
如s 唧
Build
· .""'--一
. .. ,,_,""

蠹 ----""國
-
-··--·---·
- .-
, ,d -..•
, , . _, 岫""'-'••汪
.. d治"
, . _ ,_ _ " '""'"'·""
--
氬比"""'•,_•__,_.._,..-'""' "'-•-w晶諴-----·~
-
••••
•.•
. ..•.•

- - • -~tUL
,, '°"""
...,, -


""'吟譯

,.,,.,,.
lR鴴 ,rn•

60

0十之免費交易系統跟指標
上面可以很清楚看出, MT4 平台還提供使用者 Rating 排序 。 在

筆 者的第 一 本 書 裡提過,過去整個外匯市場有商人直接將網路下載

. 來的程式包裝成套裝 CD 片公開販售 。 但這都造成智慧財產的侵 害 ,


對於開發者而 言 ,不僅開發心血被盜取,更有被冒名使用可能被用

於商業目的,例如冒名者向投資者索取佣金等 等這類的信譽風險 。

MT4 Build 60軒之免費指標 Indicator

新版本的 MT4 Build 600十平台除了提供免費的自動交易系統,


在 Terminal Window (交易終端視窗)的 Code Base 這個頁面上也提
供使用者免 費 下載指標 Indicator 。 指標 Indicator 對於手動下單的投

_
97
資者幫助極大,可以輔助投 資 者判斷市場方向 。 圖 2-13 即是 MT4

Build 60 但平台所提供之免 費 下載的客製指標 。

MT4 Build 600十之免費腳本 Script

新版本的 MT4 Build 600十平 台 Code Base 這個 頁面上 也提供使


用 者免費下載腳 本 ( Script ) 。 所謂的「腳本 」 指的 是 只執行 一次性
的 EA 功能 。 腳本非常好用,例如協助投 資者 將「 在倉單」 全 部 一蛐
次 關 倉 ,或 一次 開 倉 很多個部位 等 等 。 例如在本 書第 九 章 以及 《 外
匯套利 I 》中提過的「全球 資 金流策略」,如果想要在同時間要很快
的將 14 個貨幣對都開倉完畢以及獲利或停 損全部關 倉 ,使用腳本是
最佳的方式 。

MT4 Build 600+ Code Base Indicators


`屮"'--· m直. ' 0諴..

.,,.,~=--- •••••
,......_.,
,矗 ...,... _
......平反止咋·-·
......_.,. . .,._
0 . - . 寧- ·
""'""'呼....... ..
...潯·--
~-......
一 . ......
,_. - - -函...
. .- . . -.. ~---°"---"'-- 叩 L _ .....
令會...

.....
•• 令`^
""'"'~
""'懦 m

""'Ol f l
圄鷓


w..e>.JC~""昌 -Jh> r1-H-
,珈齒面叫 嘀--晒酬`國面·-鳩
的訊h 「 ,.., ,__岬--唧藏h 匾. ,__

,庫酬讞 """"'""""""'"國·• =ffl•- 嵒心碸


--
-
••••• ....
,.... ""'""
:,c,·o:•:/,•
洳,``

濱"""

L ""'" O,,,,,TI.ULL •.c<,_ " ..


n彎.,, 膚~』4這c_,m ·~--
- -- - -
**晝.. 汨鬼0這
=-~mc,n_.,,,...,_ ••••o ..•
._, . -.. . . .
`庄 .,~ .、... c...,4>1一. , ,_,._,....., 四...

M ...... 一--~..
一·=-
- •• ___ 正., .,,,<J-J,O已-""'~"'" " "'。氬-

.. """"
•••••
..... 會.. 一"
國山止启
這.,_,,

. . _.._ ..... _, ',.


Th,n沄_,,c,一"'·· --」- -'-•-'- ~""""'"" ....... ""'_,......,...., 加伍 · 元no•- -•~ - • ••;,•.,•,.
.. .. __ _,,_...._,
"""'"
,....,_ .. _ , , __~.Ju,_且~疏.... 圖... 如面.. ,_,__缸L ***** 鵡,矗
^一扭~叩..... ~ 國而…一心.....
•••••
。.... 今 讜~"
...
..... ""'""'
鬮.. 一皿c o 鴯,,_. ,_ _.. ,._富氬 mMn., , 蓽卹 「這面心U缸磾..,.,,._ 珥, .,

,..、吐- ,u_o_,_c, o• • •_..、 m沮邙口

•• MT4 Build 600+ Code Base Scripts


O>L•"-•
--~i·--- 缸•-'"•--·---伝~-- "知...
,,.ff.
,,.,,, .,... ,.~__, ..................
叩氐祉:'-磁·---這磁吶.心U面
._.. __户au,i - •
.... .

••••
.• *• * "'""·"
。血,.

. . ,.,,._..,....,.,,.,-,.
這毋... 己

面~·- · ~心 · "- .. ~··• 乩


••
.. •··-
會..

""''這

. ,~... . 如.,,., 亞~"-'


鼬--- . . ---·~........
b 硒 m记...澶-一"'"'"'"'

鑷... . .... J--'

""函 m囹~-西 0 云`^'`,中, ...,..~.. 面缸. ....,.


嶋 . ............ ----- ··•••••
·· · ;,·
. • • • • •珥·""
青···~ 宓這矗
巫,.,,

砌'"""'
• _ , _ , , . , ,,. • ........... _ , . ,_.,.., 圖 ,.,xu tl cc•---cr••、 . .. wcu
• ~,-,o, ..wo.ua,'"'•"'~'-""''-~".._.....,,.m,....,,.,. ,_,,
. ..,_•.,,.,,_, .,,..,,.,,...,a, •••••

-
. `"`罈`函-` 鴯•-.C .L ..ll 」,..,.._ 一==- 直鳳,. 鸕

` 屯·'呣'-""-"山琿•.- 嘛面, 土、'"'•·心``汪,., .. 庄``的心鴴 m邲,., .. .,.. ... 心


u.~.~- - 「 十·•-·"'田嘔 m记[面,十· 1'一... .. _
直·一-·- ·" ·山.. .,~ 巴氏」 心 - -- ---
. ---6•6•"
•••••
洫"鴴
圖... ,.
& "" 'JL 臼-·屯.......、-· -「"~· ..... =»~
. 四.....,..,,...,,...,..._

. ,.,,,..i, ... ...,,


" '""""'" 0,口 鬮~'-叨"
圖--•µ . .. ,....~......,..-,_-.....
n;,.心,... ,...,,-國飆鴯 rnno,c
.._... ___
__ .., ______..., ............... ....,. .....面如 B 吡山國伝_,_::;;-. :.· ,"
面 . .. •••••
•• ••• 20» 這"
宓'·""
"''磁 , "

,.,,.,這
` 一 ~.-.-.10 严
- - - ~ ~ , . . .心
伍,`面心......國..
1比'"''""~-·....... ..,..,..,,..,_, •....,.
邱... 一·如~`'亟硒中心而血,.,,.
由口
..........了 o• :•:·..
• • • • • " "" "
套息交易策略
The market, like the Lord, helps those who help themselves. But unlike the Lord,
the market does not forgive those who know not what they do
交易市場就像上帝一樣,翌助那些自助者 。 但是和上帝不同的是,交易市
場不會原諒那些不知道自己在做什麼的人. 。

一華倫· 巴菲特


--~--

J
..
套息交易策略概念及介紹

「套息交易」所產生的蝴蝶效應

從 2003 年美國將基準利率維持在 1% 開始逐步升息,隨著全球

化過程的演變和各國利差的不斷擴大,到了 2008 年時,美金兌日圓

的利差達 5.25%• 而澳幣兌日圓的利差甚至高達 8.25%• 因此套息交


易在外匯市場的擴散現象逐步出現並迅速擴大,從 2006 年開始直到

2008 年全球金融海嘯發生前,類似於「蝴蝶效應」從亞馬遜流域到

太平洋颱風的 一 個過程,一步 一 步從書上的理論變成了國際外匯金

融史上的一個事實。

實際上,套息交易的蝴蝶效應還遠不止於此,最初套息交易只

能跟隨外匯市場的波動變化而被動地獲利,像蝴蝶順應風向拍動翅

膀,而 2006 年之後套息交易的這種蝴蝶效應則顯示出越來越大的威

力,直接表現就是套息交易的建倉與平倉,往往推動日元走勢出現

顯著的反覆震蕩,甚至不能排除日元劇烈漲跌與套息交易的關係。

從這個角度來看套息交易,此蝴蝶效應可能已經完成了從亞馬

遜叢林到太平洋颱風的整個過程,雖然在 2008 年後,套息交易者嚴

重虧損而離開市場,但套息交易在未來的蝴蝶效應仍然可能繼續演

- 變。在這種效應推動下,外匯市場出現的 一 個顯著不同於歷史傳統

的特點就是 外匯交叉盤越來越受到重視,尤其是日元對歐元、日

元對澳元和日元對加元等交叉盤,其走勢變化甚至要領先於美元直
盤走勢,並使全球外匯市場的結構和空間出現明顯變化;甚至,套

息交易對於推動非美貨幣之間的交叉盤走勢也有顯著影響,這可能

促使全球外匯市場的結構和空間逐漸發生變遷。

正因為套息交易從產生發展到現在的不同層次而顯著的蝴蝶效

應,外匯市場也因此受此影響而展現的一種特殊投資模式的樣貌。

所以,套息交易其實也是全球金融市場演變下的產物。

套息交易的基本概悆

「套息交易」又稱為「息差交易」,顧名思義,就是利用兩種

貨幣組之間所存在的利息差異 (Interests Differential) 來賺取利潤。

一般中文翻譯稱 Carry Trade 為「套息交易」,就是賺取「利息差異」

的意思,而「套利交易」的英文是 Arbitrage• 「套息交易」只是「套

套息交易策略概念及介紹
利交易」的一種。

在金融市場上的「套利模式及策略」其實非常多種,有些套利

策略必須要了解很深的「數學運算模組」以及「機率統計」,這種

需高深數學的套利策略通常是「國際金融機構」(如大型投資銀行)

會重金禮聘數學專才為他們設計出實際可用的套利模式, 一 般小額

` 資本的投資者比較不容易窺其精隨。如股市,最簡單的就是 ETF 跟

期貨選擇權的套利,如黃金與石油連動的套利。就外匯而言,套利

交易除了「套息交易」之外,其方法跟策略千奇百怪且百家爭鳴,

且套利模式千變萬化,方法非常多,例如有三角套利 (Triangular

Arbitrage) 、連動套利 (Correlation Arbitrage) 、馬丁格爾套利

(Martingale Arbitrage) 等等。不過幸運的是,有 一 些套利模式其實


只要求非常簡單的數學基礎知識而已。例如只要懂簡單的「加減乘

除」就知道該如何執行,其中之「套息交易」大抵是世界上最容易

了解且簡單的套利模式。

_
101
「套息交易」所涉及的「息差」,並不限於貨幣與貨幣之間的

「高低利息息差套利」。所有可用於借貸或出售的低利率金融工具,

並將其借貸來的資本用來購買具有更高利率的金融工具均可稱之為

「套息交易」。例如,假設你在台灣銀行借款一百萬元,其貸款利

率是每年 2% 。然後你將此借來的錢,到中國大陸去購貿同等價值

一百萬台幣的中國債券,而假設中國債券年息是 5% 的話,雖然你並

沒有實際出-毛錢,但卻從中套得 5% - 2% = 3% 的年息息差,這

也叫做「套息交易」。

同樣的,在貨幣的操作上就是「借低利息的貨幣」(賣)然後「存

入高利息的貨幣」(買),高利息減低利息的息差就是套來的利潤

來源,不過有個前提,就是從借款到還款這段期間,兩國貨幣的兌

換價值都沒有產生波動才行。以外匯保證金市場來說,套息交易穩

定獲利的息差是迷人的糖果,但瞬間的振幅跌價卻是致命的毒藥 。

我們可以先從前幾年的外匯市場談起。

慘烈的一頁:日圓套息交易史

2006 年至 2008 年期間,當時套息利益豐厚,讀者可以自己


計算看看,比如說當時以澳幣兌日圓來算,每日利息: (8.5 -
0.25) %/365 X 100 = 2.26%' 也就是說「年息」可以高達「 825% 」(外
匯保證金之槓桿是放大 100 倍來算)。在外匯市場的套息交易歷史

裡,不得不聊一下轟轟烈烈的「日圓套息交易史」。

在還未發生「次級房貸」及「金融海嘯」之前,全球除了日本

與瑞士之外,從 2005 年開始到 2008 年前,各主要工業國家的利率

- 幾乎是每季調高一次,而當時美金利息高達 5.5%• 澳幣更高達 8.5%•


但是日圓的利息卻僅有 0.25% 。光是從日本銀行貸款轉存到澳洲貨

幣定存的利潤就很吸引人(息差有 8.5% - 0.25% = 8.25%) 。因此「套


息交易」盛行於國際投機客,尤其當時有數量龐大的日本主婦團(索

羅斯對她們統稱為「渡邊太太」)不僅拿私房錢還向銀行貸款來投

入外匯市場做「套息交易」。數量龐大的「渡邊太太」和國際投機

客似乎有默契地每天利用日圓來買高息貨幣,以致於使得日圓幾乎

每天都在眨值,在那段期間最低曾貶至接近 125 兌 1 美金。「渡邊

太太」們加上國際投機客的力量把日圓越推越低,以至於當時連歐

洲央行總裁都出面對這些「渡邊太太」們喊話,自此開始「套息交

易」就跟「渡邊太太」產生市場效應上的聯想。而當時引發的套息

交易之蝴蝶效應,對整個國際外匯金融市場產生超乎想像的巨大的

影響,因為這個蝴蝶效應而產生了貨幣不應該出現的相對應價值。

然而自 2007 年中起,市場開始市場反轉,尤其是從 2008 年的

貝爾斯登公司 (The Bear Steams Companies, Inc.) 破產開始,瞬間


美金兌日圓由 1 : 120 急升到 1 : 100 左右,短時間內就漲了 16%•

套息交易策略概念及介紹
因為槓桿放大一百倍,所以外匯漲了 16% 是很可怕的一件事,很多

交易者在短短幾天之內就翻了船,被斷頭出場。當時那些只會做套

息交易的日本主婦「渡邊太太」有 一 半以上虧光所有積蓄;而接下

來的金融海嘯,更是令許多做套息交易的投資者血本無歸。所謂「成

也蕭何,敗也蕭何」。

而 一 手將日幣推到低點的「渡邊太太」們,本身卻也是此套息

交易的最大受害者,金融海嘯期間的日本「渡邊太太」們幾乎都是

賠錢收場,造成了很多家庭因此破碎及社會問題。除了「渡邊太太」

們之外,大部分的套息交易者在短短幾天之內就翻了船,被斷頭出

場。所以, 一 般的投資散客即使懂得利用息差來套利,但大部分都

是只看到利潤而忽略了風險,因此 一 但市場反轉很容易被市場洗出

場。

_
103
套息交易的風險控管

做套息交易的人首先要先知道該貨幣的年/月震幅到底是多

大,需要有多少資金在裡面才不會為了賺利息而被市場洗出場,這

些都是需要先做計算的,因為外匯保證金市場跟 一 般實體 一 比 一 的

貨幣買賣不同,外匯保證金是有槓桿倍數的,風險的控管更是需要

小心。因為套息交易是執行賺利息且方向只能漲不能跌(或只能跌 壘

不能漲)的單 一 方向,只要市場產生 一 個巨幅反轉,帳戶可能就直

接爆倉了。同時投資者在做套息交易時必須先了解各國貨幣的利息,

例如在金融海嘯發生前,在 2008 年當時的 GBP/JPY (英鎊/日圓)

是利息最高的 一 組, 1 Lot (手),每天利息高達 24.xx 美金(日息

超過台幣 750 元, 2008 年)。當然還有利息較高的貨幣,如 USD/


TRY (美金/土耳其幣),不過比較少投資者對這種流通率低且國

家通膨高的貨幣進行交易。而市場上,使用澳幣套息交易也是很熱

門,這些利息差異讀者都可以從查看自己的外匯經紀商的貨幣日息

表 (SWAP/Rollover Rate) 獲得相關的資訊。

我們知道在外匯市場裡都是以 XXXNYY 貨幣組為交易之幣別。


如果下 一 個買單 (Long) 其實就是買 XXX 貨幣同時賣 YYY 貨幣的

意思 。 例如,以 GBP/JPY 作為 一 個例子。當我們執行「買」的指令時,

其實真正的含意是「買英鎊同時賣同等英鎊價值的日圓」。但如我

們執行「賣」的指令時,其實真正的含意是「 賣 英鎊同時買同 等 英

鎊價值的日圓」。這在外匯套息交易的觀念裡面很重要,因為投資

者必須清楚知道他使用哪個貨幣來套哪個貨幣的利息 。 我們來看以

下的 三 個圖,這 三 個圖都是週線圖,第 一 個圖 3-1 是 AUD/JPY• 第

-
二個圖 3-2 是 EUR/JPY• 第 三個圖 3-3 是 GBP/JPY 。
以下是澳幣兌日圓週線圖 :

AUD/JPY 週線圖

以下是歐元兌日圓週線圖 :

套息交易策略概念及介紹
EUR/JPY 週線圖 ----z 二一- z

_
105
以下是英鎊兌日圓週線圖:

GBP/JPY 週線圖

以上這三個圖都明顯顯示套息交易的起漲點約是在 2002 年前
後,在 2007 年達到市場的最高點,然後在 2008 年雷曼兄弟破產事
件開始起跌,全球金融海嘯發生後如高空跳水式狂洩。假設套息投

資者的交易期間是在 2002 到 2007 年以前就把資金全部贖回,那不


僅賺到息差利潤,更可以賺到相當可觀的匯率利潤。同時,如果投
資者是投入有高度槓桿的保證金市場交易的話,那年報酬率恐怕都
可以破 300% 。不過,如果投資者在雷曼兄弟破產事件後還不知道該
退出市場的話,那最大可能的結果就是變成自己破產。

我們以當時雷曼兄弟破產事件前的 USD/JPY 來說,其最低點


是接近 125 兌 1 美金,與後來 2011 年的 76 兌 1 美金整整差了 49 日
圓。也就是在 2007 年最低點的接近 125 : 1 到最高點的 76 : 1• 短
短四年內漲了 39% 。若以保證金 1 : 100 的槓桿來說,投資人如果在
2007 年時以 125 兌 1 美金做套息交易的話,到了 2011 年後雖然有 一

些利息入帳,但其匯率虧損卻高達 -39% X 100 = -3900% 。也就是說

.. 該投資者實際上的匯率虧損是高達 39 倍的投入資金 (1 : 100 槓桿),


因此與所得到的息差利潤相比,套息的利潤根本就微不足道。
..
套息交易策略風險與實務操作
方法

隔夜利息

何謂 Rollover rate or Swap rate ? 中文翻譯為我們常聽到的「隔


夜利息」。

基本上外匯保證金交易,是以槓桿放大方式買進與賣出外匯

當你買進一種貨幣時同一時間就是在執行賣出另一種貨幣。例如說:

若你執行「 Buy 」 AUD/USD• 真正涵義是「向美國銀行借錢(賣出

套息交易策略風險與實務操作方法
美金),存入澳洲銀行(買進澳幣)」。所以會產生你必須付利息

給美國銀行,同時收到澳洲銀行的利息。這就是所謂的「息差」!

因為澳幣利息較高,美金利息較低,所以「 Buy 」 AUD/USD 「每天」

可得利息。反之,你若是 Sell 的話,則是負利息。

又舉例來說,當你利用 AUD/JPY 做買的交易時,意義上就是你

跟日本銀行借錢存到澳洲銀行。假設日本的中央銀行的借款利息是

0.5%• 而澳洲的中央銀行對存款給的利息是 4% 。因此,你可以得到


「澳洲銀行」給你的利息,但同時你必須付給「日本銀行」利息,

這中間就有 3.5% 的利息價差利潤,這就叫做「隔夜拆款利息」。但

一般而言 ,同 一組貨幣 ,外匯經紀商都會將「負利息」調的比「正

利息」來的高。每家外匯經紀商所提供的息差不見得一致,但是基

本上差距不會很大。

_
107
穩定的套利模式:利用隔夜利息

「隔夜利息」是每天(台北時間)凌晨 3, 4 點的時候計算,也

就是亞洲盤開始,美國盤結束時計算。隔夜利息,其實是每日都有

給息(不論正負)的,但是在外匯市場,週六與週日是沒有交易的。

每年年底的耶誕節期間也有許多外匯經紀商與銀行不交易。因此,

為了要填補不交易日子的利息,通常每週三的利息會多三倍,也就

是說,每周一到周五給利息(付利息),但是每周三(周四的早上

可以看到入帳),必須給(付)三倍的利息,因為此三倍是用來補

周六日沒交易時的利息,所以如果平日利息是 3 美元的話,週竺會

變成 9 美元。因此,也有些套息交易員,只挑週三做套息,其他日

子不交易。例如,只挑週三做套息買「 AUD/JPY 」,或賣「 EUR/

AUD 」,這個時候若可以平倉出場也可以收到不錯的利息收入 。在

外匯交易的應用上,這種策略就叫做「套息交易」。

關於每日的利息,我們可以到各個外匯經紀商的網站去看,

他們每天都會公告貨幣買賣的正負利息。穩定的套息模式,其實比

起銀行定存或某些基金來說,獲利穩定,風險也不一定很高。例

如筆者在早期 2010 年時曾經提過的一種三邊套利模式 (Triangular

Arbitrage)• EUR/USD (Buy)• AUD/USD (Sell)• EUR/AUD


(Sell)• 平均日息收入可達 4.xx 美元,在當時如果使用 10000 美
金來執行此套利,一年利息收入是 4X365 = 1460• 所以年報酬至

少是 14.6%' 但風險卻是相對上比較低。因為如果該貨幣都是在某

一 幅度中震盪的話,其實使用息差來對沖,風險可以被控制在 一定

的範圍之內。

.. 外匯經紀商貨幣對鎖之「套息套利」
在外匯市場上,當然也有些外匯經紀商是不提供任何息差的。
例如 Marketiva 及 Oanda 等,他們不 喜 歡交易者做息差交易,因為

息差交易通常交易量少,而若沒有交易,他們就賺不到 Spread 的

點差利益。例如,在 FXDD 帳戶「 Buy 」 AUD/USD - 手 (Long l


Lot)• 同時在 Marketiva 「 Sell 」 AUD/USD - 手 (Short 1 Lot)• 這
時就是在兩個不同的經紀商上執行 100% 的鎖單對沖。且因為 FXDD

會付利息給投資者,而投資者卻不必付利息給 Marketiva• 那投資者

就可以很穩定的賺利息。然而有讀者曾經提出如下之質疑:

「請問這種不同系統商因為計息方式不同,所產生的無風險套

利環境,應該是一大票人都會知道吧!如果我用 AUD/JPY 10 倍槓

桿,在 F 交易商作多,在 M 交易商作空,那不就是穩賺年息 35% 以

上?只放 10 倍槓桿也不可能在沒有查覺的情況下斷頭。就算是斷頭

也沒差,在 M 系統商斷頭,在 F 系統商不就是賺回 M 系統商賠掉

的部份,只要馬上平倉也是沒輸……那麼大家為什麼還要在市場上

套息交易策略風險與實務操作方法
沖殺呢?」

這對初學者來說是-個好問題。確實是如此:「如果套息交

易這麼容易又這麼穩定,那大家都賺錢了!」然而實際上,在外匯

市場裡,有時市場的波動是非常大的,而利用兩個不同的經紀商做

鼻 100% 的對沖鎖單,雖然可以鎖住「利息」,但是市場的波動卻是會

讓你嚴重虧損的殺手。

_
109
善用連動關係的交叉貨幣

就舉以上這個讀者的問題來做例子,當我們在 F 經紀商開 AUD/


JPY 「買倉」,然後同步在 M 經紀商開 AUD/JPY 「賣倉」,假設 F
經紀商是有提供且收取利息的,而 M 經紀商是不提供也不收取利息,

同時假設市場是處於某一個箱型震盪,這時我們可以快快樂樂收取

利息。假設突然澳洲政府無預警宣布升息,市場突然瘋狂買進澳幣,

F 經紀商開「買倉」的 AUD/JPY 會開始一直獲利,同時在 M 經紀


商開「賣倉」的 AUD/JPY 會開始一直虧損,直到 M 經紀商開「賣倉」

的虧損達到被斷頭,這個時候你有兩種情況,一是 AUD/JPY 繼續漲,

一是 AUD/JPY 開始漲多回檔開始回跌。

如果 AUD/JPY 繼續漲,投資者在 F 經紀商所開的 AUD/JPY 「買


倉」會持續獲利,但如果 AUD/JPY 開始漲多回檔開始回跌,那投資

者在 F 經紀商所開的 AUD/JPY 「買倉」的獲利將無法填補在 M 經

紀商開 AUD/JPY 「賣倉」的虧損。

利息需要「時間累積」,但市場的瞬間漲跌恐怕沒五分鐘就把

辛辛苦苦累積一整年的利息給吃光。所以如果該貨幣振幅很大的話,

很容易某一個帳戶雖然賺錢,但另一個帳戶卻因為嚴重虧損而被斷

頭。所以要執行此種兩個外匯經紀商貨幣對鎖之「套息套利」要特

別小心。這類的兩個經紀商鎖單對沖套息交易要慎選貨幣,若投資

者真的有興趣,可以挑選有「連動關係」的「交叉貨幣」,例如

EURGBP 、 EURCHF 、 GBPCHF 、 AUDNZD 等貨幣,主因是有連動

關係的交叉貨幣振福比較不會像直接貨幣來得直接且巨幅。在不使

用過高的槓桿之下,獲利會比較有保障。

..
實務手動進出場操作

首先,我們在談「套息交易」的實務進出場操作之前,我們先

來看哪些貨幣是值得我們關注來做套息交易的。

一般在我們決定執行「套息交易」之前,我們都須先知道哪個

貨幣組 (Currency Pair) 是值得做「套息交易」的。因為「套息交易」


只會執行單一方向的買或賣,也就是說在該貨幣組上只能執行「買

單」或「賣單」才能套到利息一一當「買單」是正利息收入則執行「買

單」,反之,則執行「賣單」。因此在下單之前,就必須到外匯經
紀商的公開官方網站去査詢當天的利息 (Rollover/Swap) 是多少。

為何需要每天去査看呢?因為每天所公告的利息都是不一樣的值,

同時周三晚上的值又會是平常的三倍之多。了解每天的利息變化也

是「套息交易」投資客所需知道的最基礎功課。

套息交易策略風險與實務操作方法
基礎功課:了解每曰利息變化

我們舉以下兩家外匯經紀商公司的例子來做說明:

第一個列表是 2010 年時 Alapri UK 的利息,而第二個列表是

. 2010 年時 FXDD 公司利息,這兩家外匯經紀商所列之正負利息單位


是不同的。 Alapri UK 是以 Pip (點)為單位,每一點的價值不一定

是 10 美金,所以 Alpari UK 是以 Pip 然後乘以該貨幣每 Pip 的價值


(Pip X Value) 當成利息。為了避免複雜化,將每個 Pip 的價值假設
為 10 美金一樣可以算出哪些貨幣組擁有最高利息。

而第二家的 FXDD 就是直接以美金值當成當日利息,很容易

理解且一目瞭然。不過讀者需知道,這些利息都是以一個 Lot 為單

位,例如在 Alpari UK 的 EUR/AUD 執行「買單」時是負利息,每一

_
111
個 Lot 為 - 2.020 Pip• 而執行「賣單」時才是正利息,每一個 Lot 為
+ 1.280 Pip (參考列表 3-1) 。同樣若以 FXDD 的 EUR/AUD 執行「買
單」時是負利息,每一個 Lot 為 - $50.30• 而執行「賣單」時才是正
利息,每 一 個 Lot 為十 $40.03 (參考列表 3 - 2) 。由外匯經紀商公告
的當日列表中,我們就可以來選擇哪些貨幣的「買單」或「賣單」

可以用來執行套息交易。

Alpari UK 的 Roll Over Rate 列表

Precious Metals - NEW!

YJ>JJUSD -1.91'"'• p.a +0.13¾p.o.

XAGUSD -1.98% p.a +0.06'1/o•··

fo 元 1gn Exchang e

AUOCAO +0.750 p,p, -1 270 pips

AUOCHF +0.890 p,p, ·l.310 pips

AUOJPY +0.770 p,ps -1.090 pips

AUDNZD +O 150 pips ·l 010 pips

AUDSGO +-1 l70 pip$ -2. 770 pips

AUDUSD ••-•··p,p, -1,270 PIPS

CADCHF +o.oso pips -0 240 p,p,

CADJPV +0.080 pips -0.200 pops

CADSGD +0.040''" •0.340 pops

CHFJPY -0.010,,,, -0.050 p,ps

CHFSGD ·0.100 pips •0.090 •••,

EUOAUO -2.020 p,p, +l 280 pips

EURCAO 0.300 ••• , ·0.050 ., . .

EURCHF •0.030 •• .. •0.180 pop,

EUROKK 一 1.900 pips -0.410 pips

EU.GBP -0.120 pips •0-090 pop,

由上面的列表,我們列出了在 Alpari UK 的交易貨幣中比較值

得考慮以「買單」來執行套息的貨幣 :

.. AUD/SGD: +1.17

AUD/CHF : +0.89 Pip


P甲
AUD/USD : +0.86 Pip
AUD/JPY: +0.77 Pip
AUD/CAD : +0.75 Pip

或「賣單」來執行套息的貨幣:
尸:-[=一
EUR/AUD: + 1.28 Pip

FXDD 的 Roll Over Rate 列表

:oOO-;290245ooo175-oooooo-
BUY POSITIONS

-34211
.,..,
-1537

+, -3630

-'--_:- +t ·1155

。 OO

4003

套息交易策略風險與實務操作方法
。 OO
-- .. 一
.757

。 OO
~ -

-- -_ -~
-,.-
·1155

.3 以

-1136
U

:
-1225
.. ..,

-2070

ooo-oOO: 。 00

-583

....
S

1268
·-
1118

060

由上面的列表,我們列出了在 FXDD 的交易貨幣中比較值得考


O

慮以「買單」來執行套息的貨幣 :

AUD/JPY : +$27.65

_
113
AUD/USD : +$27.3

AUD/CAD : +$22.86

或「賣單」來執行套息的貨幣:

EUR/AUD : +$40.03

USD/MXN : +$12.68

USD/TRY: +$11.16

讀者應該已經看出來,這兩家外匯經紀商公司: Alpari UK 與
FXDD 不僅貨幣組有差異,連即使是相同貨幣的利息都是不一樣的。

同時因為每家外匯經紀商公司對於提供貨幣交易的貨幣對以及公司

營運策略的不同,所以, A 經紀商所提供的貨幣, B 經紀商不一定

也會提供,同時,各家經紀商的 Rollover rate/Swap 也不同。同時,


即使我們列出了這些高利息的交易貨幣,也不能僅看利息高低就進

場套息,還需要考慮該貨幣的點差狀況、交易流量狀況,留意是否
容易產生滑點或重報價格的問題。

手動套息交易策略:相對安全道場點

那「套息交易」是否只要決定貨幣組,並決定到底是該買或該

賣的方向後,就可以隨便進場買多放空呢?如果投資者是以這種心

態來執行套息交易,那投資者跟日本廣大的「渡邊太太」們其實並

沒有什麼不同。因為即使是最簡單的「套息交易」,仍然是需要策

略。

如果讀者想以手動交易方式來執行套息交易,筆者提供以下個

.. 人的簡易方法給讀者參考。執行「手動套息交易」的方法,就一定

得考量市場的高低點來做為「相對安全進場點」,主因是「套息交
易」是單方向的,要嘛就是買,不然就是賣,買就期待能買在相對

低點,而賣則期待能賣在相對高點。這樣的話,市場反向時對帳戶

所影響的風險係數才不至於太高。

l. 首先,打開一個想執行「套息交易」之貨幣的 4 小時線圖或

日線圖。我們以 AUD/USD 做為案例,並請套上最簡單常見的

Stochastic 指標與 B ollinger Band 指標,使用理論值之標準係數

即可,不用太刻意計較,請見下圖 3 -4 。

Stochastic 指標與 Bollinger Band 指標

套息交易策略風險與實務操作方法

因為 AUD/USD 必須是下「買單」才能套到正利息,因此,我

們期望這兩個指標 (Stochastic + Bollinger Band) 都告訴你可進場執


行「買單」時,則表示該進場點應該是可進場的相對低點。這時,

這兩個指標條件成立時,就可以進場執行手動的「買單」。只有第

一筆進場的「套息交易」需要靠這兩個指標輔助,之後的手動交易

則不再需要任何指標。

2. 每次進場買的倉位大小為 0.01 Lot 。同時必須設定獲利點目標為

100 點,不設停損點。

_
115


3 當市場與設定的方向(以 AUD/USD 為例,就是希望市場是漲
的)相反,則每當市場跌價超過 50 點時,則再次手動進場買大

小為 0.01 Lot 的倉位 。同時必須設定獲利點目標為 100 點,不

設停損點。

4. 當市場一直處於跌勢,則請一直重複第三項的步驟。因此,當

帳戶資金有 5000 美金為前提之下,如果投資者的經紀商允許以

1 : 100 槓桿交易,所以投資者最大可以交易 5 Lot 。若假設投資 .


者只使用了 10 倍的槓桿,即 0.5 Lot• 也就說是你最大可以開倉

50 次 (0.01 LotX 50 = 0.5 Lot)• 而 50 次的開倉次數表示,你

最大可承受直洩式狂跌之市場風險為 50 X 50 Pips = 2500 Pips 。

因為每次進場均設有 100 Pips 之停利點,當你的所有開倉交易


點都順利獲利出場時,請重新開始第一個步驟。

以上的「手動套息交易」應該是簡單明瞭,即使對初學者而言

應該也不至於太困難。「套息交易」的好處就是當市場與你的倉位

反向時,你可以因為有 Rollover Rate/Swap 的正利息收入,可以對浮


動虧損稍做補償,交易的心理壓力也會小一點。不過讀者必須清楚

認知,「套息交易」的貨幣在市場反轉時,非常容易產生逃命式瞬

間跌價(或瞬間漲價),這種瞬間逃命波式的價格波動,非常容易

造成來不及反應而爆倉的結果,此風險不可不防。

-
ID
套息交易策略之程式交易方法

在前兩個章節裡已經將「套息交易」的概念、實務操作方式等

做了些篇幅的介紹。從基本概念,到實際做法,指標套用,風險控

管,下單方式等等都已經向讀者說明過了。因為其概念簡單且在實

務上的操作也不難,且套息交易並不需要做複雜的數學模型,即使

是初學者也很快可以上手。

但對於沒有時間坐在電腦桌前盯盤的投資者而言, 一 套可執行

且具備上述幾項原則,如等距下單、風險控管等等功能的「套息交

套息交易策略之程式交易方法
易自動交易程式」就變得很重要。

了解套息貨幣的方向

首先,當我們要使用套息交易時,我們一定要了解套息貨幣的

• 方向,也就是說我們必須知道是「買單」還是「賣單」是正利息。
因為不是使用手動操作,所以,在使用自動交易程式之前,必須先

設定好方向。例如,當我們要執行 AUD/USD 套息時,只能執行「買


單」,因為「買單」才是正利息,同樣的,當我們要執行 EUR/AUD
套息時,只能執行「賣單」,因為「賣單」才是正利息。

例如,當我們將「套利自動交易程式」套到貨幣圖表之後,

會出現如圖 3-5 跟圖 3-6 畫面的對話視窗。圖 3-5 是將程式套到

AUD/USD• 所以在 Common TAB 的 Positions 選擇欄必須選為

_
117
Only Long ; 而圖 3-6 是套到 EUR/AUD • 所以在 Common TAB 的
Positions 選擇欄必須選為 Only Short 。 當設定完成以後,「 Meta Trader

4 系統」就會依照使用者的設定來執行「強制性單方向」的開倉允許,

也就是說即使成是邏輯合乎條件,系統也僅會單方向開倉 。

AUD/USD 設為 Only Long


• --~ - •--=cov量m
- - ... _ _ _ u ,. _ _ ""
· - -..鬮"" ,._,.......... ,,_,
~-~..,.~~ 庄...
盅出這啟盅訟
..~.''""''~•••rn
,-·---,,,urn,.

一 """
"""
曰 _ou,,,,殛

已 ,__ 0-,.,面" """""-"


• 0,,---·"' •- .. ""''-''--·"--
""'""泗
曰----

I , , 」~I I' !1
wl111h1

/~,iJI~,I' .I ,证o.~~o.!
1
I ""' I •~ 転`
s:

tt' Ma e Tr~d: DOWN

c<:urrent Price:0.75869

EUR/AUD 設為 Only Short


一 ·謚縞:l!SI ,,_

-
設定單方向的套息交易

接下來,我們要讓程式執行的是「套息交易」令程式自動產生
如本章第二節所描述之手動且有一定點位差距之下單模式,因此必

須將外部參數的 CarryTradeMode 設為 true (如圖 3-7) 。當設定完

成以後,「套息交易自動交易程式」就會依照使用者的設定來執行

「單方向的套息交易」。

外部參數之 Carry Trade Mode 欄位設為 True

套息交易策略之程式交易方法
此「套息交易自動交易程式」的功能基本上還是有理論基礎,

.例如進場方式還是得依照程式邏輯條件成立才能進場,在上一篇當
中是建議使用 Stochastic 指標與 Bollinger Band 指標都成立的前提下

才執行下單,目的就是讓進場點位可以處在相對的安全位置。例如

只做買單交易有正利息時,希望可以買在低點,只做賣單交易有正

利息時,希望可以賣在高點,因此程式邏輯啟動就是以 Stochastic

指標與 Bollinger Band 指標都成立之下才執行下買單或賣單。同

時,線圖的時間框架比這建議設為 4 小時以上(例如, 4 小時線或

日線),以 5,000 美金才能執行一組「套息交易」等。從圖 3-7 的

_
119
GridDistance 可以簡單的算出整個風險的數值。其算法如下:

第一層開 0.0 I Lot 間距為 34 點

第 二 層開 0.02 Lot 間距為 68 點

第三層開 0.03 Lot 間距為 68 點

第四層開 0.04 Lot 間距為 l 12 點

第五層開 0.05 Lot 間距為 112 點

第六層開 0.06 Lot 間距為 112 點

第七層開 0.07 Lot 間距為 168 點

第八層開 0.08 Lot 間距為 168 點

第九層開 0.09 Lot 間距為 168 點

第十層開 0.10 Lot 間距為 168 點

第十層以後(第十一層)終止開倉。所以以上的設定
的最大風險控制為,當市場反向瞬間跌價(或漲價)高達

34+68 X 2+ 112 X 3+ 168 X 4 = 1178 Pips (點),此「套利自動交易程

式」才會停止開倉。這時「套息交易自動交易程式」的總開倉數為

0.01 +0.02+0.03+0.04+0.05+0.06+0.07+0.08+0.09+0.1 = 0.55Lot 。因

此,若帳戶是 5000 美金來計算的話,所用的的槓桿大約是 11 倍左

右。

如果市場真的是瞬間反向且讓程式瞬間開到套息交易的第十

層,程式將終止開倉,並等待市場回升,在等待市場回升期間,因

為是單方向的正利息,所以,每日可以賺取息差。而停利點的設定
是每一個開倉部位起算的 100 pips 點利益。因此若全部開滿 10 個部
位,並全部停利出場,則有 0.01 X 100+0.02 X 100+0.03xl00+0.04 X 1
00+0.05 X 100+0.06 X 100+0.07 X 100+0.08 X 100+0.09 X 100+0.1 X 100

..
= 55 Lot/Pips 利益,所以是 550 美金的利益,以帳戶資金為 5000 美
金來計算的話,那就是 11% 的報酬,這是不含每日利息,若加上利
息,利潤報酬可以再增加。
耐心等待,以及避免高槓桿

這種模式交易的特點是,帳戶容易出現高額的浮動虧損,但囚
為每日都有正利息入帳,所以在市場波動期間,對投資者比較不會
產生太大的心理壓力,但因為有可能市場是與下單方向相反的走勢,
因此此類策略都需要時間等待,同時,此策略也不建議使用過高槓
桿,以 20 倍以內的最大槓桿使用率是比較安全的。

套息交易策略之程式交易方法

_
121
馬丁格爾策略及變異馬
丁格爾策略

J, at any rate, am convinced that He does not throw dice


我,無論如何,深信上帝不擲骰子 。

一阿爾伯特 · 愛因斯坦


`. --- -!'~·

\,
~」

馬丁格爾策略概念及介紹

基本概念跟機率公式

外匯套利中的「馬丁格爾 (Martingale) 」策略其實是 一 種賭博

策略,這個方法其實早在十八世紀發源於法國之後沒多久時間就在

歐洲廣為人知,理論上這種策略絕對不會輸錢 。 這個策略很簡單,

在一個押大或押小的賭盤裡, 一 直不斷的只押某 一 單邊(如押大或

押小),每輸錢 一 次,就把輸錢的數目乘上兩倍, 一直 到你的押盤

贏 一 次,就可以將前面所虧損的金額全部贏回來並多贏第 一 次所押
的金額。

讓我們用實例來說明,假設我們來到澳門賭場,有 一 個只能押

大小的台子,我們先從 1 元開始押(只能押某 一 邊),然後以 2 的

倍數 (2Xl)" 增加,也就是 : l 、 2 、 4 、 8 、 16 、 32 、 64 、 128 、

256 、 512 ……,直到贏錢為止,然後又從頭開始(這樣算一回合) 。

所以,每一回合,你 一 定會贏 l 元。如果你手上有 1024 元,每天進

賭場要贏 10 元,那你每天只要贏 10 回合就可以快快樂樂過 一 天。

目前世界上有 一 些賭場是不太歡迎賭徒使用此方法,但懂機率又不

貪的人,常常使用這種方法進賭場去白吃白喝同時順便觀光旅遊。

不過這個方法絕對不是穩贏不賠毫無風險,它的風險在於:有

.. 可能你還未贏到那「押對」的一次,口袋的錢已經虧光 。 比如以上

面例子來說,如果 一 連押大,或 一 連押小都輸了十次,那就是你 會


虧掉: 1+2+4+8+16+32+54+128+256+512 = 1023 。你只剩一塊錢,
只好打電話叫你爸爸媽媽來帶你回家。

但就機率而言,要連開 10 次大,或連開 10 次小的確是不簡單。

而「機率」有所謂的單獨機率 (Iso lated probab 巾 ty) 跟連續機率

(continuous probab山ty)' 而連續出現大,或連續出現小的機率是


以指數 (Exponential) 遞減。

所以此方法有一句名言 : 如果你有無限的財富,你就永遠不會

輸錢。 (Never lose money if you have infinite wealth.)

因此,我們可以來算一下數學跟機率就可以看到一些有趣的現

象。假設我們以 q 來代表虧損的機率(如果僅以押大小為例是 1/2'

以美式輪盤為例是 20/38)• 以 B 來代表口袋中能押大小的籌碼總

馬丁格爾策略概念及介紹
量,以 n 來代表總共能夠虧損的次數。所以你總共虧損 n 次的機率

是 q" 。當你把你口中的籌碼都虧掉了,那表示你總共虧損的金額是 :

n
L B·2i-l = B (2n - 1)
i=l

. 而你不會虧損 n 次的機率是 1 -q" 。假設你不會真的那麼倒楣虧


損了 n 次數,而你所能夠贏到 B 數量的錢,那麼你每一回合能期待

的利潤為 :

(1- q鬥 ·B - qn·B (2n - 1) = B (1 — ( 2q) 鬥

所以,以上面例子來做說明,你會連續虧損 10 次的機率為:

(1/2) /\10 = 0.0009765 = 0.09765%• 所以第 11 次你可以贏回所有


的虧損並多贏 l 塊錢的機率是: 1- (1/2) /\10 = 99.9023% 。

_
125
最怕「不斷一直走趨勢」的市場

然而馬丁格爾策略可以適用於股市/期貨/外匯嗎?基本上是

可以,但天底下沒有白吃的午餐,大部分交易者不喜歡使用這種策

略來交易,原因是口袋不夠深,無法承受連續數次的累計虧損。筆

者也不建議初學者使用此策略做外匯交易,因為如果僅單獨以此理

論來做外匯交易,虧光戶頭裡裏銀子的機率很高。

主因是我們知道此方法是以「機率」來嬴過押「大小」的賭盤,

但在外匯市場裡,我們可以把「大小」看成是「漲跌」嗎?絕對是

不行的。因為賭盤押大或押小,它不是「連續性」,它不具備有「連

纘性」的特質;而外匯或期貨市場卻具備「連續性特質」。比如說,

在賭盤即使虧損也僅僅是押在賭盤上的籌碼,它並不會產生「擴大」

的效應;但是,外匯市場、期貨市場等等,是以「部位」來計算盈虧,

它會隨著市況的漲跌而產生「擴大」的效應。

熟悉外匯的人都知道,市場的「漲跌」不是賭大小的機率問題。

使用馬丁格爾策略其實最怕的就是當你進場做「買」時,市場卻是

一直不斷的下跌,或是當你進場做「賣」時,市場卻是一直不斷的

上漲,這都是時常發生的事。依照馬丁格爾理論,因為到後面會越
押越大,所以虧損到後期非常有可能將戶頭的資金全部虧光,這就

是由於市場連續性「擴大」的效應所產生的結果。所以由此可知,

馬丁格爾理論最適合用於「不斷一直走震盪」的市場,反而最怕「不
斷一直走趨勢」的市場。

外匯操作模式

.. 我們可以來計算一下機率,不管是何種商品,一般的商品交易

大概會有四種市場狀況,就是「盤漲」(震盪上漲)、盤跌(震盪
下跌)、大漲(趨勢上漲)、大跌(趨勢下跌)。我們假設這四種

市況會發生的機率都一樣,所以它們出現的機率就是各佔 25% 。就

外匯市場來說也是一樣有這四種情形。馬丁格爾策略在「盤漲」跟

「盤跌」的市場裡都可以獲利出場,就如同押大小的檯子一樣,開

幾次「大」後開「小」或開幾次「小」後開「大」,使用馬丁格爾

策略都可以獲利出場。但是在市況是大漲(趨勢上漲)或大跌(趨

勢下跌),只要是押錯邊,如趨勢上漲時卻執行馬丁格爾策略的
「賣」,或者趨勢下跌時卻執行馬丁格爾策略的「買」,這時你進

入「對的」市場的機率也是各占一半。所以,使用馬丁格爾策略在

任何市場「贏的機率」是 75%• 就是下買單時的市場是「盤漲」十「盤

跌」十「大漲」,或下賣單時的市場是「盤漲」十「盤跌」十「大跌」,

輸的機率是 25%• 就是下買單時的市場是「大跌」而下賣單時的市

場是「大漲」。

馬丁格爾策略概念及介紹
同時,只要一進入「輸的機率」的市場,那帳戶裡所有的錢虧

光的機率幾乎是 100% 。這種策略雖然賭贏市場的機率高達 75%•


然而只要當市場與你是反方向的趨勢線,那非常有可能會將帳戶

裡所有的錢都虧光。馬丁格爾策略也被稱之為「金字塔型交易」

(Pyramidical Trading)• 當它進場後遇到反市場趨勢,因為越到後


.期開倉數越大,虧損也會變得越大。

因此我們才會說馬丁格爾這種一直押下去的策略可能適合賭
場,但卻不一定適合外匯的貨幣交易。因為在外匯市況裡,某種貨

幣組合走趨勢時,連續漲或連續跌一整年都是很常見,不過,如果

仔細觀察,我們就會發現有些貨幣常常處在震盪趨勢,那就非常適

合馬丁格爾策略。

_
127
適用於長期處於震盪的連動貨幣

因此根據筆者的經驗,馬丁格爾策略要使用在外匯市場,一定

要慎選貨幣之外,也要搭配其他的策略一起使用才不會「被燙到」。

比如說, EURCHF (歐元瑞郎)丶 GBPCHF (英鎊瑞郎)、 EURGBP

(歐元英鎊)、跟 AUDNZD (澳幣紐幣)這四組是使用馬丁格爾策

略的較佳貨幣。原因是 EUR 跟 CHF 、 GBP 跟 CHF 、 EUR 跟 GBP 、

以及 AUD 跟 NZD 是連動 (Correlation) 的貨幣。因此,這四組貨

幣比其他的或幣組都易處於「震盪」的市況,而比較不常處於所謂

的「趨勢」市況,下圖 4-1 是 EURCHF 、 GBPCHF 、 EURGBP 以及


AUDNZD• 從歷史線圖就可以知道這四個貨幣對線圖長期處於震盪
的市況,而震盪的市況是適合套用馬丁格爾策略的套利模式。

EURCHF/GBPCHF/EURGBP/AUDNZD
~ -凶_ , 。

從上圖來看,這四組貨幣也是最常被馬丁格爾策略愛好者所使

用的貨幣。然而,使用這四組貨幣下單有一個最大的問題,那就是

..
下單成本相當高。主因是幾乎所有的交叉貨幣的點差成本 (Spread

Cost) 都比直接貨幣高上兩倍或三倍的成本。
馬 T 格爾策略之退場機制

使用此策略做市場套利者, 一 定要有 一 個可以「全身而退」的

計 畫 ,以下是筆者的 一 些建議供參考 :

程式或策略本身需要有完整且考慮周詳的「資產保護計畫」。

例如,設定當你進入的市場剛好與你的程式是反方向趨勢時,當帳

戶虧損達到多少時可以停損出場。這點非常重要,因為如果不這樣

做,很容易會虧光帳戶裡所有的錢。

程式或策略本身可以在必要時啟動「直接對沖」 (Direct

Hedge) 。直接對沖的目的在規避反方向趨勢時的不斷擴大的虧損,

並且「直接對沖」的開倉數是須經過數學運算過的,此目的不是為

了獲利而是為了縮小虧損出場。

馬丁格爾策略概念及介紹
「每 三 個月不管獲利多少, 一 定要將利潤全部匯回自己口袋」。

也就是說,每一季匯回 一 次交易帳戶的獲利,一般而言 三 個月應該

可以有 15% 至 30% 的獲利。將所有獲利匯回自己口袋後,帳戶將只

保留最原本投入的資金。當所有匯回的利潤已超過原本投入的資金

(就是獲利 100%) 後,可改為每當獲利達 50% 時匯回一次。當匯

回的利潤又逹到投入的資金(就是第二次的獲利 100%)• 可改為每

獲利達 100% 時匯回一次,之後就是每次達 100% 的獲利時就匯回利

潤。

這樣的機制,是針對應用馬丁格爾套利策略時,發生反方向長

趨勢市場時的資金保護退場機制。它除了能有效保障利潤之外,也

比較不至於讓自己的資金處於高度風險之中。

_
129
. .I

馬丁格爾策略風險與實務操作
方法

這節文章將討論套利交易的相關數學及機率理論部分的「方法 .

學」,以及「資金管理學」上有名的凱莉公式 (Kelly Criterion) 。

馬丁格爾理論

首先,我們先回顧何謂「馬丁格爾」策略。所謂的馬丁格爾策

略其實是一種「賭博策略」 (Betting strategy) 。這個方法其實早在

十八世紀發源於法國,當時有 一 對夫婦,先生叫做馬丁 (Martin) 太


太叫格爾 (Gale) 。每個月當馬丁賺錢時格爾就會把它花光並多花

一 些錢,這對夫婦發現如果這種情形 一 直下去,不久後他們將會破

產。最後馬丁格爾夫婦決定從此不管馬丁每個月賺多少錢,格爾每

個月至少要留下 一 塊錢,由此衍生出馬丁格爾策略。

策略很簡單,就是任何在 一 個押大或押小的賭盤裡, 一 直不斷

的只押某 一 單邊(如押大或押小),每輸錢 一 次,就把輸錢的數目

乘上兩倍,一直到你的押盤贏 一 次,就可以將前面所虧損的金額全

部贏回來,並多贏第 一 次所押的金額 。

以下是使用數學機率所計算馬丁格爾策略。假設我們以 q 來

代表虧損的機率(以美式輪盤為例是 20/38• 所以虧損機率為

.. 52.6%)• 以 B 來代表賭客口袋中能押大小的籌碼總量,以 n 來代表


總共能夠虧損的次數。所以當總共虧損 n 次的機率是 q/\n 。 而當你把

你手中的籌碼都虧掉了,那表示你總共虧損的金額是:
n
辶 B-i一 1 = B (2n - 1)
i=l

而你不會虧損 n 次的機率是 1-qn 。假設你不會真的那麼倒楣虧

損了 n 次數,而你所能夠贏到 B 數量的錢,那麼你每一回合能期待

的利潤為:

(1 一 q鬥. B - qn. B (2n - 1) = B (l - (2q) 鬥

因為由上面的例子來說明,虧損的機率為 52.6%• 而上面公式

中 1- (2q) /\n = 1- (2X52.6%) /\n• 而且 n>O (n 代表總共能夠虧

損的次數,因此 n>O)• 所以你會的到一個負值。這就表示在任何

一次賭注裡面,你所能期待的「利潤」為負值,也就是說其「虧損

的機率」會大於「獲利的機率」。

馬丁格爾策略風險與實務操作方法
若以實例來說明,假設我們拿 6300 元在澳門賭場玩美國輪

盤,先從 100 元開始押紅色 (18 個紅色與 20 個非紅色,所以贏率

為 18/38• 而輸率為 20/38)• 然後以 2 的倍數 (2) /\n 增加,也

就是: 100 、 200 、 400 、 800 、 1600 、 3200 ……,直到贏錢為止,然


後又從頭開始(這樣算一回合)。如果你輸了五次,那你會虧損

• 100+200+400+800+1600 = 3100 元,當你連續輸到第六次,那你會


虧光所有的錢 (3100+3200 = 6300) 。所以,以這個例子來做說

明,你會連續虧損六次的機率為: (20/38) /\6 = 2.1256%• 而第六

次你可以贏回所有的虧損並多贏 l 塊錢的機率是: 1- (20/3 8) /\6 =


97.8744% 。

交易成本與典型啟發

_
為何這次舉的例子是以美國輪盤而非是押大小?且筆者舉的

131
例子是連續六次虧損而非連續八次虧損、九次虧損或者是十次虧損

呢?這部分跟外匯交易在程式設定上會有些許相關。

主因是所有外匯交易,投資者與市場絕對不是 50% 對 50% 的

輸贏競爭,投資者在外匯市場裡投資,還沒決定勝負之前就必須先

付出成本,也就是 ASK-BID = SPREAD 點差成本。因此,不管如


何計算,投資者在外匯市場的數學贏率絕對是低於 50%; 因為輸贏

之前的投資成本也必須含在計算裡面。也就是說,外匯投資者在外.

匯市場若以機率來看,贏率絕對是低於 50% (也就是虧損機率高於

50%)• 所以應該以美國輪盤的輸率 52.6% 當作外匯的例子會比押


大小的輸率 50% 來的正確一點。

為什麼是「連續六次虧損」?

另外,為何舉「連續六次虧損」為例子呢?因為「連續六次虧

損」是最被賭徒視為「不可能機率」的一個臨界點,這個在心理學

上稱為「典型啟發」 (Representativeness Heuristic) 。以美國輪盤為


例,其輸率為 q = 20/38 = 52.6%• 而「連續六次虧損」其「輸的機

率」變成: q/\6 = 2.1256% 。這是當我們以「單獨連續性」六次虧損

所算出來的機率;然而,如果我們再深入算下去,你會得到一個很

意外的結果。

當我們進場賭 73 次的時候,你會在某個點上「連續六次虧損」

的機率竟然會變成 50.3% (算法為: (1-0.526316) X0.021256 =


0.010069• 0.978744X (1-0.010069) /\67 = 0.49683• 1-0.49683 =
50.3%) 。

- 也就是假設你口袋僅有 6300 元,每次押 100 元,以「馬丁格爾」

策略來押「美國輪盤」,在押「美國輪盤」 73 次當中有一次會超過
「連續六次虧損」的機率是 50.3% 。但馬丁格爾策略是只要超過「連

續六次虧損」的情形發生 一 次,你就破產。而且,當你押美國輪盤

150 次當中有 一 次會超過「連續六次虧損」的機率則是 77.2%• 而若

你押美國輪盤 250 次當中有一次會超過「連續六次虧損」的機率則

變成 91.1% 。

但是讀者請注意 一個重要的事項,馬丁格爾策略是只要發生「 一

次」高於你所能承受的最大虧損 , 你就破產;所以你玩越久且連續

性越多次,破產機率就越高。由上面的數學可以清楚知道,為何賭

徒只要進了賭場坐下來長時間與賭場對賭, 一般都是輸光盤纏而回。

而外匯市場或其他金融市場也可以被視為相類似情形 , 因為你是站

在輸的機率大於 50% 的一方,從數學機率理論來看,長期下來在市

場成九輸家的機率相當高。

馬丁格爾策略風險與實務操作方法
那麼,賭客可以在賭場使用馬丁格爾策略嗎?聽說某些賭場可

能一開始就限制你使用馬丁格爾策略,某些賭場雖然允許你使用馬

丁格爾策略但卻限制最多你只能押六次(因為「典型啟發」)。所以,

若這是賭場的潛規則,那我們很清楚知道,賭場其實都知道賭徒所

知道的所有技巧。

凱莉公式

接下來我們來談「凱莉公式」。這個公式的目的是希望以機

率方式來算出最合理的投資金額來讓自己可以在長遠的投資下是個

「投資贏家」。

假設有 一 個押大小賭盤,贏了就贏回所押的錢,輸了則輸去所

押的錢。凱莉公式 (Kelly Criterion) 提出一個公式建議投資者應該

_
133
以多少比率的資金來進行投資或押大小的賭盤。公式如下:

bp-q
f* = b

以上公式之:

• fl' 為押在賭注上的全部資金比率(例如若為 10%' 當你有


100 元時,就表示最多只能拿 100 X 10% = 10 元下注)。

• b 為賭盤上的淨賠率( 一 般是設賠率為一,就是 b = 1) 。

• p 為賭盤上贏的機率。

• q 為賭盤上輸的機率;它也等於 1-p 。

由上面的公式,我們假設有一個賠率是 l 比 1 (b = 1) 的賭盤,

因為 b = 1• 所以上面的公式就變成:

「 =p-q

我們再假設如果該賭盤贏的機率是 60% 而輸的機率是 40%• 也

就是上面公式中的 p = 0.6• 而 q = 0.4' 若我們想成為「長期的贏


家」,我們每次下注的金額為資金總金額的:

bp- q
「= b ,=

「= p- q = 0.6 - 0.4 = 0.2 = 20%

- 也就是說,在上面這個賭盤條件下,只要你每次下注是低於你
資產總金額的 20%• 你就可以成為「長期的贏家」。
不過使用「凱莉公式」有 一 個條件,就是當 P 是 一 個負值時,

這個賭盤就變成不適用。

P 如何會變負值?當 b < q/p 時, P 就變成負值。

也就是說在任何賠率 (b) 小於輸率除以贏率的賭盤, P 就變成

負值。例如,以「美國輪盤」為例,其賠率是 l 比 1' 所以 b = 1 。

但輸率為 q = 20/38 = 52.6%• 而贏率為 p = 18/38 = 48.4%• 所以


b (= 1) < 52.6/48.4 。

就以上面公式套到「美國輪盤」來說,其結果如下所示。

bp-q
「 = b ,=
18 20 1

馬丁格爾策略風險與實務操作方法
「 =p-q= —--=-—
38 38 19

以上的 P 變成負值。

因此若以「凱莉公式」的建議,那就是「不要玩美國輪盤」

因為在這種條件下的賭盤你是無論如何都不可能成為「長期的贏

.家」。

同時「凱莉公式」對連續賭注的每一筆賭注事實上是設為一個

獨立機率 (Independent)• 而且「凱莉公式」僅對每一筆賭注的最

小投資額做建議,它不是產生遞增現象,而是平均分攤的模式,再

依照機率下算出來的結果,以最佳的資金達到長期獲利的效果。

成為長期贏家的資金管理模式

所以假設我們要利用「馬丁格爾」與「凱莉公式」在外匯上操

_
135
作,我們應該如何設計 一 個合適的「資金管理」來讓我們的程式可

以達到「長期的贏家」?

這時我們必須自行在「交易」上的「資金管理」上做很好的資

金保護的設計 。 我們依照前面「馬丁格爾」策略論述裡所談到的「典

型啟發」為「連續六次虧損」;因此,資金的保護設計就是以七次
「連續虧損」為基準。同時在傳統的馬丁格爾策略是以 2 /\n 為乘積,

但實際做法上 2/\ n 的遞增操作模式在外匯市場是極為高風險,因此

筆者對投資者使用此策略的「交易」上,建議是以 1.3~ 1.5 之間為乘

積。我們將統 一 以 1.3 為例子,以下簡單的數學運算:


x = lot
y = Multiplier (乘積)

所以
Level I = x
Level2 = xy
Level 3 = x/
Level 4 = xy3
Level 5 = xy4
Level 6 = x/
Level 7 = xy6
當達 到第七階時,就是「連續虧損七次」後所閩的總 Lot 數 為 :
x + xy + xy + xy + xy + xy + xy

由以上公式,當程式設定 為 :
x = 0.01 lot
y = 1.3 ( 乘積 )

所以

-
Level I = 0.01
Level 2 = 0.02
Level 3 = 0.03
Level 4 = 0.04
Level 5 = 0.05
Level 6 = 0.07
Level 7 = 0.09
當達到第七階時,就是「連續虧損七次」後你所開的總 Lot 數為:
0.01 + 0.02 + 0.03 + 0.04 + 0.05 +0.07 + 0.09 = 0.3 I Lot

所以,若我們是在 一 個允許 1: 100 的槓桿下的外匯經紀商交易,

若我們只使用 10% 的 Margin• 那安全的操作資金就需要 3100 美金。

若以「典型啟發」之「連續六次虧損」為標準,達到第六階時

的總開倉數目= 0.01 + 0.02 + 0.03 + 0.04 + 0.05 +0.07 = 0.22 Lot•


若我們只使用 10% 的 Margin• 所以筆者建議使用「馬丁格爾」的最
低資金要求則為 3000 美金。因此在我們的資金管理的設定建議上,

常常將 Break Even (不賺不賠)的階層設為第六層,而開始反向對

沖下單層則設為第七層,就是以「典型啟發」理論做為基礎而考量。

馬丁格爾策略風險與 實 務操作方法
接下來就是討論應該設多少資金為我們應該投入的資金才能成
為「長期的贏家」?根據前面的「凱莉公式」說明,我們知道馬丁
格爾策略在任何的金融市場贏率為 75%( 盤漲、盤跌、大漲或大跌),
而輸率為 25% (大漲或大跌),因此我們下注的金額應該為資金總

金額的

bp-q
「 = b ,=
「= p - q = 0.75 - 0.25 = 0.5 = 50%

所以,為了成為「長期的贏家」,我們就必須設每次回合的馬

丁格爾交易資金必須低於「凱莉公式」的資金建議。以上面為例,
若為了達成「長期的贏家」,因為最低資金要求為 3000 美金,也因

為帳戶的資金保護機制必須設為 (50%)• 所以帳戶資金必須要有


3000 X 2 = 6000 美金,這樣才符合「凱莉公式」裡「長期贏家」所
具備的資金風險管理。

137

__ _J
馬丁格爾策略程式交易方法

「馬丁格爾交易模式」跟第三章的「套息交易模式」有點類似, .
但「套息交易模式」只有單 一 方向,即有「正利息」的方向,而「馬

丁格爾交易模式」基本上是不考慮隔日拆款利率的利息,只注重交

易的匯差利益。

程式套用前之市場觀察

在執行馬丁格爾策略程式之前,筆者建議讀者需先對市場做出

略的觀察判斷,再來決定是否使用「馬丁格爾自動交易程式」,因

為馬丁格爾策略是「虧損加碼交易模式」, 一 旦市場走的是反向趨

勢,帳戶很容易因為這種越賠越下重單的模式而賠光帳戶的資金,

因為方向是相反的關係,即使帳戶使用最保守的資金保護也會造成
嚴重且巨幅的虧損 。 因此,「馬丁格爾外匯套利交易模式」只適合

在震盪市況下來執行,這是很重要的前提觀念。

首先我們先看 一 下以下的兩個線圖 : 圖 4-2 是 EURUSD 1 小時

線圖;圖 4-3 是 USDJPY 1 小時線圖。

..
EURUSD H1
nm

I 1-
I

·-·
曰..... _., __ .... 這., ___一 u一·-- --·-·· - 一.....
一 -
·-·
這,.一,_., ____嶋·-·---一 u•••=• 一 u這 2 一-·-·-

USDJPY H1
•=~m-,.·~n=m=

. II 巳

馬丁格爾策 略程 式交易 方 法
1'1/ 1

;••. ,__ ,....- -. . . ·--··--··-一 ·n•- u•- u••• ••-••-•••龜- ,. __ ,. __·-·-口--·-·這., ____ _

從以上的這兩個線圖看起來就知道,這種線型 Pattern' 使用任

何指標都很難獲利,因 為 下單之後市場可能就反轉,使用指標預測

在以上 這 兩 類 的市況 容易 造成賺小賠大,或被市場「雙巴 掌 」 。 這

種市況的發生 ,對外匯老 手 來說,應 該 是 一 點都不陌生 就 是 在很

短 的時間,可能 是 10 分鐘或 30 分鐘之內, 一 根 Bar 一直 向 上 或向

下( 端 看是 哪個貨幣 ) ,不 管 「下 單 方向」是對的或錯的, 這 種市

_
139

_J
況都會讓投資者腎上腺素直上飆高兼心跳加快,還兼人天交戰的心

理狀況 一 直不斷的衝撞自身。

「該加碼嗎?」(方向對的投資者會 一 直這樣興奮自問)

「該停損嗎?」(方向錯的投資者會一直這樣悔恨自問)

預測指標,或是馬丁格爾策略?

然後,當決定「加碼」或「停損」時,市場立刻反向迴轉,令「加

碼」者變成倉位虧損,令「停損」者賠在最高點。外匯市場常常老

是這樣在作弄著世界上的投資者。在這種市況之下,不管投資者所

套用的預測指標是如何的精準,如何的料事如神,如何的每押必中,

要在這種快速「上升下降」的市況獲利,看來實屬不易;不僅獲利

不易,甚至還可能被市場打兩巴掌。因此這種市況模型最適合的策

略其實就是馬丁格爾策略。

因此,若我們在這種市場波動模型的線圖使用「預測指標」

不管是趨勢預測、短線預測等等的指標,很容易下單之後就被反轉

的市況所停損出場。所以這種市場,使用「預測指標」的下單策略

非常容易虧錢;但對於這個市場模型,若套用馬丁格爾策略的交易

程式,例如 Blessing 程式的話,「多空雙邊」都可以順利獲利出場。

但若使用「順趨勢加碼」的交易方式,了不起大概就是「不賺

不賠」,因為「線型不夠長」,即使是有「移動停損」 (Trailmg

Stop) 拉保護停損點作為保護,但最後的幾筆「獲利加碼單」則容

.. 易在中途被停損出去,所以整回合下來,「不賺不賠」的機率比較

高,下個小節會介紹一下適合「順趨勢加碼」交易方式的市況模型。
「對的交易策略」套到「對的市況模型」

我們很清楚知道馬丁格爾策略只適合「震盪市場」,一但市場

轉向走「趨勢市場」時,所套用的程式必須要趕快下架,即使停損

也不要讓程式掛在帳戶上面硬凹。因為一但市場走「趨勢市場」,

使用馬丁格爾策略很容易只會讓自己前幾個月來的獲利又被虧損光

光,又再一次做白工的惡性循環。

筆者套用以下的兩個線圖來說明「市場波動模型」要對應到「對

的交易策略」。圖 4-4 是 EURUSD 4 小時線圖;圖 4-5 是 USDJPY 4


小時線圖。

EURUSD H4

''· '
"`' !

馬丁格爾策略程式交易方法
'' "" I '' ' .'d'' ,l·J
!

I
, J` ' -
Il'a,
,JT

'' '' ,'


~!

,, '` ` ' ' ' ' '.'' , , ' '`,,


',·"' ' ` ~!

` ,'
', '' ~!

'

'L
二一二二

. ` ,. .. ' ·' U
'' `'`' `
' 1,' ,'
'', '
h', i.
t
一一 i

,
`
. ·. - ·u- - . -` - .u-. mu -. . .· - ·· - · - ` · - · - .· ` ·-

u u u "t

g B i g i 8 g mi i

_
141
USDJPYH4

•M •" "M 蠶蛐 U 曰- MM- • MO- P 鱸...鱸•- ■ M- ■ MPa , .. - •--- , . . 鱸. .....嶋·--- ....- ....- ....-·---·---...•~*
以上的這兩個線圖是明顯的趨勢線圖。因此,如果投資者套用

的是馬丁格爾策略,帳戶產生巨幅的浮動虧損或帳戶爆倉的機率很

高。因為一旦程式所下單的方向是錯誤的,馬丁格爾策略只會繼續

再加碼下單,而市況會令帳戶受更大的傷害。這不是程式策略的錯,

也不是市場的問題,而是做為一個在投機市場交易的投資者都需要

知道的一個重要觀念,就是「對的策略」必須套用在「對的市場波

動模型」,這樣獲利的機率就會顯得非常高。

所以,投資者千萬不要高估 Blessing 這個程式的能力。 Blessing


程式只能適用在上下震盪的市場模型,一旦市場開始長期趨勢性的

走多或趨勢性的走空, Blessing 程式就會變成「賠錢貨」,不僅會


「賠錢」而已,還會「賠光帳戶裡的錢」。依照圖 4-4 與圖 4-5 的市
況,如果投資者使用的是順向獲利加碼的交易策略,就是所謂的「反

馬丁格爾策略」,那帳戶所獲得的利益將會是非常驚人。這不是「程

式本身」有何了不起之處,只不過是套在合適的市場波動模型那當

.. 然就會獲利。
猜市況,不如挑對適合的貨幣

「對的策略」套用在對的「市場波動模型」,獲利的機率就
高。但問題是,沒有人能知道下一秒市場的走勢,所以幾乎是無法

預估在任何一個時間點的下一刻市場會走震盪還是走趨勢的市況。

在這種情況之下,筆者在本篇前面的章節文章中有提及,馬丁格爾

策略所用的貨幣對最佳線圖是 EURCHF 、 GBPCHF 、 EURGBP 以及


AUDNZD 這四個貨幣對。請讀者先參考圖 4-1 的以上四個貨幣對線

圖模型:

馬丁格爾策略程式交易方法

以上這四組貨幣對長期以來都是在一定逼間內震盪,這對使用

馬丁格爾策略的投資者來說,風險會比較低。

因為是一定的震盪區間,所以,我們只要將最大可能的震盪匾

間査出來,當投資者套用馬丁格爾策略時,在風險上就會相對低很

多,如圖 4-6 。

_
143
馬丁格爾策略 Excel 風險試算表

47
~

我們可以設計一個簡易 Excel 風險試算表,由圖 4-6 來看,如果

投資者帳戶是 10000 美金,最大允許停損金額是 20% 的話,當從第

一層開始的 O.OlLot 直到第 6 層下 0.32Lot 都還可以撐在市場上,也


就是說當市場是直線上漲或下跌達到 775 點 (25+50+100+200+400
= 775)• 馬丁格爾策略還不會讓帳戶碰停損; 一 旦市場返回,都有

很高的機會可以順利出場。

再回到我們所提以上的四組貨幣對, EURCHF 、 GBPCHF 、

EURGBP 以及 AUDNZD• 這四組貨幣對在 一 般情況下,上下震幅都


在 1000 點以內,即使是有類似趨勢的走勢,也都在 1000 點之內會

有返折,這對使甩馬丁格爾策略有很大的優勢。

自動交易程式套用

我們已把馬丁格爾策略的基礎概念、數學公式、風險計算、貨

幣對選擇等等都做了的詳細的介紹,接下來就是自動程式的套用,

- 如圖 4-7 。
馬丁格爾策略自動交易程式

「馬丁格爾策略自動交易程式」在設計上都是參照上面的整套
介紹而設計的,但有幾個重要程式參數是可以給讀者做自行設計時

的參考 。

馬丁格爾策略程式交易方法
AccEquityProtection = 6000, // Equity Protection of Account
TradeWithAccPercent = 100, II Percentage of account want to
trade on this pair
AccStopLossPercent = 30, // Percent of account balance lost before
trading stops
PairStopLossPercent = 20, II Percent of portion for max drawdown
level
StopTradeAfterSLHit = false, II STOP TRADING OR NOT after
Stop Loss is hit
MoneyManagement = true, // Money Management
RiskBetaValue = 0.1 I Adjusts MM base lot RiskBetaValue
MultiplierFromLevelX = 1, // NextLevelMultiplier not used for this
number of levels
NextLevelMultiplier = 2, // NextLevelMultiplier to mcrease
lot size at each level
MaxTradeLevel = 7 II Maximum number of trades to place
BreakEvenLevel =
4· II Close All level, when reaches
this level, doesn't wait for TP to be hit
LongTrendDetect1on = true, // Use higher TF to detect general
trend

145
LongTrendTimePeriod = PERIOD H4;// Timeframe of higher Time Frame
//PERIOD_Ml 1 1 minute.
//PERIOD_M5 5 5 minutes.
//PERIOD_M15 15 15 minutes .
//PERIOD M30 30 30 minutes.
//PERIOD_Hl 60 1 hour.
//PERIOD_H4 240 4 hour.
//PERIOD_D1 1440 Daily.
//PERIOD_Wl 10080 Weekly.

-
變異馬丁格爾策略概念及介紹

基本概悆跟機率公式

在一般學院派制式的「馬丁格爾策略」理論是指在某個賭盤裡,

當每次賭金輸錢時就以 2 的倍數再增加賭金,所以是輸錢加碼,直

到嬴錢為止,每一回合只嬴一個單位的籌碼。馬丁格爾策略的反向

操作模式就是所謂的「反馬丁格爾 (Anti Martingale) 策略」,而「反


馬丁格爾策略」的策略模式,一是在某個賭盤裡,當每次賭金贏錢

時就以 2 的倍數再增加賭金,所以是贏錢加碼,直到輸錢為止,每

變異馬丁格爾策略概念及介紹
一回合贏全部單位的籌碼。運氣好時很快就可以大撈 一 筆,但這種

模式也非常有可能在一次的賭盤押錯時,所贏來的賭金就會全部虧

光。

接下來我們先解釋有所謂的「變異式之馬丁格爾交易模式」,

. 做法是 一 種「雙邊押注式」的概念,也就是在賭大小的賭盤裡,一

邊會進入「馬丁格爾模式」, 一邊卻僅是「 一個固定比例」的賭金。

實例說明:雙邊押注式

以實例來說明,假設我們拿 6300 元來到澳門賭場玩賭大小的

賭盤,我們先從 100 元開始「押大」,假設第 一 筆賭盤就贏,當

然我們就是再從第 一 輪的 100 開始從新「押大」。假設我們第 一

筆賭盤是輸的,從第二輪開始,我們在「押大」的那 一 邊的賭注以

以 2 的倍數 (2) /\n 增加,也就是: 100 、 200 、 400 、 800 、 1600 、

_
147
3200 ……,直到贏錢為止,但是需要再增加第 一輪的 100 元賭注拿來

「押小」。所以從第二輪開始,投資者必須「兩邊押注」。

因此,第二輪時,你的賭注為 200 元押大,再加上 100 元押小,

所以你要投入的金額變成 300 元。這時會發生兩種情形,第一種情

形:假設賭盤開出來的是「大」,則你贏回 200 元但輸掉第一輪「押

大」的 100 元,以及第二輪「押小」的 100 元,所以結果變成不賺

也不賠 (200-100-100 = 0) 。得到這樣的結果,你就必須從第 一輪

再從新開始。第二種情形:假設賭盤開出來的是「小」,則你輸掉

第一輪及第二輪「押大」的 100 元及 200 元,同時贏回第二輪「押

小」的 100 元。若是得到這樣的結果,你在「押大」的賭金就變成

第三輪的 400 元,而「押小」的那一邊同樣必須再押 100 元的賭注。

以此方式直到「押大」那邊真的開「大」而贏回所有以 2 的倍數 (2)

/\n 所增加的賭金,這時你必須從第一輪重新開始 。

譬如以上面的例子來說,若你有 6300 元,如果你在「押大」

的那一邊連續輸了五次,那你會虧損 100+200+400+800+1600 =
3100 元,但因為你從第 二 輪開始是「兩邊押注」,只是「押小」
的那一邊每次都只押 100 元,所以你會獲利 100+ 100+ 100+ 100-100
(最後一次會不賺不賠) = 300 元。這時你的資金餘額會剩下 6300-

3100+300 = 3500 元。當你連續「押大」輸到第六次,那你會虧掉

100+200+400+800+ 1600+3200 = 6300• 但是恭喜你,因為你「押小」


的那 一 邊會再幫你賺到 100 元,所以,你口袋裡會剩下 400 元,而
非輸到一毛都不剩。

, 機率計算以及數學公式

如果我們使用單純的馬丁格爾策略,依照上面的條件,若你全
部的賭資為 6300• 不管你只是押大還是押小,當你連續輸到第六次,
那你就會虧光所有的錢 (100+200+400+800+1600+3200 = 6300) 。

但是若使用「雙邊押注式」的概念,當你連續輸到第六次,那你

事實上僅會虧損 100+200+400+800+ 1600+3200-100-100-100-100 =


5900 元(因為第 一輪不會雙邊 押,最後一輪會不賺不賠)。所以這

種「雙邊押注」變異方式之馬丁格爾策略會讓你在跟賭盤對賭時,

以一種「漸進微幅式」的方式來增加自己的賭資。

因此若以機率來看,當你會連續虧損六次的機率為 : (0.5) /\6


= 1.5625%• 但第二輪開始另一邊會連續贏 100 元五次的機率卻會成

為 1- (0.5) /\5 = 96.875% 。所以第二輪開始,一邊虧錢而另 一邊 卻


是賺錢。

實例計算:雙邊押注 變異式之馬丁格爾策略

變異馬丁格爾策略概念及介紹
若使用數學機率計算「雙邊押注~,

假設我們以 q 來代表虧損的機率,以 B 來代表賭客口袋中能押大小

的籌碼總量,以 n 來代表總共能夠虧損的次數。所以你總共虧損 n

次的機率是 q/\n ; 而當你把你手中的籌碼都虧掉了,那表示你總共虧

損的金額是:

n
LB·i-l = B (2n - 1)
i=l

但因為你從第二輪開始「雙邊押注」,所以你的虧損金額將可

以少掉 B (n-2) 。因此是 B (2n-l) -B (n-2) 。

而你不會虧損 n 次的機率是 1-q" 。假設你不會真的那麼倒楣虧

損了 n 次數,而你所能夠贏到 B 數量的錢,那麼你每一回合能期待

的利潤為:

_
149
(1 - q叮 ·B - qn·B (2n - 1) = B (I - (2q) 鬥

也因為你從第二輪開始「雙邊押注」,所以每一回合能期待的

利潤將可以增加 B (n-1 ) 。因此是 B (1 - (2q) ") +B (n-2 ) 。

所以如果以單純的馬丁格爾 (Martingale) 策略理論來算的話,


當我們進場賭 73 次「美國輪盤」的時候,你會在某個點上「連

續六次虧損」的機率會變成成 50.3% (算法為 : (1 -0.526316 )


X 0.021256 = 0.010069• 0.978744 X (1 -0 .010069) /\67 = 0.49683•
1-0.49683 = 50.3%) 。若是以「押大小」的賭盤的話,在某個點上
「連續六次虧損」的機率則是 41.7% (算法為: (1-0.5) X 0.015625
= 0.0078125• 0.984375 X (1-0.0078125) /\67 = 0.582025• 1-0.582025
= 41.7%) 。當你「押大小」 150 次當中有 一次會超過「連續六次虧
損」的機率則是 69.2%• 而若你「押大小」 250 次當中有一次會超過
「連續六次虧損」的機率則變成 85.9% 。

而如果以「雙邊押注 變異式之馬丁格爾策略」,則當我們

進場賭後雖然在你「押大小」 73 次當中有一次會超過「連續六次虧

損」的機率是 41.7% 。但是因為只要每次沒有超過「連續六次虧損」

這種情形發生,就可以在第二次押注時多獲利 100 元。因此假設真

的在 73 次當中有一次會超過「連續六次虧損」,但這時已經可以多

獲利了 1 OOx (73-round (73/6) X 2) = 4 700 元,而押第七次的賭

注為 3200X2 = 6400• 所以你只要準備 6300+ (6400-4 700) = 8000


元時,你在 73 次「押大小」的賭盤裡還可以存活下來。反觀「單純

的馬丁格爾 (Martingale) 策略」卻需要準備真正「連續輸七次」的

賭資,就是 100+200+400+800+1600+3200+6400 = 12700 元才有辦

.. 法在 73 次「押大小」的賭盤裡還可以存活下來。
由上面的計算得知,在同樣條件的賭盤機率之下,若以達到「典

型啟發點」(六次連續虧損機率)的虧損金額來比較的話,使用「雙

邊押注_變異式之馬丁格爾策略」可以比「傳統馬丁格爾策略」的

賭資少 37% 。 由上面的描述,讀者其實可以很清楚看到「雙邊押注

變異式之馬丁格爾策略」似乎比起單純的馬丁格爾策略還來的有勝

算一點 。

外匯操作模式

在外匯操作模式方面,筆者建議投資者挑選的貨幣跟馬丁格爾
策略 一 樣,不建議挑選容易走長趨勢的貨幣來操作,主因也是長趨

勢的市況是 「 馬丁格爾策略」或「雙邊押注—-變異式之馬丁格爾策

略 」 的大敵;容易導致帳戶的浮動虧損急速拉大,以至於碰到帳戶

停損 。

變異馬丁格爾策略概念及介紹
所以, EURCHF (歐元瑞郎)丶 GBPCHF (英鎊瑞郎)丶

EURGBP (歐元英鎊)跟 AUDNZD (澳幣紐幣)這四組是亦是筆者


建議使用「雙邊押注一一變異式之馬丁格爾策略」的較佳貨幣。原因

是 EUR 跟 CHF 、 GBP 跟 CHF 、 EUR 跟 GBP 以及 AUD 跟 NZD 是

連動 (Correlation) 的貨幣。因此,這四組貨幣比其他的或幣組都易

處於「震盪」的市況,而比較不常處於所謂的「趨勢」市況。

_
151
變異馬丁格爾策略風險與實務
操作方法

實務操作及舉例

就「方法論」來說,「變異式馬丁格爾外匯套利交易模式」,

就是一邊會進入「馬丁格爾模式」(例如押大),另一邊卻僅是「一

個固定比例」(例如押小)的賭金,這種方法說起來其實應該都還

算是「馬丁格爾模式」的一種變化應用。

筆者 把這種「變異式馬丁格爾」的方法套用到外匯套利之交易

模式,當進入市場反趨勢時,程式可以因為有另一邊的對沖倉位而

有利潤收入,讓帳戶在即時的市場交易裡可以一直墊高帳戶的資金

餘額,故此策略的好處就是帳戶的風險承受度可以因此而增加 因

為可以逐步墊高當進入「反市場趨勢」時,帳戶可以承受之虧損金

額。但其缺點是,若當市場一直處於狹幅震盪,程式有可能會一直

在做白工,且當市場走趨勢時,「變異式馬丁格爾外匯套利交易模

式」依然會造成大額浮動虧損。

假設我們拿 63 元來到澳門賭場玩賭大小的賭盤,我們每次都從

1 元開始「押大」,假設第 一筆賭盤就贏 ,當然我們就是再從第 一輪

的 1 開始從新「押大」。假設我們第一筆賭盤是輸的,從第二輪開始,

..
我們在「押大」的那一邊的賭注以 2 的倍數 (2) /\n 增加,也就是:

l 、 2 、 4 、 8 、 16 、 32 ……,直到贏錢為止;但當從第 二輪開始 ,需要


再增加「第一輪的賭注」 (1 元)拿來「押小」;所以從第二輪開始,
你必須開始「兩邊押注」。

因此,第 二 輪你的賭注為 2 元押大,再加上 1 元押小,所以你

要投入的金額變成 3 元。這時會發生兩種情形:

1. 假設賭盤開出來的是「大」,則你贏回這次「押大」的 2 元,

但扣掉第 一 輪「押大」輸掉的 1 元,以及輸掉這 一 輪「押小」

的賭資 1 元,所以結果變成不賺也不賠 (2-1-1 = O) 。如果得

到這樣的結果,你就必須從第 一 輪再從新開始。

2. 假設賭盤開出來的是「小」,則你輸掉第一輪及第二輪「押大」
的 1 元及 2 元,但是贏回第二輪「押小」的 1 元。若是得到這

樣的結果,你必須在第三輪時一樣「兩邊押注」。但你在「押

大」的賭金就變成 4 元(第 三 輪),而「押小」的那 一 邊同樣

必須再押 l 元的賭注。利用上述之第 二 種方式直到「押大」那

變異馬丁格爾策略風險與實務操作方法
邊真的開「大」而贏回所有以 2 的倍數 (2) An 所增加的賭金,

同時輸掉最後 一 輪「押小」的賭資,就變成不賺也不賠,這時

必須再從第一輪重新開始。在這樣的過程當中,你整體的賭資

將可以 一 步步墊高;利用這種方法就可以 一 步步增加整體的資

金總額。

譬如以上面的例子來說,若你有 63 元,如果你在「押大」的那

一 邊連續輸了五次,那你會虧損 1+2+4+8+16 = 31 元,但如果你是

從第 二 輪開始是「兩邊押注」,同時在「押小」的那 一 邊每次都押

1 元,所以你會獲利 1+1+1-1 = 2 元(第 一輪不會雙邊押注,最後 一

次會不賺不賠)。這時你的資金餘額會剩下 63-31+2 = 34 元。當你

連續「押大」輸到第六次,那你會虧掉 1 +2+4+8+ 16+32 = 63• 但是


你會因為「押小」的那一邊有再幫你賺到 l 元,所以,你口袋裡會

剩下 2+1 = 3 元而非輸到 一 毛都不剩。

153
如果我們使用單純的馬丁格爾策略,依照上面的條件,若你全

部的賭資為 63• 不管你只是「押大」還是「押小」,當你連續輸到

第六次,那你就會虧光所有的錢 (1+2+4+8+16+32 = 63) 。但是若


使用「雙邊押注」的概念,當你連續輸到第六次,那你事實上僅會

虧損 1+2+4+8+16+32-1-1-1-1 = 59 元(因為第 一 輪不會雙邊押,最

後一輪會不賺不賠)。所以這種「雙邊押注——變異方式之馬丁格爾

策略」會讓你在跟賭盤對賭時,以一種「漸進微幅式」的方式來增

加自己的賭資。

使用「雙邊押注 變異式之馬丁格爾交易模式」於外匯交易

接下來,我們來看若是以「外匯交易」模式來執行「雙邊押注
變異式之馬丁格爾交易模式」的數學運算:

x = lot
y = Multiplier (乘積)

所以

Level I = x
Level2 = xy
Level 3 = xy2
Level 4 = xy3
Level 5 = xy4
Level 6 = x/
Level 7 = xy6

當達到第七階時,就是「連續虧損七次」後所開的總 Lot 數為:

x + xy + xy2 + xy3 + xy4 + x/ + xy6

由以上公式,當設定為

= 0.01 lot

..
x
y=l.3( 乘積)

所以:
Level 1 = 0.01
Level 2 = 0.02
Level 3 = 0.03
Level 4 = 0.04
Level 5 = 0.05
Level 6 = 0.07
Level 7 = 0.09

當達到第七階時,就是「連續虧損七次」後所開的總 Lot 數為

0.01 + 0.02 + 0.03 + 0.04 + 0.05 +0.07 + 0.09 = 0.31 Lot

而「外匯交易」的「雙邊押注 變異方式之馬丁格爾」策略

做法就是在第二層(類似賭盤的第二輪)開始就啟動「對沖功能」

(類似賭盤的雙邊押注),當市場使得程式走到第三層時,第二層

的對沖單必須先獲利出場,同時第三層的對沖單必須與「馬丁格爾」

組一同打開。當市場真的走「反向長趨勢」時,帳戶就可以因為從

變異馬丁格爾策略風險與實務操作方法
第二層開始啟動「對沖單」(雙邊押注),這時帳戶的「對沖單」

卻是一直獲利(因為此「對沖單」是市場的趨勢單)。程式「雙邊
押注」的「對沖單」是以「總開倉手數大小」乘以一個乘積,但這

個乘積必須小於 0.5• 建議是設為 0.3~0.5 之間。

使用「雙邊押注一—變異式於「連續虧損七次」的市場

舉「連續虧損七次」的市場為例:假設這「連續虧損七次」是

買倉,所以這時的市場其實是走跌。因此,我們會執行

0.01 + 0.02 + 0.03 + 0.04 + 0.05 +0.07 + 0.09 = 0.31 Lot (Buy)

如果「對沖單」(雙邊押注)是從第二層開始,那它就必須是

開賣倉。假設每一層賣倉僅開總開倉位大小乘以乘積,假設是 0.5•

而假設每一層的層距為 100 點 (Pips) 因此每一層的停利點也是 100

點 (Pips)• 所以帳戶的餘額可以從中多獲利了。

_
155
第二層 : Round (( 0.0 I+0.02 ) X 0.5 ) = 0.02 ( Sell ) X ( Take Profit
= l OOPips ) = 2 Pips
第三層 : Round (( 0.0l +0.02+0.03 ) X0.5 = 0.03 ( Sell ) X ( Take
Profit = 1OOPips ) = 3 Pips
第 四層 : Round (( 0.01+0 .02+0.03+0.04 ) X 0.5 = 0.05 ( Sell ) X ( Take
Profit = 1OOPips ) = 5 Pips
第五層 : Round (( 0.01+0.02+0.03+0.04+0.05 ) X 0.5 = 0.08 ( Sell ) X
( Take Profit = I OOPips ) = 8 Pips
第六層 : Round (( 0.01+0.02+0.03+0.04+0.07 ) X 0.5 = 0.11 ( Sell ) X
( Take Profit = 1OOPips ) = 11 历 ps

假設第七層是不賺 不 賠出場 ,那 從第 二 層到第六層可以多獲利

2+ 3+5+8+ 11 = 29 Pip s 。如果 lPip 為 10 美金 , 這樣 一 輪下來 , 「雙


邊押注 變異方式之馬丁格爾」策 略 可以 比 單純的「馬丁格爾」策

略 多賺 29 X 10 = 290 美金。

以上的「雙邊押注 變異方式之馬丁格爾」策略是利用實例

來複習上 一 章節的理論說明。

雙邊押注 變異方式之馬丁格爾 vs 反馬丁格爾

然而 , 單純的「馬丁格爾」策 略、 「雙邊押注 變異方式之

馬丁格爾」策略這兩種策 略 是 比 較相近策略 , 都是逆向加碼 就是

虧錢加碼的策略模式,只不過在操作手段上有些不同 。

但以上這兩種策略與「反馬丁 格 爾」的概念是完全的相反的思
U
維邏輯。 .

「反馬丁格爾」策略是賺錢就 加 倍賭資, 一 直順勢加碼上去,

.. 也 就是順 向 獲 利 加碼。 雖 然「反馬丁格爾」 一 開始贏的機率與「馬

丁格爾」策略是 一 樣的 , 但是它最大的不同是 , 「反馬丁格爾」每


贏一次雖然加碼,但贏的機率卻隨著次數而遞減,而「馬丁格爾」

策略是每輸-次,贏的機率卻隨著次數而遞增。同時,「反馬丁格
爾」每一回合的贏錢都是全部單位的下注籌碼,但虧錢卻會把贏來

的錢全部都賠掉,而「馬丁格爾」則是每一回合的贏錢僅是一個單

位的下注籌碼,只要最後一次的贏錢就能把前面下注所賠的都賺回

來,並多賺一個單位的錢。

使用數學機率所計算「反馬丁格爾策略」 : 假設我們以 q 來代

表獲利的機率,以 B 來代表賭客口袋中能押大小的籌碼總量,以 n

來代表總共能夠獲利的次數。所以你總共獲利 n 次的機率是 q/\n' 且

總獲利的金額是:

n
瓦 B · i-1 = B (2n - 1)

變異馬丁格爾策略風險與實務操作方法
i=l

而你會「連續獲利 n 次」後產生虧損的機率是 1-q" 。由上面的

式子來看就可以很清楚知道,其實若以機率來看,「馬丁格爾」與

「反馬丁格爾策略」就是獲利機率與虧損機率完全顛倒,其他其實

是大同小異。不過「反馬丁格爾策略」在賭盤上面最大的風險就是

如果在最後一次的賭注中賭輸了,將會一次虧光所有贏來資金。以

機率來看,贏越多次,表示越可能一次輸光。所以,「反馬丁格爾

策略」嬴率會隨著贏的次數增加而越來越低,輸的機率會隨著贏的

次數增加而越來越高。

這樣的策略,在股市、期貨、選擇權或其他投機性金融商品,

都非常常見,市場上的說詞應該是稱之為「順勢加碼策略」。在外

匯市場裡, 一 樣有相當多的投資者使用這種策略。「順勢加碼的反

馬丁格爾策略」筆者將在第六章裡做詳細說明。

_
157
變異馬丁格爾策略程式交易方

外匯市場的雙邊押注

前面的章節裡已經將此策略的數學模型做了說明:在外匯市場

裡,「雙邊押注」其實就是下對沖單。在程式設計上,「自動交易

程式」的「雙邊押注 變異方式之馬丁格爾」策略做法就是在第二

層(類似賭盤的第二輪)開始就啟動「對沖功能」(類似賭盤的雙

邊押注),當市場使得程式走到第三層時,第二層的對沖單必須先

獲利出場,同時第三層的對沖單必須與「馬丁格爾」組一同打開。

當市場真的走「反向長趨勢」時,帳戶就可以因為從第二層開

始啟動「對沖單」(雙邊押注),這時帳戶的「對沖單」卻是一直

獲利(因為此「對沖單」是市場的趨勢單)。我們有提及,程式「雙

邊押注」的「對沖單」是以「總開倉手數大小」乘以一個乘積,這

個乘積建議是設為 0.3~0.5 之間。

以下,我們再複習一下「馬丁格爾」策略方法。在傳統的「馬

丁格爾」策略是以 2/\n 為乘積,但因為 2/\n 為乘積的遞增模式風險

過高,所以「外匯自動交易程式」一般都是建議是以 1.3~2.0 為乘積。

所以,以下簡單的數學運算:

-
x = lot
y = Multiplier (乘積)
所以

Level 1 =x
Level2 = xy
Level 3 = xy2
Level4 = xy3
Level 5 = x/
Level 6 = xy5
Level 7 = xy6

當達到第七階時,就是「連續虧損七次」後所開的總 Lot 數為
x + xy + xy2 + xy3 + xy4 + xy + xy

由以上公式,當程式設定為

x = 0.01 lot
y = 1.3 (乘積)

所以

變異馬丁格爾策略程式交易方法
Level 1 = 0.01
Level 2 = 0.02
Level 3 = 0.03
Level 4 = 0.04
Level 5 = 0.05
Level 6 = 0.07
Level 7 = 0.09

當達到第七階時,就是「連續虧損七次」後所開的總 Lot 數為
0.01 + 0.02 + 0.03 + 0.04 + 0.05 +0 .07 + 0.09 = 0.31 Lot

當市場走「反向長趨勢 .J 時

避免市場真的走「反向長趨勢」,因此在「馬丁格爾」策略方
法的程式設定上,即使加入了「不賺不賠出場」功能,以及當「連
續虧損 X 次」時啟動「對沖功能」等等,但是當程式已經達到「反
向長趨勢」第六或七層時,帳戶的虧損已經逐漸加大,而在這段市

場走「反向長趨勢」的時間裡,帳戶裡並沒有額外的獲利來擴大風

_
159
險的承受度,所以常常唯 一 能做的就是祈禱市場反轉(就是賭盤連

續開大之後開小,或連續開小之後開大) 。

而「雙邊押注 變異式之馬丁格爾」策略做法就是在第 二 層

(類似賭盤的第 二 輪)開始就啟動「對沖功能」(類似賭盤的雙邊

押注),當市場使得程式走到第三層時,第 二 層的對沖單必須先獲

利出場,同時第 三 層的對沖單必須與「馬丁格爾」組 一 同打開 。 當

市場真的走「反向長趨勢」時,帳戶就可以因為從第 二 層開始啟動

「對沖單」(雙邊押注),雖然「馬丁格爾」組會因為市場走的是「反

向長趨勢」而讓虧損加大,但這時帳戶的「對沖單」卻可以一直獲

利(因為此「對沖單」會變成是市場的趨勢單) 。

舉「連續虧損七次」的市場為例:假設「連續虧損七次」是買倉,

所以這時的市場其實是走跌,因此程式會執行

0.01 + 0.02 + 0.03 + 0.04 + 0.05 +0.07 + 0.09 = 0.31 Lot (Buy)

如果程式的「對沖單」(雙邊押注)是從第 二 層開始,那它就

必須是開賣倉。假設每 一 層賣倉僅開 O.OlLot• 而假設每 一 層的層距

為 100 點 (Pips)• 因此每 一 層的停利點也是 100 點 (Pips)• 所以


帳戶的餘額可以從中多獲利了 。

0.0 I (Sell) X (Take Profit = I OOPips) + 0.01 X (I OOP」ps) + 0.01 X


(lOOPips) +0.0IX (lOOPips) +O.OlX (lOOPips) = 5Pips

以上僅有 5 次的 0.01 Lot 賣倉是因為第 一 層不會開倉(第 一 輪

不會雙邊押注),而最後 一層會與原「馬丁格爾」組的利潤沖銷(第

- 七輪不賺不賠) 。

由以上的說明,讀者可以很清楚的看出「雙邊押注 變異式
之馬丁格爾」策略可以在「反向長趨勢」讓帳戶增加獲利 , 因此可

以使得帳戶的餘額增加,而帳戶餘額增加則帳戶可承受的風險就可

以增加。

這時聰明的者可能就會問,若是市場一直處於狹幅震盪而非走

趨勢線,那「雙邊押注 變異式之馬丁格爾」策略豈不是每次都賺

不到錢 。 是的,這是此策略的缺點,唯 一 方法就是讓開始啟動「對

沖單」(雙邊押注)的層級設在第三層或第四層而非第 二 層,這樣

可以避免當市場在狹幅震盪時程式 一直在做白工。

自動交易程式套用

我們已把雙邊押注 變異式之馬丁格爾策略的基礎概念 、 數

學公式、風險計算、貨幣對選擇等等都做了的詳細的介紹,接下來

變異馬丁格爾策略程式交易方法
就是自動程式的套用,如圖 4-8 。

變異馬丁格爾策略自動交易程式

_.,,,.•
-..
L'~ •~•~•••-~•
·」...

_.,.... 日"''°"'""·--•~--"""""
,.....,,,.~..
一. .
LL. 一:``""
.,一. ,,_''-~,'"
, ,,,"""''·"""""'"

161
在實際的程式設計上,我們必須加入以下幾個參數:

EnableAbMTrade = true; // Will open reverse trades after level


AbMTradeStartLevel
AbMTradeStartLevel = 3; // Level at which Contra Trades starts for
AbMTradeStartLevel
AbMTradeLotRatio = 0.5; // Will increase/decrease the standard
Contra lot size

這幾個參數是指,啟動「雙邊押注 變異式之馬丁格爾」策

略,在第幾層時啟動,以及對沖單下單量的乘積 。

..
Blessing 程式
全球下載率最高免費自
動交易軟體

There are only two kinds ofprogramming languages: those people always bitch
about and those nobody uses
世上只有兩類程式語言:那些被人批得一無是處的,以及那些沒人使用的。

Bjarne Stroustrup


--~--

...
蕈」
`
Blessing 程式開發

Blessing 程式背景介紹

Blessing 3.x 是 世界 上下載率最高的 MT4 免費軟體。 雖 然知名

度 相 當的高 , 但 Blessing 到底是 什 麼樣的軟體呢?我 們 先看以下程

式 的 開場 白:

I/+--------------------------- +······
//I Blessing 3 v3.9.2 I
//I February l 0, 2011 I
//I Copyright ?2007-2011 , J Talon LLC/FiFtHeLeMeNt I
//I In no event will authors be liable for any damages whatsoever. I
//I Use at your own risk. I
1111
//I This EA is dedicated to Mike McKeough, a member of the Blessing I
//I Development Group, who passed away on Saturday, 31st July 2010. I
//I His contributions to the development of this EA have helped make I
//I it what it is today, and we will miss his enthusiasm, dedication I
//1 and desire to make this the best EA possible. I
//I Rest In Peace. I
//+----------------------------一------一一一一一一一一一一--- ---------------- -一--+

Blessing 這 個 程式是由一 群 不 同 圍 籍 且對 「 外匯自動交易」有

-
熱 血的 程 式 設計 人 士的傑 作 。這 個 是集合群策群力一 起 開發出來的

免費自動交易 軟 體 , Mike McKeough 是 我們 這群開發 人 員當中的一

位 成 員 ,在 罹癌 過 世之前 ,他 還請 他 的朋友 , 發一封信給 我 們這群


一 起開發的成員,說他 一 直念念不忘的就是 Blessing 軟體以及我們

這群一起努力開發軟體的朋友們。而這群「義工開發人員」稱之為

「 Blessing Develop Group 團隊」。這個程式不需花費投資者 - 毛錢,


卻能讓投資者見識到何謂「頂尖免費交易軟體」。讀者們首先請先

威謝 Mike McKeough 以及我們這群完全沒對外收取-毛錢,但卻耗

盡數不盡日子裡的日夜煎熬、絞盡腦力、開發測試等等以牟取更好

效果的開發人員。同時,特別戚謝最原始創作人「柘 fthElement 第五

元素」,接下來是英國佬 Dave• 以及主業為飛行員的 Jeff• 其他就

是包含筆者在內的我們這群程式開發義工團員。

Blessing 的精神

我們先說 一 下歷史, Blessing 其實原始開發者並非 Blessmg

Develop Group 這個團隊,而是一個在網路上知名的 MT4 開發者,

Bless
叫做 FiFtHeLeMeNt 。筆者很早就下載這位 FiFtHeLeMeNt 開發出來

的第 一 個版本來測試過,月報酬的確可超過 30%• 不過,運氣好的

程i
時候,半年內爆倉,運氣差的時候,兩個月就爆倉了。當時有 一 位

式n
開g
開飛機的飛行員,叫做 Jeff' 他對這個 Blessing 非常有興趣,就開

始在 Forex-TSD 論壇裡,拿 Blessing 這個程式做修改,然後 Po 文給 發


大家討論,就這樣一步一步吸引許多的開發人員進場關心。筆者當

然是其中 一 個有興趣的人,在這許多開發人員當中,有 一 位靈魂人

物,是 一 位住在英國約克郡的 Dave Edmond' 他是筆者所認識所有


有能力開發 MT4/MT5 的工程人員當中最強的 - 位。筆者加入此團

隊之後,拉了當時在網路認識的一位美國人, Ron Charter' 這期間

當然陸陸續續有些成員加入,不過至今,這個 Blessing 團隊自己成

立公司,叫做」 Talon LLC 公司,新改版的 Blessing' 就稱之為 EV

(Evoluation) 。 EV 的主架構跟 Blessing 沒有很大改變,也就是我

所說的,從戰略角度來看,它們都是馬丁格爾策略,但戰術應用方

_
165
面, EV 增加了相當多的花樣。不過說實在的, EV 雖是商業化的商

品,其績效不見得會比 Blessing 好,所以,我覺得同一種策略,再

怎麼變化,其主體性不會有什麼差異。

3. 「 Blessing 程式」是 100%• 百分之百完全免費的程式。

4. 「 Blessing 程式」是由一整個團隊所共同開發的。不是由「某一

個人」所開發的。如果硬說是某個人,只能勉強說,「 Blessing •
程式」的「雛型」是一位稱為 FifthElement 所開發出來的。而

筆者也是 Blessing 開發團隊成員之一 (Tsung-Huan Yang 就是筆


者本人)。(請參考圖 5-1)

5 最後公開釋出的 Blessing ver 3.9.x• Blessing ver 3.9.x 程式碼


相當龐大,超過 2000 行。但在 Blessing 3.8 之後, Blessing

Develop Group 團隊就開始漸漸把使用者導向使用商業軟體版


本,所以之後改名叫做 EV (Evaluation) 。 EV 是商業軟體,沒

有免費公開對外提供給任何一個投資者。

6. 「 Blessing 程式」的進化版是 EV (Evolution)• 是商業軟體,


是有收費的。該團體是 J Talon LLC• 該公司除了幾位早已經離
開的成員之外,幾乎是原班人馬十新進人員。而目前的「 Blessmg

程式」仍交由 Dave Edmond 這位英國人在維護。

-
Blessing 程式開發團隊成員名單

This manual Is the property of J Talon LLC however, m


is a public
domain Expert Advisor and many have contributed to its development.
The creator of Blesslng is FlfthElement (fifthelement80(1llqmail.com)
and as such, reserves the title of "creator", however, countless
versions of Blesslng have been developed over the years and J Talon
LLC reserves the right as "developer" to all versions after. The
individuals listed represent the Blessing Development Group whose
contributions to BJ made this Expert Advisor what It is today. The
BDG Is as follows

Jeff Hubbard SlfllP'lrt®it11today.com Michigan, USA

Dave Edmondson d<1veedqo®qoo11l"mail.com Yorkshire, England

Brian Chua pE>ckham .is,6t9®qmall.com Singapore

Robert Hoffman sanqpar60090®v11hoo .com Illinois, USA

Phillip Smith holvguy7®qm<til-corn Alaska, USA

Ron Prazuch ron2jc@hotmail.com Wisconsin, USA

Mike McKeough mcque24@qmall.com Colorado, USA

Aftab Rashid aftab.rashid810@qooqlemail.com England

Tsung-Huan Vang yorkthyanq@qmall.com Taiwan

Bless
幕後貢獻者的故事

程m式g
如果說此「免費軟體 Blessing 」的程式版權 , 最有資格的應該

開發
要提到兩位在公開論壇上的 MQL4 開發者 , 一位是 FifthElement'

一位是 Dave Edmondson 。柘 fthE l ement 是 Blessing 程式「雛型」的


·開發者,伍fthElement 這位應該算是 MT4 程式設計隱世高人。因為
启fthElement 開發了至少(就筆者所姐)二十套以上有名沒名的免費

MT4 交易軟體放在外匯論壇上供任何人下載使用。他一毛錢都不收,
且樂於分享他的策略給外匯論壇上所有的投資者。當時我們 Blessmg

的整個開發團隊,沒人知道 FifthElement 的真實身分,筆者到今天


依然不知這號人物的背景、國籍、性別、年齡等等資訊。

而另外一位,就是 Dave Edmondson 這位超級高手。他是住在英


國鄉下的一個稱為「約克郡 Yorkshire 」的城鎮小地方,「約克郡」

_
167
的「約克城」,就是英國發動「薔薇戰爭」的所在地。除了以上筆

者所說的這兩位人士以外,其他人比較像是跑龍套,只是設計部份

的程式碼,以及參與討論策略跟程式測試。

而筆者本人也是因為從開始在 Forex-TSD 國外論壇參與

「 Blessing EA 程式」的開發,才完全沉浸到 MT4 外匯自動交易程式


的設計領域來。筆者本人自離開 BDG (Blessing Developing Groop)

後自創 GanaTrader 這個品牌,在接下來的日子裡, 一 共獨自開發了

超過十種以上各類不同的策略。例如指標預測型程式、馬丁格爾程

式、變異型馬丁格爾程式、反馬丁格爾程式、貨幣連動程式、滾雪

球策略程式、薄利策略程式、突破程式、 FPI 三 角套利程式、白癡下

單法程式、 Trader 101 版本全球資金流程式、以及 GanaTrader 全球

資金流程式等等,開發程式的過程其實是很辛苦的。

Blessing 程式是 100% 的馬丁格爾策略。讀者喜不喜歡馬丁格爾

都沒有關係,但是這個程式是馬丁格爾策略程式裡面經典中的經典。

本章節就是以共同開發者的角色來就跟讀者分享這個以馬丁格爾策

略模式所設計出來的經典程式。

-

外部參數以及架構說明

常數定義

我們知道,使用 MT4 開發程式,有「反組譯」 (De-Compiling)

程式可以把執行檔的 EX4 檔反組譯成原始碼 MQ4 檔。在程式當中

只要是使用「變數」定義的數字,通通可以反組譯出來。程式開發

者必須防備自己所開發出來的程式被網路上的人利用「反組譯」程

式瞬間破解,所以,常常會利用某個簡單的技巧來讓其他人在「反

組譯」之後依然找不到「某些」重要資訊。當「某些」重要資訊沒

外部參數以及架構說明
有被「反組譯」出來,所以再把它「組譯」就會產生錯誤。在 MT4 裡,
最簡單的方法就是使用 #define 這個宣告。因為 #define 所宣告的會

自動成為「常數」,當「反組譯」去執行逆向工程時, #define 所定

義的數值都會消失而無法被「反組譯」出來。

例如,假設我們利用 #define 來設定「密碼」,那即使客戶拿到


程式去「反組譯」,但因為「密碼」沒有被「反組譯」出來,所以,

即使再「直接組譯」也會產生錯誤而使程式無法使用。

#define A 1 //All
#define B 2 //Basket
#define H 3 //Hedge
#define T 4 //Ticket
#define P 5 //Pending

_
169
以上這五項定義就是用來定義該下單的屬性。 Blessing 的架構

非常龐大,但主要架構觀念是「馬丁格爾 Basket 」概念 。 什麼叫做「馬

丁格爾 Basket 」概念?假設程式下了 一 筆買單,結果市場下跌,所

以,程式會利用預掛單 Pending 模式下 一 筆「預掛」買單,當市場

碰到此「預掛」買單,這時該「線圖」就會形成「 Basket 」 。 當程式

要出場時,是將整個「 Basket 」 一 起計算虧損或是獲利或不賺不賠 。

利用外部參數的設定,我們可以讓程式在我們所設定的參數下

出場。例如,連下 三 筆單(第 三 層)之後,整組「 Basket 」不賺不

賠出場。既然是「 Basket 」為何還分 All 或 Basket 呢?因為有些「預

掛單」其實是尚未成交而整組已經碰到停利點,所以,就必須把「預

掛單」砍掉,又例如 Hedge 對沖單可以單獨運作也可以與「 Basket

合」在 一起計算,所以,我們在定義的時候,就必須做區分 。

外部參數定義:帳戶資金管理

首先,我們要先討論 Blessing 外部參數當中的帳戶資金管理上

(Money Management) 上的設定。請看接下來的程式碼:

extern string Labe!Acc = "Account Trading Settings : " ,


extern boo! ShutDown = false; // Setting this to true will stop the EA tradmg
after any open trades have been closed
extern double StopTradePercent = 10; II percent of account balance lost
before trading stops
extern boo! NanoAccount = false; II set to true for nano penny a pip
account (contract size is $10,000)
extern double PortionPC = 100; II Percentage of account you want to trade
on this pair
extern double MaxDDPercent = 50; II Percent of portion for max drawdown
level.

.. extern double MaxSpread = 5; // Maximum allowed spread while placmg


trades
extern bool UseHolidayShutdown = true; II Will shutdown over holiday
period
extern string Holidays = "18/12-01/01" ; // List of holidays, each seperated
by a comma, [day]/[mth]-[day]/[mth], dates inclusive
extern boo! PlaySounds = false; // will sound alarms
extern string AlertSound = "Alert.wav" ; // Alarn1 sound to be played

這個部分裡,有幾個重要參數筆者個人覺得是所有「專業 MT4

程式設計師」都應該要有的概念。什麼概念呢? 就是 MT4 帳戶

的「資金管理」設定。

在 MT4 裡,它是 一 個「交易平台」,而每一個線圖 (Chart)

在 MT4 平台裡其實是被當成-個「物件」 (Ob」 ect)' 所以,

EURUSD MS 的線圖跟 EURUSD Hl 的線圖,在 MT4 平台上,是不


同的「物件」。

例如,當你按下 EURUSD MS 線圖之後,再轉換成 EURUSD

Hl 線圖, MT4 會重新從經紀商的「伺服器」載入不鷗勺數據,然後

外部參數以及架構說明
重新劃線出來給你看,就因為是每個線圖都是不同的「物件」,所

以,我們在程式設計時,就可以依照「線圖物件」來切割資金。

例如假設帳戶有 10000 美金,那我分配 30% 的資金給 EURUSD


Hl 線圖,分配 20% 的資金給 USDJPY Hl 線圖,再分配 30% 給的

• 資金給 GBPUSD Hl 線圖,剩下 20% 當成閒置資金,這樣的資金分


配在 MT4 平台上利用程式設計的資金管理模式是可行的。這是「虛

擬分配」,而不是真的經紀商會幫你做「資金切割」。也就是說,

透過程式設計的「資金管理程式碼」,可以做到帳戶資金的「虛擬

分配」。那回過來看 Blessing 程式在資金管理上的幾個重要參數。

extern double PortionPC = 100,


extern double MaxDDPercent = 50,

_
171
以上這兩個參數就是用來讓使用者切割資金以及資金保護。預

設值是沒有做切割,所以 PortionPC = 100' 資金保護是 50% 強制

停損,所以是 MaxDDPercent = 50 。

舉例,假設我們帳戶有 10,000 美金,套用 Blessing 程式在

EURUSDHl 線圖上,依照以上這個設定,就是這個 Blessing 將拿帳


戶的所有資金 10,000 美金做為投資籌碼去下單,而整個線圖的停損

就是 5000 美金。

那假設我們的設定 PortionPC = 20• MaxDDPercent = 30 呢?

結果會變成這個線圖所套用的 Blessing 程式只使用到 10,000X20%

= 2,000 美金的資金當成籌碼下單,而停損值為 2,000 X 30% = 600


美金。這兩種設定是很不同的結果!

接下來的幾個參數

extern bool ShutDown = false,


extern double StopTradePercent = 10,
extern bool NanoAccount = false,

第 一 個參數,就是讓客戶可以下達「出場後不再進場」的指令。

因為 Blessing 是非常有可能整組都是「在倉單」,在帳戶仍有「浮虧」

之下,我們通常不願強制關倉出場,所以, Blessing 就設計了一個「出

場後不再進場」的功能,也就是說,當這整組的「在倉單」都出場了,

Blessing 就會自動「停止下單」。

第二個參數,是當我們帳戶的起始資金低於某個資金時,程式

• 不做動作。例如,我們一開始投資資金是 10,000 美金,程式會記住


你的起始資金,以上面的設定: StopTradePercent = 10 來說,就是
當帳戶的「資金餘額」,不是「資金淨值」,是「餘額」,低於 9,000

美金時,程式不會動作。這也算是保戶資金的一種方法。

第三個參數,基本上只有當客戶在 Market Maker 的經紀商上交


易,才比較有可能會用到。

我們都知道,外匯交易單位為 LOT• 一個 LOT 就是 100,000 美


金,透過「保證金制度」,利用槓桿模式,才能讓小資金投資者可

以下單,例如提供 100 倍槓桿的經紀商,允許客戶只入金 1,000 美

金 (100,000/100 = 1,000) 就可以最大下 1 LOT 的單。

但市場上有一些 Market Maker 的經紀商為了能讓更低資金的

投資者進場,於是就設計了所謂的 Penny Account' 或稱為 Nano


Account 。就是以「美分」為單位,把原本「國際外匯市場」正常交

外部參數以及架構說明
易規則再切割 100 倍。也就是說,原本 lLot = 100,000 美金,變成
lLot = 100,000 美分 (1 美金= 100 美分)。

這種模式的經紀商,都是 Market Maker 經紀商,也就是,

根本就不會把客戶下的單丟到市場的經紀商,說白一點,就是跟

客戶對賭的經紀商。因為一般的 ECN (Electronic Communication


Network) 或 STP (Straight Process) 的經紀商沒辦法將這麼低的下
單量丟到市場去戳合。所以目前外匯市場上有提供「美分帳戶」的

經紀商,一般來說都是 Market Maker 的經紀商。

而對於程式的開發來說,只不過是多了這項功能,並不代表程

式開發時是為了讓使用者往 Market Maker 經紀商跑。當時 Blessing


在設計時,沒有任何預設立場。

_
173
外部參數定義:點差及假日管理

extern double MaxSpread = 5; // Maximum allowed spread while placmg


trades
extern boo! UseHolidayShutdown = true; // Will shutdown over holiday
period
extern string Holidays= "18/12-01/01" ; // List of holidays, each seperated
by a comma, [day]/[mth]-[day]/[mth], dates inclusive
extern boo! PlaySounds = false;// will sound alarms
extern string AlertSound = "Alert.wav" ; // Alarm sound to be played

MaxSpread = 5; 的意思是用來限制下單時經紀商的「最大點

差差距」,例如在某些「交叉貨幣」的點差其實是很大的,例如

GBPCHF 、 AUDNZD 、 GBPJPY 等等,加入「最大點差差距」的限

制可以令使用者當套入「點差差距」過大時,程式不下單。這個功

能其實就看使用者自己對於「貨幣對選用」的策略。利用非常簡單
的一行程式如下:

1f (Marketlnfo (OSymbol,MODE_SPREAD) X Point/Pip>MaxSpread)


return (-1) ;

就可以讓程式在貨幣點差過大時,直接 RETURN 不下單。

而這個 UseHolidayShutdown = true; 參數,是讓 Blessing 在西

方國家的交易市場都放假時,避免外匯被人為操控,程式不下單。

以上的這個邏輯必須搭配 Holidays = "18/12-01/01" ; 這個參


數。有許多的專業的外匯交易者,從美國戚恩節開始,就不太進入

外匯市場。因為戚恩節開始,西方國家許多金融單位都準備要放長

假了,交易量會大幅萎縮,因為交易量小的關係,不僅「點差」會

- 被放大,市場也容易被「有心的投機團體機構」操縱。據市場傳言,
是這段期間常被「中東資金」的作手呼風喚雨,以至於市場極難預

測。我們當時設計這兩個外部參數, UseHolidayShutdown = true; 以


及 Holidays = "18/12-01/01" '是讓使用者可以自行決定是否要在

市場交易量小的時候依然進場。

外部參數定義:程式進場邏輯機制

請看接下來的程式碼:

extern string LabelIES = "Indicator / Entry Settings : " ,


extern boo! B3Traditional = true; // Stop/Limits for entry if true, Buys/Sells
if false
extern int ForceMarketCond = 3; // Market condition O = uptrend 1 =
downtrend 2 = range 3 = off
extern bool UseAnyEntry = false; // true = ANY entry can be used to open
orders, false = ALL entries used to open orders
extern int MAEntry = 1; // 0 = Off, 1 = will base entry on MA channel, 2
= will trade m reverse
extern int CCIEntry = O; // 0 = Off, 1 = will base entry on CCI indicator, 2

外部參數以及架構說明
= will trade m reverse
extern int BollingerEntry = O; // 0 = Off, 1 = will base entry on BB, 2 =
will trade m reverse
extern int StochEntry = O; // 0 = Off, 1 = will base entry on Stoch, 2 =
will trade m reverse
extern int MACDEntry = O; // 0 = Off, 1 = will base entry on MACD, 2
= will trade in reverse

這個區段的外部參數是用來控制「程式進場」的一些邏輯機制 。

這個 B3 Traditional = true ; 是用來選定以 Stop/Limit 預掛單來進場或


使用「市場單」來進場。這個 B3 Traditional 參數其實是後來變更的,

如果讀者有使用過早期的程式 ,並沒 有這個參數,早 期是使用" p"


或 "M" 來讓使用者決定進場時是使用「預掛單」 (Pending) 或使

用「市場單」 ( Market ) ' 不過,功能跟目的 一樣 ,只是把 "p" 或

"M" 改成「布林參數」的 true/false 罷了。

接下來的這個參數:

_
175
extern int ForceMarketCond = 3,

這是用來讓使用者可以選定程式利用指標進場時的邏輯選項。

F orceMarketCond 就是讓「程式」被使用者「強制」決定只能對市場
強制看漲(= 0) 、強制看跌(= 1) 、強制看震盪(= 2) 、或由

指標自行決定(= 3) 。

我們預設值是設為 3' 也就是讓程式內建的「指標」來做決定。 .


那假設,我們如果要利用 Blessing 來套用「套息交易」呢?也就是,

只做 AUDJPY 的「買單」方向,或 USDCHF 的「賣單」方向的話,


我們就可以將此參數設為 0 (強制看漲),或參數設為 1 (強制看

跌)。比如說,如果參數設為 0 (強制看漲),即使指標的方向是向
下跌,程式依然不會進場,反之亦然。

其功能像是使用「系統設定」的 Only Long 、 Only Short 以及

Long & Short 的「進場限制」。只不過, Blessing 利用軟體程式的邏

輯來做控制。接下來的參數都跟指標有關:

extern boo! UseAnyEntry = false,


extern int MAEntry = I,
extern int CCIEntry = 0,
extern int BollingerEntry = 0,
extern int StochEntry = 0,
extern int MACDEntry = 0,

以上很清楚的可以看出, Blessing 內含的指標有:

MA

-
CCI
BollingBand
Stochastic
MACD
以上這幾種指標。

以上的指標應用很簡單,設 o, 就是功能關閉,設 1' 就是指標

正常運作,但若設 2• 就是讓指標成立的時候,反向下單。假如:

extern int MAEntry = 1,


extern int CCIEntry = 0,
extern int BollingerEntry = 2,
extern int StochEntry = 0,
extern int MACDEntry = 1,

上面設定的意思就是, MA 指標要成立, MACD 指標要成立,

部林通道成立但下「反向單」。這樣的邏輯看起來很奇怪,所以,

Blessing 使用 一個「控制閥」:

外部參數以及架構說明
extern boo] UseAnyEntry = false,

來控制指標進場邏輯。

UseAnyEntry = false 的意思是,「全部的邏輯都要成立」才會


進場,而若涉 UseAnyEntry = true; 就會變成「只要任何 一 個邏輯成

. 立」就會進場。所以,使用者可以控制的變數其實就可以相當的多

樣化。

外部參數定義:格距設定

接下來談的是有關「格距設定」 (Grid Settings) 以及「停利點

距」 (Take Profit) 部分的外部參數。因為這兩段的外部參數是有相

關聯的,所以,我把它們放在 一 起說明。

請看接下來的程式碼一一「格距設定」 (Grid Settings) 部分:

_
177
extern string Labe!GS = "Grid Settings : " ,
extern boo!AutoCal =false; // Auto calculation ofTakeProfit and Grid size,
extern double GAF = 1.0; // Widens/Squishes Grid on increments/
decrements of .1
extern int EntryDelay = 2400; // Time Grid in seconds, to avoid opening of
lots of levels in fast market
extern double EntryOffset = 5; // In pips, used in con」 unction with logic to
offset first trade entry
extern bool UseSmartGrid = true; // True = use RSI/MA calculation for
next grid order

下面的程式碼-一- 「停利點距」 (Take Profit) 部分:

extern string Labe!Grid = "Grid Size Settings : " ,


extern string SetCountArray = "4,4" ; II Specifies number of open trades
in each block (separated by a comma)
extern string GridSetArray = "25,50, I 00" ; II Specifies number of pips
away to issue limit order (separated by a comma)
extern string TP_SetArray = "50,100,200" ; II Take profit for each block
(separated by a comma)

為何要把這兩段放在 一 起說明呢?因為若不這樣 一 起說明,讀

者在看程式碼時,讀起來可能會越讀越迷糊,所以,這兩段 一 起說

明,才比較能讓讀者清楚其實際的功能。 Blessing 程式是 一個架構龐


大的免費軟體,沒有經過「軟體邏輯」訓練的讀者,若想理解它,
真的需要 一 段時間研究 。

這個 Blessing 是 3.9.x 版,程式碼大約是 2700 行,對 MT4 新


手來說的確是 一 個大程式,但相對於商業軟體來說,其實算是還好

的架構而已,例如,從 Blessing 程式碼繼承下來的 EV 程式,其架

構超過 5000 行,所以是 Blessing 程式碼的兩倍 。 而筆者所開發的

-
GanaTrader ver PM 的程式碼更是高達 6500 行以上,是 Blessing 程
式碼的 三倍,架構更大,功能更齊全 。 但不 管 是 Blessing 也好, EV

也好, GanaTrader ver PM 也好,其交易的「核心策略」都還是「馬


丁格爾策略」 。 即使程式碼加大,也只不過增加很多「戰術應用」
而已,當「戰略核心」還是圍繞在「馬丁格爾策略」的時候,其骨
子裡就是「馬丁格爾策略」,「戰術應用」碰到「戰略漏洞」的時候,

問題還是存在。我們回過來談上面的這個外部參數部分。首先是「格
距」的兩個初始設定:

extern boot AutoCal = false,


extern double GAF = 1.0,

當 AutoCal 設定為 FALSE 時(也就是功能關閉), GAF 是無效


的,也就是說,只有在 AutoCal 設定為 TRUE 時(也就是功能開啟),

GAF 才會有效用的。而 GAF 就是 Grid Auto-Calculation Factor 的縮


寫,它可以用來微調程式在 AutoCal 設為 true 時,「格距」的距離

在來「乘上」此 GAF 參數。那假設我們把 AutoCal 這個參數「關閉」


跟「打開」的差距在哪裡呢?

外部參數以及架構說明
當 AutoCal 這個參數「關閉」的時候,程式「點距」的參考全
部來自於上面所說的第二部分的「停利點距」 (Take Profit) 部分的

外部參數的兩個項目:

extern stnng SetCountArray = ``"


4,4
extern string GridSetArray = "25,50, 100" ,

依照上面這兩行的設定,也就是說,程式下單的「格距」為:

25 點加倉 X4 層, 50 點加倉 X4 層,之後全部都是 100 點加倉。

如果當 AutoCal 這個參數「開啟」的時候,程式則直接忽略上

面的人工設定,直接以「內部程式設定的格距」來做每一個「次層」

的「加倉點距」。

那「內部程式設定的格距」的依據為何呢?就是利用 ATR 指標,

公式如下:

_
179
GridATR = iATR (NULL,0,21,0) 加p,

所以,當 AutoCal 這個參數「關閉」的時候,由使用者以人工

方式自行設定, AutoCal 這個參數「開啟」的時候,則是透過 ATR

指標由市場的振幅決定加倉的點距。 ATR 指標就是 Automatic Trend


Range 指標,不熟的讀者請自行拜請 Google 大神為你解釋。除了

ATR 之外,程式又多了一組 UseSmartGrid 的參數,主要功能是作

為市場方向的卡關,因為我們知道 ATR 指標是「沒有方向性」的, •


因此當把 UseSmartGrid = true 時,會多一層把關,就是利用 MA

跟 RSI 來作為門檻卡關,而不是 ATR 指標一成立就下預掛單。也

就是說,使用 Auto Grid 模式是套用標準的 ATR (Automatic Trend

Range) 指標,但是因為 ATR (Automatic Trend Range) 指標是沒有


方向性的,所以加入了 UseSmartGrid 這個參數。以下第一段的程式

碼就是有關 Smart Grid 所使用指標的外部參數定義。

extern string Labe!SG = "Smart Grid Settings : " ,


extern int RSI_TF = 15; // Timeframe for RSI calculation - should be less
than chart TF.
extern int RSI_Period = 14; // Period for RSI calculation
extern int RSI_Price = O; // 0 = close, 1 = open, 2 = high, 3 = low, 4 =
HL/2, 5 = HLC/3 6 = HLCC/4
extern int RSI_MA_period = 10; // Period for MA of RSI calculation
extern int RSI_MA_Method = O; // 0 = Simple MA, l = Exponential MA,
2 = Smoothed MA, 3 = Linear Weighted MA

首先,以下就是 RSI 的標準函式:

double iRSI (
string symbol,// symbol

.. int timeframe, // timeframe


int period, // period
mt applied_price, // applied pnce
int shift // shift

RSI - Relative Strength Index 「相關強度指標」:這個指標常出

現在所有金融商品的技術分析裡,含股票、期貨、黃金、外匯等等。

它就是簡明用來判斷市場後續發展的「相關強度指標」。

基本上它的判斷就是以 50 來判斷強弱,高於 50 走強,低於 50

走弱。因為它的定義是死的(以 0-100 的中間值 50 判斷強弱),所

以,市場就出現了所謂的 Adaptive RSI 「調適式相關強度指標」。

而 Adaptive RSI 「調適式相關強度指標」的公式如下:

MathAbs (iRSI (NULL, 0, ARSIPeriod, PRJCE~CLOSE, i) /I 00.0 - 0.5)


X2.0;

外部參數以及架構說明
我們對外公開釋碼的 Blessing 所使用的是標準 RSI' 不是

Adaptive RSI 指標。

而用於 Blessing 的 Smart Grid 所使用指標是把 RSI 跟 MA 結合


起來,就是將 RSI 的值套到 MA 指標上去看趨勢,所以稱之為 RSI/

• MA 。利用 RSI/MA 來計算的公式如下:

RSI_MA = iMAOnArray (RSI,O,RSI_MA_period,O,RSI_MA_Method,O),

所以,我們利用 RSI 跟 MA 的互相搭配,來補 ATR 指標的不足,

目的就是實現我們所謂的「 Smart Grid 」也就是「智慧型格距」下單


的功能。如此 一 來,下單的「格距」是依照「市場波動」做決定,

而不是「人工訂死」的格距做決定。

接下來談的是以下的這兩個參數:

_
181
extern int EntryDelay = 2400,
extern double EntryOffset = 5,

它們的功能是幹嘛的呢?這裡要談的是比較有關「市場防治」

卡關的概念。我們知道, MT4 是以 Tick 作為報價時間差的單位,同

時, MT4 也是以「 Tick 」最為單位來檢查「程式碼邏輯」來做為市


場進出的時間反應,但是當市場在非常「快市」的時候,當某 a 點

Tick 的報價符合邏輯判斷時,程式要打算進場了,下 一個 b 點 Tick ·


卻快速把報價打亂,這時有可能價格已經不符合程式邏輯,如果程
式依然進場,可能就會產生一直下單的錯誤情況。

為了避免在「快市」的價格激烈變動影響程式進場的正確邏輯,

所以加入了 EntryDelay = 2400 這個參數,單位是「秒」。就是用來


延遲當一筆進場後,至少要過 2400 秒,才讓程式再開下一層的單。
這可以避免在「快市」的價格激烈變動時下一堆單 ,不讓帳戶風險

瞬間拉高的太快。

程式也多了一個讓使用者可以利用 EntryOffset 的參數來讓 Stop/


Limit 預掛單做些移位。不喜歡的使用者可以把 EntryOffset 設為=
O• 這個參數對程式績效影響比較不大。有關「停利點距」 (Take
Profit) 部分:

extern stnng SetCountArray = " 4,4 " ,


extern string GridSetArray = "25,50,100" ,
extern string TP SetArray = `` 50 100 200"

以上這三行碼的設定,它的功能說明就是:

.. 程式「下單」的「格距」為:
25 點加倉 X4 次, 50 點加倉 X4 次,之後全部都是 100 點加倉。

程式停利的「利潤點差」為:

40 點利潤 X4 層, 100 點利潤 X4 層,之後全部都是 200 點利潤。

以上就是 Blessing 程式在設計有關「格距設定」 (Grid

Settings) 部分以及「停利點距」 (Take Profit) 部分的外部參數說明。

外部參數定義:交易設定

接下來談的是有關「交易設定」 (Trading Settings) 部分的外部


參數。什麼是「交易設定」呢?也就是讓程式進場之後的後續「交

易規範」的設定,例如,最大允許幾層的進單、第幾層不賺不賠出

場、舊單出場模式等等。請看接下來的程式碼 「交易設定」部分:

外部參數以及架構說明
extern string Labe!TS = "Trading Settings : " ,
extern int MaxTrades = 15; II Maximum number of trades to place (stops
placing orders when reaches MaxTrades)
extern int BreakEvenTrade = 12; II Close All level, when reaches this level,
doesn't wait for TP to be hit
extern double BEP!usPips = 2; II Pips added to Break Even Point before BE
closure
extern boo! UseCloseOldest = false; II True = will close the oldest open
trade after CloseTradesLevel is reached
extern int CloseTradesLevel = 5; II will start closing oldest open trade at
this level
extern int MaxCloseTrades = 4; II Maximum number of oldest trades to
close
extern double CloseTPPips = 10; II After Oldest Trades have closed, Forces
Take Profit to BE +I- xx Pips
extern double ForceTPPips = O; II Force Take Profit to BE +I- xx Pips
extern double MinTPPips = O; II Ensure Take Profit is at least BE +I- xx
Pips

_
183

I
第一行裡的 MaxTrades = 15• 很清楚明瞭一看就知道,這個參
數就是限制當 Blessing 程式進場之後,最多允許「幾層」的「在倉
單」。預設值是 15 層。所以,也就是說,當市場與進單的方向是相
反的,例如市場是「往上漲」,但 Blessing 卻是「下賣單」,根據
我們的說明,當下到第 15 層的時候, Blessing 的第一筆單跟第 15 比

單的距離是多遠?

extern stnng SetCountArray = ``"


4,4 ,
extern string GridSetArray = "25,50,100" ,

依照上面這兩行的設定,也就是說,程式下單的「格距」為:

25 點加倉 X4 層, 50 點加倉 X4 層,之後全部都是 100 點加倉。

那算一下就知道:

第一筆單的位置為 0

接下來: 25 X 4 + 50 X 4 + 100 X 6 = 900 點。

如果依照我們上面的設定,如果帳戶有美金 10,000 元,如果


我們設定最大幅虧不得高於帳戶的 50%• 就是 -5,000 美金,那當
Blessing 下單下到第幾層時,會被停損砍頭?請看圖 5-2 。

這個 EXCEL 可以很清楚的顯示出來,即使一開始只是下 0.01


Lot• 但因為「馬丁格爾模式」,虧損式呈現像「指數線型」般的
快數遞增,所以,到了第十三層的時候,就已經碰到帳戶資金保護
50% 的停損。那假設我不設定帳戶資金保護 50% 的停損,也就是說
100% 來跑「馬丁格爾模式」,到第幾層實帳戶會直接「爆倉歸零」?
圖 5-3• 剛好是我們預設值的第 15 層。

..
Blessing 程式 Excel 風險示意圖 -1

外部參數以及架構說明

可怕嗎?我在這裡告訴讀者-個你不得不承認的事實,「馬
丁格爾策略」本來就是這樣。不懂的人還真的以為它是「低風險且

高獲利」呢。所以上面的預設值最大下單可達第 15 層 , 沒錯,但

是那就是「帳戶爆倉」的層。也就是說,假設依照原始設定,你以

帳戶 10,000 美金的模式,從第一層開始下 O.OlLot 的方式下單,使

用 Blessing 的原始設定,一旦市場跟你的方向差距達 900 點,你的

10,000 美金就會「爆倉歸零」。有人說,外匯市場不可能瞬間會反

向超過 500 點或 600 點,若讀者有經歷過 2007-2008 年國際金融海

嘯就知道,一個晚上爆漲暴跌超過 1000 點的「市場實際案例」也是

_
185

I
有可能會發生的。所以在我們的第四章裡才會建議,如果使用馬丁

格爾策略,建議使套用在長期震盪的貨幣對,例如 EURCHF 之類的

交叉貨幣。

莫非定律:你認為不可能的發生的情況,它就發生給你
看。

接下來, BreakEvenTrade = 12' 這就是當下單達到第 12 層 .


的時候,只要「不賺不賠」就關倉出場。而這項功能又加入了

BEPlusPips = 2 這個設定。也就是說,所謂的「不賺不賠」可以利

用這個 BEPlusPips 參數來「小賺」一些再出場,當然,此參數也可


以設為 o, 那就真的是「不賺不賠」出場。

接下來的參數是為了避免太多層的「在倉單」遺留在市場上造

成浮動虧損太過龐大,所以當時就設計了「關舊倉」這樣的功能。

extern boo! UseCloseOldest = false,


extern int CloseTradesLevel = 5,
extern int MaxCloseTrades = 4,
extern double CloseTPPips = I 0,

第-個參數是「開關邏輯」,預設值是關閉。如果使用者

打開的話(= true)' 程式就會在 Blessing 下單到了第 5 層(

CloseTradesLevel = 5) 開始執行「關舊倉」這樣的功能。那程式是
怎麼執行的呢?

.. 就是直接把「第 1 層的在倉單」關閉。當市場繼續反向的時候,

一旦 Blessing 開啟第 6 層的下單時,程式就會把「第 2 層的在倉單」


關閉,以此類推。最多關閉幾層呢?就依照 MaxCloseTrades 這個參
數,預設值是 4• 也就是最多會關閉第 1~ 第 4 層的「舊單」,而這時,
其實 Blessing 已經開倉到了第八層 (5,6,7,8)• 同時前面的四層 (1,

2, 3, 4) 被強制關倉。為了避免「關舊倉」的虧損過大, CloseTPPips
這個參數作為擬補虧損的一些「獲利補償」,它就是讓程式必須至

少要獲利 CloseTPPips 的點數才全部出場,預設值為 10 點。剩下的


這兩個參數:

extern double ForceTPPips = 0,


extern double MinTPPips = 0,

主要功能是「強制性」的讓程式在「獲利多少點數」之後就出

場,預設為 0' 如果設唯有值的話,程式原本的「停利設定」都會失


效。因為其有「強制性」效果,讀者如果不熟的話,請就保持預設

值 (0) 就可以了。

外部參數定義:對沖設定

外部參數以及架構說明
接下來談的是有關「對沖設定」 (Hedge Settings) 部分的外部
參數。什麼是「對沖設定」呢?也就是當程式進場之後,如果「市
場的方向與「下單倉位」方向相反,為了避免虧損迅速擴大,同時

也為了避免整個帳戶「爆倉歸零」, Blessing 程式設計了「對沖設定」


部分的邏輯架構。原本 Blessing 團隊在有關「對沖設定」這個部分
• 有很大的討論,分成「正、反兩派」,「反對的那 一 派」一直堅持「對
沖」交易是沒有意義的,而「贊成的那一派」則是堅持可以讓程式
有資金的保護機制;最後決定加入「對沖設定」的邏輯程式碼。

筆者其實就是當初丟出「對沖設定」想法的那個「始作俑者」。

這段程式架構,筆者算是起草者之一,不過經過這些年來的市場
歷練,筆者也漸漸接受了當初 Blessing 團隊裡「反對派」的想法,
「 Hedge 是沒有太大意義的」。尤其是「直接 Hedge 」,其實只是「延

長死亡時期」罷了。請看圖 5-4 。這就是使用「 Hedge 功能」的試算


表。

_
187
Blessing 程式 Excel 風險 示 意圖 -3

請看接下來的程式碼一 「對沖設定」 (Hedge Settings) 部分:

extern string LabelHS = "Hedge Settings : " ,


extern string HedgeSymbol = "" ; // Enter the Symbol of the same/
correlated pair EXACTLY as used by your broker.
extern int CorrPeriod = 30; // Number of days for checking Hedge
Correlation
extern boo! UseHedge = false; // Turns DD hedge on/off
extern string DDorLevel = "DD" ; // DD = start hedge at set DD; Level =
Start at set level
extern double HedgeStart = 20; // DD Percent or Level at which Hedge starts
extern double hLotMult = 0.8; II Hedge Lots = Open Lots x hLotMult
extern double hMaxLossPips = 30; II DD Hedge maximum pip loss - also
hedge trailing stop
extern bool hFixedSL = false ; II true = fixed SL at hMaxLossP1ps
extern double hTakeProfit = 30; II Hedge Take Profit
extern double hReEntryPC = 5; II Increase to HedgeStart to stop early re-
entry of the hedge
extern bool StopTrailAtBE = true; II True = Trailing Stop will stop at BE,
False = Hedge will continue into profit
extern bool ReduceTrailStop = true; II False = Trailing Stop is 柘xed; True
= Trailing Stop will reduce after BE is reached

.. 在讀這段外部參數時,讀者要先有一個概念,「 Hedge 」的下單

跟主架構 Basket 的下單是以不同的 Magic Number 在進行 。 也就 是


說,程式是把 Hedge 單獨拿來做檢視,包含停利、停損、出場、合

計利潤等等。

所以 Hedge 其實並非單獨的 Hedge' 它也是「一整組單」的邏輯,


讀者有可以把它當成是另一組的 Basket' 只不過它的方向是跟主程
式的下單方向完全相反,如此而已。所以, Blessing 的 Hedge 模式
是可以隨著「市場反方向」若越拉越遠的關係,讓帳戶反而轉虧為

盈,順利出場。但是通常天底下不會常有此美好的事情發生,因為

市場是波動的,所以,有許多時候,當「對沖單」進場下去的之後,

反而把整組都卡住出不了場。這其實就是「 Hedge 對沖單」的嚴重


缺陷。所以,我們當初在設計「 Hedge 對沖單」的時候,就加入了「中

性對沖」的概念,其實這也是我們 GanaTrader 的「連動交易策略雛

型」。以下是對沖的三種類型:

外部參數以及架構說明
1. 直接對沖:例如 EURUSD ——一買一賣,就是「直接對沖」。

2. 中性對沖:例如 EURUSD-USDCHF 兩者都買或兩這都賣,

就是「中性對沖」。

3. 完美對沖:例如 EURUSD -USDCHF - EURCHF 形成三角對


鎖現象,就是「完美對沖」。

而 Blessing 程式提供了「直接對沖」與「巾性對沖」這兩樣功
能給使用者使用。目的都是為了保護使用者的資金,讓使用者即使
在市場反方向的時候,最差的情況只不過是卡住出不了場,而不會

產生帳戶浮虧高達 40% 以上這種嚴重虧損甚至爆倉。我們看以下這

兩行程式碼:

extern stnng HedgeSymbol = "" ,


extern int CorrPeriod = 30,

_
189
當使用者把 HedgeSymbol 這個參數空白不寫的時候,它就是「直

接對沖」,也就是你套用哪個貨幣執行 Blessing 程式下單,它的「對


沖單」就是該個貨幣。那如果我們要做「中性對沖」呢?那使用者
就必須很清出,自己所填寫的那個「對沖貨幣」是要有「連動關係」

才行,否則程式會出現錯誤,同時不允許下單。

例如,當使用者套到 EURUSD 時,基本上就是使用「 USDCHF 」


作為「對沖貨幣」,另一個「對沖貨幣」是「 GBPUSD 」,但是.
連動關係比較不高,我們不推薦。作法就是如此,以此類推。而

CorrPeriod = 30 這個參數是指,連動的「比較 Bar 數」,也就是 30


根 Bar 來計算「連動系數」。超過廿- 90% 的「連動系數」 Blessmg
程式才會接受該「對沖貨幣」來執行對沖。

我們接下來看以下四行程式碼:

extern boo! UseHedge = false,


extern string DDorLevel = "DD"
extern double HedgeStart = 20,
extern double hLotMult = 0.8,

第一個 UseHedge 用來開啟 Hedge 的功能開關。當 UseHedge 設


為 true 時,之後的設定才會生效。 DDorLevel 是用來設定「進場標
準的模式」,例如使用的是幅虧 (DD) 達到幾%開始進場做對沖,
或使用的是 Basket 開到第幾層 (Level) 開始進場做對沖。這個參數
是直接填入「文字」 (DD 或 Level)• 程式就會自行做判斷。

Hedge Start 就是用來搭配上述設定「進場標準值」 。例如以上

的設定是:

.. extern string DDorLevel = "DD"


extern double HedgeStart = 20,
那其意義就是,使用幅虧 (DD) 模式,當浮虧達到 20% 開始

進場做對沖。又例如:

extern string DDorLevel = " Level " ,


extern double HedgeStart = 5,

那其意義就是,使用 Basket 模式,當開到第五層 (5 Level) 開

始進場做對沖。

hLotMult = 0.8 是指對沖單開倉 Lot 數的「乘積值」。公式就是:

Hedge Lots = Open LotsxhLotMult

這裡的 Open Lots 指的是,「整個 Basket 」所有「已開倉數的總


^
口」 。

外部參數以及架構說明
extern double hMaxLossPips = 30,
extern boo! hFixedSL = false,
extern double hTakeProfit = 30,
extern double hReEntryPC = 5,
extern boo! StopTrailAtBE = true,
extern boo! ReduceTrailStop = true,

以上這幾個參數都是用於「對沖單」的「停利設定」、「停損

設定」以及「移動停損設定」。

外部參數定義:出場設定

接下來談的是有關「出場設定」 (Exit Settings) 部分的外部


參數。「出場設定」就是當程式進場之後的出場模式,這裡的所謂

「出場設定」並非是先前我們有討論過的「停利及格距」設定。這

裡的出場模式設定有兩項,一個稱之為「移動停利」,另一個稱之

為「斷網關倉」模式以及「 FIFO 」設定。如下的程式碼:

_
191
extern string LabelES = "Exit Settings : " ,
extern boo! MaximizeProfit = false; // Tums on TP move and Profit Trailing
Stop Feature
extern double ProfitSet = 70; // Locks in Profit at this percent of Total Profit
Potential
extern double MoveTP = 30; II Moves TP this amount m pips
extern int Tota!Moves = 2; II Number of times you want TP to move before
stopping movement
extern boo! UsePowerOutSL = false; II Transmits a SL in case of internet
loss
extern double POSLPips = 600; II Power Out Stop Loss m pips
extern boo! UseFIFO = false; II

移動停利

要談何謂「移動停利」,請讀者先建立一個觀念:

「反馬丁格爾策略」的交易模式是「停損不停利」,所以可套

用「移動停損」 (Trailing Stop Loss) 的「停損位 置上移模式」來保

護獲利。而相反的,「馬丁格爾策略」的交易模式是「停利不停損」,

所以可套用「移動停利」 (Trailing Stop Profit) 的「停利位置下移

模式」來保護獲利。

我們所設計的 Blessing 是「馬丁格爾策略」,所以,所使用的

就是「移動停利」。

大部分的讀者都很清楚什麼是「移動停損」。因為「反馬丁格

爾策略」的交易模式是「停損不停利」,所以其理論就是當我們下

了單之後,會同時下一個停損的位置,但是假設市場真的是往我們

所預期的方向移動,我們為了保護獲利,會把原先的停損位置做調

.. 整,例如當市場每位移 50 點,就調整停損點位移 30 點,所以在市

場回測時,即使是打到停損點,因為已經產生「點位移動」,這個「停

損點」可能是獲利或不賺不賠。這就稱之為「移動停損」。
那什麼是「移動停利」呢?

這是剛好跟「移動停損」相反的概念。因為「馬丁格爾策略」

的交易模式是「停利不停損」,所以其理論就是當我們下了單之後,

會同時下 一 個停利的位置,但是假設市場真的是往我們所預期的方

向移動,我們為了保護獲利,會把原先的停利位置的某個比率鎖定

做,例如 80%• 就是說停利是 100 點,當市場位移 80 點 (80%) 時,

就「鎖定停利點」,同時當市場繼續往我們要的方向走,每位移「某

個點位」,就「重新鎖定停利點」。但如果市場完全沒回測且直奔「停

利點」,那就會讓 100 點的利潤被碰到出場,但如果市場掉下低於

80%• 或是「重新鎖定」的「停利點」,只要在下 一 次市場碰到 80


點利潤時,或是「重新鎖定」的「停利點」,這個「停利點」就被

執行並出場。這就稱之為「移動停利」。

外部參數以及架構說明
所以「移動停損」跟「移動停利」剛好是相反的執行概念,其

所套用的策略模式剛好是完全相反的策略模式:

馬丁格爾策略 移動停利。

反馬丁格爾策略 移動停損。

以下這四行就是用來設定「移動停利」的外部參數。

extern boo! MaximizeProfit = false,


extern double ProfitSet = 70,
extern double MoveTP = 30,
extern int TotalMoves = 2,

Maximize Profit 若設為 true• 就是開啟「移動停利」功能,若設


為 false 就是關閉,而如果關閉的話, Blessing 的停利數據就完全依

據上面章節文章中的 TP _ SetArray 這個外部參數作為停利的依據。

_
193
ProfitSet 就是「鎖定停利點位」的比率,例如,停利如果是

100 點,這裡是設定為 70• 即為 70% 的意思,那就是 70 點利潤。

MoveTP 就是每次的「位移點數」,用來重設定「鎖定停利點位」,

這裡預設值是 30 點。 TotalMoves 是允許讓程式可以移動「位移點數」

的次數。

「斷網關倉」與「 FIFO 」設定

接下來談的是「斷網關倉」模式以及「 FIFO 」設定。這段「斷

網關倉」模式的程式碼其實是 FifthElement (第五元素)這位網路

MT4 達人所設計的,跟我們這群 Blessing 程式開發義工沒有很大關


係。所以,我們不算是原始創作者 。這段程式的概念就是為了避免

當網路斷線時,而帳戶的虧損達到某個點位,可以強迫關倉出場。

這個 POSLPips = 600 指的就是當虧損逹 600 點時,強制全部關倉停


損出場。

而什麼是 FIFO 設定呢? FIFO 全名: First In First Out 。翻成中


文就是:「先進先出」。

這項功能是為了「美國境內外匯經紀商」所設計的,早在 2010
年至 2011 年期間,美國的金融管制單位因為見到外匯保證金交易的

亂象,於是在 2011 年時,美國 CFTC 制訂了幾個法令規範及制度:

1. 不准對沖: No Hedge 。

2. 先進先出: First In First Out 。

3. 槓桿下降:最多 50 倍槓桿。

因為上述的這三條規範,讓美國的外匯經紀商幾乎玩不下去,

所以紛紛到歐洲,例如英國、塞浦路斯、紐西蘭、澳洲、香港、新
加坡 等 地 去註 冊開 分公司。 因 為這三 條規範 完全 打翻了「外 匯 交 易

多 樣性」的 優 點 。 尤 其是 「不能對沖」以及 「 先進先出」這兩項規範,

很多策略幾 乎 就無法執行 。 所以,如果讀者您所開戶的經紀商是 直

接開戶在「 美 國境內」,或者說,您的身分是 美 國人,那可能就會

被以上 這三 條規範所限制 。

外部參數定義:雜項、警告、線圖圖型設定等

以下的外部設定對程式績效的 影 響不大 。 我們分成幾個部分,


第一 段:「 其 他雜項設定」如下:

extern string LabelOS = "Other Settings : " ,


extern bool RecoupClosedLoss = true; // true = Recoup any Hedge/
CloseOldest losses : false = Use original profit target
extern int Level= 7; // Largest Assumed Basket size. Lower number =
higher start lots

外部參數 以及架構說 明
extern int slip = 99; // Ad」 usts opening and closing orders by "slipping"
this amount
extern int StatsPeriod = 3600; II seconds betwen stats entries - lh by default
extern boo! Statslnitialise = true; II true for backtest - false for fowardllive
to ACCUMULATE equity traces

第 二段:「 EMail 警告 通知設定 」 如下:

extern string Labe!UE = "Email Settings : " ;


extern boo! UseEmail = false;
extern string Labe!EDD = "At what DD% would you like Email warnings
( Max : 49, Disable : 0 ) ?" ;
extern double EmailDDl = 20;
extern double Emai!DD2 = 30;
extern double Emai!DD3 = 40;
extern string LabelEH = "Number of hours before DD timer resets" ,
extern double EmailHours = 24; // Minimum number of hours between
emails

_
195
第 三 段:「線圖程式之畫面顯示設定」如下:

extern string Labe!Display = "Used to Adjust Overlay" ,


extern boo! displayOverlay = true; // Turns the display on and off
extern boo! displayLogo = true; // Turns off copyright and icon
extern boo! displayCCI = true; // Turns off the CCI display
extern boo! displayLines = true; // Show BE, TP and TS lines
extern int displayXcord = I 00; // Moves display left and right
extern int displayY cord = 22; // Moves display up and down
extern int displayCCixCord = IO; // Moves CCI display left and right
extern int displayFontSize = 9; // Changes size of display characters
extern int displaySpacing = 14; // Changes space between lines
extern double displayRatio = l; // Ratio to increase label width spacmg
extern color displayColor = DeepSkyB!ue; // default color of display
characters
extern color displayColorProfit = Green; // default color of profit display
characters
extern color displayColorLoss = Red; // default color of loss display
characters
extern color displayColorFGnd = White; // default color ofForeGround
Text display characters

第四段:「最佳化設定」如下:

extern bool Debug = false,


extern string LabelOpt = "These values can only be used while
opt1m1zmg ;
extern bool UseGridOpt = false; // Set to true if you want to be able to
optimize the grid settings
extern int SetArray 1 = 4; // These values will replace the normal
SetCountA叮ay,

extern int SetArray2 = 4; // GridSetArray and TP_SetArray during


optimization
extern int SetArray3 = O; // The default values are the same as the normal
array defaults
extern int SetArray4 = 0,
extern int GridArrayl = 25; // REMEMBER:
extern int GridArray2 = 50; // There must be one more value for GridArray
and TPArray
extern int GridArray3 = 100; II than there is for SetArray
extern int GridArray4 = 0,
extern int GridArray5 = 0,
extern int TPArrayl = 50,
extern int TPArray2 = 100,
extern int TPArray3 = 200,
extern int TPArray4 = 0,
extern int TPA叮ay5 = 0,

在上述第 一 段的「其他雜項設定」裡,比較需拿出來解釋的如:

extern boo! RecoupC!osedLoss = true,


extern int Level = 7,
extern int slip = 99,

外部參數以及架構說明
RecoupClosedLoss 的功能是當使用者設定 Hedge 功能時,因
為市場波動的關係,有可能 Hedge 單是虧損出場,這時如果將此參
數設為 true' 則程式對於「整組 Basket 在倉單」的利潤計算,會把
「 Hedge 單」虧損部分都納入計算,使程式出場時至少是「不賺不賠」

出場,而不會「 Basket 在倉單」獲利,但「 Hedge 單」虧損加起來


還是虧損的清況發生。

Level 是用來調控風險值,是「風險係數」數學計算的一環,不
過,它基本上跟 Multiplier 這個參數有些相關性。我們來看 一 下以下
的公式:

1f (Multiplier< = l) Factor = Level,


else Factor= (MathPow (Multiplier,Level) -Multiplier) / (Multiplier-I) ,
Lotsize = LAFxAccountTypexContracts/ (1 +Factor) ;

所以,當 Level 值越高,下的 Lot 數反而會低 一 些。

_
197
而 slip 參數就是讓使用者決定 Blessing 程式在下單的時候,最

大容忍的滑點為多少。

而第二段:「 EMa」 1 警告通知設」的部分,這個部分,首先讀

者要先設定 MT4 系統工具的 Ema」1 設定才行。如下圖 5-5 。

MT4 Email Option


Options X

Server Cha 巾 Objects Trade Expert Advisors Notifications Email FTP Events Community Signals

巨I Enable

SMTP server. I —— smtp.company.com:25

SMTP login: I name@company.com

SMTP password:

From: [ Your Name, name@company com

To: [ Your Name, name@company.com

I 磁定 1 取消

MT4 在使用者把 一些預設的設定都設好了 , Blessing 的程式才

有辦法把「警告信」寄出。而寄信的函式就是 SendMail 函式:

boo! SendMail (
string sub」 ect, // header
string some_text II email text

Blessing 提供使用者在浮動虧損達 一定的%時 ,可以透過 MT4

的 E-Mail 系統寄警告信到使用者的信箱去。這項功能對於忙碌工作

且無法盯看程式狀況的投資者有些幫助。
第三段是「線圖程式之畫面顯示設定」。這個部份的外部設定

與「程式績效」完全沒有關聯,目的是讓使用者在套用 Blessing 程

式時,對於程式來源標籤、程式下單以及在倉單盈虧狀態做顯示。

第四段「最佳化設定」跟「格距」以及「停利」有關。這個部

份的設定是比較細的設定, Blessing 程式在前面的「格距以及停利」

設定部分其實已經提供給使用者自行調整的功能如下:

extern stnng SetCountArray = ` " ,


4,4
extern string GridSetArray = "25,50,100" ,
extern string TP SetArray = " 100"
50, 200,
,

而透過「最佳化設定」我們利用回測 (Strategy Test) 函式

IsOptimization ()找出最佳的「格距」以及「停利」數值,我們可

以嘗試把 「 格距」以及 「 停利」數值最佳化。不過,依照我們的經驗,

外部參數以及架構說明
把「格距」以及「停利」數值最佳化所套用的數字,其實績效也沒

有變的更好。

_
199
`
主程式各類模組介紹

Blessing 程式架構

Blessing 這個程式架構很龐大,本章節僅針對「程式的架構」
跟「功能模組作」介紹,無法 一- 細部做討論。不過,這樣的說明,

對於想使用此程式的投資者而言已經有很大的幫助。因為此 Blessing

程式完成時間較早,所以在新版本 MT4 Build 60 研的平台上無法編


譯成功,程式內容必須做修正。但就架構而言,這是沒有差別的,

只是函示定義、呼叫、語法有些不同,但基本上是大同小異,有程

式開發經驗跟能力的投資者應該都可以自行更新為新版本 MT4 的語
法,在這方面困難度沒有很高 。

在 Blessing 程式架構上面,筆者大略將其分成以下幾個區塊組
別以方便讀者做査閲,完整的原始程式碼讀者可以透過網路搜尋下

載,或參閲本書的後面附錄。

1. 初始化函式以及移除初始化函式模組

2. 線圖貨幣之資訊收集邏輯模組

3. 允許進出場條件以及資金保護模組

4 資金管理模組

5 市場趨勢判斷及進場邏輯模組
6789
.對沖模組
...

損益計算模組

線圖資訊顯示模組

開倉下單以及關倉出場模組

10. 其他特殊模組

初始化函式以及移除初始化函式模組

這個部分是程式在載入執行邏輯主體前先宣告一些初始變數定

義、外部參數設定防呆、陣列宣告、 Magic Number 設定宣告、格距

定義初始化等等。而當程式要移除時,也必須對 MT4 平台執行「移


除初始化函式」,目的是清除線圖上的物件,讓線圖回復成完全無

載入的狀況,這樣同等於釋放部分記憶體給系統。

主程式各類模組介紹
以下程式部分是起始函式 init ()

mt m1t ()
{ CS =" Waiting for next tick." , II To display comments while
testing, simply use CS =…. and
Comment (CS) , II it will be displayed by the line at
the end of the start () block
cs= " "
,

FirstRun = true,
AllowTrading = true,
if (EANumber<l) EANumber = I,
if (Testing) EANumber = 0,
Magic = GenerateMagicNumber () ,
hMagic = JenkinsHash (Magic) ,
FileName =" B3 " +Magic+" .dat" ,
if (Debug)
Print ( "Magic Number : "+DTS ( Magic,O)) ,
Print ( "Hedge Number : "+DTS ( hMagic,O)) ,
Print ( "FileName : "+FileName ) ,

Pip= Point,
if ( Digits%2 = = l ) Pip* = 10,
if ( NanoAccount ) AccountType = 10;
else AccountType = 1,

MoveTP = ND ( MoveTP*Pip ,D 唧s )'


EntryOffset = ND ( EntryOffset*Pip,Digits ) ;
MAI添tance = ND ( MADistance*Pip,Digits ) ,
BollDistance = ND ( BollDistance*Pip,D」gits ) ,
POSLPips = ND ( POSLPips*P 」 p , Digits ) ,
hMaxLossPips = ND ( hMaxLossPips*Pip,Digits ) ,
hTakeProfit = ND ( hTakeProfit*Pip,Digits ) ,
CloseTPP」ps = ND ( CloseTPPips*Pip,Digits ) ,
ForceTPPips = ND ( ForceTPPips*Pip,Digits ) ,
MinTPPips = ND ( MinTPPips*Pip,Digits ) ,
BEPlusPips = ND ( BEPlusPips*Pip,Digits ) ,
slip*= 朽 p/Point ,

if ( UseHedge )
{ if ( HedgeSymbol = = " " ) HedgeSymbol = Symbol () ,
if ( HedgeSymbol = = Symbol ()) hThisChart = true,
else hThisChart = false ,
hPip = Marketlnfo ( HedgeSymbol,MODE_POINT ) ,
int hDigits = Marketlnfo ( HedgeSymbol,MODE_DIGITS ) ,
if ( hD唧s%2 = = I ) hPip* = I 0,
if ( CheckCorr () >0.9 ) hPosCorr = true,
else if ( CheckCorr () <-0.9 ) hPosCorr = false ,
el se
AllowTrading = false ,

-
UseHedge = false ,
Print ( "The Hedge Symbol you have entered
"+HedgeSymbol+" ) is not closely correlated to "+Symbol ()) ,
}
1f ( StringSubstr ( DDorLevel,O, 1 ) = = " D" II StringSubstr
( DDorLevel,O, 1) = = " d" ) HedgeTypeDD = true;
else 直 StringSubstr ( DDorLevel,0,1) = =" L" II StringSubstr
( DDorLevel,O, 1 ) = = " I" ) HedgeTypeDD = false;
else UseHedge = false ,
if ( HedgeTypeDD )
{ HedgeStart/ = 100,
hDDStart = HedgeStart,

}
StopTradePercent/ = I 00 ,
ProfitSet/ = 100,
EEHoursPC/ = 100,
EELeve!PC/ = 100,
hReEntryPC/ = 100,
PortionPC/ = I 00,

Initia!AB = AccountBalance () ,

主程式各類模組介紹
StopTradeBalance = InitialAB* ( 1-StopTradePercent ) ,
Testing = IsTesting () ,
Visual = IsVisualMode () ,
1f ( Testing ) ID = " B3Test." ,
else ID = DTS ( Magic,O ) +" ." ,
HideTestlndicators ( true ) ,
MinLotSize = Marketlnfo ( Symbol () ,MODE_MINLOT ) ,
if ( MinLotSize>Lot )
{ (
Print ` Lot is less than your brokers minimum lot size " ) ,
AllowTrading = false,
}
LotStep = Marketlnfo ( Symbol () ,MODE_LOTSTEP ) ,
double MinLot = MathMin ( MinLotSize,LotStep ) ,
LotMult = MathMax ( Lot/MinLot,MinLotSize/MinLot ) ,
MinMult = LotMult,
Lot = MinLot,
if ( MinLot<0.01 ) LotDecimal = 3,
else if ( MinLot<O. l ) LotDecimal = 2,

_
203
else if ( MinLot< I ) LotDecimal = I,
else LotDecimal = 0,
囧eHandle = FileOpen ( FileName,FILE_BIN IFILE_READ ) ,
1f ( FileHandle! = -1 )
TbF = FileReadinteger ( FileHandle,LONG_ VALUE ) ,
FileClose ( FileHandle ) ,
Error = GetLastError () ,
if ( OrderSelect ( TbF,SELECT_BY_ TICKET ))
{ if ( OrderCloseTime () = = 0 )
{ OTbF = OrderOpenTime () ,
LbF = OrderLots () ,
LotMult = MathMax ( l ,LbF/MinLot ) ,
PbC = FindClosedPL ( B ) ,
PhC = FindClosedPL ( H ) ,
TradesOpen = true,
if ( Debug ) Print ( FileName+" File
Read: "+TbF+" Lots: "+DTS ( LbF,LotDecimal )) ,

else boo! DeleteFile = true;

else DeleteFile = true,


if ( DeleteFile )
囧 eDelete ( FileName ) ,
TbF = 0,
OTbF = 0,
LbF = 0,
Error = GetLastError () ,
if ( Error == ERR NO ERROR )
{ if ( Debug ) Print ( FileName+" File
Deleted" ) ,

else Print ( "Error deleting file : "+FileName+"

-
" " "+ErrorDescription ( Error )) ;
+Error+

Globa!VariableSet ( ID+" LotMult" ,LotMult ) ,


1f ( Debug ) Print ( "Lot Decimal : "+DTS ( LotDecimal,O)) ,
EmergencyWarning = EmergencyCloseAII;
1f ( IsOptimization ()) Debug = false ,
if ( UseAnyEntry ) UAE =" 11" ;
else UAE = " &&" ;
if ( ForceMarketCond<O 1ForceMarketCond>3 ) ForceMarketCond = 3,
if ( MAEntry<OI IMAEntry>2 ) MAEntry = O;
if ( CCIEntry<OIICCIEntry>2 ) CCIEntry = 0,
if ( BollingerEntry<OIIBollingerEntry>2 ) BollingerEntry = 0,
if ( StochEntry<011 StochEntry>2 ) StochEntry = 0,
if ( MACDEntry<OIIMACDEntry>2 ) MA CD Entry = 0,
if ( MaxCloseTrades = = 0 ) MaxCloseTrades = MaxTrades,

Array Resize ( Digit,6 ) ,


for ( y = O;y<ArrayRange ( Digit,O ) ;y++)
{ if ( y>O) Digit[y,O] = MathPow ( I O,y ) ,
Digit[y, l] = y,

主程式各類模 組介 紹
if ( Debug ) Print ( "趴 git : `+y+
` " [ "+Digit[y,0]+" ," +
Digit[y, l]+" ]" ) ;
}
Labe!Create () ,
dLabels = false;

I!+----------------一---- 十

//I Set Lot Array I


I!+-----------------------------------------------------------------+
ArrayResize ( Lots,MaxTrades ) ,
if ( Debug ) Print ( "Lot Multiplier : `+LotMult ) ,
for ( y = O;y<MaxTrades;y++ )
{ if ( y = = OIIMultiplier< l ) Lots[y] = Lot;
else Lots[y] = ND ( MathMax ( Lots[y-1] *Multiplier,Lots[y-
l]+LotStep ) ,LotDecimal ) ;
if ( Debug ) Print ( "Lot Size for level "+DTS ( y+ l ,O) +"
"+DTS ( Lots[y]*MathMax ( LotMult, l ) ,LotDecimal )) ;
}

_
205
1f ( Multiplier< ! ) Multiplier = 1,

II+-----------------------------------------------------------------+
//I Set Grid and TP array
//+-----------------------------------------------------------------+
1f ( !AutoCal )
int GridSet,GridTemp,GridTP,Gridindex,GridLevel,GridError,
ArrayResize ( GridArray,MaxTrades ) ,
if (IsOptimization () &&UseGridOpt )
{ if ( SetArrayl >O)
{ SetCountArray = DTS ( SetArrayl,O ) ,
GridSetArray = DTS ( GridArray 1,0 ) ,
TP_SetArray = DTS ( TPArrayl ,O) ,

1f ( SetArray2>011 ( SetArrayl >O&&GridArray2>0 ))


{ if ( SetArray2>0 ) SetCountArray =
SetCountArray+" ," +DTS ( SetArray2,0 ) ;
GridSetArray = GridSetArray+" ," +DTS
( GridArray2,0 ) ,
TP_SetArray = TP _SetArray+" ," +DTS
( TPArray2,0 ) ,

1f ( SetArray3>0II ( SetArray2>0&&GridArray3 >0 ))


{ if ( SetArray3>0 ) SetCountArray =
SetCountArray+" ," +DTS ( SetArray3 ,0 ) ;
GridSetArray = GridSetArray+" ," +DTS
( Grid.Array3 ,0 ) ,
TP_SetArray = TP_ SetArray+" ," +DTS
( TPArray3,0 ) ,

1f ( SetArray4>011 ( SetArray3>0&&GridArray4>0 ))
{ if ( SetArray4>0 ) SetCountArray =
SetCountArray+" ," +DTS ( SetArray4,0 ) ;
GridSetArray = GridSetArray+" ," +DTS
( GridArray4,0 ) ,

.. ( TPArray4,0 ) ,
TP_SetArray = TP_SetArray+" ," +DTS
tf ( SetArray4>0&&GridArray5>0 )
{ GridSetArray = GridSetArray+" ," +DTS
( GridArray5 ,0 ) ,
TP _ SetArray = TP_ SetArray+" ," +DTS
( TPArray5 ,0 ) ,

}
while ( Gridlndex<MaxTrades )
{ if ( StringFind ( SetCountArray," ," ) =
= -1 &&Gridlndex = = 0 )
{ GridError = I,
break,
}
else GridSet = StrTolnteger ( StringSubstr
( SetCountArray,0,StringFind ( SetCountArray," ," ) ) ) ;
if ( GridSet>O)
{ SetCountArray = StringSubstr
( SetCountArray,StringFind ( SetCountArray," ," ) + I ) ;

主程式各類模 組介 紹
GridTemp = StrTolnteger ( StringSubstr
( GridSetArray,O,StringFind ( GridSetArray," ," ) ) ) ;
GridSetArray = StringSubstr
( GridSetArray,StringFind ( GridSetArray," ," ) + 1 ) ;
GridTP = StrTolnteger ( StringSubstr ( TP_
SetArray,O,StringFind ( TP SetArray, " ," ) ) ) ,
TP_ SetArray = StringSubstr ( TP_
SetArray,StringFind ( TP SetArray, " ," ) + l ) ;
}
else GridSet = MaxTrades,
if ( GridTemp = = OIIGridTP = = 0 )
{ GridError = 2,
break;
}
for ( GridLevel = Gridlndex;GridLevel< =
MathMin ( Gridlndex+GridSet-1 ,MaxTrades-l ) ;GridLevel++)
{ GridArray[GridLevel,O] = GridTemp,
GridArray[GridLevel, l] = GridTP,
1f ( Debug ) Print ( "GridArray 斗

_
207
( GridLevel+ I ) +" : [ "+GridArray[GridLevel,O]+" , "+GridArray[Grid
Level,1]+" ]" ) ;

Gridlndex = GridLevel,

1f ( GridError>OII GridArray[O,O] = = OIIGridArray[O, l] = = 0 )


{ if ( GridError = = I ) Print ( "Grid Array Error.
Each value should be separated by a comma. " ) ;
else Print ( "Grid Array Error. Check that there
1s one more'Grid'and'TP'number than there are'set'numbers,
separated by commas. " ) ;
AllowTrading = false,

else
while ( Gridlndex<4 )
{ GridSet = StrTolnteger ( StringSubstr
( SetCountArray,O,StringFind ( SetCountArray," ," ) ) ) ,
SetCountArray = StringSubstr
( SetCountArray,StringFind ( SetCountArray,DTS ( GridSet,O)) + 2 ) ,
if ( Gridlndex = = O&&GridSet< l )
GridError = 1,
break,

1f ( GridSet>O) GridLevel+ = GridSet,


else if ( GridLevel<MaxTrades ) GridLevel =
Max Trades,
else GridLevel = MaxTrades+ 1,
if ( Gridlndex = = 0 ) Seti Level = GridLevel ,
else if ( Gridlndex = = l&&GridLevel< =
MaxTrades ) Set2Level = GridLevel;
else if ( Gridlndex = = 2&&GridLevel< =
MaxTrades ) Set3Level = GridLevel;

-
else if ( Gridlndex = = 3&&GridLevel< =
MaxTrades ) Set4Level = GridLevel,
Gridlndex++,
1f ( GridError = = 1II Set I Level = = 0 )
{ Print ( "Error setting up the Grid Levels. Check that
the SetCountArray has valid numbers, separated by a comma." ) ,
AllowTrading = false ,

!!+- -------------------------+
//I Set holidays array
//+--------------------------- -----------+
if ( UseHolidayShutdown )
{ int HolTemp,NumHols,NumBS,HolCounter,
string Ho!TempStr;
if ( StringFind ( Holidays," ," ,0 ) = = - I ) NumHols = I;
else
{ NumHols = I,
while ( Ho!Temp! = -I )

主程式各類模組介紹
{ Ho!Temp = StringFind
( Holidays," ," ,Ho!Temp+ l ) ;
if ( Ho!Temp! = - I ) NumHols+ = I ,

}
HolTemp = 0,
while ( HolTemp! = -1 )
{ HolTemp = StringFind
( Holidays," /" ,HolTemp+ 1 ) ;
if ( Ho!Temp! = -1 ) umBS+ = I,
}
if ( NumBS! = NumHols*2 )
{ Print ( "Holidays Error, number of back-slashes
( "+NumBS+" ) should be equal to 2* number of Holidays ( "+NumHols+
, and separators should be a
comma. ) ,
AllowTrading = false ,
}
else

_
209
Ho!Temp = 0,
ArrayResize (Ho!Array,NumHols ) ,
while ( Ho!Temp! = -1 )
{ if ( Ho!Temp = = 0 ) Ho!TempStr =
StringTrimLeft (StringTrimRight ( StringSubstr (Holidays,O,StringFind
( Holidays," ," ,Ho!Temp ) ) ) ) ;
else Ho!TempStr = StringTrimLeft
( StringTrimRight ( StringSubstr ( Holidays,Ho!Temp+ 1,
StringFind
( Holidays," ," ,Ho!Temp+ I) -Stringfind
( Holidays," ," ,Ho!Temp ) -1 ) ) ) ;
Ho!Temp = StringFind
( Holidays," ," ,Ho!Temp+ I ) ;
if ( Debug ) Print ( "Holidays - From :
",StringSubstr ( HolTempStr,O,StringFind ( HolTempStr," -" ,0 )) ,"
To:
StringSubstr
( Ho!TempStr,StringFind ( Ho!TempStr," -" ,0 ) + I )) ,
HolArray[HolCounter,0,0] =
StrTolnteger ( StringSubstr ( StringSubstr ( Ho!TempStr,O,StringFind
( HolTempStr," -" ,0 )) ,
StringFind ( StringSubstr
- 0 )) ," I
( HolTempStr,O StringFind ( Ho!TempStr," " " ) + l ));
Ho!Array[Ho!Counter,O, 1] =
StrTolnteger ( StringSubstr ( StringSubstr ( Ho!TempStr,O,StringFind
( Ho!TempStr," -" ,0 )) ,0,
StringFind ( StringSubstr
( HolTempStr,O StringFind ( Ho!TempStr," -" 0 )) ," /" ) ) ) ,
Ho!Array[HolCounter, 1,0] = StrTointeger
( StringSubstr ( StringSubstr ( Ho!TempStr,StringFind ( HolTempStr," -" ,0 )
+ l )'
StringFind ( StringSubstr
( HolTempStr StringFind ( HolTempStr, " -" ,O)+ l ), / ) + ! )) ,
Ho!Array[Ho!Counter, I, I] = StrTointeger
( StringSubstr ( StringSubstr ( HolTempStr,StringFind ( HolTempStr," -" ,0 )
+ I ) ,0,
StringFind ( StringSubstr
( HolTempStr,StringFind ( HolTempStr," -" 0 ) + I ) ," /" )))'
Ho!Counter+ = 1,
}
II+------------------------------------------ 十

//I Set email parameters


//+-------- --------------------------------+
if ( UseEmail )
{ if ( Period () = = 43200 ) TF ' =" MNl" ,
else if ( Period () = = 10800 ) TF = " Wl" ,
else if ( Period () = = 1440 ) TF = " DI" ;
else if ( Period () = = 240 ) TF =" H4" ,
elseif ( Period () = = 60) TF=" Hl" ,
else if ( Period () = = 30 ) TF =" M30" ,
else if ( Period () = = 15 ) TF =" M 15" ,
else if ( Period () = = 5 ) TF = " M5" ;
else if ( Period () = = 1 ) TF = " Ml" ;
Email[O] = MathMax ( MathMin
( EmailDD 1 MaxDDPercent-1 ) ,0 ) / 100;

主程式各類模組介紹
Email[l] = MathMax ( MathM111
(EmailDD2 ,MaxDDPercent-1 ) ,0 ) / 100;
Email[2] = MathMax ( Math Min
( EmailDD3 MaxDDPercent-1 ), 0 ) / 100;
ArraySort ( Email,WHOLE_ARRAY,O,MODE_ASCEND ) ,
for ( int z = O;z< = 2;z++)
{ for ( y = O;y< = 2;y++)
{ if ( Email[y] = = 0 )
{ Email[y] = Email[y+ 1],
Ernail[y+ l] = 0,

}
if ( Debug ) Print (
..Email [ ..+ ( z+ I ) +" ] :
"+Email[z] ) ,
}

II+-----------------------------------------------------------------+
Ill Set SmartGrid parameters

_
211
//+-----------------------------------------------------------------+
if ( UseSmartGrid )
ArrayResize ( RSI,RSl_period+RSI_MA_period ) ,
ArraySetAsSeries ( RSI,true ) ,

I/+-------------------- ----------------+
111 lmtiahze
. . . Statistics
//+-------------------- ------------------+
StatFile = Symbol () +" -" +Period () +" -" +EANumber+" .
csv" ,
1f ( StatsPeriod>O) Stats ( TimeCurrent () ,Statslnitialise,false,Accoun
tBalance () *PortionPC,O) ;

return ( 0 ) ,

以下程式部分是移除 起 始函式 deinit ()。

mt deinit ()
switch ( UninitializeReason ())
case REASON_REMOVE:
case REASON_ CHART CLOSE :
case REASON_CHARTCHANGE:
if ( CpT>O) while ( CpT>O) CpT- = ExitTrades
( P,displayColorLoss," Blessing Removed" ) ;
Globa!VariablesDeleteAII ( ID ) ,
case REASON_RECOMPILE:
case REASON_pARAMETERS:
case REASON_ACCOUNT:
if ( !Testing ) LabelDelete () ,
Comment (``")

return ( 0 ) ,
線圖貨幣之資訊收集邏輯模組

這個部分是程式進場前的資訊收集,例如,貨幣對的點值 (P 甲

Value) 、線圖是否已經存在在倉單、對沖的在倉單、計算以下單的

買單或賣單數量,以及是否有預掛單等等。同時,也會計算「停利

點位 Take Profit 」及「不賺不賠點位 Break Even 」。我們知道,以


馬丁格爾策略做下單模式的獲利出場都是以整組 (Basket) 全部出

場的模式,同時,馬丁格爾理論是停利而不停損,所以,程式設計

上必須至少要有整組 (Basket) 的「停利點位 Take Profit 」以及「不

賺不賠點位 Break Even 」的價格位置。而這個模組就是來計算這個


價格位置。

//+-----------------------------------------------------------------+
//I Count Open Orders, Lots and Totals I
II+ --------------------------------------------+

主程式各類模組介紹
PipValue = Marketinfo (Symbol () ,MODE_TICKVALUE) I
Marketlnfo (Symbol () ,MODE_TICKSIZE) *Pip;
柘 pVal2 = PipValue/Pip;
StopLevel = Marketinfo (Symbol () ,MODE_STOPLEVEL) *Point,
for (y = O;y<OrdersTotal () ;y++)
{ if (!OrderSelect (y,SELECT_BY]OS,MODE_TRADES))
continue;
int Type = OrderType () ,
if (OrderMagicNumber () = = hMagic)
{ Ph+ = OrderProfit () ,
BCh+ = OrderSwap () +OrderCommission () ,
BEh+ = OrderLots () *OrderOpenPrice () ,
if (OrderOpenTime () <OThOIIOThO = = 0)
{ OThO = OrderOpenTime () ,
ThO = OrderTicket () ,
OPhO = OrderOpenPrice () ;
}
if (Type== OP_BUY)

_
213
ChB++,
LhB+ = OrderLots () ,

else if ( Type = = OP_ SELL )


{ ChS++·,
LhS+ = OrderLots () ,

contmue,

1f ( OrderMagicNumber () ! = Magic!!OrderSymbol () 1 =
Symbol ()) contmue·
if ( OrderTakeProfit () >O) ModifyOrder ( OrderOpenPnce
() ,OrderStopLoss ()) ;
if ( Type<= OP_SELL )
{ Pb+ = OrderProfit () ;
BCb+ = OrderSwap () +OrderComm1ss1on () ;
BEb+ = OrderLots () *OrderOpenPrice () ,
if ( OrderOpenTime () > = OTbL )
{ OTbL = OrderOpenTime () ,
OPbL = OrderOpenPrice () ,
}
if ( OrderOpenTime () <OTbF!!TbF = = 0 )
{ OTbF = OrderOpenTime () ,
TbF = OrderTicket () ,
LbF = OrderLots () ,

1f ( OrderOpenTime () <OTbOIIOTbO = = 0 )
{ OTbO = OrderOpenTime () ,
TbO = OrderTicket () ,
OPbO = OrderOpenPrice () ,

1f ( UsePowerOutSL&&
( POSLPips>O&&OrderStopLoss () = = 0 ) II ( POSLP1ps = =
O&&OrderStopLoss () >O)) SetPOSL = true;
11111111 if ( Type == OP_BUY )
{ CbB++
LbB+ = OrderLots () ,
contmue,
}
el se
{
CbS++,
LbS+ = OrderLots () ,
continue;

}
l se
e{
if ( Type == OP BUYLIMIT )
{ CpBL++,
OPpBL = OrderOpenPrice () ,
continue,
}
else if ( Type = = OP_ SELLLIMIT )
{ CpSL++,

主程式各類模組介紹
OPpSL = OrderOpenPrice () ,
continue;
}
else if ( Type = = OP_ BUYSTOP ) CpBS++,
else CpSS++,

}
CbT = CbB+CbS ,
LbT = LbB+LbS ,
Pb = ND ( Pb+BCb,2 ) ,
ChT = ChB+ChS ,
LhT = LhB+LhS ,
Ph = ND ( Ph+BCh,2 ) ,
CpT = CpBL+CpSL+CpBS+CpSS ,
BCa = BCb+BCh,

//+-----------------------------------------------------------------+
//J Calculate Min/Max Profit and Break Even Points

_
215
II+-----------------------------------------------------------------+
if (LbT>O)
{ BEb = ND ( BEblLbT,Digits ) ;
if ( BCa<O) BEb- = ND ( BCalPip Val21 ( LbB-LbS ) ,Digits ) ,
if ( Pb>PbMaxllPbMax = = 0 ) PbMax = Pb,
if ( Pb<PbMinl!PbMin = = 0 ) PbMin = Pb,
if ( !TradesOpen )
{ FileHandle = FileOpen ( FileName,FILE_
BINIFILE_WRlTE ) ;
1f ( FileHandle>-1 )
File Writelnteger ( FileHandle,TbF ) ,
FileC!ose ( FileHandle ) ,
TradesOpen = true,
if ( Debug ) Print ( FileName+" File
Written : "+TbF ) ,
}

else if ( TradesOpen )
TPb = 0,
PbMax = 0,
PbMin = 0,
OTbF = 0,
TbF = 0,
LbF = 0,
PbC = 0,
PhC = 0,
PaC = 0,
ClosedPips = 0,
CbC = 0,
CaL = 0,
if ( HedgeTypeDD ) hDDStart = HedgeStart;
else hLv!Start = HedgeStart;
Emai!Count = 0,
Emai!Sent = 0,
FileHandle = FileOpen ( FileName,FILE_BINIFILE_
READ ),
if (FileHandle>-1)
囧eClose (FileHandle) ,
Error = GetLastError () ,
FileDelete (FileName) ,
Error = GetLastError () ,
if (Error = = ERR NO ERROR )
if (Debug) Print (FileName+" File
"
Deleted) ,
TradesOpen = false,

.
else Print ("Error deletmg file :
..+FileName+"
..+Error+" .. +ErrorDescription (Error)) ;
}
else TradesOpen = false,

1f (LhT>O)

主程式各類模組介紹
{ BEh = ND (BEh/LhT,Digits) ,
if (Ph>PhMaxllPhMax = = 0) PhMax = Ph,
if (Ph<PhMinllPhMin = = 0) PhMin = Ph,

else
PhMax = 0,
PhMin = 0,
SLh = 0,

允許進出場條件及資金保護模組

這個部分是程式 檢査是否有設定「關倉不再進場 ShutDown 」,

以及邏輯上是否成立允許下單 (AllowTrading) 的條件。同時,也制


定了資金保護的最後一到門檻 _~ 「淨值保護 Equity Protection 」 。

這個功能是為了不管市場如何的波動 、帳戶的賺賠,當帳戶本身的
資金淨值低於某一個水位時,程式啟動執行強制關倉的功能 。在外
匯市場,因為市場波動是非常劇烈的,資金的淨值保護是在資金管

_
217
理面上很重要的 一 環 。 尤 其 當使用者使用的是「只 停 利卻不停損」

的馬丁格爾策略, 若 沒有使用淨值保護機制,投 資 者有可能會 一 夜

之間帳戶歸零 。

//+-----------------------------------------------------------------+
//I Check if trading is allowed
//+-----------------------------------------------------------------+
if ( CbT = = O&&ChT = = O&&ShutDown )
if ( CpT>O)
{ ExitTrades (P,displayColorLoss," Bless mg 1s
shutting down") ;
return,

1f ( AllowTrading )
{ Print ( "Blessing has ShutDown. Set ShutDown =
'false'to continue trading" ) ;
if ( PlaySounds ) PlaySound ( AlertSound ) ,
AllowTrading = false,

1f ( UseEmail&&EmailCount<4&&!Testing )
{ SendMail ( "Blessing EA" ," Blessing has shut
down on `` +Symbol () +" ..+TF+
` . Trading has been suspended
To resume trading, set ShutDown to false." ) ;
Error = GetLastError () ,
if ( Error>O) Print ( `Error sending Email :
"+Error+" "+ErrorDescription ( Error )) ;
else Emai!Count = 4,

1f ( !AllowTrading )
{ static bool LDelete ,
if ( !LDelete )
LDelete = true,
Labe!Delete () ,
if ( Ob」 ectFind ( "B3LStop" ) = = -1 )
CreateLabel ( "83LStop" ," Trading has been stopped on this pair." , I 0,0
,0,3,displayColorLoss ) ;
if ( Ob」 ectFind ( "83LExpt" ) = = - I )
CreateLabel ( "83LExpt" ," Check the Experts tab for the reason why." ,
I 0,0,0,6,displayColorLoss ) ;

if ( Ob」 ectFind ( "B3 LResm" ) = = - I )


CreateLabel ( "B3LResm" ," Reset Blessing to resume trading." , I 0,0,0,
9,displayColorLoss ) ;
}
return,
}e
se
{
LDelete = false ,
Ob」 Del ( "83LStop" ) ,
Ob」 Del ( "83LExpt" ) ,
Ob」 Del ( `83LResm" ) ;

主程式各類模組介紹
I/+-----------------------------------------------------------------+
//I Calculate Drawdown and Equity Protection
//+ ---------一-------一一一- -----------------+
double PortionBalance = ND ( AccountBalance () *PortionPC,2 ) ,
if ( Pb+Ph<O) DrawDownPC = - ( Pb+Ph ) !PortionBalance,
if ( DrawDownPC> = MaxDDPercent/100 )
{ ExitTrades ( A,displayColorLoss," Equity Stop Loss
Reached" ) ;
if ( PlaySounds ) PlaySound ( AlertSound ) ,
return ,
}
,f ( - ( Pb+Ph ) >MaxDD ) MaxDD = - ( Pb+Ph ) ,
MaxDDPer = MathMax ( MaxDDPer,DrawDownPC* I 00 ) ,
if ( StatsPeriod>O) Stats ( TimeCurrent () ,false,TimeCurrent () <Ne
xtStats,PortionBa lance,Pb+Ph ) ;

//+-----------------------------------------------------------------+
//I Calculate Stop Trade Percent I
/!+--一------一一----------------------------------------------------- +

_
219
double StepAB = lnitialAB* ( l+StopTradePercent ) ,
double StepSTB = AccountBalance () * ( 1-StopTradePercent ) ,
double NextISTB = StepAB* ( 1-StopTradePercent ) ,
if ( StepSTB>NextISTB )
{ InitialAB = StepAB ,
StopTradeBalance = StepSTB,

double InitialAccountMultiPortion = StopTradeBalance*PortionPC;


if ( PortionBalance<InitialAccountMultiPortion )
if ( CbT = = 0)
{ AllowTrading = false,
if ( PlaySounds ) PlaySound ( AlertSound ) ,
Print ( "Portion Balance dropped below stop trade
percent" ) ,
MessageBox ( "Reset Blessing, account balance
dropped below stop trade percent on "+Symbol () +Period () ," Bless mg
3 : Warning" ,48 ) ;
return ( 0 ) ,

else 面 ( !ShutDown&&!RecoupClosedLoss )
ShutDown = true,
if ( PlaySounds ) PlaySound ( AlertSound ) ,
Print ( "Portion Balance dropped below stop trade
percent" ) ,
return ( 0 ) ,

資金管理模組

這 個部 分是程式 做 下單量計算 的 資金管理。因為 程 式 的 下單必

須考 慮到帳戶 資金大 小,也必 須 計 算外部參數當中分 配 執行 此 策略

的資金量 ,透過 外部的參數設 定,再 透過資金管理 , 程式 的 下單量

都 可以做適 當 的 調整 , 這跟部分主要是考慮到不同投資者對 風 險忍

受度 的不同所 設 的 資金管理模 式 。
//+-----------------------------------------------------------------+
//I Money Management and Lot size coding
I!+-----------------------------------------------------------------+
if ( UseMM )
{ if (CbT>O)
{ if ( GlobalVariableCheck ( ID+" LotMult" ))
LotMult = GlobalVariableGet ( ID+" LotMutt" ) ;
if ( LbF ! = LotSize ( Lots[O] *LotMult ))
{ LotMult = LbF/Lots[O],
GlobalVariableSet
( ID+" LotMult" ,LotMult ) ,
Print ( ` LotMult reset to "+DTS
( LotMult,O)) ;

}
if ( CbT = = 0)
{ double Contracts,Factor,Lots1ze,
Contracts = PortionBalance/ 10000,

主程式各類模組 介 紹
if ( Multiplier< = l ) Factor = Level,
else Factor = ( MathPow ( Multiplier,Level ) -
Multiplier ) / ( Multiplier-I ) ;
Lotsize = LAF* AccountType*Contracts/
( I +Factor ) ,
LotMult = MathMax ( MathFloor ( Lotsize/
Lot ) ,MinMult ) ,
Globa!VariableSet ( ID+" LotMult" ,LotMult ) ;

}
I/+-----------------------------------------------------------------+
//I Check Lot Size Funtion 丨

II+-----------------------------------------------------------------+
double LotSi ze ( double Lot )
{ Lot = ND ( Lot,LotDecimal ) ,
Lot = MathMin ( Lot,Marketlnfo ( Symbol () ,MODE_
MAXLOT )) ;
Lot = MathMax ( Lot,MinLotSize ) ,
return ( Lot ) ,

_
221
市場趨勢判斷及進場邏輯模組

這個部分是程式在下單前必須透過指標先判斷市場方向。雖然

此程式是馬丁格爾策略,但針對市場的對的方向性下單也很重要,

此模組提供了兩大部分的趨勢判斷。首先是長趨勢的判斷,再由長

趨勢的判斷下做進場條件判斷。例如在長趨勢的判斷是看漲時,進

場條件即使賣單條件成立,程式也不會下單,反之亦然。這就是常

被投資者提及的「長線保護短線」。而進場條件裡, Blessing 提供了·

CCI 、 Bollinger Band 、 KD 、 MACD 以及簡單的 MA 等等方向判斷性


指標給投資者選用。

II+-----------------------------------------------------------------+
Ill C aIculation of Trend Direct10n
II+ 十

mt Trend,
double ima_O = iMA (Symbol () ,O,MAPeriod,O,MODE_
EMA,PRICE_ CLOSE,O) ;
1f (ForceMarketCond = = 3)
1f (和 d>ima_O+MADistance) Trend= 0,
else if (Ask<ima_O-MADistance) Trend= 1,
else Trend = 2,

else Trend = ForceMarketCond,

//+----------------------------------------------------------------+
//I CCI of 5M,15M,30M,1H for Market Condition and Order Entry
II+--------------------------------------------------------------- -十
if (CCIEntry>O)
{ double cci_ 0 I = iCCI (Symbol () ,PERIOD_

- M5,CCIPeriod,PRICE_ CLOSE,O) ;
double cci_02 = iCCI (Symbol () ,PERIOD_
Ml 5,CCIPeriod,PRICE_CLOSE,O) ;
double cci_03 = iCCI (Symbol () ,PERIOD_
M30,CCIPeriod,PRICE_CLOSE,O) ,
double cci_ 04 = iCCI ( Symbol () ,PERIOD_
H l ,CCIPeriod,PRICE_ CLOSE,O) ;
double cci_ ll = iCCI ( Symbol () ,PERIOD_
MS,CCIPeriod,PRICE_CLOSE,l ) ;
double cci_ 12 = iCCI ( Symbol () ,PERIOD_
MIS,CCIPeriod,PRICE_CLOSE, l ) ;
double cci_ 13 = iCCI ( Symbol () ,PERIOD_
M30,CCIPeriod,PRICE_CLOSE,l ) ;
double cci_ 14 = iCCI ( Symbol () ,PERIOD_
HI ,CCIPeriod,PRICE_ CLOSE, I ) ;
}
if ( CCIEntry>O&&CbT = = O&&CpT<2 )
{ if ( cci l l>O&&cci 12>0&&cci 13>0&&cci 14>0&&cci 01
>O&&cci 02>0&&cci 03>0&&cci 04>0 )
{ if ( ForceMarketCond = = 3 ) Trend = 0,
if ( CCIEntry = = I)
{ if ( ForceMarketCond! = I&&
( UseAnyEntryl/ IndEntry = 0丨/ ( !UseAnyEntry&&lndEntry>O&&Buy

主程式各類模組 介 紹
=
Me ) ) ) BuyMe = true ;
else BuyMe = false,
if ( !UseAnyEntry&&IndEntry>O&&Sell
Me&& ( !B3Traditional / ( B3Traditional&&Trend! = 2 ) ) ) SellMe =
false ;
}
else if ( CCIEntry = = 2)
{ if ( ForceMarketCond! = O&&
( UseAnyEntryi lndEntry = = O, ( !UseAnyEntry&&IndEntry>O&&Sell
Me ) ) ) SellMe = true ;
else SellMe = false,
if ( !UseAnyEntry&&lndEntry>O&&Buy
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) BuyMe =
false ;

}
else 」 f ( cc 」 ll <O&&cc 」 12 <0&&cci 13<0&&cci 14<0&&cc
」 0 I <O&&cci 02<0&&cci 03 <0&&cc 」 04 <0 )
{ if ( ForceMarketCond = = 3 ) Trend = I,

_
223
1f ( CCIEntry = = I)
{ if ( ForceMarketCond! = O&&
( UseAnyEntrylllndEntry = = 0丨丨 ( !UseAnyEntry&&lndEntry>O&&Sell

Me ) ) ) SellMe = true;
else SellMe = false ,
if ( !UseAnyEntry&&lndEntry>O&&Buy
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) BuyMe =
false;

else if ( CCIEntry = = 2 )
{ if ( ForceMarketCond! = l&&
( UseAnyEntryl llndEntry = = 011 ( !UseAnyEntry&&IndEntry>O&&Buy
Me ) ) ) BuyMe = true;
else BuyMe = false,
if ( !UseAnyEntry&&JndEntry>O&&Sell
Me&& (!B3Traditional ll ( B3Traditional&&Trend! = 2 ) ) ) SellMe =
false ;

else if ( !UseAnyEntry&&lndEntry>O)
{ BuyMe = false,
Sel!Me = false ,

1f ( lndEntry>O) IndicatorUsed = IndicatorUsed+UAE;


IndEntry++,
Ind1catorUsed = IndicatorUsed+" CCI `

//+----一-- ----------------------- 十

//I Bollinger Band Indicator for Order Entry


//+----------------------------------------------------------------+
if (BollingerEntry>O&&CbT = = O&&CpT<2 )
{ double ma = iMA ( Symbol () ,O,BollPeriod,O,MODE_

-
SMA,PRICE_ OPEN,O) ;
double stddev = iStdDev ( Symbol () ,O,BollPeriod,O,MODE_
SMA,PRICE_OPEN,O) ;
double bup = ma+ ( BollDeviation*stddev ) ,
double bdn = ma- ( Bol!Deviation*stddev ) ,
double bux = bup+Bol!Distance,
double bdx = bdn-BollDistance,
if ( Ask<bdx )
{ if ( BollingerEntry = = I)
{ if ( ForceMarketCond! = I &&
( UseAnyEntryllindEntry = = OIi ( !UseAnyEntry&&IndEntry>O&&Buy
Me ) ) ) Buy Me = true;
else BuyMe = false ,
if ( !UseAnyEntry&&IndEntry>O&&Sell
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) SellMe =
false;
}
else if ( BollingerEntry = = 2)
{ if ( ForceMarketCond! = O&&
( UseAnyEntryllindEntry = = OIi ( !UseAnyEntry&&IndEntry>O&&Sell
Me ) ) ) SellMe = true;
else SellMe = false ,

主程式各類模 組 介紹
if ( !UseAnyEntry&&lndEntry>O&&Buy
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) BuyMe =
false ;

}
else if ( Bid>bux )
{ if ( BollingerEntry = = 1)
{ if ( ForceMarketCond! = O&&
( UseAnyEntrylllndEntry = = OIi ( !UseAnyEntry&&lndEntry>O&&Sell
Me ) ) ) Sel!Me = true;
else SellMe = false,
if ( !UseAnyEntry&&IndEntry>O&&Buy
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) BuyMe =
false;
}
else if ( BollingerEntry = = 2)
{ if ( ForceMarketCond! = l&&
( UseAnyEntrylllndEntry = = 0丨I ( !UseAnyEntry&&IndEntry>O&&Buy
Me ) ) ) BuyMe = true;
else BuyMe = false ;

_
225
1f ( !UseAnyEntry&&IndEntry>O&&Sell
Me&& ( !B3Traditionalll ( B3Trad」tional&&Trend! = 2 ) ) ) SellMe =
false;

else if ( !UseAnyEntry&&IndEntry>O)
{ BuyMe = false,
SellMe = false ,

1f ( IndEntry>O) IndicatorUsed = IndicatorUsed+UAE,


IndEntry++,
IndicatorUsed = IndicatorUsed+" BBands ",

II+ --------------------------------+
//I Stochastic Indicator for Order Entry
II+ ------------ +
if ( StochEntry>O&&CbT = = O&&CpT<2 )
{ int zoneBUY = BuySellStochZone,
int zoneSELL = 100-BuySellStochZone,
double stoc_O = iStochastic ( NULL,O,KPeriod,DPeriod,Slow1
ng,MODE_LWMA,1,0,1 ) ;
double stoc_ 1 = iStochastic ( NULL,O,KPeriod,DPeriod,Slow1
ng,MODE_LWMA, l , 1, 1) ;
if ( stoc _ O<zoneBUY &&stoc_ 1<zoneBUY )
if ( StochEntry = = l )
{ if ( ForceMarketCond! = !&&
( UseAnyEntrylllndEntry = = OIi ( !UseAnyEntry&&lndEntry>O&&Buy
Me ) ) ) BuyMe = true;
else BuyMe = false ,
if ( !UseAnyEntry&&IndEntry>O&&Sell
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) SellMe =
false;

else if ( StochEntry = = 2)
{ if ( ForceMarketCond! = O&&
,,,,,, ( UseAnyEntrylllndEntry = = OIi ( !UseAnyEntry&&lndEntry>O&&Sell
Me ) ) ) SellMe = true;
else Sel!Me = false,
if (!UseAnyEntry&&IndEntry>O&&Buy
Me&& (!B3Traditionalll (B3Traditional&&Trend! = 2))) BuyMe =
false;

}
else if (stoc_ O>zoneSELL&&stoc_ l>zoneSELL)
{ if (StochEntry = = I)
{ if (ForceMarketCond! = O&&
(UseAnyEntryllindEntry = = OIi (!UseAnyEntry&&IndEntry>O&&Sell
Me))) SellMe = true;
else SellMe = false,
if (!UseAnyEntry&&lndEntry>O&&Buy
Me&& (!B3Traditionalll (B3Traditional&&Trend! = 2))) BuyMe =
false;
}
else if (StochEntry = = 2)
{ if (ForceMarketCond! = I&&
(UseAnyEntrylllndEntry = = OIi (!UseAnyEntry&&IndEntry>O&&Buy

主程式各類模組介紹
Me))) BuyMe = true;
else BuyMe = false,
if (!UseAnyEntry&&IndEntry>O&&Sell
Me&& (!B3 Traditional II (B3 Traditional&&Trend ! = 2))) SellMe =
false;

}
else if (!UseAnyEntry&&lndEntry>O)
{ BuyMe = false,
SellMe = false,
}
if (IndEntry>O) IndicatorUsed = IndicatorUsed+UAE,
IndEntry++;
IndicatorUsed = IndicatorUsed+" Stoch ``
,

II+----------------------------------------------------------------+
//I MACD Indicator for Order Entry I

_
II+----------------------------------------------------------------+

227
1f ( MACDEntry>O&&CbT = = O&&CpT<2 )
{ double MACDm = iMACD ( NULL,MACD_TF,FastPeriod,Sl
owPeriod,Signa!Period,MACDPrice,0,0 ) ;
double MACDs = iMACD ( NULL,MACD_TF,FastPeriod,Sl
owPeriod,SignalPeriod,MACDPrice, 1,0 ) ;
if ( MACDm>MACDs )
{ if ( MACDEntry = = 1)
{ if ( ForceMarketCond! = l&&
( UseAnyEntrylllndEntry = = OIi ( !UseAnyEntry&&IndEntry>O&&Buy
Me ) ) ) Buy Me = true;
else BuyMe = false,
if ( !UseAnyEntry&&IndEntry>O&&Sell
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) SellMe =
false;

else if ( MACDEntry = = 2)
{ if ( ForceMarketCond! = O&&
( UseAnyEntrylllndEntry = = OIi ( !UseAnyEntry&&lndEntry>O&&Sell
Me ) ) ) SellMe = true;
else SellMe = false ,
if ( !UseAnyEntry&&lndEntry>O&&Buy
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) BuyMe =
false ;

else if ( MACDm<MACDs )
if ( MACDEntry = = I)
{ if ( ForceMarketCond! = O&&
( UseAnyEntryllindEntry = = 011 ( !UseAnyEntry&&IndEntry>O&&Sell
Me ) ) ) SellMe = true;
else SellMe = false,
if ( !UseAnyEntry&&IndEntry>O&&Buy
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) BuyMe =
false;

else if ( MACDEntry = = 2)
{ if ( ForceMarketCond! = 1&&
,,,,,, ( UseAnyEntryll lndEntry = = OIi ( !UseAnyEntry&&lndEntry>O&&Buy
Me ) ) ) Buy Me = true;
else BuyMe = false ,
if ( !UseAnyEntry&&IndEntry>O&&Sell
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) SellMe =
false;

}
else if ( !UseAnyEntry&&IndEntry>O)
{ BuyMe = false ,
SellMe = false ,
}
if ( IndEntry>O) IndicatorUsed = lndicatorUsed+UAE,
IndEntry++,
IndicatorUsed = IndicatorUsed+" MACD ``
,
}
//+ ---一一一一 一-------一- + << This must
be the first Entry check
叭 Moving Average Indicator for Order Entry I « Add
your own Indicator Entry checks

主程式各類模組介紹
//+---------------------- + < < after the
Moving Average Entry
if ( MAEntry>O&&CbT = = O&&CpT<2 )
{ if ( Bid>ima O+MADistance&& ( !B3Traditional
( B3Traditional&&Trend! = 2 ) ) )
{ if ( MAEntry = = 1)
{ if ( ForceMarketCond ! = 1&&
( UseAnyEntrylllndEntry = = OIi ( !UseAnyEntry&&IndEntry>O&&Buy
Me ) ) ) Buy Me = true;
else BuyMe = false,
if ( !UseAnyEntry&&IndEntry>O&&Sell
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) SellMe =
false ;
}
else if ( MAEntry = = 2)
{ if ( ForceMarketCond ! = O&&
( UseAnyEntrylllndEntry = = OIi ( !UseAnyEntry&&IndEntry>O&&Sell
Me ) ) ) SellMe = true;
else Sel!Me = false ,
if ( !UseAnyEntry&&IndEntry>O&&Buy

_
229


Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) BuyMe =
false;

else if ( Ask<ima_O-MADistance&& ( !B3Traditionalll


( B3Traditional&&Trend! = 2 ) ) )
if ( MAEntry = = 1)
{ if ( ForceMarketCond! = O&&
( UseAnyEntrylllndEntry = = 011 ( !UseAnyEntry&&IndEntry>O&&Sell
Me ) ) ) SellMe = true;
else SellMe = false ,
if ( !UseAnyEntry&&IndEntry>O&&Buy
Me&& (!B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) Buy Me =
false;

else if ( MAEntry = = 2)
{ if ( ForceMarketCond! = l&&
( UseAnyEntrylllndEntry = = 011 ( !UseAnyEntry&&IndEntry>O&&Buy
Me ) ) ) BuyMe = true;
else BuyMe = false ,
if ( !UseAnyEntry&&IndEntry>O&&Sell
Me&& ( !B3Traditionalll ( B3Traditional&&Trend! = 2 ) ) ) SellMe =
false;

else if ( B3Traditional&&Trend = = 2 )
{ if ( ForceMarketCond! = l&&
( UseAnyEntrylllndEntry = = OIi ( !UseAnyEntry&&lndEntry>O&&Buy
Me ) ) ) Buy Me = true;
if ( ForceMarketCond! = O&&
( UseAnyEntrylllndEntry = = 011 ( !UseAnyEntry&&lndEntry>O&&Sell
Me ) ) ) SellMe = true;
}
else

-
BuyMe = false ,
Se!IMe = false,

1f ( IndEntry>O) IndicatorUsed = lndicatorUsed+UAE,


lndEntry++;
`
IndicatorUsed = IndicatorUsed+" MA ,

I/+-----------------------------------------------------------------+ < < This must


be the last Entry check before
//I UseAnyEntry Check && Force Market Condition Buy/Sell Entry
<< the Trade Selection Logic. Add checks for
II+ ------------------------- + << add1t10nal
indicators before this block
if ( !UseAnyEntry&&IndEntry> l&&BuyMe&&SellMe )
{ BuyMe = false;
SellMe = false ,
}
if ( ForceMarketCond<2&&IndEntry = = O&&CbT = = 0 )
{ if ( ForceMarketCond = = 0 ) BuyMe = true,
if ( ForceMarketCond = = I ) SellMe = true,
Ind1catorUsed = " FMC·

主程式各類模組介紹
}
I/+-------------------- --- --------------------+
//I Trade Selection Logic I
II+-----------------------------------------------------------------+
OrderLot = LotSize ( Lots[StrTolnteger ( DTS ( MathMm
( CbT+CbC,MaxTrades-1 ) ,0 )) ]*LotMult ) ;
if ( CbT = = O&&CpT<2&&!FirstRun )
{ if ( B3Traditional )
{ if ( BuyMe )
{ if ( CpBS = = O&&CpSL = = O&&
(( Trend! = 2IIMAEntry = = 0 ) II ( Trend = = 2&&MAEntry = = I )))
{ Entry = g2-MathMod ( Ask,g2)
+EntryOffset;
1f ( Entry>StopLevel )
{ Ticket = SendOrder
( Symbol () ,OP_ BUYSTOP,OrderLot,Entry,O,Magic,CLR_NONE ) ;
if ( Ticket>O )
{ if ( Debug )
Print ( "Indicator Entry - ( ` ` " ) BuyStop MC =
+IndicatorUsed+
"+Trend ) ;

_
231 ,
CpBS++,

1f ( CpBL = = O&&CpSS = = O&&


(( Trend! = 21IMAEntry = = 0 ) 11 ( Trend = = 2&&MAEntry = = 2 )))
{ Entry = MathMod ( Ask,g2 )
+ EntryOffset,
1f ( Entry>StopLevel )
{ Ticket = SendOrder
( Symbol () ,OP_BUYLIMIT,OrderLot,-Entry,O,Magic,CLR_NONE ) ,
if (Ticket>O)
{ if ( Debug )
Print ( "Indicator Entry - ( "+IndicatorUsed+" ) BuyLimit MC =
"+Trend ) ;
CpBL++,

1f (SellMe )
{ if ( CpSL = = O&&CpBS = = O&&
(( Trend! = 2IIMAEntry = = O) 11 ( Trend = = 2&&MAEntry = = 2 )))
{ Entry = g2-MathMod ( Bid,g2 ) -
EntryOffset,
1f ( Entry>StopLevel )
{ Ticket = SendOrder
( Symbol () ,OP_SELLLIMIT,OrderLot,Entry,0,Magic,CLR_NONE ),
if ( Ticket>O&&Debug )
Print ("Indicator Entry - ( "+IndicatorUsed+" ) SellLimit MC =
"+Trend ) ;

1f ( CpSS = = O&&CpBL = = O&&

- (( Trend! = 2IJMAEntry = = 0 ) II ( Trend = = 2&&MAEntry = = 1)))

+EntryOffset,
{ Entry = MathMod ( Bid,g2 )

1f ( Entry>StopLevel )
{ Ticket = SendOrder
( Symbol () ,OP_SELLSTOP,OrderLot,-Entry,0,Magic,CLR_NONE ) ;
if ( Ticket>O&&Debug )
" +lndicatorUsed+,, ) SellStop MC =
Print ( "Indicator Entry -
"+Trend ) ;

}
e{
se

1f ( BuyMe )
{ Ticket = SendOrder ( Symbol () ,OP_BU
Y,OrderLot,O,slip,Magic,Blue ) ;
if ( Ticket>O&&Debug ) Print ( ``Indicator
Entry - " +IndicatorUsed+" ) Buy" ) ;
}
else if ( SellMe )
{ Ticket = SendOrder ( Symbol () ,OP_ SE

主程式各類模組介紹
LL,OrderLot, O ,slip ,Magic ,d 」 splayColorLoss ) ;
if ( Ticket>O&&Debug ) Print ( "Indicator
Entry - ` ` " ) Sell" ) ;
+IndicatorUsed+
}
}
if ( Ticket>O) return ,
}
else if ( TimeCurrent () -EntryDelay>OTbL&&CbT+CbC<MaxTrades
&&!FirstRun )
{ if ( UseSmartGrid )
{ if ( RSI[!]! = iRSI ( NULL,RSI_TF,RSI_
Period,RSI_Price, l ))
for ( y = O;y<RSl_period+RSI_MA_
Period ;y++) RSI[y] = iRSI ( NULL,RSI_TF,RSI_Period,RSI_price,y ) ,
else RSI[O] = iRSI ( NULL,RSI_TF,RSI_
Period,RSI_price,O) ,
RSI_MA = iMAOnArray ( RSI,O,RSI_MA_
Period,O,RSI_MA_Method,O) ;
}
if ( CbB>O)

_
233
{ if ( OPbL>Ask ) Entry = OPbL- ( MathRound
(( OPbL-Ask ) /g2 ) + 1 ) *g2;
else Entry = OPbL-g2,
if ( UseSmartGrid )
if ( Ask<OPbL-g2&&RSI[O]>RSI_MA )
{ Ticket = SendOrder ( Symbol
() ,OP_BUY,OrderLot,0,slip,Magic,Blue ) ;
if ( Ticket>O&&Debug ) Print
( "SmartGrid Buy RSI : "+RSI[O] +" > MA: "+RSI_MA ) ;
}

else if ( CpBL = = 0 )
{ if ( Ask-Entry>StopLevel )
{ Ticket = SendOrder ( Symbol
() ,OP_BUYLIMIT,OrderLot,Entry-Ask,O,Magic,SkyBlue ) ;
1f ( Ticket>O&&Debug ) Print
( "BuyLimit grid" ) ,

else 面 ( CpBL = = l&&Entry-OPpBL>g2/2&&Ask-


Entry>StopLevel )
for ( y = OrdersTotal () ;y> = O;y-- )
{ if ( !OrderSelect ( y,SELECT
BY_POS,MODE_TRADES )) continue;
if ( OrderMagicNumber () '
= MagicllOrderSymbol () ! = Symbol () IIOrderType () ! = OP_
BUYLIMIT ) continue;
Success = ModifyOrder
( Entry,O,SkyBlue ) ,
1f ( Success&&Debug ) Print
( "Mod BuyLimit Entry" ) ,

-
else if ( CbS>O)
{ if ( Bid>OPbL ) Entry = OPbL+ ( MathRound
(( -OPbL+Bid ) /g2 ) + I ) *g2;
else Entry = OPbL+g2 ,
1f ( UseSmartGrid )
{ if ( Bid>OPbL+g2&&RSI[O]<RSI_MA )
{ Ticket = SendOrder ( Symbol
() ,OP_SELL,OrderLot,O,slip,Magic,displayColorLoss ) ;
if ( Ticket>O&&Debug ) Print
"SmartGrid Sell RSI : "+RSI[O] +" < MA: "+RSI_MA ) ;
}
}
else if ( CpSL = = 0)
{ if ( Entry-B 心StopLevel )
{ Ticket = SendOrder ( Symbol
() ,OP_ SELLLIMIT,OrderLot,Entry-Bid,O,Magic,Coral ) ;
if ( Ticket>O&&Debug ) Print
( "SellLimit grid" ),

}
else if ( CpSL = = l&&OPpSL-
Entry>g2/2&&Entry-Bid>StopLevel )

主程式各類模組介紹
{ for ( y = OrdersTotal () -1 ;y> = O;y-- )
{ if ( !OrderSelect ( y,SELECT_
BY_ POS ,MODE_TRADES )) continue;
if ( OrderMagicNumber () '
= Magic JJOrderSymbol () ! = Symbol () IIOrderType () ! = OP_
SELLLIMIT ) continue;
Success = ModifyOrder
(Entry,O,Coral ) ,
1f ( Success&&Debug ) Pnnt
"Mod Sel!Limit Entry" ) ,
}
}
}
if ( Ticket>O) return,

_
235
對沖模組

這個部分是當投資者啟動「程式對沖」機制之後,對沖功能就

開始做反向單的下單邏輯機制。因為「對沖單」是屬於另一個群組,

它主要是為了彌補使用馬丁格爾策略下過大的浮動虧損損失,所以

必須賦予它另一組不同的 Magic Number• 同時,所有的利潤、損失丶


出場條件等等都必須單獨計算。在 5-2 章節裡有提到,對沖模式有
直接對沖、中性對沖、以及完美對沖。 Blessing 程式在對沖功能上有 .
提供直接對沖以及中性對沖(連動貨幣對沖),所以對沖模組還含

有一個計算連動係數的涵式。

//+----------------------------------- ----------+
//I Hedge Trades Set-Up and Monitoring
//+-----------------------------------------------------------------+
if (UseHedge&&CbT>O)
{ if (ChT>O&&!hActive) hActive = true,
int hLevel = CbT+CbC,
if (HedgeTypeDD)
{ if (hDDStart = = O&&ChT>O) hDDStart =
MathMax (HedgeStart,DrawDownPC+hReEntryPC) ;
if (hDDStart>HedgeStart&&hDDStart>DrawDownP
C+hReEntryPC) hDDStart = DrawDownPC+hReEntryPC;
}
if (!hActive)
{ if (!hThisChart&& (hPosCorr&&CheckCorr ()
<0.9ll!hPosCorr&&CheckCorr () >-0.9 ))
{ if (Ob」 ectFind ("B3LhCor") = = -1)
CreateLabel ("B3LhCor" ," The
correlation with the hedge pair has dropped below 90%." ,0,0,190,10,displa
yColorLoss) ;

- else Ob」 Del ("B3LhCor") ,


if (hLv!Start>hLevel+ I II !HedgeTypeDD&&hLv!Start
= = 0) hLv!Start = MathMax (HedgeStart,hLevel+ I) ;
1f (( HedgeTypeDD&&DrawDownPC>hDDStart )
11 ( !HedgeTypeDD&&hLevel> = hLv!Start ) )
{ OrderLot = LotSize ( LbT*hLotMult ) ,
if (( CbB>O&&!hPosCorr ) II
( CbS>O&&hPosCorr ))
{ Ticket = SendOrder
( HedgeSymbol,OP _BUY,OrderLot,0,slip,hMagic,MidnightBlue ) ,
if ( Ticket>O )
{ if ( hMaxLossPips>O)
SLh = hAsk-hMaxLossP1ps,
1f ( Debug ) Print
"Hedge Buy : Stoploss @ "+DTS ( SLh,Digits )) ;

}
if (( CbB>O&&hPosCorr ) II
( CbS>O&&!hPosCorr ))
{ Ticket = SendOrder
( HedgeSymbol,OP _ SELL,OrderLot,O,slip,hMagic,Maroon ) ;

主程式各類模 組介 紹
if ( Ticket>O )
{ if ( hMaxLossPips>O)
SLh = h和 d+hMaxLossP1ps ,
1f ( Debug ) Print
"Hedge Sell : Stoploss @ "+DTS ( SLh,Digits )) ;
}
}
if ( Ticket>O )
{ hActive = true,
if ( HedgeTypeDD ) hDDStart+
= hReEntryPC,
hLvlStart = hLevel+ 1,
return;

}
else if ( hActive )
{ if ( HedgeTypeDD&&hDDStart>Hedge
Start&&hDDStart<DrawDownPC+hReEntryPC ) hDDStart =
Draw DownPC+hReEntryPC ;

_
237
1f (hLvlStart == 0)
{ if (HedgeTypeDD) hLvlStart = hLevel+ 1,
else hLvlStart = MathMax
(HedgeStart,hLevel+ 1) ,
}
if (hLevel> = hLvlStart)
{ OrderLot = LotSize (Lots[CbT+CbC-
l]*LotMult*hLotMult) ;
1f (OrderLot>O&& (CbB>O&&!hPosCorr)
II (CbS>O&&hPosCorr))
{ Ticket = SendOrder
(HedgeSymbol,OP_ BUY,OrderLot,O,slip,hMagic,MidnightBlue) ,
if (Ticket>O&&Debug) Print
("Hedge Buy") ,

1f (OrderLot>O&& (CbB>O&&hPosCorr)
11 (CbS>O&&!hPosCorr))
{ Ticket = SendOrder
(HedgeSymbol,OP_ SELL,OrderLot,O,slip,hMagic,Maroon) ;
if (Ticket>O&&Debug) Print
("Hedge Sell") ,

1f (Ticket>O)
{ hLv!Start = hLevel+ 1,
return,

y = 0,
if (hMaxLossPips>O)
{ if (ChB>O)
if (hFixedSL)
if (SLh = = 0) SLh
= hAsk-hMaxLossP1ps,

- {
else
if(SLh==OII
(SLh<BEh&&SLh<hAsk-hMaxLossPips)) SLh = hAsk-hMaxLossP1ps,
else if
(StopTrailAtBE&&hAsk-hMaxLossPips> = BEh) SLh = BEh,
else if (SLh> =
BEh&& !StopTrailAtBE)
{ if
(!ReduceTrailStop) SLh = MathMax (SLh,hAsk-hMaxLossPips) ,
else SLh =
MathMax (SLh,hAsk-MathMax (StopLevel,hMaxLossPips* (1- (hAsk-
hMaxLossPips-BEh) / (hMaxLossPips*2)))) ;
}
}
if (h和 d< = SLh) y =
ExitTrades (H,DarkViolet," Hedge Stop Loss") ;
}
else if (ChS>O)
{ if (hFixedSL)
{ if (SLh = = 0) SLh
= hBid+hMaxLossPtps,
}

主程式各類模紐介紹
else
{ if (SLh == 011 (SLh>
BEh&&SLh>hBid+hMaxLossPips)) SLh = h和d+hMaxLossPips;
else if (StopTrai!AtBE
&&hBid+hMaxLossP」ps< = BEh) SLh = BEh,
else if (SLh< =
BEh&&! StopTrai!AtBE)
{ if
(!ReduceTrailStop) SLh = MathMin (SLh,hBid+hMaxLossPips) ,
else SLh =
MathMin (SLh,h和 d+MathMax (StopLevel,hMaxLossPips* (1- (BEh-
h和 d-hMaxLossPips) / (hMaxLossPips*2)))) ;

}
}
if (hAsk> = SLh) y =
ExitTrades (H,DarkViolet," Hedge Stop Loss") ;
}
}
if (y = = O&&hTakeProfit>O)

_
239
1f (ChB >O&&Bid>OPhO+hTakeProfit) y
= ExitTrades (T,DarkViolet," Hedge Take Profit reached" ,ThO) ;
if (ChS>O&&Ask<OPhO-hTakeProfit ) y
= ExitTrades (T,DarkViolet," Hedge Take Profit reached" ,ThO) ;
}
if (y>O)
{ PhC = FindClosedPL (H) ,
hActive = false,
return,

II+-----------------------------------------------------------------+
Ill Find Hedge Profit
II+------------------- 十

double FindClosedPL (int Type)


{ double ClosedProfit,
if (Type== B&&UseC!oseO!dest) CbC = 0,
if (OTbF>O)
{ for (y = OrdersHistoryTotal () - I ;y> = O;y--)
{ if (!OrderSelect (y,SELECT_BY_POS,MODE_
HISTORY)) continue;
if (OrderOpenTime () <OTbF) continue,
if (Type = = B&&OrderMagicNumber () = =
Magic&&OrderType () < = OP_SELL)
{ ClosedProfit+ = OrderProfit ()
+OrderSwap () +OrderCommission () ;
CbC++;

1f (Type = = H&&OrderMagicNumber ()
= = hMagic) ClosedProfit+ = OrderProfit () +OrderSwap ()
+OrderComm1ss10n () ;

- return (ClosedProfit) ,

//+------------ -------------------------+
//I Check C orrelat1on I
//+-----------------------------------------------------------------+
double CheckCorr ()
{ double BaseDiff,HedgeDiff,BasePow,HedgePow,Mult,
for (y = CorrPeriod-1 ;y> = O;y--)
{ BaseDiff= iClose (Symbol () ,1440,y) -iMA (Symbol
() ,1440,CorrPeriod,O,MODE_SMA,PRJCE_CLOSE,y) ;
HedgeDiff = iClose (Hedge Symbol, 1440,y) -iMA (HedgeS
ymbol, 1440,CorrPeriod,O,MODE_ SMA,PRJCE_ CLOSE,y) ;
Mult+ = BaseDiff*HedgeDiff;
BasePow+ = MathPow (BaseDiff,2) ,
HedgePow+ = MathPow (HedgeDiff,2) ,
}
if (BasePow*HedgePow>O) return (Mult/MathSqrt
(BasePow*HedgePow)) ;
}

損益計算模組

主程式各類模組介紹
前面有提到線圖的「停利點位 Take Profit 」及「不賺不賠點位
Break Even 」資訊收集程式的部分,而這個模組就是真正在市場波動
時即時計算利潤以及即時的調整停利點位。調整停利點位或不賺不

賠點位是因為只要程式多下一個層級,整個出場點就會不同,在上

一 章節裡有提到,馬丁格爾策略使用的是整組的移動停利模式,所

` 以程式必須即時不斷的做點位的調整,同時,若對沖單機制有被啟

動的話,對沖單的停利點也必須即時計算出點位。

II+-----------------------------------------------------------------+
Ill Calculate Take Profit 丨

II+-----------------------------------------------------------------+
static double BCaL,BEbL,
if (CbT>O&& (TPb = = OIICbT+ChT! = CaLIIBEbL! = BEbllBCa1
= BCaLIIFirstRun))
`
{ string sCalcTP =" Set New TP : ,
double NewTP,BasePips,

_
241
CaL = CbT+ChT;
BCaL = BCa,
BEbL = BEb,
BasePips = ND ( Lot*LotMult*GridTP* ( CbT+CbC ) I
( LbB-LbS ) ,Digits ) ;
if ( CbB>O)
{ if ( ForceTPPips>O)
{ NewTP = BEb+ForceTPP1ps,
sCalcTP = sCalcTP+" +Force TP "

else if ( CbC>O&&CloseTPPips>O)
{ NewTP = BEb+CloseTPP1ps,
sCalcTP = sCalcTP+" +Close TP "

else if ( BEb+BasePips>OPbL+tp2 )
{ NewTP = BEb+BasePips,
sCalcTP = sCalcTP+" +Base TP : "

else
NewTP = OPbL+tp2 ,
sCalcTP = sCalcTP+" +Grid TP :

if ( MinTPPips>O)
{ N ewTP = MathMax
( NewTP,BEb+MinTPPips ) ;
sCalcTP = sCalcTP+" >Minimum TP: "

NewTP+ = MoveTP*Moves,
if ( BreakEvenTrade>O&&CbT+CbC> =
BreakEvenTrade )
NewTP = BEb+BEPlusP1ps,
sCalcTP = sCalcTP+" >BreakEven

1f ( BCa<O)
{ NewTP- = ND ( BCa/P」p Val2/ ( LbB-
LbS ) , D 」gits ) ,
sCalcTP = sCalcTP+" +BC:
}
sCalcTP = (sCalcTP+" Buy : TakeProfit : ``)
,
}
else if (CbS>O)
{ if (ForceTPPips>O)
{ NewTP = BEb-ForceTPP1ps,
sCalcTP = sCalcTP+" -Force TP ``
,
}
else if (CbC>O&&CloseTPPips>O)
{ NewTP = BEb-CloseTPP1ps,
sCalcTP = sCalcTP+" -Close TP ``
,
}
else if (BEb+BasePips<OPbL-tp2)
{ NewTP = BEb+BasePips,
sCalcTP = sCalcTP+" -Base TP :
}e{

主程式各類模組介紹
l
se

NewTP = OPbL-tp2,
"
sCalcTP = sCalcTP+" -Grid TP: ,
}
if (MinTPPips>O)
{ NewTP = MathMin (NewTP,BEb-
MinTPPips) ,
`
sCalcTP = sCalcTP+" >Minimum TP : ,
}
NewTP- = MoveTP*Moves,
if (BreakEvenTrade>O&&CbT+CbC> =
BreakEvenTrade)
NewTP = BEb-BEPlusP1ps,
sCalcTP = sCalcTP+" >BreakEven ``
,
}
if (BCa<O)
{ NewTP- = ND (BCa/PipVal2/ (LbB-
LbS) ,Digits) ,
`
sCalcTP = sCalcTP+" -BC: ,

_
243
sCalcTP = ( sCalcTP+" Sell : TakeProfit : ") ,

1f ( Debug ) Print ( sCalcTP+DTS ( NewTP,Digits )) ,


if ( TPb! = NewTP )
TPb = NewTP,
TargetPips = ND ( MathAbs ( TPb-BEb ) ,Digits );
return,

ProfitPips = TargetPips/P1p ,
ProfitPot = ND ( TargetPips*PipVal2*MathAbs ( LbB-LbS ) ,2 ) ,
if ( CbB>O) PbPips = ND (( 和 d-BEb ) /Pip, 1) ,
if ( CbS>O) PbPips = ND (( BEb-Ask ) /Pip,l ) ,
II+-----------------------------------------------------------------+
//I Maximize Profit with Moving TP and setting Trailing Profit Stop I
II+ ------------------------------------+
if ( MaximizeProfit )
if ( CbT = = 0 )
{ SLbL = 0,
Moves = 0,
SLb = 0,

1f ( CbT>O)
{ if ( PbPips<O&&SLb>O) SLb = 0,
if ( SLb>O&&PbPips< = SLb )
{ ExitTrades ( A,displayColorProfit," Profit
Trailing Stop Reached ( "+DTS ( ProfitSet*l00,2 ) +" %) " ) ;
return,

if ( ProfitPips>O)
{ double TPbMP = ND
( ProfitPips*ProfitSet,Digits ) ;
if (( PbPips+PhPips )
>ProfitPips*ProfitSet ) SLb = ND ( ProfitPips*ProfitSet,Digits ) ,
}
1f ( SLb>O&&SLb>SLbL&&MoveTP>O&&TotalMo
ves>Moves )
TPb = 0,
Moves++,
if ( Debug ) Print ( `` MoveTP" ) ,
SLbL = SLb,
if ( PlaySounds ) PlaySound ( AlertSound ) ,
return,

}
if ( CbT>O&& ( PbPips+PhPips ) > = ProfitPips&& ( ProfitPips>OII
( UseEarlyExit&&EEpc<O) ) )
{ ExitTrades ( A,displayColorProfit," Profit Target Reached" ) ,
return ,
}
I!+-------------------一一一一一一一一一一一-------------- 十

//I Ad」 ust BEb/TakeProfit if Hedge is active I

主程式各類模 組介 紹
II+-----------------------------------------------------------------+
double nLots = LbB-LbS+LhB-LhS ,
double hAsk = Marketlnfo ( HedgeSymbol,MODE_ASK ) ,
double hBid = Marketlnfo ( HedgeSymbol,MODE_BID ) ,
if ( hActive>O)
{ double TPa,PhP1ps,
if ( nLots! = O&&hThisChart )
{ BEa = ND ( ( ( BEb*LbT-BEh*LhT ) I ( LbT-
LhT)) ,Digits ) ;
1f ( nLots>O) TPa = ND ( BEa+ TargetPips,Digits ) ,
else TPa = ND ( BEa-TargetPips,Digits ) ,
}
if ( ChB>O) PhP 」ps = ND (( hBid-BEh ) /hPip, I ) ,
if ( ChS>O) PhPips = ND (( BEh-hAsk ) /hPip,1 ),
}
II+-----------------------------------------------------------------+
//I Hedge/Basket/ClosedTrades Profit Management
II+-------------------------------------------- 十

_
245
double Pa = Pb,
Pac = PbC+PhC,
if (hActive&&ChT = = 0)
{ PhC = FindClosedPL (H) ,
hActive = false,
return,

if (LbT>O)
{ if (PbC>OII (PbC<O&&RecoupClosedLoss))
Pa+= PbC,
BEb- = ND (PbC/PipVal2/ (LbB-LbS) ,Digits) ,

1f (PhC>OII (PhC<O&&RecoupClosedLoss ) )
{ Pa+= PhC
BEb- = ND (PhC/Pip Val2/ (LbB-LbS) , Digits) ,

1f (Ph>OII (Ph<O&&RecoupClosedLoss)) Pa+ = Ph,

線圖資訊顯示模組

這個模組是線圖的資訊顯示模組,這個部分的程式即使不使用,

完全不會影響程式績效。這個程式模組的目的是讓投資者可以透過

線圖畫面清楚看到目前該線圖的下單情況以及損益狀況。同時,也
顯示了設計團隊的 Logo 、市場趨勢方向、指標方向等等圖像。這個
部分的程式只是錦上添花功能,若投資者不想看到這些訊息的顯示,

只要將外部參數 displayOverlay 設為 false 即可。

II+-----------------------------------------------------------------+
Ill External Script Code
II+ --------------------------------+
if ((Testing&& Visual) ll!Testing)
{ if (displayOverlay)
color Colour,
mt dDigits,
Ob」 SetTxt ("B3VTime" ,TimeToStr (TimeCurrent
() ,TIME_SECONDS)) ;
DrawLabel ("B3VSTAm" ,lnitialAccountMultiPor
tion, 167,2,displayColorLoss) ;
if (UseHolidayShutdown)
{ Ob」 SetTxt ("B3VHolF" ,TimeToStr
(Ho!First,TIME_DATE)) ;
Ob」 SetTxt ("B3VHo!T" ,TimeToStr
(HolLast,TIME DATE)) ,
}
DrawLabel ("B3VPBai" ,PortionBalance,167) ,
if (DrawDownPC>0.4) Colour = displayColorLoss,
else 面 (DrawDownPC>0.3) Colour= Orange,
else 面 (DrawDownPC>0.2) Colour = Yellow,
else if (DrawDownPC>O. l) Colour =
displayColorProfit;
else Colour= displayColor,

主程式各類模組介紹
DrawLabel ("B3VDrDn" ,DrawDownPC*l00,315
,2,Colour) ,
if (UseHedge&&HedgeTypeDD) Ob」 SetTxt
("B3VhDDm" ,DTS (hDDStart* 100,2)) ;
else if (UseHedge&&!HedgeTypeDD)
{ Draw Label
("B3VhLvi" ,CbT+CbC,318,0) ;
Ob」 SetTxt ("B3VhLvT" ,DTS
(hLvlStart,O)) ,

Ob」 SetTxt ("B3VSLot" ,DTS (Lot*LotMult,2)) ,


if (ProfitPot> = 0) DrawLabel
("B3VPPot" ,ProfitPot, 190) ;
else
{ Ob」 SetTxt ("B3VPPot" ,DTS (ProfitPot
,2) ,0,displayColorLoss) ;
dDigits = Digit[ArrayBsearch (Digit,-
ProfitPot,WHOLE_ARRAY,O,MODE_ASCEND) ,l];
Ob」 Set ("B3VPPot" , l 86-dDigits*7) ,

_
247
1f ( UseEarlyExit&&EEpc< l )
{ if ( Ob」 ectFind ( `` B3SEEPr" ) = = -1 )
CreateLabel ( "B3SEEPr" ," / ' ,0,0,220,12 ) ;
if ( Ob」 ectFind ( "B3VEEPr" ) = = -1 )
CreateLabel ( "B3VEEPr" ," " ,0,0,229, 12 ) ;
Ob」 SetTxt ( "B3VEEPr" ,DTS
( ProfitPips*PipValue*MathAbs ( LbB-LbS ) ,2 )) ;
}
else
Ob」 Del (
..B3SEEPr" )
Ob」 Del ( `` B3VEEPr" )

1f ( SLb>O)
{ if ( CbB>O) Draw Label
( "B3VPrSL" ,BEb+SLb*Pip,190 ) ;
else if ( CbS>O) Draw Label
( "B3VPrSL" ,BEb-SLb*Pip, 190 ) ;
}
else Draw Label ( "B3VPrSL" ,0, 190 ) ,
if ( Pb>= 0 )
{ DrawLabel ( "B3VPnPL" ,Pb,190,2,displ
ayColorProfit ) ,
Ob」 SetTxt ( "B3VPPip" ,DTS ( PbPips, 1
) ,O,displayColorProfit ) ,
Ob」 Set ( "B3VPPip" ,229 ) ,

else
{ Ob」 SetTxt ( "B3VPnPL" ,DTS
( Pb,2 ) ,O,displayColorLoss ) ;
dD珺its = Digit[ ArrayBsearch ( D1g1t,-
Pb,WHOLE_ARRAY,O,MODE_ASCEND ) , l];
Ob」 Set ( "B3 VPnPL" , l 86-dDigits*7 ) ,
Ob」 SetTxt ( "B3VPPip" ,DTS
( PbPips, 1) ,O,displayColorLoss ) ;
Ob」 Set ( "B3VPPip" ,225 ) ,

1f ( PbMax> = 0 ) DrawLabel ( "B3VPLMx" ,Pb


Max, 190,2,displayColorProfit ) ;
else
{ Ob」 SetTxt ("B3VPLMx" ,DTS
(PbMax,2) ,O,d」splayColorLoss) ;
dDigits = D甩it[ ArrayBsearch (Digit,-
PbMax,WHOLE_ARRAY,O,MODE_ASCEND) ,I];
Ob」 Set ("B3 VPLMx" , 186-dD」gits*7) ,

}
if (PbMin<O) Ob」 Set ("B3VPLMn" ,225) ,
else Ob」 Set ("B3VPLMn" ,229) ,
Ob」 SetTxt ("B3VPLMn" ,DTS
(PbMin,2) ,O,displayColorLoss) ;
if (CbT+CbC<BreakEvenTrade) Colour =
displayColor;
else if (CbT+CbC<MaxTrades) Colour = Orange,
else Colour = d」 splayColorLoss,

if (CbB>O)
{ Ob」 SetTxt ( `B3LType" "
, Buy : " ) ;
DrawLabel

主程式各類模組介紹
("B3VOpen" ,CbB,207,0,Colour) ,
}
else if (CbS>O)
{ Ob」 SetTxt ( "B3LType" ," Sell : " ) ,
DrawLabel
"B3VOpen" ,CbS,207,0,Colour) ;
}
else
Ob」 SetTxt ("B3LType" ," " ) ,
Ob」 SetTxt ("B3VOpen" ,DTS
(0,0) ,O,Colour) ,
Ob」 Set ( "B3V0pen" ,207) ,
}
Ob」 SetTxt ("B3 VLots" ,DTS (LbT,2)) ,
Ob」 SetTxt ("B3VMove" ,DTS (Moves,O)) ,
Draw Label ("B3VMxDD" ,MaxDD,107) ,
Draw Label ("B3VDDPC" ,MaxDDPer,229) ,
if (Trend = = 0)
{ Ob」 SetTxt ( `B3LTmd " "
, Trend 1s

_
249
UP" , I O,displayColorProfit) ,
if (Ob」 ectFind ("B3ATrnd") = = -1)
CreateLabel ("B3ATrnd" ," " ,0,0,160,20,displayColorProfit," Wingdin
gs") ;
Ob」 ectSetText ("B3ATrnd" ," ?,displayF
ontSize+9," Wingdings" ,displayColorProfit) ;
Ob」 Set ("B3ATrnd" ,160) ,
Ob」 ectSet ("B3ATrnd" ,OBJPROP_ YDI
STANCE,displayYcord+displaySpacing*20) ;
}
else if (Trend = = 1)
{ Ob」 SetTxt ("B3LTrnd" ," Trend 1s
DOWN" , 1O,displayColorLoss) ;
if (Ob」 ectFind ("B3ATrnd") = = -1)
CreateLabel ("B3ATrnd" ," " ,0,0,210,20,displayColorLoss," WingDin
gs") ;
Ob」 ectSetText ("B3ATrnd" ," ?,displayF
ontSize+9," Wingdings" ,displayColorLoss) ;
Ob」 Set ("B3ATrnd" ,210) ,
Ob」 ectSet ("B3ATrnd" ,OBJPROP_ YDI
STANCE,displayYcord+displaySpacing*20+5) ;
}
else if (Trend== 2)
{ Ob」 SetTxt ("B3LTrnd" ," Trend 1s
Ranging" , 1O,Orange) ;
Ob」 Del ( `B3ATrnd")

1f (PaC! = 0)
{ if (Ob」 ectFind ("B3LCIPL") = = -I)
CreateLabel ("B3LCIPL" ," Closed P/L" ,0,0,312, 11) ;
if (Ob」 ectFind ("B3VCIPL") = = - I)
CreateLabel ("B3VCIPL" ," " ,0,0,327,12) ;
if (PaC> = 0) DrawLabel ("B3VCIPL
" ,PaC,327,2,displayColorProfit) ;

-
else
{ Ob」 SetTxt ("B3VCIPL" ,DTS
(PaC,2) ,O,displayColorLoss) ;
dDigits = Digit[ArrayBsearch
( Digit,-PaC,WHOLE_A邸AY,O ,MODE_ASCEND ) , !] ,
Ob」 Set ( "B3VCIPL" ,323-
dDigits*7 ) ,

}
se
e{
Ob」 Del ( "B3LCIPL" ) ,
Ob」 Del ( "B3VCIPL" ) ,
}
if ( hActive )
{ if ( Ob」 ectFind ( "B3LHdge" ) = = -1 )
CreateLabel ( "B3LHdge" ," Hedge" ,0,0,323,13 ) ;
if ( Ob」 ectFind ("B3VhPro" ) = = -1 )
CreateLabel ( "B3VbPro" ," " ,0,0,312,14 ) ;
if ( Pb> = 0 ) Draw Label ( "B3VhPro" ,
Ph,312,2,displayColorProfit ) ,
else
{ ObjSetTxt ( "B3VhPro" ,DTS

主程式各類模組介 紹
( Ph,2 ) ,O,displayColorLoss ) ;
dDigits = Digit[ArrayBsearch
( Digit,-Ph,WHOLE_ARRAY,O,MODE_ASCEND ) ,1] ;
Ob」 Set ("B3VhPro" ,308-
dDigits*7 ) ,
}
if ( Ob」 ectFind ( "B3VhPMx" ) = = -1 )
CreateLabel ( "B3VhPMx" ," " ,0,0,312, 15 ) ;
if ( PhMax> = 0 ) Draw Label ( "B3VhP
Mx" ,PhMax,312,2,displayColorProfit ) ;
else
{ Ob」 SetTxt ( "B3VhPMx" ,DTS
( PhMax,2 ) ,O,displayColorLoss ) ,
dDigits = Digit[ArrayBsearch
( Digit,-PhMax,WHOLE_ARRAY,O,MODE_ASCEND ) ,1] ;
Ob」 Set ( "B3VhPMx" ,308-
dDigits*7 ) ,
}
if ( Ob」 ectFind ( "B3ShPro" ) = = -1 )
CreateLabel ( "B3ShPro" ," /" ,0,0,342, 15 ) ;

_
251
1f ( Ob」 ectFind ( "B3VhPMn" ) = = -1 )
CreateLabel ( "B3VhPMn" ," " ,0,0,351 , 15,displayColorLoss ) ;
1f ( PhMin<O) Ob」 Set
( "B3VhPMn" ,347 ) ,
else Ob」 Set ( "B3VhPMn" ,351 ) ,
Ob」 SetTxt ( "B3VhPMn" ,DTS
( PhMin,2 ) ,0,displayColorLoss ) ;
if ( Ob」 ectFind ( "B3LhTyp" ) = = -1 )
CreateLabel ( "B3LhTyp" ," " ,0,0,292,16 ) ;
if ( Ob」 ectFind ( "B3Vh0pn" ) = = -1 )
CreateLabel ( "B3Vh0pn" ," " ,0,0,329,16 ) ;
if ( ChB>O)
{ Ob」 SetTxt
( "B3LhTyp" ," Buy : " ) ;
DrawLabel
( "B3Vh0pn" ,ChB,329,0 ) ,
}
else if ( ChS>O)
{ Ob」 SetTxt
` B3LhTyp " ," Sell : " ) ;
DrawLabel
"B3Vh0pn" ,ChS,329,0 ) ,
}
else
嗚 SetTxt ( "B3LhTyp" ," " ) ,
Ob」 SetTxt ( !33Vh0pn" ,DTS
( 0,0 )) ,
Ob」 Set ( "B3Vh0pn" ,329 ) ,
}
if ( Ob」 ectFind ( "B3Sh0pn" ) = = -1 )
CreateLabel ( "B3Sh0pn" ," /" ,0,0,342,16 ) ;
if ( Ob」 ectFind ( "B3VhLot" ) = = -1 )
CreateLabel ( "B3YhLot" ," " ,0,0,351 ,16 ) ;
Ob」 SetTxt ( "B3VhLot" ,DTS ( LhT,2 )) ,

- else
Ob」Del ( "B3LHdge" ) ,
Ob」Del ( "B3VhPro" ) ;
Ob」Del ( "B3VhPMx" ) ,
Ob」 Del ( "B3ShPro" ) ,
呣 Del ( "B3VhPMn" ) ,
Ob」 Del ( "B3LhTyp" ) ,
Ob」 Del ( "B3Vh0pn" ) ,
Ob」 Del ( "B3Sh0pn" ) ,
Ob」Del ( "B3VhLot" ) ,
}
if ( display Lines )
{ if ( BEb>O)
{ if ( Ob」 ectFind ( "B3LBELn"
= = -1 ) CreateLine ( "B3LBELn" ,DodgerBlue,1 ,0 ) ;
ObjectMove
"B3LBELn" ,0,Time[l] ,BEb ) ,
}
else Ob」Del ( "B3LBELn" ),
if ( TPa>O)
{ if ( Ob」 ectFind ( "B3LTPLn" )

主程式各類模組介紹
= = -1 ) CreateLme ( "B3LTPLn" ,Gold ,1,0 ) ;
Ob」 ectMove
"B3LTPLn" ,O,Time[l],TPa ) ,
}
else if ( TPb>O&&nLots! = 0 )
{ if ( Ob」 ectFind ( "B3LTPLn" )
== -1 ) CreateLme ( "B3LTPLn" ,Gold, 1,0 ) ;
Ob」 ectMove

"B3LTPLn" ,O,Time[l],TPb ) ,
}
else Ob」 Del ( "B3LTPLn" ) ,
if ( hActive&&BEa>O)
{ if ( Ob」 ectFind ( "B3LNBEL" )
= = -1 ) CreateLme ( "B3LNBEL" ,Crimson, 1,0 ) ;
Ob」 ectMove
( "B3LNBEL" ,O,Time[l] ,BEa ) ,
}
else Ob」 Del ( "B3LNBEL" ) ,
if ( SLb>OIITPbMP>O)

_
253
double
TSLine, TSBEPoint,TSbSL,
1f ( Ob」 ectFind ( "B3LTSLn" )
= = -1 ) CreateLine ( "B3LTSLn" ,Gold,1,3 ) ;
if ( BEa>O) TSBEPoint = BEa,
else TSBEPoint = BEb,
if ( SLb>O) TSbSL = SLb,
else TSbSL = TPbMP ,
if ( nLots>O) TSLine = ND
( TSBEPoint+ TSbSL *Pip,Digits ) ,
else if ( nLots<O) TSLine = ND
( TSBEPoint-TSbSL *Pip,Digits ) ,
Ob」 ectMove
( "B3LTSLn" ,O,Time[l],TSLine ) ,
}
else Ob」 Del ( "B3LTSLn" ) ,
if ( hThisChart&&BEh>O)
{ if ( Ob」 ectFind ( "B3LhBEL" )
= = -1 ) CreateLine ( "B3LhBEL" ,SlateBlue, 1,0 ) ;
ObjectMove
"B3LhBEL" ,O,Time[l] ,BEh ) ,
}
else Ob」 Del ( "B3LhBEL" ) ,
if ( hThisChart&&SLh>O)
{ if ( Ob」 ectFind ( "B3LhSLL" )
= = -1 ) CreateLine ( "B3LhSLL" ,SlateBlue,1,3 ) ;
ObjectMove
"B3LhSLL" ,O,Time[l],SLh ) ,
}
else Ob」 Del ( "B3LhSLL" ) ,

else
Ob」Del ( "B3LBELn" ) ,

-
Ob」 Del ( "B3LTPLn" ) ,
Ob」Del ( "B3LTSLn" ) ;
Ob」 Del ( "B3LhBEL" ) ,
Ob」Del ( "B3LhSLL" ) ,
ObjDel ( "B3LNBEL" ),
}
if ( CCIEntry&&displayCCI )
{ if ( cci_Ol >O&&cci_ ll >O) Ob」 ectSetText
( "B3VCm05" ,"啁splayFontSize+6," Wingdings" ,displayColorProfit ) ,
else if ( cci_Ol <O&&cci 11 <O)
Ob」 ectSetText ( "B3VCm05" ,"啁splayFontSize+6,"- Wingdings" ,d1sp
layColorLoss ) ;
else Ob」 ectSetText ( "B3VCm05" ," ?,d1
splayFontSize+6," Wingdings" ,Orange ) ;
if ( cci_02>0&&cci_ l2>0 ) Ob」 ectSetText
( "B3VCm!5" ," ?,displayFontSize+6," Wingdings" ,displayColorProfit ),
else if ( cci_ 02<0&&cci 12<0 )
Ob」 ectSetText ( "B3VCml5" ," ?, displayFontS」ze+6了 Wingdings" ,d1sp
layColorLoss ) ;
else Ob」 ectSetText ( "B3VCml5" ," ? , d 」
splayFontSize+6," Wingdings" ,Orange ) ;
if ( cc」 03 >0&&cci 13>0 ) Ob」 ectSetText
,;
( "B3VCm30" ,"噚splayFontSize+6 , Wingdings ,d」splayColorProfit ),

主程式各類模組 介 紹
else if ( cci_03 <0&&cci 13<0 )
Ob」 ectSetText ( "B3VCm30" ," ?,displayFontSize+6, Wingdings" ,d1sp
layColorLoss ) ;
else Ob」 ectSetText ( "B3VCm30" ," ?,d1
splayFontSize+6," Wingdings" ,Orange ) ;
if ( cci 04>0&&cci 14>0 ) Ob」 ectSetText
-;;
( "B3VCm60" ," ?, displayFontSize+6了'Wingdings ,displayColorProfit ),
else if ( cci_04<0&&cci 14<0 )
Ob」 ectSetText ( "B3VCm60" ," ? , displayFontSize+6了 Wingdings" ,d1sp
layColorLoss ) ;
else Ob」 ectSetText ( "B3VCm60" ," ?,d1
splayFontSize+6," Wingdings" ,Orange ) ;
}
if ( Debug )
{ strmg dSpace,
for ( y = O;y< = 175 ;y++) dSpace =
dSpace+"
string dMess =" " Ticket
\n\n" +dSpace+
Magic Type Lots OpenPrice Costs Profit Potential" ;
for ( y = O;y<OrdersTotal () ;y++)

_
{ if ( !OrderSelect ( y,SELECT

255
BY_POS,MODE_TRADES) ) continue,
if ( OrderMagicNumber () ' =
Magic&&OrderMagicNumber () ! = hMagic ) continue;
dMess = ( dMess+" \
n" +dSpace+" "+OrderTicket () +" "+DTS ( OrderMagicNumber () ,0 )
+" " +OrderType ()) ;
dMess = ( dMess+" "+DTS
( OrderLots () ,LotDecimal ) +" "+DTS ( OrderOpenPrice () ,Digits )) ,
dMess = ( dMess+" "+DTS
( OrderSwap () +OrderCommission () ,2 ) ) ;
dMess = ( dMess+" "+DTS
( OrderProfit () +OrderSwap () +OrderCommission () ,2 )) ;
if ( OrderMagicNumber () ' =
Magic) continue,
1f ( OrderType () = = OP_
BUY) dMess = ( dMess+" "+DTS ( OrderLots () * ( TPb-
OrderOpenPrice ()) *PipVal2+0rderSwap () +OrderCommission () ,2 )) ,
if ( OrderType () = = OP_
SELL ) dMess = ( dMess+" "+DTS ( OrderLots () * ( OrderOpenPrice
() -TPb ) *Pip Val2+0rderSwap () +OrderCommission () ,2 )) ;
}
1f ( !dLabels )
dLabels = true ,
CreateLabel ( "B3LPipV" ," Pip
Value " ,0,2,0,0 ) ,
CreateLabel
( "B3VPip V" ," " ,0,2, 100,0 ) ,
CreateLabel
( "B3LDig 「 , " Digits Value" ,0,2,0, 1 ) ;
CreateLabel
..
" ,0,2, 100,1 ) ,
( "B3VDig1·" ,
Ob」 SetTxt ( "B3VD 面 ,DTS
(Digits,0 )) ,
CreateLabel ( "B3LPoin" ," Point
Value " ,0,2,0,2 ) ,
CreateLabel

-
( "B3VPoin" ," " ,0,2, I 00,2 ) ,
Ob」 SetTxt ( "B3VPoin" ,DTS
( Point,Digits )) ,
CreateLabel
( "B3LSprd" ," Spread Value" ,0,2,0,3 ) ;
CreateLabel
("B3VSprd.. ,
" ",0,2, I 00,3) ,
CreateLabel ("B3LBid" ," B 」d
Value " ,0,2,0,4) ,
CreateLabel
`` B3V和 d ""
, " ,0,2, I 00,4) ,
CreateLabel ("B3LAsk" ," Ask
Value " ,0,2,0,5) ,
CreateLabel
` B3VAsk" ,
" ",0,2,100,5) ,
CreateLabel ("B3LLotP" ," Lot
Step" ,0,2,200,0) ;

`` B3VLotP
. ," ..,0,2,300,0) ,
,
CreateLabel

Ob」 SetTxt ("B3VLotP" ,DTS


(Marketlnfo (Symbol () ,MODE_LOTS TEP) ,LotDecimal)) ;
CreateLabel ("B3LLotX" ," Lot
Max" ,0,2,200,1) ,
CreateLabel
`B3VLotX" , " ",0,2,300, I) ,

主程式各類模組介紹
Ob」 SetTxt ("B3VLotX" ,DTS
(Marketlnfo (Symbol () ,MODE_MAXLOT) ,0)) ;
CreateLabel ("B3LLotN" ," Lot
Min" ,0,2,200,2) ,
CreateLabel
" B3VLotN , "",0,2,300,2) ,
Ob」 SetTxt ("B3VLotN" ,DTS
(Marketlnfo (Symbol () ,MODE_MINLOT) ,LotDecimal)) ;
CreateLabel ("B3LLotD" ," Lot
Decimal ,0,2,200,3) ,
CreateLabel
("B3VLotD " , " ",0,2,300,3) ,
Ob」 SetTxt ( "B3VLotD" ,DTS
(LotDecimal,O)) ,
CreateLabel
("83LAccT" ," Account Type" ,0,2,200,4) ;
CreateLabel
"83VAccT" ," " ,0,2,300,4) ,
ObjSetTxt ( "B3VAccT" ,DTS
(AccountType,O)) ,

_
CreateLabel

257
("B3LPnts" ," Pip" ,0,2,200,5) ,
CreateLabel
("B3VPnts
...., ..,0,2,300,5) ,
Ob」 SetTxt ("B3VPnts" ,DTS
(Pip,Digits)) ;
CreateLabel ("B3LTicV" ," Tick
Value" ,0,2,400,0) ;
CreateLabel
("B3VTicV" ," " ,0,2,500,0) ,
CreateLabel ("B3LTicS" ," Tick
Size" ,0,2,400, 1) ,
CreateLabel
("B3VTicS " ," " ,0,2,500, 1) ,
Ob」 SetTxt ("B3VTicS" ,DTS
(Marketlnfo (Symbol () ,MODE_TICKSIZE) ,Digits)) ;
CreateLabel ("B3LLev" ," Le
verage" ,0,2,400,2) ,
CreateLabel
" tt tt
("B3VLev , ,0,2,500,2) ,
Ob」 SetTxt ("B3VLev" ,DTS
(AccountLeverage () ,0) +" " ) ;
:1
CreateLabel ("B3LSGTF" ," S
martGrid" ,0,2,400,3) ,
1f (U seSmartGrid) CreateLabel
" B3VSGTF " , True" ,0,2,500,3) ,
else CreateLabel
"B3VSGTF" ," False" ,0,2,500,3) ;
CreateLabel
"B3LCOTF" ," Close Oldest" ,0,2,400,4) ;
if (UseCloseO!dest) CreateLabel
"B3VCOTF" ," True" ,0,2,500,4) ;
else CreateLabel
("B3VCOTF" ," False" ,0,2,500,4) ;
Create Label
("B3LUHTF" ," Hedge" ,0,2,400,5) ;
if (U seHedge&&HedgeTypeDD)

-
CreateLabel ("B3VUHTF" ," Draw Down" ,0,2,500,5) ;
else if
(UseHedge&&!HedgeTypeDD) CreateLabel
("B3VUHTF" ," Level" ,0,2,500,5) ;
else CreateLabel
("B3VUHTF", " " ,0,2,500,5) ;
False
}
Ob」 SetTxt ( "B3VPipV" ,DTS
(PipValue,2)) ,
Ob」 SetTxt ( "B3VSprd" ,DTS (Ask-
Bid,Digits)) ,
ObjSetTxt ( "B3VBid" ,DTS
(和d,Digits)) ,
Ob」 SetTxt ( "B3VAsk" ,DTS
(Ask,Digits)) ,
Ob」 SetTxt ("B3VTicV" ,DTS (Marketlnfo
(Symbol () ,MODE~TICKVALUE) ,Digits)) ;
}

開倉下單以及關倉出場模組

熟悉 MQL4 程式的開發者應該知道在 MT4 系統裡的 MQL4 函

主程式各類模組介紹
式本身就提供了下單函式 OrderSend ()、修改訂單 OrderModify ()、

移除訂單 OrderDelete ()、以及關倉函式 OrderClose ()等跟下單


有關的函式。那我們為何還需再設計這個模組呢?

主要原因是以上這些函式是 一 次性執行的指令,然而在外匯市

場裡,常常發生下單或關倉不成功的現象,原因有很多,有經紀商

因素、市場因素、網路因素等等。因為下單以及關倉這類指令牽涉

到的是白花花的銀子,所以,當下單不成功或關倉不成功都會影響

到績效。因此, Blessing 程式設計了這個模組讓下單以及關倉即使在

上述那些不穩定因素之下都還是能限單以及出場成功。

//+--- ----------------------------------+
//I Open Order Funtion I
II+ -------------------------------------+
int SendOrder (string OSymbol,int OCmd,double OLot,double

_
OPrice,double OS!ip,int OMagic,color OColor = CLR~NONE)

259
mt Ticket,
int retryTimes = 5,i = 0,
int OType = MathMod ( OCmd,2 ) ,
double OrderPrice,
if ( AccountFreeMarginCheck ( OSymbol,OType,OLot ) < = 0 ) return
( -1 ) ;
if ( Marketlnfo ( OSymbol,MODE_SPREAD ) *Point!Pip>MaxSpread )
return ( -1 ) ;
while ( i<5 )
计= I,
while (IsTradeContextBusy ()) Sleep ( 100 ) ,
if (IsStopped ()) return ( -1 ) ;
if ( OType = = 0 ) OrderPrice = ND ( Marketlnfo
( OSymbol,MODE_ASK ) +OPrice,Marketlnfo ( OSymbol,MODE_
DIGITS )) ;
else OrderPrice = ND ( Marketlnfo ( OSymbol,MODE_
BID ) +OPrice,Marketlnfo ( OSymbol,MODE_DIGITS )) ;
Ticket = OrderSend ( OSymbol,OCmd,OLot,OrderPrice,OShp
,0,0,TradeComment,OMagic,O,OColor ) ;
if ( Ticket<O)
{ Error = GetLastError () ,
if ( Error! = 0 ) Print ( "Error opening order :
"+Error+" "+ErrorDescription ( Error )
+" Symbol : "+OSymbol
+" TradeOP : "+OCmd
+" OType : "+OType
Ask: +Marketlnfo
( 0S yrnbol,MODE_ASK )
+ Bid: +Marketlnfo ( OSymbol,MODE
BID )
+" OPrice : "+DTS ( OPrice,Digits )
+" Price : "+DTS ( OrderPrice,Digits )
+" Lots : "+DTS ( OLot,2 )
),
switch ( Error )
case ERR_OFF_QUOTES:
case ERR INVALID PRICE :
Sleep ( 5000 ) ,
case ERR PRICE CHANGED :
case ERR_REQUOTE :
RefreshRates () ,
case ERR SERVER BUSY :
case ERR NO CONNECTION :
case ERR_INVALID_pRlCE:
case ERR BROKER BUSY :
case ERR TRADE CONTEXT BUSY :
i++,
break,
case 149 : //ERR TRADE HEDGE
PROHIBITED :
UseHedge = false,
if (Debug) Print ( "Hedge
trades are not allowed on this pair") ,
1 = retryTimes,
break,
default :

主程式各類模組介紹
1 = retryTimes,

}e,
se
` 1f (PlaySounds) PlaySound (AlertSound) ,
break,

}
return (Ticket) ,

//+-----------------------------------------------------------------+
//1 Modify Order Function
//+------一一一一一一一一一一-一一一一一一 ------------------+
boo! ModifyOrder (double OrderOP,double OrderSL,color Color= CLR_
NONE)
{ boo! Success = false,
int retryTimes = 5,i = 0,

_
261
while ( 」<5&&!Success )
i+ = 1,
while (lsTradeContextBusy ()) Sleep ( 100 ) ,
if ( IsStopped ()) return ( -1 ) ,
Success = OrderMod」fy ( OrderTicket
() ,OrderOP,OrderSL,0,0,Color ) ;
if ( !Success )
Error = GetLastError () ,
1f ( Error>O) Print ( " Error Mod」fying
Order: " ,OrderTicket () ," , " ,Error," : " +ErrorDescnpt1on ( Error ) ," ,
Ask:" ,Ask,
` Bid: " Bid " OrderPnce :
",OrderOP," StopLevel : ",StopLevel," , SL : ",OrderSL," , OSL :
`` ,OrderStopLoss ()) ;

else Success = true,


switch ( Error )
{ case ERR NO ERROR:
case ERR NO RESULT :
i = retryTimes;
break,
case ERR_TRADE_MODIFY_DENIED:
Sleep ( 10000 ) ,
case ERR_ OFF_ QUOTES :
case ERR_INVALID_PRICE:
Sleep ( 5000 ) ,
case ERR_pRlCE_CHANGED:
case ERR_REQUOTE :
RefreshRates () ,
case ERR_SERVER_BUSY:
case ERR NO CONNECTION :
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
case ERR TRADE TIMEOUT :

- default :
i+ = I,
break,

1 = retryTimes,
break,

}
else break,
}
return ( Success ) ,

II+------------------------------------------------ 十

Ill Exit Trade Function - Type : All Basket Hedge Ticket Pendmg
II+------------------------------------------------- +
int ExitTrades ( int Type,color Color,string Reason,int OTicket = 0 )
{ static int OTicketNo,
boo! Success,
int Tries,Closed,CloseCount,
int CloseTrades[,2],
double OPrice,

主程式各類模組 介 紹
strings,
ca = Type,
if ( Type == T )
{ if (OTicket = = 0 ) OTicket = OTicketNo,
else OTicketNo = OTicket,
}
for ( y = OrdersTotal () -1 ;y> = O;y-- )
{ if ( !OrderSelect ( y,SELECT_BY_POS,MODE_TRADES ))
continue;
1f ( Type = = B&&OrderMagicNumber () ! = Magic )
continue,
else if ( Type = = H&&OrderMagicNumber () 1 =
hMagic ) continue;
else if ( Type = = A&&OrderMagicNumber () ' =
Magic&&OrderMagicNumber () ! = hMagic ) continue;
else if ( Type = = T &&OrderTicket () ! = OTicket )
continue,
else if ( Type = = P&& ( OrderMagicNumber () ' =
MagicllOrderType () < = OP_ SELL )) continue;
ArrayResize ( CloseTrades,CloseCount+ 1 ) ,

_
263
CloseTrades[CloseCount,O] = OrderOpenTime () ,
CloseTrades[CloseCount, I] = OrderTicket () ,
CloseCount++;

1f (CloseCount>O)
{ if (!UseFIFO) ArraySort (CloseTrades,WHOLE_
ARRAY,O,MODE_DESCEND) ;
else if (CloseCount! = ArraySort (CloseTrades)) Print
("Error sorting CloseTrades Array") ;
for (y = O;y<CloseCount;y++)
{ if (!OrderSelect (CloseTrades[y,1],SELECT_BY_
TICKET)) continue;
while (IsTradeContextBusy ()) Sleep (100) ,
if (IsStopped ()) return (-1) ;
if (!OrderSelect (CloseTrades[y,l],SELECT_BY _
TICKET)) continue;
if (OrderType () >OP_SELL) Success =
OrderDelete (OrderTicket () ,Color) ;
else
{ if (OrderType () = = OP_BUY)
OP rice = ND (Marketlnfo (OrderSymbol () ,MODE_BID) ,Marketinfo
(OrderSymbol () ,MODE_DIGITS)) ;
else OPrice = ND (Marketlnfo
(OrderSymbol () ,MODE_ASK) ,Marketlnfo (OrderSymbol () ,MODE_
DIGITS)) ;
Success = OrderClose (OrderTicket
() ,OrderLots () ,OPrice,slip,Color) ;
}
1f (Success) Closed++,
else
{ Error = GetLastError () ;Print ("Order
",OrderTicket () ," failed to close. Error : " ,ErrorDescription (Error)) ,
switch (Error)
{ case ERR NO ERROR :
case ERR_NO_RESULT:

-
Success = true,
break,
case ERR_OFF _QUOTES :
case ERR INVALID PRICE :
Sleep (5000) ,
case ERR_pRICE_CHANGED:
case ERR_REQUOTE:
RefreshRates () ,
case ERR_SERVER_BUSY :
case ERR_NO_CONNECTION:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_
BUSY:
Print ("Try : "十
(Tries+ 1) +" of 5 : Order ",OrderTicket () ," failed to close
Error : " ,ErrorDescription (Error)) ;
Tries++,
break,
case ERR_TRADE_TIMEOUT:
default :
Print ("Try : `十
(Tries+ 1) +" of 5 : Order ",OrderTicket () ," failed to close. Fatal
Error : " ,ErrorDescription (Error)) ;

主程式各類模組介紹
Tries = 5,
ca= 0,
break,

}
if (Closed = = CloseCount) ca = 0,
}
else ca= 0,
if (Closed>O)
{ if (Closed! = I) s =" s" ;
. " +s+ " because
Print ("Closed "+Closed+" pos1t10n
`` ,Reason) ;

if (PlaySounds) PlaySound (AlertSound) ,


}
return (Closed) ,

_
· 265
其他特殊模組

以下的特殊功能模組都是比較獨立的小區塊。例如,「關掉早

期單」功能、「自動格距計算」功能、「留倉時間到期出場」功能丶

「緊急手動關倉」功能、「假日停止交易」功能、「斷網關倉」功能、

「電子郵件寄送訊息」功能、「 Magic Number 產生器」功能等等 。

II+-----------------------------------------------------------------+
//I Close oldest open trade after CloseTradesLevel reached
I!+---------- --------------------------------+
if (UseC!oseOldest&&CbT> = CloseTradesLevel&&CbC<MaxCloseT
rades)
{ if ((TPb>O) && ((CbB>O&&OPbO>TPb) II
(CbS>O&&OPbO<TPb)))
{ y = ExitTrades (T,DarkViolet," Close Oldest
Trade" ,TbO);
1f (y = = 1)
{ OrderSelect (TbO,SELECT BY
TICKET) ,
PbC+ = OrderProfit () +OrderSwap ()
+OrderCommission () ,
ca= 0,
CbC++,
return,

I/+-----------------------------------------------------------------+
//I ATR for Auto Grid Calculation and Grid Set Block
II+ --------------------------------+
if (AutoCal)
{ double GridTP,

-
double GridATR = iATR (NULL,0,21,0) !Pip;
if ((CbT+CbC>Set4Level) &&Set4Level>O)
{ g2 = GridATR*l2; //GS*2*2*2*1.5
tp2 = GridATR * 18; IIGS*2*2*2*1.5* 1.5
else if (( CbT +CbC>Set3Level) &&Set3Level>O)
{ g2 = GridATR*8; //GS*2*2*2
tp2 = GridATR * 12; //GS*2*2*2* 1.5

else if (( CbT+CbC>Set2Level ) &&Set2Level>O)


g2 = GridATR*4; //GS*2*2
tp2 = GridATR*8 ; //GS*2*2*2

else if (( CbT+CbC>SetlLevel ) &&SetlLevel>O)


g2 = GridATR*2; //GS*2
tp2 = GridATR*4; //GS*2*2

else
g2 = GridATR,
tp2 = GridATR *2,

主程式各類模組介紹
GridTP = GridATR *2,

else
y = MathMax ( MathMin ( CbT+CbC,MaxTrades ) -1 ,0 ) ,
g2 = GridArray[y,O],
tp2 = GridArray[y,1] ,
GridTP = GridArray[0,1] ,

g2 = ND ( g2*GAF*Pip,Digits ) ,
tp2 = ND ( tp2*GAF*Pip,Digits ) ,
GridTP = ND ( GridTP*GAF*Pip,Digits ) ;

II+-----------------------------------------
II[ Calculate Early Exit Percentage
II+-----------------------------------------------------------------+
if ( UseEarlyExit&&CbT>O)
{ double EEpc,EEopt,EEStartTime,EEPoint,BEe,TPe,
if ( EEFirstTrade ) EEopt = OTbF;
else EEopt = OTbL,
if ( DayOfWeek () <TimeDayOfWeek ( EEopt ))

_
267
EEStartTime = 2*24*3600,
EEStartTime+ = EEopt+EEStartHours*3600,
if (EEHoursPC>O&&TimeCurrent () > = EEStartTime)
EEpc = EEHoursPC* (TimeCurrent () -EEStartTime) /3600;
if (EELevelPC>O&& (CbT+CbC) > = EEStartLevel)
EEpc+ = EELevelPC* (CbT+CbC-EEStartLevel+ I) ;
EEpc = 1-EEpc,
if (!EEAllowLoss&&EEpc<O) EEpc = 0,
ProfitPips* = EEpc,
if (displayOverlay&&displayLines&& (!hActivell
(hActive&&hThisChart)) && (!Testingll (Testing&& Visual))
&&EEpc<l
&& (CbT+CbC+ChT>EECountllEETime! =
Time[O]) && (EEHoursPC>O&&EEopt+EEStartHours*3600<Time[O]) I 丨
(EELevelPC>O&&CbT+CbC> = EEStartLevel))
{ EETime = Time[O],
EECount = CbT+CbC+ChT;
if (BEa>O)
{ BEe = BEa,
TPe = TPa,

else
BEe = BEb,
TPe = TPb,

1f (Ob」 ectFind ("B3LEELn") = = -1)


{ Ob」 ectCreate ("B3LEELn" ,OBJ_
TREND,0,0,0) ,
Ob」 ectSet ("B3LEELn" ,OBJPROP_
COLOR,Yellow) ,
Ob」 ectSet ("B3LEELn" ,OBJPROP_
WIDTH,l) ,
Ob」 ectSet ("B3LEELn" ,OBJPROP_
STYLE,O) ,

- RAY,false) ,
Ob」 ectSet ("B3LEELn" ,OBJPROP_

EEPoint = ND ((TPe-BEe) *EEpc+BEe,Digits) ,


1f ( EEHoursPC>O) Ob」 ectMove
( "B3LEELn" ,0,MathFloor ( EEopt/3600+EEStartHours ) *3600,TPe ) ,
else Ob」 ectMove ( "B3LEELn" ,O,MathF!oor
( EEopt/3600 ) *3600,EEPoint ) ;
Ob」 ectMove ( "B3LEELn" ,l ,Time[l],EEPoint ) ,
if ( Ob」 ectFind ( "B3VEELn" ) = = -1 )
{ Ob」 ectCreate ( "B3VEELn" ,OBJ_
TEXT,0,0,0 ) ,
ObjectSet ( "B3VEELn" ,OBJPROP_
COLOR,Yellow ) ,
Ob」 ectSet ( "B3VEELn" ,OBJPROP _
WIDTH,l ) ,
Ob」 ectSet ( "B3VEELn" ,OBJPROP _
STYLE,O ) ,
}
ObjSetTxt ( "B3VEELn" ," "+DTS
( EEPoint,Digits ) ,-1 ,Yellow ) ;
Ob」 ectSet ( "B3VEELn" ,OBJPROP_

主程式各類模組 介 紹
PRICEl,EEPoint+2*Pip ) ;
Ob」 ectSet ( "B3VEELn" ,OBJPROP _
TIMEl,Time[l] ) ,
}
else if (( 庫splayLines ll EEpc = = 1 11 ( !EEAllowLoss&&EEpc
= = O) 11 ( EEHoursPC>O&&EEopt+EEStartHours*3600> =
Time[O] ) ) )
{ Ob」 Del ( "B3LEELn" ) ;
Ob」 Del ( "B3VEELn" ) ,

}
e se
{
EETime = 0,
EECount = 0,
Ob」 Del ( "B3LEELn" ) ,
Ob」 Del ( "B3VEELn" ) ,

}
!!+-----------------------------------------------------------------+

_
269
//I Check ca, Breakeven Trades and Emergency Close All
//+-----------------------------------------------------------------+
switch (ca)
{ case B : if (CbT = = O&&CpT = = 0) ca = O;break;
case H : if (ChT = = 0) ca = O;break,
case A : if (CbT = = O&&CpT = = O&&ChT = = 0) ca
= O;break,
case P : if (CpT = = 0) ca = O;break,
case T : break,
default : break,

1f (ca>O)
{ ExitTrades (ca,displayColorLoss," Close All ("+DTS (ca,O)
+") " ) .
return,

tf (CbT = = O&&ChT>O)
{ ExitTrades (H,displayColorLoss," Basket Closed") ,
return,

1f (EmergencyC!oseAII)
{ ExitTrades (A,displayColorLoss," Emergency Close All
"
Trades) ;
EmergencyCloseAII = false,
return,

I!+--- ---------------------------------------+
//f Check Holiday Shutdown
//+------ ----------------------------+
if (UseHolidayShutdown)
{ datetime HolStart HolEnd
if (HolShutDown>O&&TimeCurrent () > =

-
HolLast&&HolLast>O)
{ Print ("Blessing has resumed after the holidays
From: "+TimeToStr (Ho!First,TIME_DATE) +" To: "+TimeToStr
(HolLast,TIME_DATE)) ;
HolShutDown = 0,
Labe!Delete () ,
LabelCreate () ,
if (PlaySounds) PlaySound (AlertSound) ,
}
else if ((HolShutDown = = O&&TimeCurrent () > =
HolLast) IIHo!First = = 0)
{ for (y = O;y<ArraySize (Ho!Array) ;y++)
{ if (HolArray[y,O,O]>HolArray[y, 1,0])
{ Ho!First = StrToTime (DTS
(Year () -1,0) +" " +HolArray[y,0,0]+" ." +HolArray[y,0,1]) ;
HolLast = StrToTime (Year ()

" +HolArray[y, 1,0]+" " +HolArray[y,l,l]+" 23 : 59: 59") ;


if (TimeCurrent () > =
HolFirst&&TimeCurrent () < = HolLast)
{ HolShutDown = I,
HolStart = HolFirst;
Ho!End = Ho!Last,
break,

主程式各類模組介紹
}
HolFirst = StrToTime (Year ()

" +HolArray[y,0,0]+" ." +HolArray[y,0,1]) ;


if (HolArray[y,O,O]>HolArray[y, 1,0])
HolLast = StrToTime (DTS (Year () + 1,0) +" ." + "

HolArray[y,1,0]+"
HolArray[y,1,1]+" 23 : 59 : 59") ,
else HolLast = StrToTime (Year ()

" +Ho!Array[y, I ,OJ+" " +HolArray[y,1,1]+" 23 : 59 : 59") ,


if (TimeCurrent () > =
Ho!First&&TimeCurrent () < = Ho!Last)
{ Ho!ShutDown = 1,
HolStart = HolFirst,
HolEnd = HolLast,
break,
}
if (HolStart = = OIi
(HolStart>HolFirst&&TimeCurrent () <HolFirst))
{ HolStart = HolFirst,

_
271
HolEnd = Ho!Last,

HolFirst = HolStart,
Ho!Last = Ho!End,
return,

else if ( HolShutDown = = O&&TimeCurrent () > =


Ho!First&&TimeCurrent () <Ho!Last ) HolShutDown = I,
else if ( HolShutDown = = I &&CbT = = 0)
{ Print ( "Blessing has shut down for the holidays
From: "+TimeToStr ( Ho!First,TIME_DATE ) +
"To : "+TimeToStr
( Ho!Last,TIME_DATE )) ,
if ( CpT>O)
{ y = Ex1tTrades
( P,displayColorLoss," Holiday Shutdown" ) ,
if ( y = = CpT ) ca = 0,

Ho!ShutDown = 2,
Ob」 Del ( "B3LC!os" ) ,

else if ( Ho]ShutDown = = 1)
{ if ( Ob」 ectFind ( "B3LC!os" ) = = -1 )
CreateLabel ( "B3LClos" ," " ,5,0,0,23 ,displayColorLoss ) ;
Ob」 SetTxt ( "B3LClos" ," Blessing will shutdown
for the holidays when this basket closes" ,5 ) ;

1f ( HolShutDown = = 2)
LabelDelete () ,
if ( PlaySounds ) PlaySound ( AlertSound ) ,
HolShutDown = 3,

1f ( Ho!ShutDown = = 3 )
if ( Ob」 ectFind ( "B3LStop" ) = = -1 )
CreateLabel ( "83LStop" ," Trading has
been stopped on this pair for the holidays." , 10,0,0,3,displayColorLoss ) ;
1f ( Ob」 ectFind ( `` B3LResm" ) = = -1 )
CreateLabel ( "B3LResm" ," Blessmg
will resume trading after "+TimeToStr ( Ho!Last,TIME_DATE )
+" ." ,10,0,0,9,displayColorLoss ) ;
return,

}
II+-----------------------------------------------------------------+
Ill Power Out Stop Loss Protect10n I
II+-----------------------------------------------------------------+
if ( SetPOSL )
{ if ( UsePowerOutSL&&POSLPips>O)
{ double POSL = MathMin ( PortionBalance*
( MaxDDPercent+ 1) 11OO!Pip Val2/LbT,POSLPips ) ;
SLbB = ND ( BEb-POSL,Digits ) ,
SLbS = ND ( BEb+POSL,Digits ) ,
}e{
se

主程式各類模 組介 紹
SLbB = 0,
SLbS = 0,
}
for ( y = O;y<OrdersTotal () ;y++)
{ if ( !OrderSelect ( y,SELECT_BY _pOS,MODE_
TRADES )) continue;
if ( OrderMagicNumber () ! = MagicllOrderSymbol
() ! = Symbol () IIOrderType () >OP_ SELL ) continue;
if ( OrderType () = = OP_ BUY&&OrderStopLoss
() ! = SLbB )
Success = ModifyOrder ( OrderOpenPrice
() ,SLbB,Purple ) ,
1f ( Debug&&Success ) Print ( "Order :
"+OrderTicket () +" Sync POSL Buy" ) ;
}
else 面 ( OrderType () = = OP~
SELL&&OrderStopLoss () ! = SLbS )
{ Success = ModifyOrder ( OrderOpenPrice
() ,SLbS,Purple ) ,
1f ( Debug&&Success ) Print ( "Order:

_
273
.. +OrderTicket () +" Sync POSL Sell" ) ,
}

II+-----------------------------------------------------------------+
Ill Check DD% and send Email
II+-----------------------------------------------------------------+
if (( UseEmailff PlaySounds ) &&!Testing )
{ if ( Emai!Count<2&&Email[Emai!Count]>O&&DrawDownPC
>Email[Emai!Count] )
{ if ( UseEmail ) SendMail
( "Blessing EA" ," Blessing has exceeded a drawdown of
`` +Email[Emai!Count]*lOO+ % on `` +Symbol () " "+TF ),
if ( PlaySounds ) PlaySound ( AlertSound ) ;
Error = GetLastError () ;
if ( Error>O) Print ( "Email DD : "+DTS
( DrawDownPC* 100,2 ) +" Error : "+Error+" "+ErrorDescription
( Error )) ;
else
{ if ( UseEmail&&Debug ) Print
( `` DrawDown Email sent on +Symbol () +" " +TF+ "DD: "+DTS
( DrawDownPC*l00,2 )) ;
Emai!Sent = TimeCurrent () ,
Email Count++;

else if ( Emai!Count>O&&Emai!Count<3&&DrawDownPC<
Email[Emai!Count]&&TimeCurrent () >Emai!Sent+Emai!Hours*3600 )
Email Count--;

if ( Emergency Warning )
{ if ( Ob」 ectFind ( "B3LC!os" ) = = -1 )
CreateLabel ( "B3LC!os" ," " ,5,0,0,23 ,displayColorLoss ) ;
Ob」 SetTxt ( "B3LClos" ," WA邸ING:

-
EmergencyCloseAII is set to TRUE" ,5,displayColorLoss ) ;
}
else if ( ShutDown )
if ( Ob」 ectFind ( "B3LClos" ) = = -1 )
CreateLabel ( "B3LClos" ," " ,5,0,0,23 ,displayColorLoss ) ,
ObjSetTxt ( "B3LClos" " , Blessing will stop
trading when this basket closes ." ,5,displayColorLoss ) ;
}
else if ( HolShutDown! = 1 ) ObjDel ( "B3LClos" ) ,
}
FirstRun = false ,
Comment ( CS,dMess ) ,
return ( 0 ) ,

II+-----------------------------------------------------------------+
//I Magic Number Generator I
II+--- ----------------------------------------+
mt GenerateMagicNumber ()
{ if ( EANumber>99 ) return (EANumber ) ,

主程式各類模組介紹
return ( JenkinsHash ( EANumber+" " +Symbol () +" " +Period
())) ;
}

int JenkinsHash ( string Input )


{ int Magic,
for ( y = O;y<StringLen ( Input ) ;y++)
{ Magic+ = StringGetChar ( Input,y ) ,
Magic+ = ( Magic« IO ) ,
Magic/\ = ( Magic» 6 ) ,
}
Magic+ = ( Magic<<3 ) ,
Magic/\ = ( Magic>> 11 ) ,
Magic+= ( Magic« l5 ) ,
Magic = MathAbs ( Magic ) ,
return ( Magic ) ,

_
275
反馬丁格爾策略

硒 is like a snowball. The important thing is finding wet snow and a really long hill
人生就像雪球 。 重要的是要找到濕的雪,和一道長長的山坡 。
一 華倫 · 巴菲特


,.. ~··
.

't
~」
反馬丁格爾策略概念及介紹

基本概念及比較

在一般學院派制式的「馬丁格爾策略」理論是指在某個賭盤裡,

當每次賭金輸錢時就以 2 的倍數再增加賭金,直到贏錢為止。而所

謂的「反馬丁格爾策略」有兩種解釋,一是在某個賭盤裡,當每次

賭金贏錢時就以 2 的倍數再增加賭金,運氣好時很快就可以大撈 一

筆,但這種模式也非常有可能在一次的賭盤押錯時就會將所贏來的

賭金全部虧光。另一解釋為,在某個賭盤裡,當每次賭金輸錢時就

降低賭金,其降低賭金的百分比則以 50% 計算,直到贏錢為止。

滾雪球似的反馬丁格爾策略

前幾年有一本震撼的財經暢銷書中文版在市場上開始銷售,書

名就就做《雪球 : 巴菲特傳》,這本書至今依然是市場財經書籍類

的暢銷書。我們這章節的文章,不是要談巴菲特傳,而是要談類似

滾雪球概念的「反馬丁格爾策略」。

「反馬丁格爾策略」跟「馬丁格爾策略」其實都是一種「賭博

策略」,但是「反馬丁格爾策略」跟「馬丁格爾策略」不管是在概

念上還是在實際的操作都是完全相反。有關於馬丁格爾理論的相關

文章,請讀者自行第四章節的文章。在這章節文章中,我們將焦點

放在「反馬丁格爾策略」,以及其一樣利用「機率」特性來獲取利益。

因此,我們再複習 一 下這兩種策略簡單的區別。
所謂「馬丁格爾策略」是在某個賭盤裡,當每次賭金「輸錢」

時就以 2 的倍數再增加賭金,直到贏錢為止。而所謂的「反馬丁格

爾策略」,則是在某個賭盤裡,當每次賭金「贏錢」時就以 2 的倍

數再增加賭金,若 一 直贏,就再加倍賭注。其實「反馬丁格爾策略」

概念上 一 樣很簡單,就是任何在 一 個押大或押小的賭盤裡,一直不

斷的只押某 一 單邊(如押大或押小),每嬴錢 一 次,就把贏錢的數

目乘上兩倍, 一 直到你所「設定贏的次數」達到,就再從頭押盤。

如果在未達「設定贏的次數」就輸掉了 , 就從頭開始,就是再從第

一 次所押的金額從新開始押注。

舉例來說,假設在一個公平賭大小的賭盤,開大與開小都是

50% 的機率,連續開大或連續開小都是以 50% 開始遞增或遞減。所


以在任何 一 個時誾點上,你贏一次的機率是 50%• 連贏兩次的機率

是 25%• 連贏 三 次的機率 12.5%• 連贏四次的機率 6.25%• 以此類推。

反馬丁格爾策略概念及介紹
因此,以機率來算,如果連贏四次的機率 6.25%• 也就是說連輸四
次的機率 一樣也只有 6.25% 。依照「反馬丁格爾策略」的操作方法,

只要押注 一 輸錢,不管是幾次,都必須從第 一 次的押金再開始起算。

現假設我們帶了 63 元進賭場,第 一 次都是從 1 元開始押注,我們選

擇使用的是反馬丁格爾策略,因此,每贏一次都以 2 的倍數遞增。

. 也就是 1, 2, 4, 8, 16, 32 一 直遞增方式來押注。因此,當我們連押 4


次都輸錢的時候,它是發生在 6.25% 的機率上,且連輸四次,所以

會輸掉 4 元。同樣如果發生在 6.25% 的機率上,且連贏四次,那你


將會贏得 1+2+4+8 = 15• 所以在「同 一 個機率點」上,你會「輸掉

4 元」或「贏到 15 元」 。 那我們再來看其他的機率點,連續贏 三 次

或虧 三 次的機率是 12.5%• 所以在「同 一 個機率點」上,你會「輸

掉 3 元」或「贏到 7 元」 。

但是若每次都未達到連贏四次就虧損,例如目標是連贏四次才

_
279
會從頭押注,若當只贏一次兩次或只贏三次就翻盤,這時就會呈現

虧損如:

+1 - 2 = -I
(第二次翻盤)

+1+2-4( 第三次翻盤) = -I

+1+2+4-8( 第四次翻盤) = -1

由虧損的計算可以很清楚得知,不管所設定的贏的「目標

次數」是第幾次,在其押注的過程當中,只要是未達到「目標次

數」的押注,都是以「失敗」來算,而每一次的失敗,都是虧損

「第一次押注之金額」。若以上面的賭金 63 元為例,以「反馬

丁格爾策略」的操作方法來操作,要全部輸光賭注,你必須是

運氣背到連續「連續失敗」 63 次以上,所以其機率是 0.5/\63 =


0.0000000000000000108% 。由這個機率算出來數字換成淺顯易懂文

字說明就是,拿 63 元到賭場與莊家對賭,使用「反馬丁格爾策略」

來的操作,你要「輸光賭金」就必須讓莊家連開 63 次(或讓你「連

續失敗」 63 次)與你押注相反的賭盤,就機率來說,它是一百萬兆

次 (1 的後面 19 個 0) 才會發生一次。

馬丁格爾策略跟反馬丁格爾策略的比較

但是反觀單純的「馬丁格爾策略」理論來算的話, 63 元只能讓

你連續虧損: 1+2+4+8+16+32 = 63• 所以是只能容許「連續虧損」


6 次,所以其機率是 0.5/\6 = 1.56% 。而且以「押大小」的賭盤來算

的話,當我們與莊家對賭 73 次之中,在某個點上「連續六次虧損」

的機率是 41.7% (算法為: (1-0.5) X0.015625 = 0.0078125'0.984375

-
X (1-0.0078125) /\67 = 0.582025'1-0.582025 = 41.7%) 。當你
「押大小」 150 次當中有一次會超過「連續六次虧損」的機率則是

69.2%• 而若你「押大小」 250 次當中有一次會超過「連續六次虧損」


的機率則變成 85.9% 。
由以上這兩相 比 較 , 若依照機率來看的話 , 「馬丁格爾策 略 」

理論看起來 比 「反馬丁格爾策略」風險更高。

我們來做 一 個相互 比 較表 , 或許更容易區別這兩種方法的差異

性 :

「馬丁格爾策略」與「反馬丁格爾策略」比較表

虧損時加碼 獲利時加碼

在第二次進場之後的平均價格成本會高 在第二次進場之後的平均價格成本會低
於目前市場價格 於目前市場價格

小額短期獲利後會有大額虧損可能 小額短期虧損後會有大額獲利可能

潛在無限虧損之可能性 潛在無限獲利之可能性

無停損倉位,帳戶虧損後加碼再進場 有停損倉位,帳戶虧損後不會加碼進場

反馬丁格爾策略概念及介紹
浮動虧損會造成整個帳戶資金調度困難
浮動利益會幫助整個帳戶資金調度寬鬆
度問題

看到這裡 , 「反馬丁格爾策略」的理論似乎 比 「馬丁格爾策略」

來的容易獲 利也 風險 也 低。不過 , 任何理論都有它的局限性以及其

個別的缺點,「反馬丁格爾策略」當然也不例外。

策略上差異性

「馬丁格爾策略」的基本概念就是利用「機率」的方法來達到

自己的勝算越來越高 , 然後依照「典型啟發」理論「連續六次機率」

的一個臨界點,來讓自己在市場上處於不敗之 地 。但是重點就是只

能挑「長期震盪」的貨幣市場 , 否則很容易賠光資金。相反的 , 「反

馬丁格爾」策略並不是強調 以 機率來打贏市場 , 因為它的理論是只

要贏一次就再雙倍下注 , 則自己的「勝算機率」反而是越來越低的。

_
281
所以重點在於只能挑會走「波段走勢」的趨勢市場,而且必須順著

市場的趨勢走。因此這兩種策略在觀念、理論跟實務的做法上是剛

好完全相反。所以「反馬丁格爾」策略的重點就是必須找出正確的

「趨勢市場」,正確的找出趨勢之後,順著這個趨勢一直加碼直到

趨勢結束或獲利達到滿足點。概念很簡單,但要實際的執行起來卻

是異常的困難。

進入對的趨勢,卻難以獲利?

首先,我們該如何得知市場的「趨勢」已經被觸發並開始往上

或往下走?再者,即使我們見到了趨勢走向,但我們如何得知趨勢

目前是剛開始、走到中間、還是已經快要結束了。利用各類指標來

「看圖說故事」每個人都會也都看得懂,因為那是在看一個「歷史
圖」,但對於一個「未來圖」卻是沒有人可以說的準的。這就是為

何即使是一個可以在外匯市場存活下來的交易者,他一樣無法準確

預測未來的市場走勢。

再者,即使該交易者真的可以利用高超的技術指標,或辛苦努

力的追蹤閱讀任何一條重大的財經即時新聞,他一樣無法「控制市

場」未來的波動及走向。對市場的預測越多,僅會讓市場對自己交

易的打擊越多;因為市場不會因為你是一國之尊還是販夫走卒就會

手下留情。外匯市場非常不同於股票期貨或選擇權,因為極少有所

謂的內線交易存在,而且即使一個國家的中央銀行進場干預或操縱,

到頭來,虧損最嚴重的反倒是該國的央行。我們可以看近期的日本

央行以及瑞士央行的窘狀就會清楚明瞭。

- 在繼續深談「反馬丁格爾」策略之前,我們先談一下外匯市場
的真實現象。在外匯市場裡,大約有至少八成的交易者在進場交易

時是進入一個「對的方向」市場,也就是說除非有特殊目的不然很
少有交易者是跟市場反方向做進場交易的。但是,即使是八成的交

易者是進入 一 個「對的方向」市場 , 卻有九成的交易者在市場上虧

錢。為何會產生這種現象呢?主要有兩大因素 : 第 一 就是有非常多

的外匯交易者喜歡利用高度槓桿來交易外匯以其能短期內迅速獲取

大額利潤,即使真的獲取 一 些利益,通常這只能說是因為幸運。但

人不可能永遠都很幸運,三個月可以獲利,但 一 年以上的交易可能

就會把獲利全部都虧光;第 二 就是很少人知道如何在進場之後以科

學方法來管理獲利。所以交易外匯並非在玩遊戲,它是真正跟金錢

盈虧有關的金融交易。

如何在趨勢中穩定獲利

接下來要談 一 下趨勢。常常看盤的老手都知道 , 除非是國際的

重大利多或利空,市場不管是走多還是走空 , 它並不容易 一 下子每

反馬丁格爾策略概念及介紹
天在翻盤,任何貨幣利用 一 個 4 小時線就可以清楚看出貨幣走勢的

現象 。 貨幣市場的走勢 一 般就是緩步的「漲勢」、「跌勢」或「平

盤震盪」。我們要的就是市場的「漲勢」或「跌勢」,當我們掌握

了趨勢的走向,依照「反馬丁格爾策略」的做法,只要進入的是對

的「市場方向」,只要獲利就「緩步加碼」。只要市場方向沒有變,

這個「緩步加碼」到最後會變成 一個巨大的利益 。

想像 一 下,假設我們是站在 一 個高山的山丘上 , 我們堆了 4 個

雪球(成本),我們在同一個時間將 雪 球往下推,我們假設其中的

兩個雪球在開始往下滾的時候就碰到大石塊被撞壞了(停損),另

外 一 個跑到半山腰卻被樹木擋住不動了(不賺不賠),只有 一 個雪

球很順利的滾到山下且因為沾滿的沿路的 雪 ,當這個 雪 球來到山下

時,它已經變成 一 個巨無霸的雪球。而這個雪球已經變成當初 雪 球

大小的十倍或百倍大小(獲利)。若依照這個假設,只要有 1/4 個

雪球順利達到目的地, 3 /4 的「虧損」或「做白工」並不會影響整體

_
283
的獲利結果。然而,這個山坡的長度到底應該選多長的長度才容易

讓雪球由山上一直滾到山下順利收成。這個就沒有一個絕對的答案。

我們如果還是以「典型啟發」理論「連續六次機率」的一個臨

界點,那表示我們在 一 個順勢的市場中只要連續六次的同方向進場

都是獲利,那我們就是順利把雪球從山上滾到山下並取得甜美的利

潤。而每一次的下一階開倉應該比上一階還要多出多少的開倉大小

呢?在傳統的「馬丁格爾」以及「反馬丁格爾」策略都是以 2/\n 為
乘積,但實際做法上 2/\n 的遞增操作模式在外匯市場是極為高風險。

我們認為這個遞增的乘機應與程式的「馬丁格爾策略」一致,就是

設在 1.3-1.5 之間。我們將統一以 1.3 為例子。所以,讓我們以下面

簡單的數學運算來解釋:

x = loty = Multiplier (乘積)

所以

Level I = x
Level2 = xy
Level 3 = xy2
Level 4 = xy3
Level 5 = xy4
Level 6 = xy5

當達到第六階時 ,就 是「連續獲 利六次 」後你所開的總 Lot 數 為

x + xy + xy2 + xy3 + xy4 + xy5

由以上公式,當我們 設定程式為

x = 0.01 lot
y=l.3 ( 乘積)

所以

Level 1 = 0.01
Level 2 = 0.02
Level 3 = 0.03
Level 4 = 0.04
Level 5 = 0.05
Level 6 = 0.07

當 你達到第六階時,就是「連續獲利六次」後你所開的總 Lot 數為

0.01 + 0.02 + 0.03 + 0.04 + 0.05 + 0.07 = 0.22 Lot

所以,若我們是在 一個允許 1: 100 的槓桿下的外匯經紀商交易,

若我們使用 10% 的 Margin' 那安全的操作資金就至少需要 2200 美

金。假設我們設定 l 丶 2 、 3 、 5 、 8 的階層方式每 一 階的獲利是每當

34 、 55 、 89 、 144 、 233 的點距去加開下 一 階層。則如果市場讓我們

開到第六層,且第六層也要達到設定的點距,這個例子是 89 點,所

以其獲利為

0.01 X ( 34+55+55+89+89+89 ) +0.02 X ( 55+55+89+89+89 ) +0.03 X


(55+89+89+89 ) +0.04 X (89+89+89) +0.05 X (89+89 ) +0.07 X (89)

反馬丁格爾策略概念及介紹
= 47.12Pips 。 47.12 Pips= $471.2

所以 一 次的「滾雪球」獲利成功竟然可達帳戶資金 471.2 / 2200

= 21.4% 的正績效。

讀到這裡,讀者也不要興奮得太早,因為我們還沒談到「風險」

的問題。「反馬丁格爾策略」的最大難度在於趨勢的確立,就是因

為我們無法 100% 的確立「趨勢方向」的正確性,所以我們必須計

算風險。沒有經過「風險計算」就進場,在筆者眼中 一 直是名符其

實的「賭徒」而非在做「交易」

一 個很簡單的結論就是,在外匯市場裡,運用反馬丁格爾策略

能獲利的主因是進入一個趨勢的市場,而馬丁格爾策略則是最愛進

入 一 個震盪的市場 。 所以,不管是馬丁格爾策略還是反馬丁格爾策
略,只要在對的市場使用對的理論,這兩者方法其實都是可以達到

穩定獲利的效果 。

_
285
CD
反馬丁格爾策略風險與實務操
作方法

「滾雪球」概悆的「理論基礎」

金融交易的任何策略應該都是離不開紙上作業的「理論階段」,

一個好的策略在實際執行前如果已經先在「理論的基礎」上驗證過,

那真正放到市場上交易時,就不會有太多令人戚到意外的事會發生。

因此,我們先再來複習一下所謂的「反馬丁格爾策略」的簡單

機率計算。在某個賭盤裡,當每次賭金「贏錢」時就以 2 的倍數再

增加賭金,若一直贏,就一再的加倍賭注。就機率而言,你不可能

一直贏下去,所以你就必須事先設定一個「連續贏錢的次數」。只

要-達到這個「連續贏錢的次數」就再從頭來。因此「反馬丁格爾

策略」在概念上是很簡單的,就是在一個押大或押小的賭盤裡,一

直不斷的只押某一單邊(如押大或押小),每贏錢一次,就把贏錢

的數目乘上兩倍,一直到你達到了所設定之「贏的次數」,就再從

頭開始押盤。如果在未達「設定贏的次數」就輸掉了,當然也得從

頭開始,就是再從第一次所押的金額從新開始押注。

這會產生一個有趣的現象,因為依照「反馬丁格爾策略」的操

作方法,只要押注一輸錢,不管是幾次,都必須從第一次的押金再

開始起算。因此使用「反馬丁格爾策略」在輸錢時是以「重複第 一

筆押注」的輸錢方式在虧損,但是贏錢時卻以「倍數遞增押注」的

贏錢方式在獲利。
舉例來說,在一個賭大小的賭盤,開大與開小都是 50% 的機率,

連續開大或連續開小都是以 50% 開始遞增或遞減。所以在任何一個

時間點上,你贏一次的機率是 50%• 連贏兩次的機率是 25%• 連贏

三次的機率 12.5%• 連贏四次的機率 6.25%• 以此類推。我們希望將

「贏的次數」先設定為三次,我們暫且稱這個為「一局」,而每一

次的「 一 局」你可以贏過賭場的機率只有 12.5% 。但 一 旦你贏了「一

局」,你可以得到的報酬是

n X 2 " 0 + n X 2" 1 + n X 2" 2 = n X ( 1 + 2 + 4 ) = 7 X n 。

n 代表你第一次押注的賭資。所以你可以拿到賭場對你的賠率

是「 一 賠七」的賠率。轉成白話來說就是,你在一個只有 12.5% 勝

算的賭盤裡跟賭場對賭,而它對你的賠率是 1 : 7 。在你還沒碰到贏
盤的 12 . 5% 機率之前,你自己對賭場的賠率是 1 : 1 。同樣,假設你

反馬丁格爾策略風險與實務操作方法
所設定的「 一 局」是「連續贏四次的次數」,那每「 一 局」可以贏

的機率為 6.25%• 但是賭場對你的賠率可以高達

n X 2AO + n X 2A1 + n X 2A2+n X 2A3 = n X ( 1 + 2 + 4 + 8 ) = 15 X n

所以是 1 : 15 的賠率。在還未達到「連續贏四次的次數」就失敗,

. 也稱之為「 一局」,因為你必須從頭開始押注。

假設我們到澳門去試手氣,帶了 10300 元進賭場,第 一 次都是

從 100 元開始押注,我們選擇使用的是「反馬丁格爾策略」,所設

定的「 一 局」是「連續贏四次的次數」,而每贏一次都以 2 的倍數

遞增 。 也就是 100• 200• 400• 800 一直遞增方式來押注,因為設定


的是「連續贏四次的次數」,所以最多只押注到 800 就會再從頭。

但是若每次都未達到連贏四次就虧損,例如只贏一次、兩次、或只

贏 三 次就翻盤虧損,這時就會呈現的虧損如下:

_
28 7
+100 -200 (第二次翻盤) = - 100
+100+200-400 (第三次翻盤) = - 100
+100+200+400-800 (第四次翻盤) = - 100

由上面的例子來看,因為我們只帶了 10300 元進賭場,所以最

多我們僅能輸掉 103 次的「 一 局」。不過我們來看實際的情形。以

上面的例子來說,「連續贏四次的機率」是: 0.5/\4 = 6.25% 。當我


們進場賭 71 次的時候,你會在某個點上「連續四次獲利」的機率會.

變成 88.8% (算法為: (1-0.5) X0.0625 = 0.03125• 0.9375X (1 -


0.03125) /\67 = 0.1117265• 1-0.1117265 = 88.8%) 。

也就是假設你口袋有 10300 元每次押 100 元,以「反馬丁格爾」

策略來押「大小賭盤」,在你押「大小賭盤」 71 次當中有 一 次會超

過「連續四次贏錢」的機率是 88.8% 。當你押「大小賭盤」 99 (103-4)


次當中有一次會超過「連續四次贏錢」的機率則是 95 .95 % (算法為:

(1 -0.5 ) X0.0625=0.03125•0.9375X (1 -0.03125)/\99=0.04045'


1-0.04045 = 95.95%) 。

這個由機率所算出來的數字來看,使用「反馬丁格爾策略」到

賭場來的操作,你要「輸光賭金」看起來似乎是不太容易。所以若

以「反馬丁格爾策略」跟賭場對賭,你設定每「 一 局」贏的機率是

6.26%• 而每次你輸掉「一局」,你就要賠給賭場 1 : 1 的賭金,但


每次你只要贏「 一 局」,賭場就要賠給你 1 : 15 的賭金。因此前面

提到,使用「反馬丁格爾策略」在輸錢時是以「重複第 一 筆押注」

的輸錢方式在虧損,但是贏錢時卻以「倍數遞增押注」的贏錢方式

在獲利。看起來好像還蠻迷人的。

概念搞清楚了以後,我們希望將「反馬丁格爾策略」應用到外

匯市場來操作。在外匯市場裡的市場情況就只是「漲」、「跌」、
「盤整」,而「盤整」又分成「盤整向上」跟「盤整向下」。基本

上的金融市場大抵都只有這四種市況。在我們不做任何預測或對市

場的判斷之前,我們要使用「反馬丁格爾」策略的話,一般僅會希

望進場的市況是「漲」或是「跌」,而且必須是「漲」時做「多單」,

而「跌」時做「空單」。所以成功跟著趨勢下單的機率僅有 25%•

下單之後不符期待的機率則為 75% 。在這種機率之下,我們盲目

的押注市場會「漲」或是會「跌」與我們原本的賭大小的「 50% vs

50% 」機率已經產生不對稱機率「 25% vs 75% 」的現象。所以為了


拉回到「 50% VS 50% 」機率,在真正的外匯市場裡,我們就必須在

一個進場的時間點上,在市價的上下方各下一個「買單」及「賣單」。

讓不管市場是「漲」、「跌」、「盤整向上」還是「盤整向下」,

開盤出來的機率對我們而言都是「 50% vs 50% 」的機率。

外匯操作實務

反馬丁格爾策略風險與實務操作方法
現在假設我們在即時外匯市場裡,同時在市價的上方執行一

個「定點買單」 (Buy-Stop)• 市價的下方執行一個「定點賣單」

(Sell-Stop)• 而此兩個單的手數量是一樣的,假設是 V 個手數量。


而上下買賣點與市場目前價格的點距都一樣,假設是 d 的點距距離。

才妾下來我們設計一個規則,不管市場未來走向是會碰到「定點買單」

還是「定點賣單」,所以它的機率是「 50% vs 50% 」,只要它一碰

到這個「定點買單」或「定點賣單」,我們立刻就在該成交價的上
下方又在設定一個「定點買單」以及一個「定點賣單」,而它的點

距一樣維持為 d 的點距距離。

假設在第一個「定點單」成交之後,如果是「定點買單」成交,

則它的下一個 d 點點距的上方則是第二次再進場的「定點買單」'

而它是獲利的,但我們暫時不執行停利的動作。延續上面的假設,

_
289
當第一個「定點買單」成交之後,市場卻是向下,則它的下 一 個 d

點點距的下方,則是第一次的停損點的「定點賣單」。所以假設我

們要依前面所設計的「連續四次獲利」的「反馬丁格爾策略」,我

們在進場後必須連續在 4 個市價的 d 點點距的上方都成交,而每一

次的下單是以 VX2/\n 遞增, n 是「獲利點」的次數,也就是階層數

目。如果未達「連續四次獲利」我們 一樣把它歸類成「失敗」出場。

例如市場在第 一 次成交以後就往下回檔,或只往上碰到一次 cl°


點點距、兩次 d 點點距、或只有三次 d 點點距就向下回檔,這時就

會呈現的虧損如下:

-VX2/\0Xd (進場後就虧損) = -VXd


+VX2 /\QXd- VX2/\ l Xd (進場獲利一 次後就虧損 ) = -VXd
+VX2/\0Xd + VX2 /\ l Xd- VX2/\2Xd
(進場獲利二 次後就虧損) = -VXd

VX2AOX d+VX 2/\ 1 X d + VX2A2Xd - VX2/\3 x d


(進場獲利三 次後就虧損) = -VXd

然而,假設我們很 幸 運的真的達到「連續四次獲利 」 ,則這個利潤則為:

VX2AOXd + VX2AJ Xd + vx 2/\2 x d + VX2/\3 X d = 15 XVXd

所以依照上面這個規則,我們就輕易的將「反馬丁格爾」策略

直接的應用到外匯市場來操作。

雖然以「理論」計算起來,只要有 一 次的「反馬丁格爾」從頭

到尾走完,也就是將雪球從山上順利滾下來,其獲利的倍數相當驚

人。但是在外匯市場非常有可能的情形是它 一 直在盤整震盪,在還

沒有順利將小雪球滾成大雪堆之前,帳戶已經是虧損累累。所以類

似「賭博模式」的「盲目下單」,對我們來說並不是一個最佳使用「反
馬丁格爾」策略的方法。因此,我們要找出 一 個方法是至少能有 一

定程度的準確性,再用此方法來進入「趨勢市場」。當然,趨勢判
斷用的技術指標多如牛毛,這隨著個人的喜好不同而各有忠實的擁

護者,不過我個人不喜歡使用「預測性」指標來預測市場的未來,

所以我所使用的方法與市場上大多數人的方法有極大的差距。

風險概略介紹

上節 6-1 有提到,我們假設以 0.01 Lot 做「雪球」的起始大小,

假設山坡的長度設定是 34 + 55 + 55 + 89 + 89 + 89 = 411 Pips• 而滾


雪球的過程中一共加碼六次,每次以 1.3 當成乘積,所以到了山下

雪球其實已經是 0.01 + 0.02 + 0.03 + 0.04 + 0.05 + 0.07 = 0.22 Lot•


如果我們使用最大不超過 10% 的 Margin• 則帳戶資金最少不得低

於 2,200 美金。我們為了計算方便,我們設定以 2,500 美金為基準。

每一次的「滾雪球」成功可以為你帶來 471.2 美金的利潤,它就是

Reward 。因為我們無法每次的趨勢預測都神準無比,所以虧損的風

反馬丁格爾策略風險與實務操作方法
險 (Risk) 必須先算出來。

假設我們願意承擔的最大風險是 250 美金,這時我們就必須設

定當進場後如果市場趨勢並非我們想要的,當虧損達到 250 美金時,


就要停止交易,因此整個帳戶的資金最大虧損必須設為 10% 。這樣

.的 Risk/Reward 就是 250/471.2 = 53%• 如果風險承擔僅願意達帳戶


的 6% 就停損,則 Risk/Reward 就是 150/471.2 = 31.8% 。

為何是帳戶的 6%? 筆者是因為根據亞歷山大· 艾爾德

(Alexander Elder) 交易理論,當帳戶虧損達 6% 時,交易者必須先


停損出場避免持續虧損的擴大。若以上面的例子來說, Risk/Reward
是 31.8%• 所以三次進場之中,至少要有一次是獲利出場,否則會

老是碰到 6% 的停損出場。如何設計一個至少進場三次就可以將雪

球從山上一直滾到山下,真的不是一件簡單的習題。

291
就如前篇文章所言,這個判斷趨勢用的方法或指標最低的程度

也要是至少 3 次以內要有 1 次是正確的進入「趨勢市場」。否則一


直做白工只會嚴重的浪費帳戶資金,因為每一筆的交易都需要付出
交易成本。所以如何嚴謹且盡量準確的進入市場做多或做空的部分,

將在下一章節裡來為讀者介紹。

-

反馬丁格爾策略程式交易方法

趨勢確立重要性

在本書一開始筆者就提過,所有的金融市場不會只有一種市況,

即使最粗略的劃分,也分成「震盪市況」跟「趨勢市況」。我們在

前面的章節裡也都有提及,「震盪市況」適合的策略是「馬丁格爾

策略」,即賠錢加碼策略,而它是停利不停損。而「趨勢市況」適

合的策略是「反馬丁格爾策略」,即賺錢加碼策略,而它是停損不

停利。因為「反馬丁格爾策略」是停損不停利,同時它僅適合在「趨

反馬丁格爾策略程式交易方法
勢市況」套用此策略,所以趨勢的確立在使用此策略變得非常重要。

為何趨勢的確立在使用此策略變得非常重要?因為若是在震盪

市況下使用此策略,有可能會一直反覆的停損。這對交易帳戶來說,

會讓帳戶投資資金水位在真正趨勢來臨之前因為停損而不斷的下

· 降。那我們怎麼知道接下來的市況是震盪還是趨勢呢?這的確是 一
件很困難精準判斷的事 。 為了避免在震盪市況下下單,筆者想到的

方法僅有兩種: 一 是採用判斷市場方向趨勢的指標;二是將線圖的
時間框架 (Time Frame) 拉大到至少 4 小時線。

通常在「馬丁格爾策略」的線圖時間框架都是以 l 小時線作

為指標進場判斷的線圖。但「反馬丁格爾策略」建議至少是 4 小時

線,甚至是日線作為指標進場判斷的線圖。目的就是讓我們在趨勢

沒有確立之前,不會讓程式進入市場做買賣,這樣可以減少趨勢誤

_
293
判被停損出場的機率。以下圖 6-1 即是套用 MACD 指標的 4 小時線

EURUSD 線圖。

EURUSD H4 線圖使用 MACO 指標

`_


''
.'u, ' h ', ,
1
'I "r
·


· . ,, ,, ',,,
.


.".'1' '1 1' '' , 1

, '.·
.''
1.
1,

IJ
.', '' '
L I

程式移動停損

使用「反馬丁格爾」策略,不管是在手動上或在程式上,都要

設定「移動停損」來保護獲利。因為趨勢的確立並不是很容易,假

設在趨勢沒有確立之時,每一筆單設定「移動停損」至少可以保護

既有的利益。在程式設計上如下的實例程式碼:

for (cnt = OrdersTotal () ;cnt> = O;cnt--)


{
OrderSelect (cnt, SELECT_BY_pOS, MODE_TRADES) ,
if (OrderSymbol () = = Symbol ())
{
1f (OrderType () == OP_SELL)

- {
1f (TrailingStop>O)
{
1f (OrderOpenPrice () -Ask> =
(TrailingStop+Pips) *Point)

if (OrderStopLoss () >
(Ask+Point*TrailingStop))
{
OrderModify (OrderTicket
() ,OrderOpenPrice () ,Ask+Point*TrailingStop,OrderClosePnce
() -TakeProfit*Point-TrailingStop*Point,800,Purple) ;
return (0) ,

tf (OrderType () = = OP_BUY)
{

反馬丁格爾策略程式交易方法
1f (TrailingStop>O)
{
if (B 吐 OrderOpenPrice () > =
(TrailingStop+Pips) *Point)
{
tf (OrderStopLoss () < (B 吐
Point*TrailingStop))

OrderModify (OrderTicket
() ,OrderOpenPrice () ,和 d-Point*TrailingStop,OrderClosePrice () +Ta
keProfit*Point+ TrailingStop*Point,800,Yellow) ;
return (0) ,

_
295
反馬丁格 爾 策略之移動停損機制

瓦•I TTl'I -1 ....... 1


"'引 BILI Tl 可而
a 誣I Jl141".112<B21• "" 100 "'°"'如, 0 0 Jll心>Jll0<.2>01
a 蛔... 皿'-"'-"'""丑,, .. '-"'""'邛.I - - 0 Jll心迢 0這" gs .,i血 o.m 10emco auar...,-iu巴 141和

1) 8ffl Jll400.IMII><>l0•• 100 NIJ41 畑蛔。 Jll◄fBDl<B-0119 螂 -XO.CO 0.00 3 缸I.CO 0..t.d.i ftl 严 l◄ I寧]
a 砌. 唧'-"'-"'""嶋邙 邙 I.OJ""'定 I 9'這
00 唧'-"'-"''""' " "
941g 靄 .,ro_m o.m 頊D.CD Gu.a T_.1 ft1" filll.6.0.141 硒
a 砌叩,.,,.,.,,,11 .n tro , __, ... 蛔 :El也心血119 殫邛) O 血 l 血0 如圧甂 1fU 關:.6.0 1'4171sIJ
a砌 •
Jll a,.04 <Bms> •ll I.OJ 紅珥.I 靈 0 0 :Ill ◄-"'以 O 泅` 9413 -nm run .s 紅呻 Ona ladtl f t l RV 60 1417
a 茹 Jll◄D叩IIBISOJ•• 100 ,..玄 1 引 19 0 0 Jll心, .. .,.,..,, 94,44 .3((1。 0.00 .S Dl)_Q) 0...t.don ""RW.6 0. 1417
a磾 Jll◄.00.041B mll ..n ,,,, 紅I 9421 ...。 Jl14-"'D4<B哼11 唧印]日血 1 蜘m C...l_.1 "'RM氐1.141汨)
i) ""' ""'"'"''"凶刃 .. ,,,,,..珥 I - ... 。 汪心,以 (B>'}.ll 9421 ,3Q血血) 4 細.00 Gu.a.T...,,.1 ftl RM.6.0J◄I徊
a 國7... Jll4.00D41B..., ..n I.ID,_.珥.I 94U O O :"1•.0,"41B"3-"' 9MO .xom 血 ` 輯)/JJ a-.fa,,i,u 輯, RM.6.0.1417
Q 逗面也ID41B"33' 丑 100 紅珥 I 亟蛔 0 牢"'°'°'"':,; 9431 ...X0.00 0 00 •
I«:Q_(J) Gu.a Tlllllu f t l Rlil6D 1 171d]
....
(4 ... al14.1Jl.DIOl4'<15 祉 IDJ ""'珥 I 磾 0 0 2ll4J».1)1013"'2 ""6 -30洫血 -3«D.lll a-,....,_ ..伍01'17
l4 " " · J)t4_a,.040,血吐 IDJ - -• 9<泌 0 0 >ll4J».Dla>J001 - ,立四血 -<00.00 _ _ _ ...._...,1
「一 22-ID r,..;,-om O.Jilul.O.GI WfilJn,dO.ID 22 重 .

''""'-..,..,.,.., ,_, I "'°"'I """°" I ""出 » I Cod< 缸~,.,內 I'°""" I


...._..__ D,... l!llill ..,,,..,
- 111

圖 6 - 2 即是程式產生「移動停損」的點位時之利潤保護。 S/L 欄

位出現紅色背景色,其就是「停損」點被市場所碰觸,但 Profit 欄位

卻是有利潤的,這就是「移動停損」的點位時之利潤保護。

-
連動交易策略
The birds wishes it were a cloud; the clouds wishes it were a bird.
鳥兒希望成為一朵白雲,白雲卻希望成為一隻飛鳥 。

泰戈爾

... ",.-
~

..
.
..
連動交易策略概念及介紹

貨幣連動基本概悆

有關外匯之套利理論,不僅僅在大型投資銀行的專業投資操

盤手有精確的數學模組在執行套利,連像我們這種名不見經傳的

小咖在外匯市場裡也 一 樣希望有自己的套利理論。因為沒有動輒

十億百億美金的資金,所以,我喜歡稱這種套利叫做「庶民套利理

論」。而在「庶民套利理論」之中,之前篇幅已經介紹了「套息交

易」、「馬丁格爾策略」、「反馬丁格爾策略」等。其中的「套息交易」

風靡於日本的「渡邊太太」們。而「馬丁格爾策略」在許多的國際

資深外匯投資者之間是視其如洪水猛獸,主要是單純的「馬丁格爾

策略」的 Risk/Reward (R/R 值)實在是過低,而且當市場走反向長

驅勢時,帳戶若無足夠的資金,爆倉的機率會變的相當高,是一種

TAKE ONE OR NONE (賺一塊錢或失去全部)的方法。

所以,馬丁格爾策略不能只拿其理論就套到市場上交易,必須

設有資金保護機制、慎選貨幣(例如找多震盪而少趨勢的貨幣),

以及長趨勢之出場策略等。同時「反馬丁格爾策略」必須套用在趨

勢市況且下的方向要對才有獲利機會,否則很容易被市場巴來巴去,

在震盪市況下,「反馬丁格爾策略」很容易下多單也虧損下空單也

-
虧損。這在我先前的文章中都已經說明過了。

接下來本章節要談的就是「連動套利」 (Correlation
Arbitrage) 。
連動套利

外匯市場中的某些特定貨幣是有極高的連動性,該連動的程度

幾乎已經快 是 「手 牽 手,心連心, 一 起變成連體嬰」了 。 所謂貨幣

的連動 (Correlation Currency) 以及連動套利 。 本 章 節會以「圖文並

茂」的方式來深入探討貨幣的連動以及其特性可以帶給我們哪些有

利的套利規則 。

我們首先來看以下幾個圖,這些圖示最近市場交易日期的 4 小

時線圖。

EUR/USD-USD/CHF (歐元 / 美金—美金 / 瑞郎)


,盂t;;; 矗茫璽t
尸一

• '"蛔內""1rY''"'·\·•01 户 ., ·」 芒
--
•""."1,.,..,,.'\,.,_ , .•,,,; .,·•~,1.」
r,•,•.,.、J 三

連 動 交易策 略概 念及介紹
,I•
Ih•· ,,,. .•,,.... I屮
ltlln~!~H鹵- • 鬮佩·庫驢簣瑋繡嶋債 ll 隕氥鸕囯讀嶋彙臼論鼴鸕 m鴯.這`鬮鼴.懾論一".一,-一,-一,一鷗囑,1 一_,s一鱸鸕 11• 佩嶋這一瓦嶋'龕"'囑` '
~ "c,
一I
• IIIOC頂「汛矗 -,..-11.重鸕num:,

lp·,'l-1,.1 II丨 -• I

\ ,1., ,\ ui.-c·「,、,•.,豆一'-,.,,.,,r1,,,.•,.,,.,.1k,,~-IK—户',一1七一 繭蝨


, ,,M 甲. ··-,,~·.·:c.- .. 一…0 , M 一,··-…•- DM•=••-••-•--'* 一,--·-- "*氏____ , _____

_
299
,CHF/JPY
EUR/JPY

(lID:n
J IIaiER遹
\ D嗪 B)\DJ

,GBP/USD
ililiiiiliiii
.1iiiEUR/USD

(~Ji

\泄卧—'湘嚻\泄锄)
'I

\ :計.

3
I
'r
`

S7

_
r53·n - 一

口[[二
u
.."

-F-
',-,

- F
lk

5.
fJ



5C




GBP/USD

`USD/CHF

(:?,€~\
I湘 卧\擧 iRB)
泄卧

1[1
n-I I
且, '­
] ' I 『
I
[
I !l
I ii
\£::

口訐'!
二~
] :'
; 1~
`
AUD/USD-NZD/USD (溴幣/美金一紐幣/美金)

連動交易策略概念及介紹
` 由上面的幾個圖來看,讀者是不是覺得該「兩兩貨幣組」根本

就像極了連體嬰?但是國際外匯市場裡並不是每組貨幣都可以成雙

成對,高度連結的貨幣組其實也僅有幾組而已。其實世界上的八大

交易貨幣中,其中僅以歐元-瑞士法郎、英鎊—瑞士法郎、歐元—

英鎊以及澳幣—紐幣的連動性最高且持續性最久。其他貨幣當然可

能會有短期的連動,例如瑞士法郎—日幣也經常出現連動的情形,

不過一但產生市場主背離段時,日幣與瑞土法郎卻又變成幾乎不連

動。因此本文章及後續討論的方法皆以歐元—瑞士法郎、英鎊—瑞

士法郎、歐元一英鎊以及澳幣—紐幣這四組為案例。

_
301
由上面的六個圖示,雖然本文使用的是 4 小時線,但已經可以

看出其高度連動性的端倪。如果我們使用更長 一 點的線圖,例如日

線或週線,那你會發現以上所提及的連動貨幣如歐元—瑞士法郎或

澳幣—紐幣等其彼此之問的連動率可能甚至高達 95% 以上 。 至於貨

幣之連動 (Correlation) 方式,有正向連動 (Positive Correlation) 以

及負向連動 (Negative Correlation) 。 例如 EUR/JPY-CHF/JPY 這兩

組,他們是正連動 (Positive Correlation) 而 EUR/USD-USD/CHF 是

負連動 (Negative Correlation) 。 不管是正連動還是負連動,我們通

常指其「兩兩貨幣組」在過去 30 天 (20 個交易日)中,其相連關係

度超過 90% 以上都被稱之為「連動貨幣」。

下圖 7 - 7 就是使用該網站的連動分析工具所顯現出來的連動表

(Correlation Table) 。

三璽l 貨幣連動分析表
HOWly

EURUSO QBPUSO U!OCHF EURJPY CHFJPY AUOUSO AUOJPY NZOUS! - •碸這°"

。.門」ID ...3 100.0 -889 -12.7 -40.1 ' 4 4 -9.2 71 .0

""玘 HF •721 .... 100.0 -28.5·16.5 -64. 亀 -262 心3

EURJPV -3.9 -12.7 -28 0 100.0 89 4 .72 64, 03

CHFJ量V -424 -40,1 -16.5 昞.4 1000 • 2 6.3 60 I -2~0

AUDUSD 66 9 04 < -64 < .72 -26 3 100.0 03 S 85.2

AUDJPY -4.0 · 9 2 -26 2 64.• 60 I 53 3 1 印.0 375

NZDUSD 7'9 71 0 -633 0.3 -220 記2 "'1000

NZDJPY 296 250 .,o 7 43 3 33.0 ,o 6 00 0 ...2

。..,

EURUSO OSPUSO USDCHF EURJPY <HSJPY AUDUSD AUDJPY HZDUSI 。~•c·=•co~cc•-1•..,

EUR USO 100.0 ' 3.0 ... S 0, ...3 49 • 37

OOPUID 03.0 1000 -207 6 8 . 0 ' 9.• 0.2 24.0 !0.6

USDCHF ... , .21)7 1000 37.< 35.1 -&86 &6 -7'4

EURJPY 0.3 68.0 37.4 100.0 95.2 -<6& 21 .7 嵒.'

CHPJPY .. , ' 9 • 35.1 952 100.0 -517 16, -52.9

..
AUDUID 49 』 02 .... 鴣8 -&1.7 100.0 包1 83.2

AUDJPY 3.7 2<0 8.6 217 163 631 100.0 306 ·•

NZOUSD 66.1 106 .734 -<6.5 -529 832 S06 1000

NZDJPY - 1 6 ' . . .0 « 8 71 .& 66 S -9.1 '8& -<.&


由這個連動分析表,在可以清晰看出貨幣組之間的連動程度。

利用石油、黃金與外匯貨幣之間的關聯性作外匯套利

前文中已經點出在國際貨幣市場裡,以歐元—瑞士法郎、英鎊

-瑞士法郎、歐元—英鎊以及澳幣—紐幣的連動性最高。這幾組的

貨幣連動關係度幾乎每天都高達 90% 以上或甚至更高。

然而,執行「連動套利」唯一的風險就是該兩兩連動貨幣的國

家政策「徹底改變」。例如,瑞士央行決定不再與歐洲貨幣有連動

關係,紐西蘭央行決定不再與澳幣連動,或這經濟體發生重大經濟

事件(歐債危機時因希臘債信問題的歐元眨值,讓 EUR/CHF-直下

跌而非震盪)等。這個是唯一且是最大的隱藏性風險。不過,一般

西方成熟國家的貨幣政策比較不會輕易改變,因為改變貨幣政策會

連動交易策略概念及介紹
牽動非常複雜的政經關係,同時即使貨幣政策改變,也會因為「地

緣」的關係,不可能一點連動也沒有。所以,通常的現象是該兩兩

貨幣產生背離達到一定程度後,會開始收斂。因此依照該兩兩貨幣

連動的「背離一收斂」特性,以一買一賣的方式來做「連動套利」

幾乎變成「外匯套利一族」的基本常識。就理論而言,以兩兩連動

貨幣執行一買一賣的套利並且風險對沖的方法,因為很接近「直接

.對沖」 (Direct Hedge)' 但實際上並不是「直接對沖」,所以又稱


為「中性對沖」 (Neutral Hedge) 。這個方法看似簡單,但經由這
簡單的概念所衍生出來的實務作法卻又百花齊放 , 各自有各自的一

套作法。

除了貨幣連動之外,黃金、石油、與美金這金三角關係也會有

一些連動現象,不過,近幾年國際金融局勢動盪不安,整體連動現

象其實已經脫鉤。所有投資者都知道,美金與黃金跟石油都有連動,

做外匯有趣的地方就是當知道某個貨幣狂漲或狂眨時,世界上必有

_
303
一 重大經濟議題發生(例如希臘危機造成歐元狂跌)。而若觀察黃

金石油與貨幣之間的經濟議題,以下的議題可以給讀者做參考。

當黃金跟石油突然狂漲,請問哪個貨幣可以進場投資?哪個貨
幣可以放空?

最常見的答案是加碼澳幣與加幣,並放空美金。理由其實很簡

單,因為澳洲跟加拿大有龐大自然資源跟礦場,所以會有連動關係。 筆

而石油以美金計價而且又是反向連動,所以放空美金。但除了該買

澳幣與加幣這兩個貨幣外還有嗎?當然有,比如紐幣 。 為何是紐幣

呢?因為它跟澳幣的正向連動將近 90% 。所以,今年 2016 年石油已

經跌破每桶 40 美元的報價,我們可以同時去看澳幣、加幣跟紐幣的

線形,幾乎快像是自由落體式的貶值。同時這個時候的美金在圈際
市場算是 一 枝獨秀的超強貨幣,這就是黃金、石油與美金的價格連

動現象同時影響到國際原物料大國的貨幣報價情況。

連動係數、標準差及皮爾森相關係數

觀念有了之後,我們繼續來一起學習關於用在「兩兩貨幣連動

套利」 (Correlation Arbitrage) 部分較深的理論與「連動係數」相

關的數學知識 。 「連動係數」 (Correlation Coefficient) 、表準差

(Standard Deviation) 以及皮爾森連動公式 (Pearson Correlation)


等等,都是在外匯連動交易時,使用在程式設計上的進出場準則,

讀者若是手動操作,下一個章節會介紹手動連動交易的工具操作,

但自動交易部分,我們需先介紹連動交易的數學公式 。

.. 連動
「連動」概念在我們日常生活中是非常有用的,例如當天氣變
冷的時候,保暖的衣物在市場上會很好賣(所以是正向連動),而

泳衣短褲等會變得不好賣(所以是負向連動)。例如國際原油價格

上漲時,我們知道要趕快去加油,因為可能國內的油價會立刻調升

價格(所以是正向連動)。因此「連動」 (Correlation) 的定義就是

兩個變數之間的一種「關係程度」,其彼此變動之「關係程度」用

數學來表示就是當「正向連動」時是從 0 到丑 (0% ~ +100%) 之間,


而當「負向連動」時從 0 到 -1 (0% ~ - 100%) 之間。假設其兩變數

之間的「變動之關係程度」為丑 (+100%)• 這稱為「完美正相關

連動」 (Perfect Positive Correlation) 。相反的,假設其兩變數之間

的「變動之關係程度」為 -1 ( -100%)• 這稱為「完美負相關連動」

(Perfect Negative Correlation) 。

例如在外匯市場裡,在-個時間軸上的任何一個時間點,當

AUD/USD 漲 l 點 (1 Pip) 而 NZD/USD 也同時跟著漲 1 點,當

連動交易策略概念及介紹
AUD/USD 跌 l 點 (1 Pip) 而 NZD/USD 也同時跟著跌 l 點,這稱
為「完美正相關連動」。又例如在外匯市場裡,在一個時間軸上的

任何一個時間點,當 EUR/USD 漲 l 點 (1 朽p) 而 USD/CHF 卻同時

跟著跌 1 點,當 EUR/USD 跌 1 點 (1 Pip) 時而 USD/CHF 卻同時跟


著漲 l 點,這稱為「完美負相關連動」。但在實際的市場裡,不可

• 能見到 100% 完美的「正向連動」或「負向連動」。不過卻有可能


呈現「高度的正向或負向連動」。一般的定義是只要是超過 +90%

(+0.9) 的正連動或超過 -90% (-0.9) 的負連動,我們就稱其兩組


貨幣擁有「高度連動」的特性。所以,我舉以下兩組常見的「高度

連動」貨幣當例子。

圖 7-8 為澳幣/美金 (AUD/USD) 與紐幣/美金 (NZD/USD)


的日線圖。讀者可以很清晰的辨識出來澳幣與紐幣真的是非常「高

度的正相關連動」。

_
305

_J
澳幣與紐幣「高度正相關連動」

, 山以心·""'
•1110鼴,-~~1115~圖,`
. . ....

丸,.,,,, ,ri,,,1节"'\,,),,,,,.,'1,-\ ,--'' '' n ,1,,I' ''\叩h,l-i,7·'凸1·);;;r,


, ' I'-

,.事!II UM.a l9M 鸝!II u.-. 富`.`.'".啊5 口·富,喊鸝量``富!II 4 一富'罈一- ,_血嶋氬富'員贓鸝'u•- 濤--口鬮圖囑禱.._,_. 11-l嶋

"' l::i"

11..,,1-tr一.1, ,..,, 氐M刀肌


畫 , ,. _,,.. .t·三 「,,.,};rr.rl.t'li.-+"'... \111.,,,,,.1,r•,,1,-11j•f;,,f 111·••(.f'1;,~
,,..,,,
•I• l1,1.,i1.,..,·h,,,1·1,'11 -
IJII . .J IIM.U 3JIIB.ll U ... -.5 . . . .II•- 加J u• 甲,喊_. n0111 富.. ,_富` 礴一 :iin• l _ _,. 鴆 --·)l 輯...... 圖.. ,. __ ..... 鵬 .,._. u•
富-·
-
'""'
氱·心

I"""'°·°"' I""' ~ ~

圖 歐元與瑞郎「高度負相關連動」

,!!''\1,,」』r, .匪,,,,8.J't」一, .11'"坪w·• "~ r1


庫 1,,1, Fil
臣 1::_
til「 11·•1 .,r' 1•'1, \ ,,P'\,•111卟 ,, ., , .1, .,. ,,.1 '•t-i,,t••t l 一I
I.改」,.,.,) , ,-_

而圖 7-9 則為歐元 / 美金 (EUR/USD) 與美金/瑞郎 (USD/

CHF) 的日線圖 。 讀者可以很清晰的辨識出來歐元與瑞郎真的是非

,
常「高度的負相關連動」 。

那如果兩個貨幣完全不「連動」呢?那就是其兩組貨幣是完全
獨立的,所以其「連動係數」為 0 。但是在真實的外匯市場 , 所有貨

幣都會呈現連動的現象,只是不同貨幣之間連動程度有高低差別,

因此在外匯市場裡任何貨幣與貨幣之間的「連動係數」不會等於 0 。

例如我們以 X 代表 X 貨幣而 Y 代表 Y 貨幣,其 X 與 Y 變數的

關係以「圖像」來表示,見圖 7-10 。

圖象化「連動關係」

Y
r

變項
變項

'



X 變項 X 變泊

連動交易策略概念及介紹
上面第 一 個圖是「正向連動關係」 ( P os iti ve Correlation
Relation) 、第 二 個圖式「負向連動關係」 (Negative Correlat10n
Relation) 、第 三 個圖是「無連動關係」 (no Correlation
Re lation)

連動係數

複習過「連動」概念之後,我們來談在隨機程序 ( Random

Process) 和統計學 (Statistics) 中,「連動係數」事實上是顯示兩個


變數之間線性關係的強度和方向。而在統計學中,「連動」的意義

是用來衡量兩個變數相對於其相互獨立的距離 。 我們不要管書籍上

面艱深難懂的解釋,我們只要知道「連動係數」實質的意義是指「連

動程度」 (Correlation degree) 的大小這樣就可以了。

_
307
皮爾森連動係數

一般在機率統計相關的書籍會把「連動係數」以 p 或 r 來表示。

而在符號區別上,通常是指:

p =總體連動係數

r= 樣本連動係數

在外匯市場裡,我們要探討的都是「某段區間的連動關係」,

例如從某個時間點開始往回算 100 個 Bars' 來算某 X 貨幣與 Y 貨


幣的連動程度。因此我們要的是「總體連動係數」 p' 而非「樣本

連動係數」 r 。最常見也簡單好用的「連動係數」是皮爾森連動係數

(Pearson Correlation Coefficient) 。皮爾森連動係數的數學公式如


下所示:

cov (X, Y) E ((X -µx)(Y -印 )


Px,Y = uX 吖
= ,
uxay

標準差

上面這個公式表示兩個區間的獨立隨機變數 X 和 y (例如

EURUSD = X 跟 USDCHF = Y 在同一段時間區間某個時間點的價

格)的「連動係數」 pX,Y 為 X\ 和 Y\ 值的「共變異數」 (Covariance)

除以 X 和 Y 的「標準差」 (Standard Deviation) 的相乘。所以上面

的第 一 個等式中的 Cov 表示「 X 和 Y 值共變異數」, ax 和 aY 為

X 和 Y 值的標準差。而第 一 個等式中 Cov 所表示的「 X 和 Y 值共變

異數」就是「獨立隨機變數」 X 減掉此段區間 X 的平均值 µX• 乘

-
上「獨立隨機變數」 Y 減掉此段區間 Y 的平均值 µY 。

有了上面的這個公式以後,我們就可以很容易的利用 MQL4 的
程式來算出 X 貨幣和 Y 貨幣的「連動係數」 pX, y 。在上面的公式

當中,我們其實只缺 X 貨幣和 Y 貨幣的標準差的計算方式。 MQL4

有提供標準差的呼叫函式。 MQL4 所定義的標準差的函式如下:

double iStdDev (string symbol, int timeframe, int ma__period,int ma_shift,


int ma_method, int applied__price, int shift) ;

所以,例如 X 貨幣假設為 EURUSD• 而 Y 貨幣為 USDCHF•


若我們想算出在 1 小時線圖過去 100 個 bars 的標準差就是:

double X = iStdDev ("EURUSD" ,PERIOD_Hl,100,0,MODE_


EMA.PRICE_CLOSE,O) ;
double Y = iStdDev ("USDCHF" ,PERIOD_Hl,100,0,MODE_
EMA,PRICE CLOSE,O) ;

以上的公式有了,函式也有了,所以當我們算出「連動係數」

連動交易策略概念及介紹
pX, y 的值以後,我們就可以定義以多少為一個「發散跟收斂」的
門檻值 (Threshold)• 我們再以此門檻值 (Threshold) 來決定「發散」

時進場,「收斂」時出場的時間點。透過數學公式以及 MetaTrader

MQL 語 言所提供的函式,我們就可以解決在自動交易上連動交易的

進出場的適當點位來執行連動套利。

_
309
ID
連動交易策略風險與實務操作
方法

在本節文章中,筆者將介紹幾種以連動套利概念衍生出來的實.

務操作方法。首先,我們再來複習一下什麼叫做「連動」。「連動」

的定義就是兩個變數(不管是「離散」 (Discrete) 還是「連續」

(Continuous) 變數之間的一種「關係程度」,其彼此變動之「關係

程度」,用數學來表示就是從 -1 到+ 1 (-100% - + 100%) 之間。

假設其兩變數之間的「變動之關係程度」為丑 (+100%)' 這

稱為「完美正相關連動」。例如在外匯市場裡,在一個時誾軸上的

任何一個時間點,當 AUDUSD 漲 l 點 (1 Pip) 而 NZDUSD 也同時

跟著漲 l 點,當 AUDUSD 跌 1 點 (1 朽p) 而 NZDUSD 也同時跟著

跌 1 點,這稱為「完美正相關連動」。

相反的,假設其兩變數之間的「變動之關係程度」為 -1

(-100%)• 這稱為「完美負相關連動」。例如在外匯市場裡,

在-個時間軸上的任何一個時間點,當 EURUSD 漲 1 點 (1 Pip)


而 USDCHF 卻同時跟著跌 1 點,當 EURUSD 跌 l 點 (1 Pip) 時而
USDCHF 卻同時跟著漲 l 點,這稱為「完美負相關連動」。

但在實際的市場裡,不可能見到 100% 完美的正向連動或負向

- 連動。不過有幾組貨幣其實是呈現「高度的連動」,一般的定義是

只要是超過四 0% (+0.9) 的正連動或超過 -90% (-0.9) 的負連動,

我們就稱其兩組貨幣擁有「高度的連動」的特性。所以,我舉以下
兩組常見的「高度連動」貨幣當例子 。

圖 7 - 11 為 澳幣 美 金 (AUD/US D ) 與紐幣 美 金 (NZD/US D ) 的

4 小時線圖以及日線圖 。 讀者可以很清晰的辨識出來澳幣與紐幣真的

是非常「高度的正相關連動」

澳幣與紐幣「高度正相關連動」

,.. ,-... - .
-······· -· 「.. ..., ' . . ,...., •.~ '·· ·- .., ~

,:.: .: ·;~一.~:.:•·:.:.:.-~~::··:_一·--·一·一`一·一一一一·一,,一一- "一·一 I~


r·' ....., ... - ............ •-.,-.. ..-. ... ·•···•····-··,. ·- ..- ,•.,

r----- __ .r·1 •··•·, ,,· 「心,·-一


•·•'., , ,,,

:,.:: 一·一·--一一一一一一一·-一,-----一 __t


,., ,,'
....,.,...·•
,a..l' ·•·•t ... .,,'1-·L.. ,• ·••I
'1 .• • ,......,..II ...I ' .. , ,,' ,....',--,'·.......... ,.,·'
之.,_.,
.,..... 1... 」
,,

尸三::.::'.~=·:;::~:這二.一1二;.二:::~~·::::二.二二1二

連動交易策略風險與賈務操作方法

_
311
而圖 7-12 則為歐元美金 (EURUSD) 與美金瑞郎 (USDCHF)

的 4 小時線圖以及日線圖。讀者可以很清晰的辨識出來歐元與瑞郎

真的是非常「高度的負相關連動」。

那如果兩個貨幣完全不「連動」呢?那就是其兩組貨幣是完全

獨立的,所以其 Correlation 系數為 0 。但是在真實的外匯市場,所


有貨幣都會呈現連動的現象,只是不同貨幣之問連動程度有高低差

別,所以在外匯市場的貨幣與貨幣之間的「連動係數」不會等於 0 。

依照我們所闡述的貨幣連動概念,以下是幾種利用連動特性來執行

手動下單的方法:

利用連動性手動下單的幾個方法:

參考模擬帳戶市場變化的連動套利

第一種方法是,首先中請並使用一個「模擬帳戶」將 EURUSD

與 USDCHF 的線圖都打開,一樣使用 l 小時或 4 小時線均可。

在任何一個時間的點上,同-個時間都買 1 個基數,例如

EURUSD (Buy) : 1 Lot• USDCHF (Buy) : 1 Lot 。

當模擬帳戶的這兩組貨幣加起來是虧損超過 100 點時 (-100

Pips)• 例如 EURUSD : -200 Pips• USDCHF : + 100 Pips

(-200 + 100 = -100)• 這時就可以「同時」在你的真實賬戶


進場「買」 EURUSD 跟 USDCHD 各 1 個基數,反之如果虛擬帳戶

獲利超過 100 點時 (+100 Pips)• 就可以同時在你的真實賬戶進場

.. 「賣」 EURUSD 跟 USDCHD 各 l 個基數。以此類推。這是 一 個非

常簡單也非常單純的使用手動方式執行連動套利方法。對於懶的學
一 大堆數學公式或技術指標的交 易 者而言,這種套利模式不僅風險

較低,同時長期獲利的機會也相對較高 。

Murry-Math Line 連動套利

第 二 種方 法 就 是 使用 Murry Math Line6 , 這是 使用連動 套利概念


所衍生出來的 自 己 一 套的套利方法 。 方法如下 :

首 先將兩兩所連動之貨幣(在此以 EURUSD -USDCHF 為例)

先 套 上 Murry Math Line 指標,如以下圖 7 - 13 及圖 7-14 。

EURUSD 使用 Murry-Math Line 指標

一二 ll
-n

連動 交易策 略風險與 實 務操作方法

·=·-.::;,,-一一一一一一一一----一-一一·一·-·一…竺

6
Murry Math 是由 一位 T. Henning Murrey 的數學家所提出當成連動套利進出場的基點。

_
313
USDCHF 使用 Murry-Math Line 指 標

...鹹

這個實務例子是以套到利潤就跑的方式來執行,所以使用 5 分

鐘的時間框架 (Time Frame) 線圖。同時以 Murry Math Line 的 4/8


線(見上兩圖之白色橫線)為進場點。

也就是說,不管是 EURUSD 或 USDCHF 貨幣,當此兩貨幣其

中的一個貨幣在市場碰到 4/8 線時,對兩組貨幣同時進場執行買單

(因為 EURUSD -USDCHF 是負向連動)。然後就不理會它,一直等,

在等待的期間,帳戶就會呈現一組獲利一組虧損。一直等到當任何

一 組貨幣 (EURUSD 或 USDCHF) 的 Murry Math Line 達到市場的

頂點(最高點:十2/8 或最低點: -2/8)• 這時就是 Murry Math Line

的市場反轉信號已經出現,這時就將獲利的那 一 組貨幣獲利關倉,

同時在虧損的那 一 方貨幣進場買入倉位,此時帳戶會剩下兩個同貨

幣的買倉,當市場又回到 Murry Math Line 的 4/8 線時,全部關倉出


場。

..
Spieler Hedge 方法

第 三 種方法是在外匯論壇裡非常有名的方法,這是由 一 位名字

叫做 Spieler 的「避險基金經理人」所提出的方法。他的方法簡單說

就是以的背離程度 (Divergence Degree) 來執行「 Neutral Hedge 」。

圖 7-15 : EURUSD-USDCHF 使用 N etural Hedge (上半圖)以及


Correlation (下半圖)指標

EURUSD-USDCHF 發散系數

連動交易策略風險與實務操作方法

_
315
以下圖 7-16: AUDUSD-NZDUSD 使用 Netural Hedge (上半圖)

以及 Correlation (下半圖)指標

AUDUSD-NZDUSD 發散系數

二 一
一5Ul
打開 EURUSD 、 USDCHF 跟 EURCHF• 或 AUDUSD 、 NZDUSD
跟 AUDNZD 這三種貨幣視窗。使用 1 小時或 4 小時線均可。然後

每天早上要稍微注意 EURCHF 線圖或 AUDNZD 線圖,當你發現

今天早上 EURCHF 與昨天早上產生了 25% 以上的背離,例如跌

了 25% (-25%) 或漲了 25% (+25%) 這時就是一個進場點 (Entry

Point)

進場點是如何進場呢?很簡單,當 EURCHF 產生了隔日背

離跌了 25% (-25%) 時,同時進場買 EURUSD 跟 USDCHF• 而

當 EURCHF 產生了隔日背離漲了 25% (+25%) 時,同時進場賣

EURUSD 跟 USDCHF 。

- 而 AUDNZD 的模式也是類似,只不過 AUDUSD 跟 NZDUSD


是正相關連動,所以執行時必須一買一賣,而不是同時買同時賣,

這是 AUDNZD 組與 EURCHF 組的不同。


在這個階段時,你雖然同時進場買兩種貨幣,但因為這兩種貨

幣在市場上並不等值,所以通常不會是 1 : 1 的買或賣。一般建議

是 1 : 1.3 ~ 1 : 1.5 均可。也就是說買或賣 EURUSD 貨幣 1 個 LOT


時,同時需要買或賣 USDCHF 貨幣 1.3~1.5 個 LOT 數。然後等

EURCHF 反向漲回(或跌回)原本起跌點(或起漲點)後,就可以

將 EURUSD 跟 USDCHF 這兩組貨幣一起獲利平倉出場。

但如果很不幸,同時開倉了以後, EUFCHF 並沒有如期回到原

點反而繼續跌或繼續漲時該怎麼辦?

依照 Spieler 的建議就是進入類似「價格平均化模式」,就是當

兩組貨幣開倉了以後,帳戶總虧損每達 2.5%, 4.5%, 6.5%, 10% 時,


同方法就再加開一次,比如說帳戶有美金 1000 元,如果你的賬戶槓

桿是 1 : 100• 你賬戶最多能開到 lLOT• 所以:

連動交易策略風險與賈務操作方法
當第一次進場時是 EUR/USD (Buy) : 0.1 lot• USD/CHF (Buy) :
0.13 lot• 當賬戶虧損達 $25 ($1000X2.5%)• 再加開 EUR/USD
(Buy) : O. llot• USD/CHF (Buy) : 0.13lot• 依此類推。

所以最差的情形是開四層,在此情形之下總共會開 0.92 個 LOT

(0.1 X 4+0.13 X 4) 剛好在 1 個 LOT 以下 。

以上這三個方法都是基於這些的連動貨幣是處於會「一直連動

的假設」。

但如果當該兩個連動之經濟體的貨幣不產生連動時,這種套利

模式會產生市場背離虧損。例如希臘危機造成歐元貶值,而瑞士法

郎並沒有跟著眨,所以就造成 EURCHF 並不是在「震盪」反而是一

直在「跌價」,這個時候如果有開此種 Neutral Hedge (Correlation

_
317
Arbitrage) 倉位的投資者都會被「套住」,且無法獲利出場。

不過,幸運的是即使是希臘危機造成歐元貶值,市場還是有一

股力量把背離的部分在短短的一兩個月的時間裡全部拉回來。所以,

以筆者的觀察,歷史上一直連動的貨幣把把它們突然變成不連動,

恐怕也不是一件簡單的事。

「買強空弱」交易技巧

最後介紹利用連動特性下單的手動方式為「買強空弱」下單方

法。

假設我們今天打算交易歐元美金 (EURUSD) 這組貨幣,我

們將歐元美金 (EURUSD) 、美金瑞郎 (USDCHF) 、英鎊美金

(GBPUSD) 以及歐元英鎊 (EURGBP) 這四組貨幣使用 4 小時線

圖全部打開在同一個視窗,如圖 7-17 所示。因為我們目標是歐元美

金 (EURUSD) 這組貨幣,所以,我們要先清楚對此組 EURUSD 是

該「買」或該「賣」。若我們要下「賣單」 (SELL) 的話,在下

單之前就必須先看 EURUSD 與 GBPUSD 必須都要呈現「跌勢」,


而 USDCHF 必須要呈現「漲勢」。假設 EURUSD 與 GBPUSD 真的
呈現「跌勢」,而 USDCHF 真的呈現「漲勢」,那表示目前的美

金是走強,最後使用 EURGBP 這組貨幣做「確認」。因為若我們要

對 EURUSD 下「賣單」的話,表示美金走強而歐元走弱,所以如果

EUR/GBP 呈現「跌勢」,那表示不僅美金走強,歐元也正在走弱。

這時你就可以進場「賣」 EURUSD 。若我們要下買單 (BUY) 的話,

判斷的做法就剛好跟上述的相反。

-
利用「相關連動」特性來交易歐元美金 (EURUSD)

I I\ ..,~-~\.,''''\

同樣的,假設我們今天打算交易英鎊美金 (GB PUSD ) 這組貨

幣 , 我們將英鎊美金 (GBPUSD) 、英鎊日圓 (GBPJPY) 、英鎊瑞

連動交易策略風險與實務操作方法
郎 (GBPCHF) 、歐元英鎊 (EURGBP) 這四組貨幣使用 4 小時線

圖全部打開在同 一個視窗,如圖 7 -18 所示 。

因為我們目標是英鎊美金 (GBPUSD) 這組貨幣,所以,我們

要先清楚對此組 GBPUSD 是該「買」或該「賣」。若我們要下「買單」

的話,在下單之前就必須先看 GBPUSD 、 GBPJPY 以及 GBPCHF 這


• 三 組貨幣是否呈現「漲勢」。要判斷趨勢的指標其實相當多,但我
們就使用簡單的 4 小時線的 RSI 或 MACD 指標就可以了,不用把線

圖複雜化 。

假設這 三 組都是呈現「漲勢」,那表示目前的英鎊是走強,最

後使用 EURGBP 這組貨幣做「確認」。如果 GBPUSD 、 GBPJPY 以


及 GBPCHF 都呈現漲勢,照理說, EURGBP 就應該要呈現「跌勢」。
假設這些條件都對了,那你進場「買」 GBPUSD 應該是風險小了非

常多,且獲利機率也很高。當然,出場點就看個人喜好,例如停損

_
319
j
停利或當力道弱化(如 EURGBP 開始反轉)等都是出場的訊號 。 若

我們要下「賣單」的話,判斷的做法就剛好跟上述的相反。

日·冨珥 利用「相關連動」特性來交易英鎊美金 (GBPUSD)

邙R心坦 1 ,,的t屯 'G研內由 R沌妒由

又假設我們今天打算交易英鎊日圓 (GBPJPY) 這組貨幣,

我們將英鎊日圓 (GBPJPY) 、歐元日圓 (EURJPY) 、澳幣日圓


(AUDJPY) 以及瑞郎日圓 (CHFJPY) 以及歐元英鎊 (EURGBP)

這五組貨幣使用 4 小時線圖全部打開在同 一個視窗,如圖 7 -1 9 所示 。

因為我們目標是英鎊日圓 (GBPJPY) 這組貨幣,所以,我們

要先清楚對此組 GBPJPY 是該「買」或該「賣」 。 若我們要下「 買

單」的話,在下單之前就必須先看英鎊日圓 (GBPJPY) 、歐元日

圓 (EURJPY) 、澳幣日圓 (AUDJPY) 以及瑞郎日圓 (CHFJPY)

必須要呈現「漲勢」,這表示目前的日圓是走弱。假設 GBPJPY 、

EURJPY 、 AUDJPY 以及 CHFJPY 全部都呈現「漲勢」,我們最後

在使用 EURGBP 這組貨幣做「確認」。因為若我們要對 GBPJPY 下

.. 「買單」的話,表示希望英鎊走強,所以如果 EURGBP 也真的呈現

「跌勢」,那表示不僅英鎊走強,日圓也正在走弱。這時你就可以
進場「買」 GBPJPY 。若我們要下賣單的話,判斷的做法就剛好跟上

述的相反。

利用「相關連動」特性來交易英鎊日圓 (GBPJPY)

連動交易策略風險與實務操作方法
以上這四種方法就是利用貨幣的「連動特性」,將「貨幣」當

成「指標」來使交易風險最小化的 一 種做法,有興趣的讀者不彷自

己試試看。不過,「兩兩連動貨幣」並非永遠一直連動不會改變。「連

動特性」是有可能在幾種狀態時產生改變。例如央行的財政貨幣政

策變更,或該國之重要經濟命脈產品價格變化(例如黃金礦物或食

.品原料),或政治上的因素(例如政黨輪替等),或全球「投機情

緒」,或重大經濟事件(例如歐債危機)等等。以上這些情況都有

可能讓原本的「兩兩連動貨幣」產生持續性的不連動,這時「連動
套利模式」就會產生此兩個貨幣的「發散風險」。所以,讀者對「連

動套利模式」的風險情形也需要有 一 些基礎認識才行。

_
321
.,
連動交易策略程式交易方法

前兩章節有關連動套利的文章中,已經將「連動套利」的概念

及一些知名的做法都做了一些說明。相信看了前兩章節的讀者應該

都對連動套利至少掌握一定程度以上的理解及認知。前兩章節中的

第一節文章談的是概念,第二節文章談的是實務的做法。不過前兩

章節文章的方法都是手動且需要盯盤的方式,所需要付出的精砷跟

時間成本較高。筆者除了一直強調套利研究之外,我們也 一 直在深

入「策略程式化」的工作。目的就是希望讓電腦來幫我們執行我們

的策略,而非 24 小時一直盯盤。為了交易卻犧牲生活品質及身體健

康,這種盯盤交易的事情從來就不在筆者的考量之內。當然筆者也

不擅長這種身心煎熬的交易方式,同時,筆者更不願意過這種毫無

意義且非正常人式的生活,因為與其焚膏晷地為了在市場上獲利不

得不每天死守著電腦螢幕,不如花些時間到社會上當義工,這對筆

者或許多人來說這樣的生命應該是比較有意義 一 點。因此所要談的

是「連動策略自動交易」之方法,這個部分可以提供給讀者做為自

動交易的參考。

兩兩貨幣連動假設

在第 7-1 、 7-2 章節的連動套利文章有談到,連動套利方法都是

- 基於連動貨幣是處於會「一直連動的假設」。但是如果在前述文章

中所提及之幾組連動貨幣如:歐元 瑞士法郎、英鎊 —瑞士法郎、

歐元—英鎊以及澳幣—紐幣的連動產生 一 定幅度的市場背離(也就
是有很大的幅度的不連動),這時 , 連動套利模式會產生嚴重的市

場背離虧損。因此在自動交易程式上的做法我們建議是結合「馬丁

格爾理論」套用在「連動套利」理論之中。也就是說 , 將「馬丁格

爾階層式開倉模式」與「連動套利」之理論概念合在 一 起,如此 一

來,帳戶對於市場所產生的背離現象的「市場背離虧損」承受度可

以大大提高;同時,因為所採取的是「馬丁格爾階層式開倉模式」,

因此市場背離之後的收斂幅度不用太大就可以完全獲利出場。

「一買一賣」鎖住風險

筆者的做法是將「兩兩連動之貨幣」在一開始就以「 一 買一賣」

的方式來鎖住風險,當市場不如預期且開始加大發散背離時,啟動

「馬丁格爾階層式開倉模式」 一 直到市場產生某幅度的收斂即可獲

利了結出場。因為 一 開始就以「 一 買一賣」的方式開倉,所以即使

連動交易策略程式交易方法
市場大幅波動,帳戶的浮動虧損都可以被鎖定在 一 定的範圍之內,

因此風險相對而言低很多。而這個「自動交易連動套利」程式的方

法就是利用某些「兩兩貨幣」長久以來「發散 收斂」特性所開發

出來的程式 。 「兩兩貨幣」會產生「連動特性」應該是跟政經及地

緣有相當大的關係,也因為「兩兩貨幣」的連動特性,使得即使發

生短期不連動,這「兩兩貨幣」的中央銀行還是會在某個大家都在

睡覺的時間把「不連動」的部分在幾個小時內給拉回來 。 例如讀者

可以去査閱希臘危機時的歐元與瑞士法郎就是一個很好的例子 , 這

是 一 個很有趣的現象。

因為我們要利用「兩兩連動貨幣」之「連動特性」並進場套利,

因此程式 一 定會要求是哪個貨幣與哪個貨幣來執行「連動套利」,

因此設計這類程式的使用者必須要有一定程度的貨幣連動基礎知

識 。 例如假設筆者隨便問 一 個問題,像歐元是跟哪些貨幣有高度連

_
動?你必須很清楚知道是瑞士法郎與英鎊。又例如假設筆者再問 一

323
個問題,像澳幣是跟哪些貨幣有高度連動?答案是紐幣 。 所以使用

此程式的使用者必須非常清楚並能快速給出答案,這樣在程式的設

計跟使用上就不會發生任何問題。因此我們來看以下八組「兩兩連
動貨幣」的清形。

首先我們需要先做測試的是以 1 小時線為時間框架,以兩周 (10


交易日 Working Days) 的測試,先來驗證貨幣連動的發散與收斂。
利用僅僅兩周的時間卻可以達到讓我們先測試到貨幣連動情況,並 .

且淘汰不適用的連動貨幣組。因為是模擬單測試,所以筆者建議以

10,000 美金的模擬金額, 一 次就用了八組連動貨幣,但在真正的實


單交易時我們不會建議如此高槓桿。同時也請讀者千萬不要被筆者

所誤導了,以 10,000 美金來交易八組連動貨幣風險過高,在實單部

分我們決不會建議 10,000 美金交易八組貨幣。我們僅會建議以 3,000

美金為「一組貨幣」的最低金額要求,所以八組連動貨幣至少需要

24,000 美金 (8X3,000)' 這樣對資金方面的保護將會是比較安全

的,而且以下這八組連動貨幣對只是提供參考,真正在實單操做時,
筆者建議最多不要超過 三組,就是挑出做合適組別,同時控制風險。

連動貨幣對如下:

EUR/USD - USD/CHF ( Buy-Buy 或 Sell-Sell )


GBP/USD - USD/CHF ( Buy-Buy 或 Sell-Sell )
GBP/USD - EUR/USD ( Buy-Sell 或 Sell-Buy )
EUR/JPY - CHF/JPY ( Buy-Sell 或 Sell-Buy )
GBP/JPY - CHF/JPY ( Buy-Sell 或 Sell-Buy )
GBP/JPY - EUR/JPY ( Buy-Sell 或 Sell-Buy )

AUD/USD - NZD/USD ( Buy-Sell 或 Sell-Buy )


AUD/JPY - NZD/JPY ( Buy-Sell 或 Sell-Buy )

- 以上這八組的「兩兩連動貨幣」 左 邊筆者稱為「基礎貨幣」或

「加重貨幣」 (Weighted Currency)• 而右邊的貨幣筆者稱為「連


動貨幣」。讀者可以明顯看出,左邊的貨幣其「貨幣價值」比右邊

的貨幣高。而「連動套利」因為使用的是「兩兩連動之貨幣」在開

倉時就以「 一 買一賣」的方式來交易,又因為同時開倉的「兩兩連

動貨幣倉位」是同樣的比重,例如 0.03 Lot-0.03 Lot' 所以如果開倉


的方向剛好是價值高的貨幣虧損大於價值低的貨幣,那很容易會造

成「連動虧損」 (Correlation Draw Down) 。所以程式在設計時不能


只是 一 看到「兩兩連動貨幣」產生「發散」了就進場,必須再加上

一個步驟 就是判別「基礎貨幣」的發散方向,以及其「強度」。
如此 一 來,「兩兩連動貨幣」以「 一 買 一 賣」方式的開倉才比較容

易在開倉後不久就可以獲利出場。如果,很不幸的進場之後卻變成

虧損,那程式將進入大家都很熟悉的「馬丁格爾模式」。

程式上的下單模式

連動交易策略程式交易方法
上面我們有提到為了風險考量,若要使用「自動交易連動套利」

的最小資金要求是 3,000 美金,只要原因是程式的預設開倉大小是

由 0.03 Lot 起跳。所以,如果按照預設值,第 一 層起始的開倉交易

是 0.03• 因為程式的乘積是設為 1.3 , 因此連動套利程式開倉模式的

數學運算會像這樣

W = Weighted Symbol (權重貨幣)


C = Correlated Symbol (連動貨幣)
x = lot (開倉手數)

y = Multiplier (乘積)

但是因為是兩兩連動貨幣開倉方式,所以程式將會執行

Level 1 = Wx + Cx
Level 2 = Wxy + Cxy
Level 3 = Wxy2 + Cxy2
Leve14 = Wxy互 Cxy3
Level 5 = Wxy4 + Cxy4

_
325
Level 6 = Wxy5 + Cxy5

當你達到第六階時,你所開的總 Lot 數為

(x + xy + xy2 + xy + x/ + xy勺 X2

由以上公式,當我們設定程式為

x = 0.03 lot
y=l.3( 乘積)

所以

Level 1 = 0.03 (W) + 0.03 (C)


Level 2 = 0.06 (W) + 0.06 (C)
Level 3 = 0.09 (W) + 0.09 (C)
Level4 = 0.12 (W) +0.12 (C)
Level5 = 0.16 (W) +0.16 (C)
Level6 = 0.21 (W) +0.21 (C)

當你逹到第六階時,你所開的總 Lot 數為

0.03 + 0.03 + 0.06 + 0.06 + 0.09 + 0.09 + 0.12 + 0.12 + 0.16 + 0. 16 + 0.21 +
0.21 = 1.34 Lot

因為我們僅以 3,000 美金操作,但是開倉如果達到 1.34 Lots'


這會導致帳戶極有可能碰到帳戶資金 50% 的停損點,更有可能的是

開的倉位過大,使得 Margin 不夠而被斷頭。但「連動套利」與 一 般


「馬丁格爾套利」最大的區別是,兩兩貨幣的發散通常只要達到 一

定的範圍,通常會產生收斂。所以,以程式要開到第六層以上若跟

「馬丁格爾套利」比,雖然可能還是會發生,但機率低相當的多 。

不過我們還是 一 樣來計算其相關的數值。假設任何 一組「兩兩貨幣」

的發散真的達到第六層,那它有可能發散點數是多少?

若我們以程式的階層設定是 1, 2, 3, 5, 8• 然後其所對照的「層

-
距點數」是 55, 89, 144, 233 。所以,要讓程式開到第六層,那「兩
兩貨幣」的發散必須達到

55 + 89 + 89 + 144 + 144 + 144 = 665 pips


如果當「兩兩貨幣」達到 665 pips 的發散,這「兩兩貨幣」的

連動關係已經完全打破了,這只有在非常重大的經濟事件或此兩個

國家發生戰爭才有可能讓此長期「兩兩連動」貨幣變成不連動貨幣。

例如發生的歐債危機曾經有 一 度歐元與瑞士法郎產生高點距的發

散,發散的距離高達 750 點 左 右,但是瑞士央行趁世界都不交易的

時間 一 口氣拉了 700 點,又把歐元與瑞士法郎拉回到連動的軌跡來。

所以,我們認為原本「兩兩貨幣」的連動關係要突然變成不連動,

事實上並不是一件很容易發生的事。

我們假設市場真的發散到第六層的 665 pips' 且如果我們是使

用上面所述的設定,那帳戶到底可能會虧損多少錢呢?虧損多少錢

其實必須看你是使用哪 一 組貨幣做連動。如果我們假設是 EURUSD

(Weighted) -USDCHF (Correlated)• 因為我們計算的是「進場


後產生之虧損」,就假設的理論來說,囚為是連動的關係,所以

連動交易策略程式交易方法
Weighted 貨幣應該是虧損,而 Correlated 貨幣應該是獲利。如圖 7-20
所示是單 一 貨幣,乘積為 1.3 時之虧損金額

_
327
同時,因為目前市場即時價格裡,歐元:美金是 1: 1.09051• 美金:

瑞士法郎是 1 : 1.00272• 所以,它的虧損金額的理論值將達到

-1438.4X 1.09051 + 1438.4X 1.00272 = -1568.58 + 1442.32 = -126.26

也就是說,當市場發散達到 665 點時,以上面所述的設定,程

式在 EURUSD-USDCHF 這組的「浮動虧損理論值」將達到 126.26

美金,而所開的手數將達到 1.34Lots 。 雖然「浮動虧損理論值」 蛐

是 -126.26 美金,但實際的「浮動虧損值」卻有可能大大超過這個理

論值 。 主要原因是市場在發散的狀態,有可能會造成兩兩貨幣都呈

現虧損,如此 一 來,帳戶浮動虧損超出 1,000 美金也是有可能的 。

例如,假設我們想執行更保守操作,但卻非常想使用連動套利策略,

那應該怎麼執行呢?如果我們是保守投資者,且我們資金有限,只

有 1,000 美金,這時我們在風險控管上面就必須非常小心,所以,我
們的設定必須改變。

首先,我們 一 樣假設市場最大可能發散的點距會達到第六層,

所以,最大的發散點距將達到 665 Pips 。因為我們的錢很少只有 1,000


美金,所以,我們必須讓起始的交易手數降低,同時,層數的開倉

手數也不能以乘積的方式來遞增。所以,第 一 層起始的開倉交易我

們必須改為是 0.01• 所以 StartingLot 設為 0.01• 保守操作之參數設


定是把 Carry Trade 模式的開倉模式打開,如圖 7-21• 這時將會變成

如下:

Level 1 = 0.01 (W) +0.01 (C)


Level 2 = 0.02 (W) + 0.02 (C)

- Level 3 = 0.03 (W) + 0.03 (C)


Level 4 = 0.04 (W) + 0.04 (C)
Levels= 0.05 (W) +0.05 (C)
Level 6 = 0.06 (W) + 0.06 (C)
當你達到第六階時,你所開的總 Lot 數為

0.0 I + 0.0 I + 0.02 + 0.02 + 0.03 + 0.03 + 0.04 + 0.04 + 0.05 + 0.05 + 0.06 +
0.06 = 0.42 Lot

單一貨幣, Carry Trader 模式時之虧損金額 =磁_0國


』叨


_ SI

5 5
縐鹽醫醫醫區登磷一
四噩0
__噩噩0醫
_0

噩13
0

_9

8一
1
_

_1龔

-
1
蠶0
6綫繒匱矗3

4
1籮 0

龘90囍

連動交易策略程式交易方法
3磊
一10

_0

8
7

_4四
1
_


290-021

如果我們假設是 EURUSD (Weighted ) -USDCHF (Correlated )•


又歐元 : 美金是 1 : 1.09051• 美金 :瑞士法郎是 1 : 1.00272 • 所以,
.它的虧損金額的理論值將達到

-748.0X 1.09051 + 748X 1.00272 = -815.7 + 750.03 = -65.67

也就是說,當市場發散達到 665 點時,若以上面保守的設定模

式來設定,程式在 EURUSD-USDCHF 這組的「浮動虧損理論值」

將達到 -65.67 美金,而所開的手數將達到 0.42Lots 。若我們設定停

損點是帳戶資金的 50%• 那 1,000 美金要虧損達到 500 美金才會碰

到停損點,那應該是第幾層呢?答案是第 12 層,而第 12 層的發散

_
329
點距是 1830 pips 。所以當「兩兩連動貨幣」之 EURUSD-USDCHF
發散達到 1830 pips 時,帳戶「浮動虧損理論值」會達到

-6107 X l.09051 + 6107 X 1.00272 = -6659.74 + 6123.61 = -536. I 3

所以若以 1,000 美金來操作,以保守的方式來設定, EURUSD­

USDCHF 發散達到 1830 pips 時,帳戶會碰到 50% 的停損點。不過「兩

兩連動貨幣」的發散點距要達到 1830 pips 真的是非常困難而且也不 ·


太可能。所以,這種保守的設定方式會碰到停損點,筆者個人認為

機率真的不是很高。

程式套用的時間框架及出場模式

筆者原先一直認為這個程式的獲利應該是很低才對(因為是兩

兩「叩生對沖」的關係),後來筆者仔細去觀察這些貨幣的線圖,

發現了一個很有趣的現象。假設我們使用日線圖,將此「兩兩連貨

幣動」拿出來比對,其線型幾乎是「一個模子」出來的。若再以 4

小時線圖來看,將此「兩兩連貨幣動」一比對,其線型變成僅是「雙

胞胎」而非是「一個模子」,因為它們之間的差異已經開始顯現。

再以 1 小時線圖來看,將此「兩兩連貨幣動」一比對,其線型更是

變成僅像「兄弟」而非是「雙胞胎」,因為它們之間的差異已經開

始明顯,同時有許多地方其實是發散而不連動的。因為此程式是用 l

小時線圖為時間框架,所以程式因為這種「發散 —收斂」特性在 1

小時線非常明顯,所以常常會在「發散」時進場,而「收斂」時獲

利出場。因此「兩兩連貨幣動」交易策略建議套用在 l 小時線的時

間框架上執行。

- 接下來談一下程式的獲利出場策略。因為連動貨幣是兩兩進場,

所以當然也是兩兩出場。程式除了原本的獲利連結出場方法之外,
我們建議加入了「 三 步驟停利出場策略」。

也就是說,當「自動交易」的獲利出場程式是當市場達到停利

點時,「整組的兩兩連動貨幣」倉位全部停利並關倉出場。而所謂

的「 三 步驟停利出場策略」是只要達到 一 定程度的獲利,就先關掉

一 部分的倉位,先落袋為安。方法很簡單,就是當此「兩兩連動貨

幣」達到所設定的「第 一個獲利目標」時,先關掉 1 /3 倉位。當達到

所設定的「第 二 個獲利目標」時,再關掉 1/3 倉位 。 最後再把所剩

下的 1/3 倉位停利後關掉。我稱它為「 三 步驟停利出場策略」。例如,

我們 一 開始開倉是 0.03 Lot - 0.03 Lot• 達到所設定的第 一 個獲利目


標時,先關掉 1/3 倉位,這時原本的倉位就變成 0.02 Lot - 0.02 Lot ;
以此類推。

避免高風險套用

連動交易策略程式交易方法
近日的歐元、英鎊都跟瑞士法郎曾經發生過嚴重「背離」(發

散),發散的點距都曾超過 800 點 (800 pips) 以上,所以使用連動

策略容易因為兩兩貨幣對產生發散結果而造成非常嚴重的虧損。瑞

士法郎 (CHF) 在 2015 年 l 月 15 日曾發生舉世聞名的「瑞郎原爆

鼻事件」,這其實是比歐債危機時還嚴重的黑天鵝事件。可見瑞士法

郎 (CHF) 當避險貨幣的模式,要越來越小心。未來歐洲區貨幣的

相互連動現象(歐元、英鎊、瑞郎),有可能會被完全的打破。讀

者在外匯市場上一定要有 一 個心理準備,那就是:「外匯市場裡任

何事都是有可能會發生的」。所以讀者在套用此策略時,要小心並

保守操作使用才不至於浮虧嚴重擴大且收斂不回來,而這種現象在

未來國際貨幣市場上當然也是有可能常常發生。

_
331
三角套利策略
我漸漸能意會到,深刻並不等淤接近事實。
一村上春樹,《揶威的森林》


... 、~ ~.•

\,
., ✓
CD
三角套利策略概念及介紹

三角套利基本概悆

談到「套利」 (Arbitrage) 這個字,無論如何都是要談到著名

「三角套利」 (Triangular Arbitrage) 。「 三角套利」的套利方式是


一種概念,利用三種高度相關或連結的商品來「相互對沖」 (Mutual

Hedge)• 而「相互對沖」 (Mutual Hedge) 之後可以產生極為嚴謹

的「避險關係」,同時利用這三角相互關係 (Triangular Mutual Re-


lationship) 的市場無效性 (Non-Effective Market) 來獲取幾乎可以
「確定」的利益,這就是非常多避險基金經理人很喜歡的「三角套

利」。例如使用黃金、石油及美金的 三角 相互關係 (Triangular Mu-


tual Relationship) 來執行「 三角套 利」就是 一門套 利投資學的顯學
知識。在外匯市場裡,貨幣的「三角套利」更是高階外匯交易人員

眼中極為重要的套利知識以及交易策略,因為這種三角的「買—買

—賣」 ( Buy-Buy-Sell) 或「賣賣買」 (Sell-Sell-Buy) 會產生「理


論上的不買不賣」。因此,「三角套利」也被稱之為「無缺點對沖」

(Impeccable Hedge) 或「完美對沖」 (Perfect Hedge) 。

我們知道所有商業的核心概念來自於「等值交換」 我們一

生當中的所有食衣住行等都跟「等值交換」這樣的簡單商業概念有

..
關。例如,一盒雞蛋超市賣你 33 元新台幣,而一元美金也 一 樣賣你
33 元新台幣,而新台幣一塊錢可能讓你買到一顆糖果 這就是一

種「等值交換」。這裡還有一個很重要的基礎,那就是人們必須「相
信」這樣的「價值」是合理且願意接受的。例如在台北信義計畫區

裡的豪宅可以一坪新台幣兩百萬元成交 , 但這個「新台幣兩百萬元」

的價值在雲林縣海邊的偏遠鄉下地方已經可以買到一個三樓透天的

房子,這就是人們所「相信」的「價值」。但是這個由人們所「相信」

的「價值」是會隨著市場的波動而產生變化,所以它事實上會一直

隨著不同的時間點而產生不同的價值一就因為「價值」會隨著不同

的時間點產生變化,在交易當中才會產生「利潤」。

由這個簡單的概念來衍生到「貨幣的價值」可以很清楚知道,

任何一個貨幣不僅其「價值」會隨著不同的市場時間點產生變化,

它還必須有另一個貨幣來與它做「價值比較」。因此,在整個國際

外匯市場的貨幣商品符號都是 XXXNYY 。 X幻璞t 是基準貨幣 ( B ase

Currency)' 而 YYY 就是報價貨幣 (Quote Currency) 。例如 EUR/


USD• 其意義就是歐元 (EUR) 為基準貨幣,而美金 (USD) 就

角套利策略概念及介紹
是報價貨幣。我們以 2016 年 1 月 17 日的 EUR/USD 的交易牌價為

1.1.09106 為例,其意義就是 1 歐元 (EUR) 必須要用 1.1.09106 美


金 (USD) 來做「等值交換」。那美金的價值呢?它一樣是使用「價

值比較」而來的。例如 2016 年 1 月 17 日的 USD/CHF 的交易牌價為 1 :


1.00308• 其意義就是 1 美金 (USD) 要用 1.00308 的瑞士法郎 (CHF)
來做「等值交換」即可。由以上的 EUR/USD 跟 USD/CHF 的「等值
交換」商業模式系統,我們是不是就可以產生 EUR/CHF 的「等值交

換」價格呢?這就是「三角關係的等值交換」。

我們使用簡單的數學來說明所謂的「三角關係等值交換」商業

模式系統。假設我們有三個變數:

..ab

_
335
• C

而若這 三個變數之間的 a/b 與 b/c 之兩兩關係為

• alb= 2.5
• b/c = 2

則 c/a = 1/ ( alb X b/c ) = 1/ ( 2.5 X 2) = 1/5 = 0.2· 所以


• c/a = 0.2
同時,由以 上 之關係我們可以算出其理論的「 三 角關係等值交換」為:

• ( alb) X (b/c ) X ( c/a) = 2.5X2X0.2 = 1

如果我們將以上之 a, b, c 套在貨幣上,例如:

• a= EUR
• b = USD
• c = CHF
這三個變數之間的 a/b 、 b/c 與 c/a 之兩兩關係為

• alb= EUR八J SD

• b/c = USD/CHF
• c/a = CHF/EUR

但是因為在國際貨幣市場裡並沒有 CHF/EUR 這樣的貨幣,所以

• CHF /EUR = 1/ ( EUR/CHF)

我們以 2016 年 1 月 17 日的 EUR/USD 、 USD/CHF 及 EUR/CHF

的交易牌價為例:

EUR叩 SD = 1.09106
USD/CHF = 1.00308
EUR/CHF = 1.09454

- 而其產生的實際市場的「 三角關係等值交換」為

1.09106 (EUR/USD ) X 1.00308 ( USD/CHF ) X ( 1/1.09454 )


( 1/ ( EUR/CHF )) = 0.999890789 ( <l )
又例如,我們以今天 2016 年 l 月 17 日的 AUD/USD 、 NZD/

USD 及 AUD/NZD 的交易牌價為例:

AUD/USD = 0.68731
NZD/USD = 0.63958
AUD/NZD = 1.07442

而其產生的實際市場的「三角關係等值交換」為

0.6873 ( AUD/USD ) X 1/0.63958 ( USD/NZD ) X ( 1/ 1.07442 )


(1/ ( AUD/NZD )) = 1.00019275 (> 1)

讀者是不是發現其「三角關係等值交換」在實際外匯貨幣市場

竟然不等於理論值的 l 。

三角套利策略概念及介紹
以上的例子不管是大於 1 (> 1) 還是小於 1 (1<)• 它就是不會

等於 l 。這就是外匯市場所謂的「市場無效性」 (Non-Effective Mar-


ket) 。而若我們利用實際外匯市場的「市場無效性」來進行同步的

三組貨幣 : EUR/USD (Buy) 、 USD/CHF (Buy) 、 EUR/CHF (Sell)


或 EUR/USD (Sell) 、 USD/CHF (Sell) 、 EUR/CHF (Buy) 的同

• 時開倉,或者是 AUD/USD (Buy) 、 NZD/USD (Sell) 、 AUD/NZD


(Sell) 或 AUD/USD (Sell) 、 NZD/USD (Buy) 、 AUD/NZD (Buy)
的同時開倉並在獲利後同步關倉,就叫做外匯套利交易的「三角套
利」

_
337
我們以上面的 EUR/USD 、 USD/CHF 及 EUR/CHF 做例子:

EUR/USD = 1. 09106
USD/CHF = 1.00308

就理論而 言 EUR/ CHF EUR/USD X USD/CHF


1.09106 X 1.00308 = 1.09442

但是市場的實際報價卻是

EUR/CHF = 1.09454

我們再以上面的 AUD/USD 、 NZD/USD 及 AUD/NZD 做例子:

AUD/USD = 0.68731
NZD/USD = 0.63958

就理論而言 AUD/NZD = AUD/USD X 1/ (NZD/USD)


0.68731 X 1/0.63958 = 1.07461

但是市場的實際報價卻是

AUD/NZD = 1.07442

所以,以 EUR/USD 、 USD/CHF 、 EUR/CHF 這 三 組來說,在實


際的外匯市場報價與理論值就產生了:

.. 1.09454 (實際報價) - 1.09442 (理論值)


差距。
= 0.00012• 就是 1.2P 」ps 的
以 AUD/USD 、 NZD/USD 、 AUD/NZD 這三組來說,在實際的

外匯市場報價與理論值就產生了:

1.07442 (實際報價) - 1.07461 (理論值) = - 0.00019• 就是 -1.9 Pips


的差距。

當然,若以上面兩組三角貨幣的「市場無效性」報價差距是完

全無法進場去執行「三角套利」。理由很簡單,就是「三角套利」

是同步進場去交易三個貨幣組的倉位,假設每個貨幣組的開倉成本

是 3 Pips• 那光是交易成本就高達 9 Pips• 因此如果「市場無效性」


報價差距沒有高過交易成本,那麼執行「三角套利」可以說是完全

無利潤可言。因此「市場無效性」的報價差距必須高過交易成本,

那執行「三角套利」的利潤才有可能是確定的。

而這種「市場無效性」的報價差距高過交易成本的市況,通常

三角套利策略概念及介紹
必須藉由「等待」來讓市場發生,在快市的情況下比較容易發生此

類的報價誤差。

「三角套利」理論

介紹更細部的「三角套利」,同時也會以國際八大貨幣 (EUR 、

USD 、 JPY 、 GBP 、 CHF 、 AUD 、 NZD 、 CAD) 的三角組合來介紹


實際之「三角套利」交易方式。

接下來我們要談一下其相關的理論,也就是以市場波動時的「市

場無效性」 (ineffective market) 理論來執行「 三角套利」 ,這是本

篇文章的重點。

在下一個章節,筆者將為讀者歸納了約 118 組可執行「三角套

利」的貨幣組合,但我們不需要拿全部這 118 組貨幣來討論理論部

_
339
份,這裡我們將僅拿 EUR/USD 、 USD/CHF 、 EUR/CHF 以及 EUR/

USD 、 USD/JPY 、 EUR/JPY 這兩大組「三角貨幣組合」來討論「 三

角套利」的理論可行性即可,其他的「 三 角貨幣組合」所依據的理

論方法就是「依此類推」,筆者相信這對讀者而言,不會有太大的

困難 。 這裡,我們先再複習 一 下何謂「 三 角套利」,「 三 角套利」

是利用市場波動時的「市場無效性」,或是所謂的三種貨幣兌換機

制之間的「不平衡外匯市場」 (Imbalance between Three Foreign Ex-


change Markets) 來進行套利 。 在尚未往下討論之前,我們 一 樣先看
一 下市場的報價系統,如圖 8-1 。

BGI 公司的貨幣牌價表

Symbol Bid Ask


• EURUSD 1.09106 1.09129
• USDCHF 1.00308 1.00339
• GBPUSD 1.43430 1.43458
• USDJPY 117.357 117.381
• AUDUSD 0.68731 0.68759
• USDCAD 1.45069 1.45109
0.99715 0.99761
0 63958 。 64005
0.68955 0.69004
• AUDJPY 80.664 80.706
• EURCAD 1.58292 1.58338
• AUDNZD 1.07442 1.07490
• AUDSGD 0.99022 0.99079
• CADCHF 0.69124 0.69174
• CADJPY 80.876 80.919
• CHFJPY 116.970 117.016
• CHFSGD 1.43591 1.43656
• EURAUD 1.58704 1.58760
• EURCHF 1.09454 1.09492
• EURGBP 0.76049 0.76079
• EURJPY 128.052 128.087
令 EURNZD 1.705邳 1.70613

.. 牌價上有明顯的「 Bid 」以及「 Ask 」的價格。我們都知道「 Bid 」

就是「銀行」或是「你的經紀商」跟你買賣貨幣時他們的「買入」
價格,所以永遠是比較低的價格。因此我們下單時若是想下「賣單」

時,不管市場如何波動,一定是以「 Bid 」的價格成交(因為你的「賣

出」價格就是「銀行」或是「你的經紀商」的「買入」價格)。而

「 Ask 」是「銀行」或是「你的經紀商」跟你買賣貨幣時他們的「賣

出」價格,所以永遠是比較高的價格。因此我們下單時若是想下「買

單」時,不管市場如何波動,一定是以「和 d 」的價格成交(因為你

的「買入」價格就是「銀行」或是「你的經紀商」的「賣出」價格)。

談以上這個外匯交易的基礎知識是因為「三角套利」所牽涉到的是

三個貨幣的「買入」_「買入」_ 「賣出」或「賣出」 -「賣出」_「買

入」,所以「三角套利」所執行的套利模組是「 Ask 」_「 Ask 」-「 Bid 」

或「 Bid 」_「 Bid 」-「 Ask 」的貨幣價格。這之中就會有所謂的「交

易成本」的問題。

我們以 EUR/USD-USD/CHF-EUR/CHF 做為例子,假設我們

三角套利策略概念及 介紹
有一筆歐元 (EUR) 的資金 Xi• 假設我們將此筆資金 (Xi) 全部

賣掉並用來買入美金 (USD)• 並將這筆美金 (USD) 全部換成瑞

士法郎 (CHF)• 最後將此瑞士法郎 (CHF) 再換成歐元 (EUR)

Xf 。如果你繞了這麼一大圈結果得到 Xf >Xi• 那表示你換匯換了


一圏以後的資金 X f 比你原本的資金幻還多,這表示你套利成功。

• 而這個簡單的換匯手法,其實就是「三角套利」概念的精隨。

但是還是老話一句:「天下沒有白吃的午餐」,通常繞了這麼

一大圏結果得到一般都是得到 Xf <Xi• 也就是說,你換匯換了 一

圈以後的資金 Xf 比你原本的資金趴還少,除了匯差之外,另外最

大的問題就是換匯的「交易成本」。

我們以圖 8-1 的 EUR/USD• USD/CHF• 及 EUR/CHF 的交易牌

價為例:

_
341
EUR/USD = 1.09106 (Bid)
USD/CHF = 1.00308 (Bid)
EUR/CHF = 1.09492 (Ask)

而其產生的實際市場的「三角關係等值交換」(「 Bid 」-「 Bid 」­

「 Ask 」)為

1.09106 (EUR/USD) X 1.00308 (USD/CHF) X (1/1.09492)


(1/ (EUR/CHF)) = 0.999543 77

以 1,000 萬美金 (100 Lots 合約)為例,以上的換匯後結算只剩

10,000,000 X 0.99954377 = 9,995,437.7• 所以結算後損失 10,000,000


- 9,995,437.7 = 4562.3 美金(換匯損失)。

又例如我們以實際市場的「三角關係等值交換」的「 Ask 」­

「 Ask 」_「 Bid 」為例子,則

EUR/USD = 1.09129 (Ask)


USD/CHF = 1.00339 (Ask)
EUR/CHF = 1.09454 (Bid)

而其最終交換匯率後的結果為

1/1.09129 (1/EUR/USD) X 1/1.00339 (1/USD/CHF) X (1.09454)


(EUR/CHF) = 0.99876582

以 1,000 萬美金 (100 Lots 合約)為例,以上的換匯後結算只剩

.. 10,000,000 X 0.99876582 = 9,987,658.2• 所以結算後損失 10,000,000


- 9,987,658.2 = 12,341.8 美金(換匯損失)。
所以上面的例子清楚的說明,不管是以「 Bid 」-「 Bid 」-「 Ask 」

(就是你對銀行或經紀商執行「賣出」-「賣出」_「買入」),或

「 Ask 」_「 Ask 」-「 B 叫(就是你對銀行或經紀商執行「買入」_「買

入」_「賣出」),其結果都是以虧損收場。那既然都是虧損,還研

究什麼呢?事實上,以上這些算出來虧損的現象其實才是「正常的

市場現象」。但我們所要的並不是這樣正常報價的市場,我們要的

是「報價錯誤」的「非正常市場現象」

所以,我們最想要的就是當市場產生 (EUR/USD) x (USD/


CHF) x (1/ (EUR/CHF)) >l 或 (EUR/USD) x (USD/JPY) x
(1/(EUR/JPY))>l 的市場「錯誤定價」情形,因為「錯誤定價」

的關係,我們就可以從中套取低風險的利益。

數學公式及可行性報告

三角套利策略概念及介紹
我們若定義這個「 Bid 」_「和 d 」-「 Ask 」或「 Ask 」_「 Ask 」­

「 Bid 」為 r Ct)· 則

r Ct)= n ri Ct) , i = 1-3

當 r (t)>l 時,就是一個「三角套利」的進場機會點。

假設我們的換匯模式是 EUR-> USD->CHF-> EUR 或 EUR->USD­


>JPY->EUR• 則

_
343
r ( t ) = ( EUR/USDBid ( t )) X ( USD/CHF和d ( t )) X (1/ ( EUR/
CHFAsk ( t ) ) )
r ( t ) = ( EUR/USDBid ( t )) X ( USD/JPYBid ( t )) X ( 1/ (EUR/
JPYAsk ( t ) ) )

假設我們的換匯模式是 EUR->CHF-> USD-> EUR 或 EUR->JPY­

>USD->EUR• 則

r ( t ) = ( 1/ ( EUR/USDAsk ( t ) ) ) X ( 1/ ( USD/CHFAsk ( t ) ) )
X ( EUR/CHFBid ( t ))
r ( t ) = ( 1/ ( EUR/USDAsk ( t ) ) ) X ( 1/ ( USD/JPYAsk ( t ) ) )
X ( EUR/JPYBid ( t ))

既然公式已經可以這麼清楚的推論出來,那麼接下來就是到底

r (t)>l 的機會有多少,都發生在何時,發生後會持續多久等等,
這些都是決定「 三 角套利」的可行性以及可獲利性的關鍵 。

我們來看圖 8-2 以及圖 8-3 的示意圖 。

瑞士法郎 (CHF) 及日圓 (JPY) 產生「錯誤定價」的長度及其


發生之時間點

1.0004

,....
0.9988

10/04/05 10/05/05 10/06/05 10107/05


Time

- 10/04/05 10/05/05
Time
10106105 10/07/05
產生「錯誤定價」的機會次數

,,:
JPY CHF
1500 1500

~ !i
n• 一一一一一一一一一一一一一一一一一一一一一·
8 12
Hour
16 20 。 。 4 8 Ho1u2r 16 20

'
.̀ .
II)

0
C 4

12
6

01 11111111111111
.·Cl)
- ·.

囹-6
~ffi
8

4
6

2
nl 1111111111111111111111
8 12
Hour
16 20
。 4 8 12
Hour
16 20

角套利策略概念及介紹
鬪 8-2 及圖 8-3 是由英國牛津大學 (University of Oxford) 所統

計出來的結果,圖 8-2 及圖 8-3 的時間是以 GMT 的時間為準。由圖

8-2 及圖 8-3 已很清楚地看出不管是左下圖的日圓或右下圖的瑞士法

郎都顯示出在 GMT20: 000-GMTOO : 00• 就是在美洲盤結束 一一亞

洲盤還未開始的台北時間 AM4: OO-AM7: 00• 其所發生之「錯誤

定價」所持績的時間最長,平均從「發生到結束」的平均時間約為 3-7

秒,然而其發生的頻率卻不高。但在是左上圖的日圓或右上圖的瑞

士法郎都顯示出在 GMT13 : OOO-GMT16 : 00• 也就是在美洲盤的


台北時間 PM9 : OO-PM24 : 00• 其所發生之「錯誤定價」所持續的
時間最短,平均從「發生到結束」的平均時間約為 3 秒以下,然而

其發生的頻率卻相當高。

_
345
避開「短時效性」的市場

由以上的統計資訊可以傳達一個清楚的訊息給我們,如果我們

要執行「三角套利」策略一定要避開有「市場無效性」的機會但卻

「短時效性」的市場。因為「短時效性」的「市場無效性」會讓我

們的「三角套利」進場的時間點剛好就是「錯誤定價」改成「正確

定價」的時間點,這只會徒增我們的交易成本而已。

如果我們專注於美洲盤結束 亞洲盤還未開始的台北時間

AM4: OO-AM7: 00 這四個小時的「 三角套利」機會 ,即使每天 -


個「三角套利」貨幣組僅有一次機會,一個月就可以有 20 次進場機

會。又,如果每次扣除所有的交易成本可以套出 10 Pips 的利潤,那

麼就理論來說,一個月一個「三角套利」貨幣組就可以套出 20X 10
= 200 pips 的利潤 。

如果這些理論上的推演都可以使其在實務上成真,那真正「低

風險」且「長期穩定獲利」的「外匯套利自動交易程式」就真的可

以達成,不過理論的情況在實際市場的套用上無法完全適用,主因

就是理論只是數學及機率統計推演,但在實際市場上,市況的變動

卻是常常無法掌控的,所以在實際市況上,還有許多難題必續克服,

例如瞬間交易成本拉高或滑點等等都會令此理論無法達成獲利的目

標。
三角套利策略風險與實務操作
方法

三角套利討論

由上節的文章介紹中知道,「三角套利」是利用市場波動時的

「市場無效性」,或是所謂的三種貨幣兌換機制之間的「不平衡外

匯市場」 (Imbalance between Three Foreign Exchange Markets) 來進


行套利。

市場無效性/不平衡外匯市場

-一角套利策略風險與實務操作方法
要利用這種「市場無效性」的套利,除了市場的報價誤差以及

交易成本之外,有時或多或少與各別經紀商也有相當大的關係。因

為我們所要交易的外匯保證金市場其實是由外匯交易者透過外匯經

紀商的「報價系統」來進行買賣,而每一家的外匯經紀商對於外匯

市場的價格反應在任何的一個時間點上會有些微差異,其會造成差

異的原因是每一家的外匯經紀商所合作的外匯價格報價銀行不一定

會相同。

因此,在某一個時間點上, A 外匯經紀商若產生「市場無效性」

的「錯誤定價」現象,在 B 外匯經紀商卻不一定會發生。所以在觀

念上要清楚知道,要使用「三角套利」策略來執行「幾乎確定」的

利潤要非常有耐心的等待。同時,這種方式的套利僅能使用電腦程

式即時反應,因為「三角套利」的機會每次維持數秒到數分鐘左右,

_
347
通常很快就會消失,以人工下單操作的方式是很難達到該有的套利

效果。

錯誤定價

除此之外,就算我們使用的是即時反應的「自動交易程式」,

也無法「保證」進場後可以套到我們所期待的「錯誤定價利潤」。

我們舉個例來說 。 我們都知道市面上幾乎所有的「外匯交易平台」 翬

都是以每個 Tick 為資料更新的「時間單位」,也就是說在每 一 個


Tick 裡,外匯經紀商的報價伺服器都會更新所有貨幣的價格報價。

假設我們的「自動交易程式」在某個 Tick 時間點上發現了高「錯誤

定價」點差並同時下單去開倉進場,同時也很幸運在 Tick+l 的時間

點上成交,但很不幸的如果在 Tick 時間點上的「錯誤定價」產生後

卻在 Tick+ 1 的時間點變成正常,那我們在 Tick+ 1 的時間點上所成交

的「 三 角套利」會變成毫無利益可言。所以我們要認清「 三 角套利」

也僅是眾多套利方法的 一 種,它一樣無法達到「 100% 保證」獲利,

但它卻是 一 種可說是「比較確定」的利潤。

有關於「錯誤定價」,我們再舉一個簡單的例子 。 假設我們有
三 組貨幣:加幣 (CAD) 、美元 (USD) 和澳幣 (AUD)• 當我們

執行「賣」 USD/CAD 、同時又「買」 AUD/CAD 時,其實就是「賣」

USD 「買」 CAD 且「買」 AUD 「賣」 CAD• 所以就如同是「買」


AUD 「賣」 USD• 也就是「買」 AUD/USD 的意思 。 所以

CAD/USDXAUD/CAD = AUD/USD

例如當 l 美元可以讓你兌換加幣 1.44613 (USD/CAD = 1:

- 1.44613)• 而當 1 澳幣兌美金是 $0.69408 (AUD/USD = 1: 0.69408)•


而澳幣兌加幣是$ 1.00386 (AUDCAD
式子:
= 1 : 1.00386)• 依照上面的
1/ 1.44613 X 1.00386 = 0.69416 (理論值)

但 0.69416 (理論值)卻高於市場報價的 0.69408 (市場報價),


這時就產生明顯的「錯誤定價」,這時外匯套利高手可能就會進場

做套利 。 實務上的做法以及概念其實並不困難,也就是所有「 三 角
套利」都是假設在「錯誤定價」之後,市場會恢復成「正確定價」,
因此當「錯誤定價」的貨幣報價高於理論值,表示它會跌價以符合
「正確定價」的價格。同樣的,當「錯誤定價」的貨幣報價低於理
論值,表示它會漲價以符合「正確定價」的價格 。 所以當「錯誤定
價」的貨幣報價高於理論值時,我們「賣」這個「錯誤定價」的貨幣,
當它跌回「正確定價」的價格時就是獲利出場點。當「錯誤定價」
的貨幣報價低於理論值時,我們「買」這個「錯誤定價」的貨幣,
當它漲回「正確定價」的價格時就是獲利出場點。但是讀者不要興

奮的太早,「天下真的沒有白吃的午餐」,事情其實並沒有沒有想

像中的簡單 。

角套利策略風險與實務操作方法
要執行「 三 角套利」是否可獲利的最大可能問題點在於「點差

成本」 (Spread Cost) 以及「滑價成本」 (Slippage Cost) 。因為在


外匯市場的所有交易都是有「點差成本」的,執行「 三 角套利」必
須將這些「點差成本」算進去,同時也要計算可能會發生經紀商給
. 你的「滑價成本」。所以 一 般而言如果市場的「錯誤定價」程度沒
有達到 一 定的標準,進場做三角套利不見得是有利可圖。

耐心等候

因此,這種套利模式的另 一 個缺點是要「耐心等待」,因為這

種機會不是時常會出現,最常出現的時間點大都落在「交易時區」

變更的前後 l 小時,例如亞洲盤轉到歐洲盤,歐洲盤轉到美洲盤,

美洲盤轉到亞洲盤的各前後 1 個小時。雖然缺點 一 大堆,但是最大

的優點是風險低且「獲利比較穩定」 。

_
349
三角貨幣對組合

接下來,我們想談到底有多少組貨幣可以組成「三角套利」,

我們先看圖 8-4 BGI 公司所公告之可交易貨幣組。

-
BGI 公司公告之可交易貨幣組

rsM~ymEU
arket~RWUaStDch, ILS0,03 Bid Ask High Low Time A

1.12139 1.12162
'
23 1.12586 1.11871 11:50:00
• USDCHF 0.97056 0.97085 29 0.97261 0.96872 11:49:59
<> GBPUSD 1.42669 1.42695 26 1.43959 1.42525 11:49:59
<> USDJPY 111.589 111.614 25 112.187 111.373 11c49c59
• AUDUSD 0.75897 0.75926 29 0.76195 0.75500 11:49:59
• USDCAD 1.30654 1.30698 44 1.31341 1 30520 11:49:59
令 AUDCAD 0.99173 0.99219 46 0.99518 0.98997 11:50:00
• NZDUSD 0.67411 0.67459 48 0.67743 0.67193 11:50:00
• AUDCHF 0.73665 0.73708 43 0.73869 0.73362 11:50:00
令 AUDJPY 84.698 84.741 43 85.421 84.114 11:50:00
令 EURCAD 1.46529 1.46578 49 1.47201 1.46347 11:49:59
• AUDNZD 1.12545 1.12596 51 1.12699 1.11887 11:50:00
<> AUDSGD 1.03265 1.03337 72 1.03496 1.02941 11:50:00
• CADCHF 0.74260 0.74308 48 0 74358 0.73985 11-49:59
令 CADJPY 85.381 85.427 46 85.885 84.785 11:49:59
• CHFJPY 114.950 114.992 42 115.704 114.527 11:49:59

-~
• CHFSGD 1.40156 1.40231 75 1.40641 139927 11:49:59
• EURAUD 1.47717 147766 49 1.48496 1.47411 11:49:59
令 EURCHF 1.08855 1.08884 29 1.09128 1.08738 11:50:00

• EURJPY
+ EURNZD
令 EURSGD
• GBPAUD
一-
125.147
1.66281
1.52570
1.87933
125.179
1.66346
1.52656
1.87989
32
65
86
56
126260
1.66837
1.53306
1.89917
124.668
1.65822
1.52379
1.87843
11:50:00
11:50:00
11:49:45
11:50:00
• GBPCAD 1.86425 1.86480 55 1.88173 1.86415 11:49:59
• GBPCHF 1.38476 1.38528 52 1.39587 1.38476 11:49:59
令 GBPJPY 159.220 159.257 37 161.481 158.817 11:50:00
令 GBPSGD 11:49:59
11:49:59 "

光是圖 8-4 的各種貨幣對 (31 組)就讓人眼花繚亂,我們光

是國際的八大貨幣所組起來的可能方式就已經高達 2/\8 = 256 組,

若要完全把所有可組成三角套利的貨幣組別都組起來,那可能高達

2/\31 = 2,147 ,483,648 組的可能 。在實務的操作上 ,要拿如此多組來


執行三角套利,根本是不可能的。以下是已經經過篩檢的三角貨幣

組合, 一共有 118 組。


AUDCAD CADJPY AUDJPY
AUDCAD EURCAD EURAUD
AUDCAD GBPCAD GBPAUD
AUDCAD USDCAD AUDUSD
AUDCHF CHFJPY AUDJPY
AUDCHF EURCHF EURAUD
AUDCHF GBPCHF GBPAUD
AUDCHF USDCHF AUDUSD
AUDJPY CADJPY AUDCAD
AUDJPY CHFJPY AUDCHF
AUDJPY EURJPY EURAUD
AUDJPY GBPJPY GBPAUD
AUDJPY NZDJPY AUDNZD
AUDJPY USDJPY AUDUSD =
AUDNZD EURNZD EURAUD
AUDNZD GBPNZD GBPAUD
AUDNZD NZDUSD AUDUSD
AUDUSD EURUSD EURAUD
AUDUSD GBPUSD GBPAUD
AUDUSD USDCAD AUDCAD
AUDUSD USDCHF AUDCHF
AUDUSD USDJPY AUDJPY
CADJPY AUDJPY AUDCAD
CADJPY EURJPY EURCAD
CADJPY GBPJPY GBPCAD
CADJPY USDJPY USDCAD
CHFJPY AUDJPY AUDCHF

_
351
CHFJPY EURJPY EURCHF
CHFJPY GBPJPY GBPCHF
EURAUD AUDCAD EURCAD
EURAUD AUDCHF EURCHF
EURAUD AUDJPY EURJPY
EURAUD AUDNZD EURNZD
EURAUD AUDUSD EURUSD
EURAUD GBPAUD EURGBP
EURCAD AUDCAD EURAUD
EURCAD CADJPY EURJPY
EURCAD GBPCAD EURCAD
EURCAD USDCAD EURUSD
EURCHF AUDCHF EURAUD
EURCHF CHFJPY EURJPY
EURCHF GBPCHF EURGBP
EURCHF USDCHF EURUSD
EURGBP GBPAUD EURAUD
EURGBP GBPCAD EURCAD
EURGBP GBPCHF EURCHF
EURGBP GBPJPY EURJPY
EURGBP GBPNZD EURNZD
EURGBP GBPUSD EURUSD
EURJPY AUDJPY EURAUD
EURJPY CADJPY EURCAD
EURJPY CHFJPY EURCHF


EURJPY GBPJPY EURGBP
EURJPY NZDJPY EURNZD
EURJPY USDJPY EURUSD
EURNZD AUDNZD EURAUD
EURNZD GBPNZD EURGBP
EURNZD NZDJPY EURJPY
EURNZD NZDUSD EURUSD
EURUSD AUDUSD EURAUD
EURUSD GBPUSD GBPUSD
EURUSD NZDUSD EURNZD
EURUSD USDCAD EURCAD
EURUSD USDCHF EURCHF
EURUSD USDJPY EURJPY
EURUSD USDNOK EURNOK
GBPAUD AUDCAD GBPCAD
GBPAUD AUDCHF GBPCHF =
GBPAUD AUDJPY GBPJPY
GBPAUD AUDNZD GBPNZD
GBPAUD AUDUSD GBPUSD
GBPAUD EURAUD EURGBP
GBPCAD AUDCAD GBPAUD
GBPCAD CADJPY GBPJPY
GBPCAD EURCAD EURGBP
GBPCAD USDCAD GBPUSD
GBPCHF AUDCHF GBPAUD
GBPCHF CHFJPY GBPCHF
GBPCHF EURCHF EURGBP
GBPCHF USDCHF GBPUSD
GBPJPY AUDJPY GBPAUD

_
353
GBPJPY CADJPY GBPCAD
GBPJPY CHFJPY GBPCHF
GBPJPY EURJPY EURGBP
GBPJPY NZDJPY GBPNZD
GBPJPY USDJPY GBPUSD
GBPNZD AUDNZD GBPAUD
GBPNZD EURNZD EURGBP
GBPNZD NZDJPY GBPJPY
GBPNZD NZDUSD GBPUSD
GBPUSD AUDUSD GBPAUD
GBPUSD EURUSD EURGBP
GBPUSD NZDUSD GBPNZD
GBPUSD USDCAD GBPCAD
GBPUSD USDCHF GBPCHF
GBPUSD USDJPY GBPJPY
NZDJPY AUDJPY AUDNZD
NZDJPY EURJPY EURNZD
NZDJPY GBPJPY GBPNZD
NZDJPY USDJPY NZDUSD
NZDUSD AUDUSD AUDNZD
NZDUSD EURUSD EURNZD
NZDUSD GBPUSD GBPNZD
NZDUSD USDJPY NZDJPY
USDCAD AUDCAD AUDUSD

--
USDCAD CADJPY USDJPY
USDCAD EURCAD EURUSD
USDCAD GBPCAD GBPUSD
USDCHF AUDCHF AUDUSD
USDCHF CHFJPY USDCHF
USDCHF EURCHF EURUSD
USDCHF GBPCHF GBPUSD
USDJPY AUDJPY AUDUSD
-~.-一--一- -- -

USDJPY CADJPY USDCAD


USDJPY CHFJPY USDCHF
USDJPY EURJPY EURUSD
USDJPY GBPJPY GBPUSD
USDJPY NZDJPY NZDUSD

為何我們需要列出這麼多三角貨幣組合呢?因為前面已經說
過,任何一個單一獨立的「三角貨幣組」可執行「三角套利」的機

會不會時常出現,既是如此,如果我們有-個程式可以在每一個

角套利策略風險與實務操作方法
Tick 來時就「掃瞄」以上這 118 組「三角貨幣組」的可交易可能性,
如此一來,交易機會應該可以大幅增加。理想的作法是希望可以在

這些「三角貨幣組」出現「市場無效性」的「錯誤定價」時進場,

並在很短的時間內即可獲利出場。不過在實務的程式設計上,要達
到這樣的目標可不是一件簡單的事。下一篇文章我們將探討「三角

鼻 套利」之 FPI 理論以及程式設計的部分。

_
355
三角套利策略程式交易方法

三角套利的困難處

在前篇的文章當中,我有提到過,「三角套利」在外匯市場上

屬於「理論上可行」,但是「實際上不可行」的策略,尤其當投資

者使用的是 MT4 平台的話,要套取利益真的不太容易。

主因在於我們都是獨立的「個別投資者」,我們的「角色不對」

因為以一個「終端投資者 Client 」的身分,想透過 MT4 去套取「市

場價差利益」有很大的困難,主因是交易成本以及滑點等不可預測

的問題,所以實際上在執行面真的是不簡單。為什麼呢?首先,我

們必須了解,即使投資者是在一個公正公開對外丟單 STP/ECN 模式

的經紀商開戶,但只要使用的是 MT4 平台,「三角套利」幾乎可說


是要靠機運才可套到利潤。所以這麼說,是因為整個外匯市場機制

跟架構,最上層稱之為「 Inter Bank 」或「 Liquid Provider 」,就是所


謂的「資金供應商」;接下來是我們所熟知的「外匯經紀商」,這

裡所談的「外匯經紀商」是指專門針對「零售市場」報價的經紀商;

最後一層才是我們這類獨立的個別投資者。

當整個架構一層層下來的時候,最初產生價差是在「最上層」,

-
然後遞延到「外匯經紀商」,再遞延到個別投資者的「終端平台」,

不僅己經產生相當多的「時間差」,另外令人更沮喪的是 MT4 後台

系統都是將「最差的價格」往外報給投資者,最好的價格留給「經

紀商本身」。
最後 一 項因素是,雖然 MT4 的系統架構都是以 Tick 為基準,

但程式在下單時都是在 Tick 的價格來了以後予以檢查邏輯,如果邏

輯正確,程式會在下 一 個 Tick 送出「下單指令」給「經紀商」的伺

服器。如此一來,「時間遞延差異十價格優劣差異十程式 Tick 延遲」

這 三 個因素加起來,使得「 三 角套利」變成不可行。因為原先鎖住

的價格到了真正成交時的價格至少延遲「 三 個 Tick 以上」 。 此外,

尚有經紀商索取的「交易點差」、「市場滑點」等等問題。對 一 個

僅僅是要套取微薄「市場無效性」的「三角套利」來說,光這幾項

市場因素就足以打敗「學者的理論」。

FPI 理論

在 8 -1 章節裡提的「 三 角套利」簡單的理論是目前市場上大眾

熟知的 FPI 三角貨幣進場理論。 FPI 全名 : FPI - Fractional Product

角 套利策略程式交易方法
Inefficiency' 也就是利用市場的「報價無效性」進場做「 三 角套利」。

簡單的數學架構如下:

權重貨幣 : wSymbol

交叉貨幣: CrossedSymbol

三 角貨幣 : TriangularSymbol

若我們以歐元美金 EURUSD 、 英鎊美金 GBPUSD 、以 及歐元英

鎊 EURGBP 來執行 FPI 的套利,則

權重貨幣 : wSymbol = EURUSD


交叉貨幣: CrossedSymbol = EURGBP
三 角貨幣: TriangularSymbol = GBPUSD

_
357
FPI 的公式如下:

FPI = CrossedSymbol_EURGBP X TriangularSymbol_ GBPUSD X


( 1/wSymbol_EURUSD ) ;

因此在程式設計時的簡單宣告就是

II===== GetFPIValue
string Sl = wSymbol; II ` `"
EURUSD
string S2 = CrossedSymbol; II "EURGBP"
string S3 = TriangularSymbol; II "GBPUSD"
double S l _EU = Marketlnfo (SI ,MODE_BID) ,
double S2_EG = Marketlnfo (S2,MODE_BID) ;
double S3_GU = Marketlnfo (S3,MODE_BID) ,
double FPI = S2_EG * S3_GU * (1/Sl_EU) ,

以下是簡單以 GBPUSD 、 USDJPY 以及 GBPJPY 的「三角貨幣

套利」 FPI-Fractional Product Inefficiency 原始碼。

extern string iPairl = "GBPUSD" ,


extern string iPair2 = "USDJPY" ;
extern string iPair3 = "GBPJPY" ;
double Main[], PAIRl[] ,PAIR2[] ,PAIR3[],

II+ 十

int start ()

ArrayCopySeries (PAIRl,MODE_CLOSE,iPairl,Period ()) ,


ArrayCopySeries (PAIR2,MODE_ CLOSE,iPair2,Period ()) ,
ArrayCopySeries (PAIR3,MODE_CLOSE,iPair3,Period ()) ,

-
mt counted_bars = IndicatorCounted () ,
inti= O;

if (counted_bars<O) return (-1) ;


if (counted_bars>O) counted_bars--,
mt limit = Bars-counted_bars,

for (i = O; i<limit; i++)

Main[i] = PAIRl 囯* PAIR2[i]* (1/PAIR3[i]) ,

return (0) ,
}
I!+------------------------ ---------------+

但如果是真的要利用 FPI 理論來進場做交易,我們必須將我們

在文章中所提過的「交易成本」算進來,也就是 FPI 必須> 1 或< 1


且其偏離的點數至少要超過交易成本,例如若我們所交易的三角貨

幣「總交易成本」是 9 點 (9 PIPS)• 那麼 FPI 必須是在> 1.0009


或< 0.9991 這樣的數字下,程式進場才可能會有利潤。以下是以歐

元美金 EURUSD 、英鎊美金 GBPUSD 以及歐元英鎊 EURGBP 來執

行 FPI 的套利的 MT4 程式。

角套利策略程式交易方法
II -一-----------------------------------------//
II FPI - Fract10nal
. Product Ineffic1ency EA II
I/ ------------------------------------------------------------------------一一---//
extern double Tota!Profit = 50,
extern double LoFPI = 0.9991,
extern double HiFPI = 1.0009,
extern mt Lot = 1.0;

mt start ()
{
int TO = OrdersTotal () ;

II = = = = = Get FPI Value

string Sl = "
EURUSD,, ;
string S2 = " EURGBP " ,
string S3 = " ,
` GBPUSD·

double EU= Marketlnfo (Sl,MODE_BID),

359
double EG = Marketlnfo ( S2,MODE_BID ) ,
double GU = Marketlnfo ( S3 ,MODE_BID ) ,
double FPJ = EG * GU * ( 1/EU ) ,

1f (( FPI<LoFPI ) && ( TO == 0 ))
{
OrderSend ( S l ,OP_ SELL, Lot, Marketlnfo ( SI ,MODE_ BID ) , 2,
NULL, NULL, "FPI" , magic, NULL, FireBrick ) ;
OrderSend ( S2,0P_BUY, Lot, Marketlnfo ( S2 ,MODE_ASK ) , 2,
NULL, NULL, "FPI" , magic, NULL, LimeGreen ) ;
OrderSend ( S3,0P_ BUY, Lot, Marketlnfo ( S3 ,MODE_ASK ) , 2,
NULL, NULL, "FPI" , magic, NULL, LimeGreen ) ;

else if (( FPI>HiFPI ) && ( TO = = 0 ))


{
OrderSend ( S1 ,0P_BUY, Lot, Marketlnfo ( S l ,MODE_ASK ) , 2,
NULL, NULL, "ppr" , magic, NULL, FireBrick ) ;
OrderSend ( S2,0P_SELL, Lot, Marketlnfo ( S2,MODE_ BID ) , 2,
NULL, NULL, "pp( , magic, NULL, LimeGreen ) ;
OrderSend ( S3,0P_SELL, Lot, Marketlnfo ( S3 ,MODE_ BID ) , 2,
NULL, NULL, "ppr" , magic, NULL, LimeGreen ) ;
}
II = = = = = Get Account Profit and Update Highest Profit

double Profit = AccountProfit () ;

II = = = = = If Target Profit reached then Close All Orders

1f (( Profit> = TotalProfit ) && ( TO = = 3 ))


{
Alert ( "Total Profit of ",Tota!Profit," has been reach. Closing all
trades now! " ) ,
CloseAUPositions ( ) ,

return ( 0 ) ,

-
}
全球資金流交易
策略

Twenty-first century, it is characterized by rapid change and globalization


二十 - 世紀,它的特徵是急速的變化和全球化 。

亞倫 · 葛林斯潘

、~.-

一-
. .

. ..
`
全球資金流交易策略概念及
介紹

概悆介紹

我們這章節文章將討論「全球資金流」的現象,以及如何利用

這種現象來交易以獲取利益;甚至更進一步設計一套套利方法,來

取得長期穩定獲利的目標。

在經濟學上有所謂的巨觀 (Macro) 與微觀 (Micro) 經濟,而

其實所有人類的經濟活動,包括消費、投資、匯款、借貸等等一樣

有所謂的巨觀與微觀。也就是說,當我們在執行經濟活動時,通常

不太能仔細觀察金錢的「實體流向」,也就是常常弄不清楚現金流

的實體進出現象;不過大抵能算出哪些錢消費在哪些項目之上,所

以我們說這是屬於比較微觀經濟統計的部分。當我們將相同的經濟
計算方法擴大到整個國家時,藉由國家的經濟統計數據,可以觀察

到這個厰家的經濟活動行為狀況,這是屬於比較巨觀經濟統計的部

分。如果,我們把這種觀察再擴大到全世界,對全球的「錢財流向」

的視野將會更清楚明瞭;也就是說,當你是站在一個巨人的肩膀上,

你所能看得的距離與可以觀察到的現象將比平常人更深入且清楚。

簡單的例子,比如說我們可以觀察螞蟻昆蟲其非常細微的行為,

但是如果換做我們是螞蟻昆蟲,我們卻無法觀察到自己很細微又全

.. 面的經濟活動。所以,當我們可以觀察「全球資金流」的資金流向

現象時,是不是就類似以一種巨觀的角度來觀察全世界人類資金的
流向以及其經濟行為呢?談起這種「全球資金流」的流向的現象真

的是 一 項非常有趣的經驗。

筆者本身並非是經濟系或金融相關科系背景,不過這個「全球

資金流」知識其實是由某位 TraderlOl 網友在外匯論壇論述的文章而

來。早期這位 TraderlOl 網友在國際外匯界也是很有名,且輩份極高,

他的外匯交易利益應該是不低。各位讀者如果想讀這位 TraderlOl 大

師的文章只要在 Google 打「 TraderlOl 」字眼就可以找的到。不過近

幾年它的模式並不是真的那麼賺錢,雖然聽說有商業公司找他合作,

以他的方法來開發「自動交易程式」,不過筆者很懷疑其可執行性。

因為 TraderlOl 大師的方法必須以模擬帳戶當成參考基準,如何將模

擬帳戶進場訊號轉到真實帳戶去,真的是很深的學問。

模擬帳戶實驗

全球資金流交易策略概念及介紹
讓我們來做 一 個實驗,請讀者在任何 一 個「外匯交易平台」開

一個「模擬帳戶」,然後依照以下的貨幣組合開倉。

GBP/USD
EUR/GBP
GBP/CHF
CHF/JPY
AUD/JPY
EUR/JPY
USD/CHF

_
363


以上 貨 幣 請 都開「 賣」倉 , 請 全部開 O. lLot 。 接下來,將以下

貨 幣都開「買 」 倉, 一 樣 全部 都開 O. lLot 。

CAD/JPY
AUD/USD
USD/JPY
EUR/USD
EUR/CHF
GBP/JPY
USD/CAD

所以,以 上 開 買倉有七種貨 幣 對 , 開賣倉 也 一 樣有七種貨 幣對 。

開 倉 後如 圖 9-1 所示。

在模擬帳戶開「七組貨幣做買」以及「七組貨幣做賣」

Type Size Symbol Price


sell 0 . 10 audjpy 86.46
sell 0.10 eur-j py 150.898
sell 0 . 10 eurgbp 0.79427
buy 0.10 usdcad 1.06290
sell 0.10 chfjpy 94 .31
sell 0,10 usclchf 1.11930
sell 0.10 gbpchf 2 .01332
sell 0 . 10 gbpusd 1,79889
buy 0 . 10 usdjpy 105.616
buy 0.10 gbpjpy 190.015

-
buy 0 . 10 eurusd 1.42975
!

! r-·--一-
buy
buy
r-
0 . 10
0.10
- ,彎. -'-- • ~a
eurchf
cadjpy
- ud-u-sd
1.60042
99.4 2
'buy 0.10 0.81905
當全部都開完倉之後,因為開倉成本,所以帳戶一定是先虧損

某個額度。假設平均每組貨幣交易之均成本是 2 pips• 那開完倉位應

該是虧損 2 pips X 14 currency pairs X 0.1 Lot X 10 (1 pip = $10) = -$28


美金,然後就讓這 14 組貨幣自行的波動,不用再理會。接下來,請

讀者按 Profit 那個欄位,您可以讓它由「獲利最大」排到「虧損最

大」,或是由「虧損最大」排到「獲利最大」,這都沒有關係。排

列的目的僅是讓自己知道全球資金流向,讓自己方便判斷該「下買

單」還是「下賣單」(如圖 9-2) 。

開倉後請按最右邊 的 Profit 欄依獲利排列


mgn-
~{i51-g- iBMmI-n-l'ni-

1nnn~nun
~!!一

,, ... .... .--. . ..., ....


......,.
.... - .,,, 一的 ,

3 一-···.. .。

..... ..•• -·-· ===


3 一......
U ===

,...
」一-··-- ,.。
,.,.=
_,
IQ_,
:.- _m.,.,, _,,.,, "'•• - ~。

ll•心""'"'""""
~- .. .• --
._••
; -— -·-- .. .. -
33 一..,.....
一 面m••• --n-i' ....

..
_,, .., ~

3一
il"""" ...... ,,
.. •• -
....
..。.
pu pu ......
,m
..
,`

全球資金流交易策略概念及介紹
-- -
3 一""""""
c.•-
a - ~ =,, .. •• -·-
辛w ••,,
- - ..。. .-
.. `嶋

·鸕
-
....,
.

a 一 訌這.. ..。.
蛐.......... .. ....,_,,._
鬮``.一~""'~" ......
U品

過一段時間之後(如 4 小時至 1 天),你會發現帳戶會虧損達

一個額度以後(大約是在 $120 以內),不管市場如何波動或震盪也

不管過多久的時間,帳戶就是一直維持在虧損某個範圍之間。這個
時候,開始會出現一個非常有趣的現象,你可以明顯看見開買倉或

開賣倉的貨幣是賺錢還是賠錢,有時買倉都是賺錢而賣倉都是賠錢,
有時是買倉都是賠錢而賣倉都是賺錢。不管哪些貨幣是賺,哪些貨

幣是賠,帳戶的虧損金額卻一直不會擴大但也沒有縮小多少,這就

是一種資金平衡。接下來我們開始觀察,開倉部位哪些是獲利而哪

些是虧損。方法是觀察 Profit 欄位並比對 Type 欄位情形(如圖 9-3) 。

_
365
,`,." `7 .e.` .2.U . ' § 7e

.二
.嘈

`卜

·電
'
p 9 9 BU 9119 9 9 U I!BBn~nn~
,' ••
g Ct'-
gnR gu2 g`

g
g
8oc`n-

g
JHj.UU!l 日 HU§
,`
•••• a-
悪壹母震 R嚥墀孟幗贏·胭壹震 RI

•• `


汛 m

自一
e
u~BB i ll邑 ~n~ i~:iHu11Hn~~ "
,'
l
,' ,'
g.'
,' ',
ng
gg
geo

g·0
~1 ! ! 1; m1111; , , 1

a`"」[.

.。

皂」,
J」
U」"'"'一
I I I I II DI ! 1 1

礙螂 I
•i ! i
wm

g
alt ! ! I§I II i§i ! ! !
赳靈 odA茹

ti !; BBB

日 0
-卡
, ! BB ggg;

k嚀
z
`紺血幗贓齷鏃贓嚻 v~98~
11: ! § ~11 JO;~~i: A ll 呂!圉 ~H I !~U~: !H~B : .邑`'呈 ~n
l,```.`
,.'.°,
l`._,`.,
`,.°,
1·°, ,,I
l 1`
nt`
·1-`
L1蝨疽稟Ilued槨謚

ffHHH IJPH H
! : :: :H:~ •:::: :!' .. ., ••.,
, , , ,, '
'

....••--_.~
J 11 1 11 1 ,1 / II'''H ~

_店
t

g.
1::::u:: :u=:
』 HIUUIUIUI ;

iii iii ii i iii i;
二佃!」

6幗g贓
` 磾嶧嶧彞智 ``
在圖 9-3 中,讀者可以清楚看出已經有相當多開「買倉」是呈

現獲利,而開「寶倉」卻是開始呈現虧損,由圖 9-3 所示,開「買倉」


是獲利而開「賣倉」是虧損,是不是表示全球之資金應該是往「開

買倉」的方向走呢?「沒錯!答對了。」在這個時候,我們通常需

要等待,等待什麼呢?一等待一個市場是往「確定是開買倉」的方

向走的信號。例如僅用「量」 (Volume) 來判斷是否是該進場執行「開

買倉」或「開賣倉」的動作。由圖 9-4 裡已經明白顯示,買倉的獲

利力道增強,且賣倉的虧損力道也增強。

由圖 9-4 我們知道了當開「買倉」的七組貨幣都一個一個開始

賺錢,而開「賣倉」的七組貨幣也都一個一個開始賠錢,這時全部

14 組貨幣執行「買倉」部位的信號已經出現。以上都是在「模擬帳
戶」中觀察資金流現象,當信號確定以後,這時,我們進場在實單

帳戶開 14 組貨幣執行「買倉」(如圖 9-5) 。

全球資金流交易策略概念及介紹
由圖 9-5 可以明顯看出,全球資金流的確是往「開買倉」的方

向走。由上面的例子來看,從買的信號確認,到進場「買」然後呈

現獲利其實還沒超過 3 個小時。

同樣的,如果全球資金流的確是往「開賣倉」的方向走,你就

必須進場執行「賣」 14 組貨幣。請注意,是全部 14 組貨幣要一起進

場「買」或「賣」。所以獲利速度非常的快速;獲利快速虧損當然

也一樣快速,這是相對的。因此執行此種交易必須嚴格設定停利和

停損,因為一次是開 14 組貨幣,以免當「資金流」反向時一下子就

產生高額虧損。利用這種多達 14 組貨幣開倉判斷多空的方式,有經

驗的人就會常常可以看到「全球貨幣」走向。若搭配即時的財經消

息,再看看這 14 組貨幣的開倉結果,讓人會覺得全球金錢的移動就

如潮水一般的流動,非常精采且有趣。

_
367
這種交易模式也被稱之為「 Basket Trading 」。不過這種交易模
式並不是被所有的投資專家定義歸類於「套利分析」,它雖然有類
似套利的可能模式,但卻有「非套利模式」的高風險。

全球資金流策略之對沖貨幣對

我們都知道,市場的波動不會簡單的依照「數學計算」讓投資

者稱心如願,因為那幾乎是不可能的。「全球資金流」策略必須把幀

14 個貨幣(雙邊各七組)的價格波動都收納進來,然後做市場判
斷,看市場是偏向哪一邊,一次全部買多或全部賣空。若要設計成

為程式,其難度是相當高的,且這個程式的難度不會比我們第五章

所介紹的 Blessing 來的低,因為 Blessing 的核心僅只是「馬丁格爾


策略」,同時,其就僅僅只是「單 一 貨幣」做運算,沒有牽涉到「多

貨幣運算」。而此 TraderlOl 網友的「全球資金流策略」是「多貨

幣運算」,一個程式如果需要一次「計算 14 個貨幣」,以 MT4 的

MQL4 語 言來說 ,這個程式碼不太可能會低於 三千行 ,其困難之程


度顯而易見。

筆者很誠實的告訴讀者,此 Trader IOI 網友的「全球資金流策略」


也是一種「趨勢預測」,當趨勢預測錯誤,一樣會產生大幅虧損。

所以在國際外匯論壇上有一位自稱是在大學任教數學的網友發表一

篇文章直接指出, TraderlOl 網友的「全球資金流策略」的「整體趨


勢」很像一組貨幣的走勢,那就是 EURJPY 這個貨幣。也就是說,

若同時開 14 個貨幣對 1 LOT 的 BUY 單,其意義相當於對 EURJPY


這個貨幣對開 BUY 單 14 LOTS• 反之亦然。

所以就這個策略來說,我們其實可以將其視為一個連動現象,

.. 也就是「全球資金流」裡的「所有 14 組貨幣」當成-個單位與
EURJPY 這個貨幣對當成一種「正向連動」的關係。如此一來,以「貨
幣對沖」概念來避險的交易方式就可以依照此方式執行。

全球資金流交易策略風險與實
務操作方法

在前一節的文章裡,已經將「全球資金流」的現象做了一個簡

單的說明。筆者的建議是,觀念清楚最重要,其它的就是盡量將複

雜的事情簡單化;只要觀念清楚,策略的利益及風險都可以用科學

方法來量化,只要能夠量化利潤與風險,交易就會變成一件愉悅的

事情,而非每日戰戰兢兢面對不可知的市場在賭博。所以在交易的

世界裡,我們的處事原則就是盡量「策略簡單化並程式化」,並將

最大風險與利潤都能計算出來,這樣對我們一般的投資者來說就是

全球資金流交易策略風險與實務操作方法
日日是好日,夜夜是好眠的日子。

使用 Script 程式代替手動下單

我們再先重複一下有關於「全球資金流套利」上一節的重點。

首先,打開與你實單交易同一個「外匯經紀商」的「模擬單帳戶」;

這個「模擬帳戶」是一個當你要進場做實單交易時的一個很重要的

參考基準。所以,你當然也可以把這個「模擬單帳戶」當成是類似

一個「指標」(筆者稱它為「帳戶指標」)。當此「帳戶指標」告

訴你要進場開買倉時,你就到你的實單帳戶去開買倉,當「帳戶指

標」告訴你要進場開賣倉時,你就到你的實單帳戶去開賣倉;所以

非常簡單。但何時開買單,何時開賣單,其實才是此「帳戶指標」

的重點所在。

-
369
你開啟與你實單交易是同一個「外匯經紀商」的「模擬單帳戶」

後,我們必須做以下動作——開七個貨幣組的賣倉 (Sell)• 貨幣組

如下:

1. GBPUSD
2. EURGBP
3. GBPCHF
4. CHFJPY
5. AUDJPY
6. EURJPY
7. USDCHF

同時又再開七個貨幣組的買倉 (Buy)• 貨幣組如下:

8. CADJPY
9. AUDUSD
10. USDJPY
11. EURUSD

12. EURCHF
13. GBPJPY
14. USDCAD

以上貨幣都開全部都開 O. lLot (開 lLot 也可以,反正只是做整

體貨幣對趨勢的方向參考)。

.. 一次要開這麼多組貨幣又是買又是賣豈不累死人?沒錯,所以

我們需要一個簡單的 Script (腳本)程式來幫我們執行這樣的動作。


一個開倉的 Script 程式 (7 Buy + 7 Sell) 如下,有興趣的讀者可以

直接將它拷貝成 MT4 的 Script 檔就可以執行。

extern double Lot = 0.1, // 每次每組貨幣開 0.1 Lot


II+----------------------------------------------- 一----------------+
II\ script program start function
II+------- 十

mt start ()
{
OrderSend ("GBPUSD" ,OP_ SELL, Lot, Marketlnfo
("GBPUSD" ,MODE_ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("EURGBP" ,OP_SELL, Lot, Marketlnfo
("EURGBP" ,MODE_ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("GBPCHF" ,OP_SELL, Lot, Marketlnfo
("GBPCHF" ,MODE_ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);

全球資金流交易策略風險與實務操作方法
OrderSend ("CHFJPY" ,OP_SELL, Lot, Marketlnfo ("CHFJPY" ,MODE_
ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE) ;
OrderSend ("AUDJPY" ,OP_SELL, Lot, Marketlnfo
("AUDJPY" ,MODE_ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("EURJPY" ,OP_SELL, Lot, Marketlnfo
("EURJPY" ,MODE_ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("USDCHF" ,OP_SELL, Lot, Marketlnfo
("USDCHF" ,MODE_ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("CADJPY" ,OP_BUY, Lot, Marketlnfo ("CADJPY" ,MODE_
BID) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE) ;
OrderSend ("AUDUSD" ,OP_BUY, Lot, Marketlnfo
("AUDUSD" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("USDJPY" ,OP_BUY, Lot, Marketlnfo ("uSDJPY" ,MODE_
BID) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE) ;
OrderSend ("EURUSD" ,OP_BUY, Lot, Marketlnfo
("EURUSD" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_

_
371
NONE),
OrderSend ("EURCHF" ,OP _BUY, Lot, Marketlnfo
("EURCHF" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("GBPJPY" ,OP_BUY, Lot, Marketlnfo ("GBPJPY" ,MODE_
BID), 2, NULL, NULL, NULL, 0, 0, CLR_NONE);
OrderSend ("USDCAD" ,OP_BUY, Lot, Marketlnfo
("USDCAD" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
return (0) ,

當以上這 14 組貨幣的七組買倉及七組賣倉都開倉完畢之後,第

二件事就是讓這 14 組貨幣用 Profit (獲利)這個欄位來排序_讓獲

利最高的貨幣組排在最上面或讓獲利最高的貨幣組排在最下面都可

以,這是可以依照個人喜好來決定。

剛開始時,這 14 組貨幣匯呈現無規則排列,你完全不需要去理

會它,就把這個模擬帳戶擺個幾小時到一天的時間,這時你就會發

現 一 些市場的規則性似乎開始呈現出來。

假設我們讓獲利最高的貨幣組排在最上面,而虧損最高的貨幣

組排在最下面,這時我們必須要注意當買的七組貨幣是在排序的前

七個(就是買倉都是獲利的意思),而賣的七組貨幣是在排序的後

七個(就是賣倉都是虧損的意思),通常這是買的訊號;反之則是

賣的訊號。在原始的 TraderlOl 策略著作中還有所謂的錨點 (anchor

position)• 以及其他更細微的買賣點進場策略,這個部分在下 一 節
裡作介紹。

- 接下來當「模擬單帳戶」的這個「帳戶指標」出現買倉信號時,

我們一樣使用 Script 來執行「一次買 14 個貨幣」的倉位;不過這是


在「實單帳戶」下執行。如下所示。
extern double Lot = 0.1 , /每次每組 貨 幣開 0.1 Lot
II+------------------------------------------------ ------------------+
//I script program start function
II+ ----------------------------------------------+
int start ()
{
1114 Buy
OrderSend ( "GBPUSD" ,OP_BUY, Lot, Marketlnfo
( "GBPUSD" ,MODE_ASK ), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "EURGBP" ,OP _BUY, Lot, Marketlnfo
( "EURGBP" ,MODE_ASK ), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE );
OrderSend ( "GBPCHF" ,OP _BUY, Lot, Marketlnfo
( "GBPCHF" ,MODE_ASK ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "CHFJPY" ,OP_BUY, Lot, Marketlnfo ( "CHFJPY" ,MODE_
ASK ) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ( "AUDJPY" ,OP_BUY, Lot, Marketlnfo ( "AUDJPY" ,MODE_

全球資金流交易策略風險與實務操 作方法
ASK ), 2, NULL, NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ( "EURJPY" ,OP_BUY, Lot, Marketlnfo ( "EURJPY" ,MODE_
ASK ), 2, NULL, NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ( "USDCHF" ,OP_BUY, Lot, Marketlnfo
( "USDCHF" ,MOD見ASK ), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "CADJPY" ,OP_BUY, Lot, Marketlnfo ("CADJPY" ,MODE_
BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ( "AUDUSD" ,OP_BUY, Lot, Marketlnfo
( "AUDUSD" ,MODE_BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "USDJPY" ,OP_BUY, Lot, Marketlnfo ( "USDJPY" ,MODE_
BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ( "EURUSD" ,OP_BUY, Lot, Marketlnfo
( "EURUSD" , MOD見BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE );
OrderSend ( "EURCHF" ,OP_BUY, Lot, Marketlnfo
( "EURCHF" ,MODE_BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "GBPJPY" ,OP_BUY, Lot, Marketlnfo ( "GBPJPY" ,MODE_

_
373
BID) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE) ,
OrderSend ("USDCAD" ,OP _BUY, Lot, Marketinfo
("USDCAD" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);

return (0) ,

同樣若市場是反向的,當「模擬單帳戶」的這個「帳戶指標」 幀

出現賣倉信號時。我們一樣使用 Script 來執行「 一 次賣 14 個貨幣」

的倉位;這是在「實單帳戶」下執行。如下所示。

extern double Lot = 0.1; //每次每組貨幣開 0.1 Lot


II+ -----------------------------+
II) script program start function
II+------------------------ --------------------+
int start ()
{
//14 Sell
OrderSend ("GBPUSD" ,OP_SELL, Lot, Marketlnfo
("GBPUSD" ,MODE_ASK), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("EURGBP" ,OP _SELL, Lot, Marketlnfo
("EURGBP" ,MODE_ASK), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("GBPCHF" ,OP_SELL, Lot, Marketlnfo
("GBPCHF" ,MODE_ASK), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("CHFJPY" ,OP _SELL, Lot, Marketlnfo ("CHFJPY" ,MODE_
ASK), 2, NULL, NULL, NULL, 0, 0, CLR_NONE);
OrderSend ("AUDJPY" ,OP_SELL, Lot, Marketlnfo
("AUDJPY" ,MODE_ASK), 2, NULL, NULL, NULL, 0, 0, CLR_

- NONE);
OrderSend ("EURJPY" ,OP_SELL, Lot, Marketlnfo
("EURJPY" ,MODE_ASK), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("USDCHF" ,0 見SELL, Lot, Marketinfo
("USDCHF" ,MODE ASK), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("CADJPY" ,OP_SELL, Lot, Marketinfo
("CADJPY" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
'ONE);
OrderSend ("AUDUSD" ,OP _SELL, Lot, Marketlnfo
("AUDUSD" ,MOD見BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("USDJPY" ,OP SELL, Lot, Marketlnfo
("USDJPY" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("EURUSD" ,OP_SELL, Lot, Marketlnfo
("EURUSD" ,MODE_BID) , 2 、 NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("EURCHF" ,OP SELL, Lot, Marketlnfo
("EURCHF" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("GBPJPY" ,OP_SELL, Lot, Marketlnfo ("GBPJPY" ,MODE_
BID) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE) ;

全球資金流交易策略風險與實務操作方法
OrderSend ("USDCAD" ,OP_SELL, Lot, Marketlnfo
("USDCAD" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR
NONE);

return (0) ,

一但實單的倉位都開啟了以後 ,就如 筆者在第一節文章所說,

因為這種策略時是趨勢策略 ,有市場方向性,因此必須嚴格設定「停

利點」以及「停損點」。所以,以下兩個「自動交易程式」必須附

在這 1 4 組貨幣裡的任何兩組貨幣,來執行「停利」以及「停損」

以下是達到停利點後關倉之程式。

extern double My_Profit_Target = 100,


int start ()
{
1f (AccountProfit () > = My_Profit_Target)

_
375
for (i = OrdersTotal () -1 ;i> = O;i一-)
{
OrderSelect (i, SELECT_BY_pOS) ,
int type = OrderType () ,
boo! result = false,
switch (type)
{
//Close opened long posit10ns
case OP_ BUY :
result=
OrderClose (OrderTicket () ,OrderLots () ,Mar-
ketinfo (OrderSymbol () ,MODE_BID) ,Slippage,Pink) ;
break;
//Close opened short positions
case OP_ SELL :
result=
OrderClose (OrderTicket () ,OrderLots () ,Mar-
ketlnfo (OrderSymbol () ,MODE_ASK) ,Slippage,Pink) ;
break,

1f (result = = false) Sleep (3000) ,

Print ("Account Profit Reached. All Open Trades Have Been


Closed!") ;
return (0) ,

return (0) ,

以下是達到停損點後關倉之程式。

extern double Stop_Loss_To_CloseTrades = -500,

..
int start () {
if (AccountProfit () < = Stop_Loss_To_Close Trades)

for (i = OrdersTotal () -1 ;i> = O;i 一-)


OrderSelect ( i, SELECT_BY_POS ) ,
int type = OrderType () ,
boo! result = false,
switch ( type)
{
//Close opened long pos 山 ons
case OP_BUY :
result =
OrderClose ( OrderTicket () ,OrderLots
() ,Marketlnfo ( OrderSymbol () ,MODE_BID ) ,Slippage,Pink ) ,
break,
//Close opened short positions
case OP_ SELL :
result =
OrderClose ( OrderTicket () ,OrderLots
() ,Marketlnfo ( OrderSymbol () ,MODE_ASK ) ,Slippage,Pink ) ,

全球資金流交易策略風險與實務操
}
if ( result = = false ) Sleep ( 3000 ) ,

Print ( "Account Sto Loss Reached. All Open Trades Have


Been Closed" ) ;
return ( 0 ) ,

return ( 0 ) , 作方法

377

全球資金流交易策略程式交易
方法

在上節文章裡,我們除了對「全球資金流交易」方法做了 一 個 .
簡單的說明之外,也提供了程式實做方面的介紹。此「全球資金流
交易」在國際外匯論壇上稱此種交易方法為「 Basket Trading 」。不
過因為「馬丁格爾策略」的開倉方式也稱為「 Basket 」,為了不造成
混淆,筆者比較喜歡稱此種方法為「全球資金流交易」。此「全球
資金流交易」方法對很多外匯交易者而言其實還算很陌生,有必要

將此方法的細節部分再做說明,雖然此「全球資金流交易」的開倉

方法在 9-1 節與 9-2 節文章都介紹過了,這裡我們還是再重覆一遍 。

策略操作細節

首先,打開與你「實單交易」同一個「外匯經紀商」的「模擬
單帳戶」 這個「模擬單帳戶」是一個當你要進場做實單交易時的

一 個很重要的參考基準。所以,使用者必須把這個「模擬單帳戶」
當成是 一 個「指標」,我們稱它為「帳戶指標」。當此「帳戶指標」
告訴你應該要進場「開買倉」時,你就到你的「實單帳戶」去開買倉,

而當「帳戶指標」告訴你應該要進場「開賣倉」時,你就到你的「實
單帳戶」去開賣倉。所以非常簡單。至於何時開買單,何時開賣單,

是此「帳戶指標」的重點所在,所以這篇文章會做更詳盡的說明 。

當讀者開啟與「實單交易」是同 一個「外匯經紀商」的「模擬單帳戶」

..
後,我們必須 一 次開倉 14 組貨幣組,其中七組貨幣開賣倉,另外七
組貨幣開買倉。通常我們以 O.lLot (1 Lot 或 0.01 Lot 也都可以)來
當成「帳戶指標」的排序觀察。
各開七組賣/買倉

第一個步驟:一次開倉 14 組貨幣組,其中七組貨幣開賣倉,另
外七組貨幣開買倉。

先開以下七個貨幣組的賣倉:

l23567
GBPUSD
EURGBP

.GBPCHF
....
4
CHFJPY
AUDJPY

EURJPY

全球資金流交易策略程式交易方法
USDCHF

同時又再開以下七個貨幣組的買倉:

89
··
CADJPY
AUDUSD

10. USDJPY
11. EURUSD

12. EURCHF
13. GBPJPY

14. USDCAD

所以我們以一個簡單的 Script 程式來幫我們執行以上開倉的動


作。

-
379
extern double Lot = 0.1 ,
//+--------- ------------------------+
//I script program start function
II+------------------------------------------------------------------+
int start ()
{
OrderSend ( "GBPUSD" ,OP_ SELL, Lot, Marketlnfo
( "GBPUSD" ,MODE_ASK ), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "EURGBP" ,OP_ SELL, Lot, Marketlnfo
( "EURGBP" ,MODE_ASK ), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE );
OrderSend ( "GBPCHF" ,OP_ SELL, Lot, Marketlnfo
( "GBPCHF" ,MODE_ASK ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "CHFJPY" ,OP_SELL, Lot, Marketlnfo ( "CHFJPY" ,MODE_
ASK ) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ( "AUDJPY" ,OP_SELL, Lot, Marketlnfo
( "AUDJPY" ,MODE_ASK ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "EURJPY" ,OP_ SELL, Lot, Marketlnfo
( "EURJPY" ,MODE_ASK ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE );
OrderSend ( "USDCHF" ,OP_SELL, Lot, Marketlnfo
( "USDCHF" ,MODE_ASK ), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "CADJPY" ,OP_BUY, Lot, Marketlnfo ( "CADJPY" ,MODE_
BID ), 2, NULL, NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ( "AUDUSD" ,OP_BUY, Lot, Marketlnfo
( "AUDUSD" ,MODE_BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE );
OrderSend ( "USDJPY" ,OP_BUY, Lot, Marketlnfo ( "USDJPY" ,MODE_
BID ) , 2, NULL,NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ("EURUSD" ,OP_BUY, Lot, Marketlnfo
( "EURUSD" ,MODE_BID ), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE );
OrderSend ( "EURCHF" ,OP_BUY, Lot, Marketlnfo


( "EURCHF" ,MODE_BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "GBPJPY" ,OP_BUY, Lot, Marketlnfo ( "GBPJPY" ,MODE_
BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE) ;
OrderSend ("USDCAD" ,OP _BUY, Lot, Marketlnfo
("USDCAD" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
return (0) ,

當以上這 14 組貨幣的七組買倉及七組賣倉都開倉完畢之後,讀
者需要再檢查看看,看看是否有漏掉的貨幣組,如果有漏掉的貨幣

組就必須趕快補齊所缺的貨幣組。主要原因是這 14 組貨幣其實就是

產生 一 種「非完美對沖」 (Hedge Imperfection)• 如果漏掉了任何


一組,「帳戶指標」就無法 一 直維持在帳戶不賺不賠的定點。

用獨利來排序

第 二個步驟:讓這 14 組貨幣用 Profit (獲利)這個欄位來排序。

建議讓獲利最高的貨幣組排在最上面然後讓虧損最高的貨幣組

全球資金流交易策略程式交易方法
排在最下面。當剛開始以上這 14 組貨幣在開完倉位後, 一 般會先呈

現無規則排列。你可以暫時不去理會它,先讓此「模擬單帳戶」的

貨幣組自行排列且擺著差不多一天的時間,擺放 一 天之後此「模擬

單帳戶」將開始呈現市場的規則性出來。其就如同是混濁的水經過

一 定時間沉澱之後所產生的沉澱現象。如果市場的排序狀態就如同

我們所期待的「獲利最高的七組賣倉貨幣組」排在最上面,而「虧

損最高的七組買倉貨幣組」排在最下面,我們稱這種排序叫做「理

想排序」 (Ideal Position) 。其排列類似狀況若如下所示:

Sell GBPUSD 700 < 錨點

Sell EURGBP 600


Sell GBPCHF 500
Sell CHFJPY 400
Sell AUDJPY 300

_
381
Sell EURJPY 200
Sell USDCHF 100
Buy CADJPY -100
Buy AUDUSD -200
Buy USDJPY -300
Buy EURUSD -400
Buy EURCHF -500
Buy GBPJPY -600
Buy USDCAD -700 <—錨點

以上這種排列方式,如賣倉全部聚集在前七組(賣倉獲利),

而買倉全部聚集在後七組(買倉虧損),或買倉全部聚集在前七組

(買倉獲利),而賣倉全部聚集在後七組(賣倉虧損),我們都稱
這種排序方式叫做「理想排序」;而上面的第一個位置與最後一個

位置的貨幣稱之為「錨點」 (Anchor Point) 。

觀察錨點變化

第三個步驟:要觀察第一個位置與最後一個位置貨幣的跳動,

就是觀察「錨點」的變化。

當我們確定了最上面的一個「上錨點」 (Top Anchor) GBPUSD


以及最下面的「下錨點」 (Buttom Anchor) USDCAD 之後,觀察這
兩個位置的變化。例如當「上錨點」由最上面的「獲利錨點」跳到

變成虧損的位置(由上往下數在第八個位置以下),或是「下錨點」

- 由最下面的「虧損錨點」跳到變成獲利的位置(由上往下數在第七
個位置以上),這就是一個進場的訊號。
當「下錨點」由最下面的「虧損錨點」跳到第四個位置(由上

往下數),而「上錨點」以由最上面的「獲利錨點」跳到第八個位

置(由上往下數)。因為「下錨點」是開買倉 (Buy)• 其由虧損轉

成獲利,那就表示市場將往全部都開買倉的方向走,這時我們在實

單的帳戶裡就要一次將以上這 14 組貨幣全部都開買倉。

除此之外,你也可以判斷因為「上錨點」是開賣倉 (Sell)• 其

由獲利轉成虧損,那同樣是表示市場將往全部都開買倉的方向走(因

為開賣倉將會變成虧損)。以上是假設開賣倉的七組貨幣均是獲利,

而開買倉的七組貨幣均是虧損。但是它也有可能是顛倒,就是開買

倉的七組貨幣均是獲利,而開賣倉的七組貨幣均是虧損,如以下所

示。

Buy CADJPY 700 <—錨點

全球資金流交易策略程式交易方法
Buy AUDUSD 600
Buy USDJPY 500
Buy EURUSD 400
Buy EURCHF 300
Buy GBPJPY 200
Buy USDCAD 100
Sell GBPUSD -100
Sell EURGBP -200
Sell GBPCHF -300
Sell CHFJPY -400
Sell AUDJPY -500
Sell EURJPY -600
Sell USDCHF -700 <—錨點

_
383
不管買與賣的各七組貨幣是如何排列,基本上可以歸納成幾點

規則:

假設最下面的七組貨幣是開買倉,而當「下錨點」開始一直往

上跑到前七個位置(由上往下數)以上,在實單帳戶就要開 14 組貨

幣的「買倉」。

假設最下面的七組貨幣是開買倉,而這七組貨幣的任何一個貨.

幣跑到「上錨點」,在實單帳戶就要開 14 組貨幣的「買倉」。

假設當最下面的七組貨幣是開賣倉,而當「下錨點」開始一直

往上跑到前七個位置(由上往下數)以上,在實單帳戶就要開 14 組

貨幣的「賣倉」。

假設最下面的七組貨幣是開賣倉,而這七組貨幣的任何一個貨

幣跑到「上錨點」,在實單帳戶就要開 14 組貨幣的「賣倉」。

以上 三步驟是最基本判斷開買倉或開賣倉之交易方法。不過還

是有一些細節要注意,例如「帳戶指標」需要每個星期都重設一遍,

建議是星期日晚上睡覺前重開模擬帳戶的「帳戶指標」。除此之外

關於「帳戶指標」的觀察時間,建議是在每天不同時區的外匯開盤

時間點前後來觀察此「帳戶指標」即可,不必時時刻刻緊盯電腦螢

幕。尤其是當美國重要經濟數據公告後,波動是最明顯,常常會有

明確的方向可以執行買倉或賣倉。進場的時機點在上面的說明已經

清楚描述,接下來談出場點。

..
出場點

這種交易方法的出場點是比較簡單的 就是設停利、停損以
及市場「方向頂點」訊號。停利是以 1000 點的獲利為目標(所以每

個貨幣組的獲利目標是 1000/14
= 71 pips)• 停損是以 700 點為底
線(所以每個貨幣組的虧損底線是 700/14 = 50 pips) 。同時,市場

「方向頂點」訊號 一 出現也是關倉的出場點。

市場「方向頂點」訊號就是當「帳戶指標」全部的七個賣倉貨

幣組及買倉貨幣組位置全部對調完成,也就是說原本在最下面的七

組貨幣全部跑到最上面,這就是市場「方向頂點」的訊號出現。此

時不管實單帳戶是賺或賠,都要出場,以免市場方向反轉變成停損

出場。

以下是兩個簡單的 Script 程式來范我們執行一 次開「 14 組買倉」

或「 14 組賣倉」的動作,這是在「實單帳戶」下執行,如下所示:

全球資金流交易策略程式交易方法
extern double Lot = 0.1 ;II 每次每組貨幣開 0.1 Lot
+------------------------------------------------------------------+
//1 script program start function!
!/+-----一一------ ---------- --- ----- -----------+
int start ()
{
//14 Buy
OrdcrSend ("GBPUSD" ,OP_ BUY, Lot, Marketlnfo
("GBPUSD" ,MODE ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("EURGBP" ,OP_BUY, Lot, Marketlnfo
("EURGBP" ,MODE_ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("GBPCHF" ,OP _BUY, Lot, Marketlnfo
("GBPCHF" ,MODE-ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_
ONE);
OrderSend ("CHFJPY" ,OP _BUY, Lot, Marketlnfo ("CHFJPY" ,MODE_
ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE) ;
OrderScnd ("AUDJPY" ,OP _BUY, Lot, Marketlnfo ("AUDJPY" ,MODE_
ASK) , 2, NULL. NULL, NULL, 0, 0, CLR_NONE) ;

_
385
OrderSend ( "EURJPY" ,OP_BUY, Lot, Marketlnfo ( "EURJPY" ,MODE_
ASK ), 2, NULL, NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ( "USDCHF" ,OP_BUY, Lot, Marketlnfo
( "USDCHF" ,MODE_ASK ), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE );
OrderSend ( "CADJPY" ,OP_BUY, Lot, Marketlnfo ( "CADJPY" ,MODE_
BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ( "AUDUSD" ,OP_ BUY, Lot, Marketlnfo
( "AUDUSD" ,MODE_BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "USDJPY" ,OP_BUY, Lot, Marketlnfo ( "USDJPY" ,MODE_
BID ), 2, NULL, NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ( "EURUSD" ,OP_BUY, Lot, Marketlnfo
( "EURUSD" ,MODE_BID ), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "EURCHF" ,OP_ BUY, Lot, Marketlnfo
( "EURCHF" ,MODE_BID ) , 2 , NULL, NULL, NULL, 0, 0, CLR_
NONE ) ;
OrderSend ( "GBPJPY" ,OP_BUY, Lot, Marketlnfo ( "GBPJPY" ,MODE_
BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE ) ;
OrderSend ( "USDCAD" ,OP_BUY, Lot, Marketlnfo
( "USDCAD" ,MODE_BID ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE );

return ( 0 ) ,

extern double Lot = 0.1 ; //每 次每 組貨幣開 0.1 Lot


II+------------------------------------------------------------------+
Ill script program start function
II+----- -----------------------------+
int start ()

// 14 Sell

- OrderSend ( "GBPUSD" ,OP_SELL, Lot, Marketlnfo


( "GBPUSD" ,MODE_ASK ) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ( "EURGBP" ,OP_ SELL, Lot, Marketlnfo
("EURGBP" ,MODE_ASK), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("GBPCHF" ,OP _SELL, Lot, Marketlnfo
("GBPCHF" ,MODE_ASK), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("CHFJPY" ,OP_SELL, Lot, Marketlnfo ("CHFJPY" ,MODE_
ASK) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE) ;
OrderSend ("AUDJPY" ,OP_SELL, Lot, Marketlnfo
("AUDJPY" ,MODE_ASK), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("EURJPY" ,OP_SELL, Lot, Marketlnfo
("EURJPY" ,MODE_ASK), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("USDCHF" ,OP _SELL, Lot, Marketlnfo
("USDCHF" ,MODE_ASK), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("CADJPY" ,OP_SELL, Lot, Marketlnfo
("CADJPY" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);

全球資金流交易策略程式交易方法
OrderSend ("AUDUSD" ,OP_SELL, Lot, Marketlnfo
("AUDUSD" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("USDJPY" ,OP_SELL, Lot, Marketlnfo
("USDJPY" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("EURUSD" ,OP_SELL, Lot, Marketlnfo
("EURUSD" ,MODE_BID), 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("EURCHF" ,OP_SELL, Lot, Marketlnfo
("EURCHF" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);
OrderSend ("GBPJPY" ,OP_SELL, Lot, Marketlnfo ("GBPJPY" ,MODE_
BID) , 2, NULL, NULL, NULL, 0, 0, CLR_NONE) ;
OrderSend ("USDCAD" ,OP_SELL, Lot, Marketlnfo
("USDCAD" ,MODE_BID) , 2, NULL, NULL, NULL, 0, 0, CLR_
NONE);

return (0) ,

_
387
擺盪現象產生的現金流

筆者相信有許多聰明的讀者讀到這裡應該也歸納出這 14 組貨

幣的七組買與七組賣其實就是在做「對沖」。以這各七組貨幣開買

倉及賣倉,因為是「對沖」,所以事實上是變成完全沒有買也沒有

賣。假設我們將此 14 組貨幣分成買的群組,稱它為 A Group' 以及

賣的群組,稱它為 B Group 。若以時間軸來看,當 A Group 在上而 B

Group 在下,假設是時間點 AB• 當 B Group 在上而 A Group 在下, •


假設是時間點 BA• 它會產生的現象其實是 AB->BA->AB->BA …,
這根本就是一個擺盪 (Swing) 的現象。同時,這 14 組貨幣我們是

不是就可以直接將其看成「一種貨幣」在流動? 因此筆者把這種

貨幣稱為「全球資金流」。

當這種「全球資金流」在產生擺盪的時候,例如,我在某個 AB
時間點進場,在這 14 組貨幣轉換成 BA 的時間點之前,其實已經賺

了 14 組貨幣在轉換過程時的價差了。因為我們是 一次開 14 組買倉

或賣倉,所以在 AB - >BA->AB->BA …..轉換之現象之中,只要每一


個貨幣組僅僅獲利 50 點,我們一次的獲利將達到 SOX 14 = 700 點。
這就是為何此交易方法獲利驚人的原因。

-
`


±E

良藥苦口,忠言逆耳 。

非分之收獲,陷溺之根源 。

—《 菜根譚》

..... ~~-

` `
-`
.

. ..~-~」
...
遠離詐騙

前一陣子曾與經紀商聊起目前外匯市場的現況,令筆者咸到驚

訝的市場情況是 台灣的「外匯市場」早已被包裝完美的「吸金公

司」給攻占,筆者還因為不知道某家在台灣大力吸金且知名的「吸

金公司」而被經紀商取笑。台灣市場高喊月配 3%~8% 甚至 12% 的

吸金公司多到令人吃驚。但是「外匯市場」真的這麼容易嗎?我稍

微搜尋 一 下,竟然還有人鼓吹說,「拿錢自己在外匯操作賺不了錢,

交給這類公司穩定拿利息就可以舒服過日子」。這個邏輯真的是漏

洞百出,胡說八道。投資者自己非常清楚外匯市場的波動性、不可

預測性、高槓桿性、以及市場藏污納垢的桌面下規則,但卻「自我

麻醉」的相信,某家吸金公司的績效是絕對真實又不會騙人的?但

是可以令投資者相信的基礎在哪裡?只因為他們在網站說「兩個月

績效可以達 88% 」,然後就相信他們可以為投資者脫離外匯虧錢的

惡性循環?

市場不存在一種叫做「不變的績效」

「兩個月績效可以達 88% 」這句話即使是真,不保證他三個月丶

四個月、一年或一年半內都是這種績效。更何況「兩個月績效可以

達 88% 」是「高度風險性」的「押注性投資」,第三個月連本金都

賠光也是有可能。例如有時候國際外匯市場都沒有波動,難道該家

公司是砷,可以「無中生有」一般的生出績效出來?市場沒有波動,

不要說是「套利程式」無法獲利,連「賭大賭小」的「賭徒式押注」

一樣不會有績效,哪來的 88% 獲利?沒有獲利,拿什麼配息給投資

-
者呢?最令人擔心的是台灣人把詐騙當成神來拜。

接下來的漏洞,有多少投資者真的要求看該吸金公司的「實單

績效」?或者說,真的實際看過該公司的「實單績效」。筆者所說
的不是報表,而是該公司能夠提出「實單帳號」以及「唯讀密碼」

供投資者觀察?筆者找不到相關的資訊,但曾經遇過 一 個「真實案

例」。有 一 位讀者拿者某家吸金公司的「報表」得意的秀給我看,

說該公司績效如何好如何好云云。但是一看,報表上的商品報價竟

然是 2xxx.xx' 然而全世界貨幣沒有哪一個貨幣的報價有超過 2000


美金以上的,這根本就是「造假的報表」,該位讀者其實連非常基

礎的外匯知識都不具備,就 一 股腦的相信「造假的報表」,還在筆

者面前大力稱讚該公司多厲害,這真的是一件很危險的事。另外,
連國際知名的「外匯績效」網站的公告內容其實也是可以「造假」

的,因為真的有軟體可以提供給使用者自己敲貨幣報價以及自己敲
績效 。 這不是「外匯績效」網站的錯,而是利用第 三 方驗證模式來

騙取信任的騙徒的問題。

舒服過日子的是「吸金」公司,不會是投資者

結論
再者,「……交給這類公司穩定拿利息就可以舒服過日子」這
句話嚴重的漏洞:

1. 帳戶是投資者可以完全 100% 掌控的嗎?

2. 帳戶是投資者自己在銀行的委託或信託帳號嗎?

3. 當錢拿不回來,誰擔保?有銀行擔保嗎?

4. 既然該公司的獲利如此之驚人,何不透過合法管道,「正
大光明吸金」,例如申請 一 檔「對沖基金」,合法銷售,

依照該公司的宣稱月績效 44%• 那我想全世界的投資者都


會為之瘋狂,吸金的額度隨隨便變都可以超過百億美金,
甚至千億美金,何必偷偷摸摸吸金,光是月配息 3%-8% 甚
至 12%, 保證瞬間在全世界爆紅。

5. 這類公司的合法性如何?

_
391
筆者有花時間去看一下這類吸金公司的網站,許多吸金公司都

是邀情投資者「 18 個月內」不得領回。其實這類「吸金公司」都是

有受過訓練的,知道一般的「吸金理論」是利用「後金補前金」的
模式來提供利息給客戶,而這「 18 個月理論」是發表在一篇金融論
文,利用吸金綁「 18 個月」來讓後面入金的「入金額」發利息給前

面入金的投資者。當越滾越大的時候,只要這個泡泡沒破,就 一 直
吸金下去,直到要破之前 6 個月,公司會以迅雷不及掩耳的速度消
失在地球上。然後,吸金公司的高層人員就拿著大筆吸來的金錢「舒·
服過日子」。其實這就是典型吸金公司的模式,幾乎是千篇一律。

商品或手法或許不同,但核心的詐騙模式都是大同小異的。其

實讀者可以自己計算 一 下就知道,月配息 8%' 一年是 96%• 這是給

客戶的利息,難道吸金公司不須給業務、行銷、行政、網站、會計

等等的成本?同時他還跟你說可以「保證」。 一 個很簡單的問題,

世界上有哪種投資可以「穩定保證獲利」超過或達成年績效 96%?

如果這世間上根本就不可能存在這種可以「穩定保證獲利」超過或

達成年績效 96% 的績效,那該公司如何配息給客戶?如何發獎金給


業務、行銷,如何發薪水給行政、網站、會計等等開銷?如果該公

司是真的,華爾街的超級大金主們會手捧大把大把的美金跪求該公

司讓他加入,或甚至會協助該公司成立基金來合法吸金 。 如果該公

司是真的,有必要設計出「直銷模式」的一代 一 代獎金來拉客戶投

入資金嗎?錢自己賺就好了,何必一代 一 代的發下去?筆者也希望

讀者能夠清楚,如果你本身也是協助「吸金公司」吸金的一個小小

拉客戶的業務員,筆者誠心建議不要再為了賺取吸金公司給的「佣

金」而非常有可能會犧牲掉客戶的「本金」,到頭來恐怕會什麼都

沒有,因為吸金公司早就遠走高飛了,而你也只不過是被利用的 一

- 顆棋子罷了 。
「保證獲利」、「保證入息%」等於「保證詐騙」

自從「鴻源百貨吸金」案之後,幾乎每年都有大大小小的吸金
詐騙案陸續發生 。 受害者年年都有,但是,很奇怪,直到今天,依

然還是有人會相信這種「超級誇張吸金的謊 言 」。兩 三 年前有 一 家


位於苗栗的「紅富海」公司,吸金超過 300 億台幣,是台灣史上金
額第 二 大的違法吸金案。該公司號稱「保證月息 1% 」,又利用靈修
名義吸金,最後被抄, 一 樣被控詐騙,全台受害者超過萬人以上。

把投資跟宗教連在一起,利用投資者的善良來吸金,恐怕是最令人

防不勝防的。再更久約五、六年前,在台中有家「濤京公司」,號
稱「保證月息 2% 」,一樣爆掉,負責人被起訴,受害者當然是血本
無歸。筆者知道目前這個外匯市場上依然存在這種「保證配息」、
「保證獲利」的吸金模式。只要人性的貪念不變,這類的吸金公司
就會 一 直不斷的包裝成大同小異的商品來欺騙投資者 。

結論
不想變成受害者的話,就要謹記……

1. 不要聽信任何「保證獲利」、「保證入息%」的商品 。 除非是

銀行的定存,否則,有哪種投資是可以用「保證」這兩個字?

使用「保證」這兩個字恐怕就已經觸法,奇怪的是,投資者 一

聽到「保證」兩個字,就會捧著大把鈔票要投資。許多「配息
商品」頂多提供給投資者「配息率」這樣的用語,「保證配息
幾%」這種廣告,難道投資者都沒有風險意識去思考其合理性

嗎?

2. 不要相信把錢放在 一 個不是你「個人名義」的帳戶。市場上隨

便一個阿貓阿狗公開個帳戶,然後要大家把錢匯進去,大家願

意嗎?大家願意把錢匯進去只因為看到廣告或業務跟你說,每

個月可收到多少的利息,就只是這樣的說詞就心甘情願把錢交
給陌生人?如果連這麼簡單的邏輯大家都無法分辨,那投資能
賺到錢無論如何筆者都不會相信 。

_
393
3. 親朋好友秀出利息收入然後要拉你進場,他的「利益收入」可

能超出你的想像。吸金的商業模式就是「老鼠會」,它利用人

性的貪念,讓業務去拉客戶,再讓客戶去拉他的客戶, 一 層一

層下去。當然,吸金公司必須要付利益給幫他拉客戶的業務才

行。所以市場上幾乎很多家類似「吸金商業模式」的公司提供

給業務的獎金,幾乎是客戶所能取得利益的雨倍以上,甚至更

多。舉例來說,某家提供給客戶「保證入息 6% 」時,它提供給

拉客戶進來的業務獎金可能高達 12%• 甚至更多。為什麼?因

為「人性的貪念」可以幫「吸金公司」吸取更多的資金。

4. 18 個月理論的觀察:據研究,「吸金公司」為了要取信於投資者,

通常會「正常配息」一段時間,然後讓更多的投資者帶來更多

的客戶,好吸納更多的資金。而這個 一 段時問的長度約 18 個月。


大部分違法吸金的「吸金公司」在「 18 個月內」會宣布破產,

或消失的無影無蹤,或來不及落跑爆掉或被抓。這就是所謂的

「吸金 18 個月理論」。

筆者希望所有的投資者都能理性地看待你所要投資的商品。「保

證獲利」這種的廣告言詞已經明顯違法,自己隨便就相信違法的金

融商品,其實很容易受傷。同時,千萬不要把錢投入不是你個人帳

戶的公司或陌生人帳戶裡,因為很可能會一去不返。「吸金公司」

很會設計各類五花八門,形形色色的「高額獲利金融商品」,但是,

有很大的可能性就是,這類的公司在設計商品時,時時刻刻在想如

何能騙取到客戶的本金,然後他又可以在事件爆發之後,能逍遙法

外。

..
免費下載的「自動交易程式」也會有陷阱

另外,在外匯市場裡,下載完全免費的「自動交易程式」,然

後改個名字就開始「自吹自擂」招募客戶,甚至名字改 一 下,再包

裝 一下就來販賣的「銷售團體」非常多。

最早且最有名的,恐怕是賣「 FAPTurbo 軟體」的 三 個美國年輕

小夥子,這在《外匯套利 I 》已經有用 一 些篇幅介紹過了,這裡再拿

出來給讀者參考。 FAPTurbo 就是利用「亞洲盤」時間,歐系「交叉

貨幣」僅會「微幅震盪」的特性,進場做「高賣低買」,當績效不

錯的時候, 一大堆的「經紀商」因為賠得很慘(因為跟客戶對做),

就開始在亞洲盤時間把歐系「交叉貨幣」的點差大幅拉高。然而到

了 2010 年之後,就很少聽說使用「 FAPTurbo 軟體」的客戶有賺到

錢。很簡單,經紀商又不是笨蛋,客戶搞什麼鬼,牽涉到「經紀商

結論
自身利益」,很快就會拿出反制的辦法。「 FAPTurbo 軟體」是那 三

個美國年輕人開發的嗎?其中 一 個美國籍印度人還自稱是自己數學

天才。後來發現,原來最早開發出此軟體跟交易概念的是 一 個俄國

人,同時,那是一個免費的軟體,程式碼可以自行修改。

拿別人開發的軟體出來招募客人,雖然比吸金的團體善良,但

. 是,尊重「著作權」是基本的禮貌。那 三 個美國年輕人把「 FAPTurbo

軟體」說的好像是自己開發的 一 樣,明明就是別人的東西,包裝 一

下,就說自己是耗費多少時光開發出來、績效多麼驚人、自己是數

學程式天才、外匯將才、投機高人等等謊言,其實很容易被戳破。

又例如,在本書有介紹的 Blessing 這個程式,筆者是當初參與

一 起開發的人員之 一 ,因為它本身本來就是「免費軟體」,本來就

歡迎任何人可以下載使用,並修改。把 Blessing 軟體商業化,本來

就沒有任何限制,也應該不會有法律侵權的問題。筆者個人對於網

-
395
路上任何人拿 Blessing 來修改成他自己的交易軟體,本來就持開放

的態度。但如果把本來就是免費提供下載使用的軟體,公開說那是

他花了多少時光自己開發的,就會有嚴重的道德瑕疵,甚至有詐騙

的嫌疑。筆者其實不樂見原本的出發點是為了公益的出發心,放到

網路後,卻被利用變成私人團體來坑殺散戶,撈取自身利益的工具。

這絕對不是我們當初開發 Blessing 軟體的初衷。

穩定求利

筆者 一 直很關心台灣人的投資思維。其實台灣人整體來說,投

機思維並不高。根據數據統計,佔最大比例的台灣投資者其實比較

喜歡穩定的獲利;而對於高度風險的投資商品,就比例來說,所佔

的比例並不會太高。這不是筆者的主觀判定,而是客觀的數據。

佔多數比例的台灣投資客喜歡固定收益

據台灣投信投顧公會的數據,光是 2014 年 一 月到五月份為止,

台灣境外基金規模超過 3.2 兆台幣。而其中的的「固定收益型」基金

就佔了 1.75 兆台幣,將近 55% 的比重;剩下的「股票型」基金則


佔了 1.3 兆台幣,大約是 40%; 而「股債平衡型」的有 0.15 兆,約

4.68%; 剩下的比重約 0.32% 才是其它類型的基金。

以上這個數據是根據「台灣投信投顧公會」刊登在財經報紙上

的新聞數據。而我們再來看另外 一 家國外的私人基金投顧在台灣做

的投資人投資行為調查報告,相關數據真的很接近。例如該私人機

構針對台灣投資人所做的問卷調查報告指出,台灣投資者約有 58%

的投資人在投資基金之後,最高只能忍受 10% 以內的虧損。從調査

.. 報告 一 般的誤差值都是在十/- 3% 以內的數據來連結真實的情況,剛

好跟「台灣投信投顧公會」所公布的「海外基金」投資類別數據很
吻合。就是台灣資金投資海外基金種額裡有將近 55% 的資金是投資

在「固定收益型」基金,也就是所謂的各類型的債卷基金,如一般

債卷、高收益債、新興市場債等等。

低資產族群容易進入投機市場

以上的客觀事實,跟筆者自己的經驗主觀值也是有相當大的吻

合性質。大部分高資產又低調的台灣投資人,對於較高風險波動係

數的商品,並不是那麼喜好,反而喜好高度波動風險的台灣投資族

群,都是比較屬於收入金字塔中低底部的族群。我們從心理角度來

看,似乎也反映出世界上絕大部分窮人的心態。因為大部分低資產

族群的投資者,就是想趕快翻身,用最快的速度讓自己跟家人過好

日子,因此,投機的思維就油然而生。但絕大部分的投資者進入「投

機市場」之後,賠掉資金的比例卻比獲取利益的比例要高出很多。

結論
這個比例通常不是 7/3 比例,更不是 6/4 比例,而是將近 9/1 比例的
現象。也就是說,低資產族群的投資者進入「投機型金融商品市場」

(如 :有槓桿、保證金制度的市場)之後,有將近九成比率的投資

者是賠錢,只有一成比率的投資者是賺錢。

那當然也間接造成貧富差距更加拉大,「貧者更貧,而富者更

疊 富」的現象。這現象不是只在台灣會發生,舉世皆然,光是靠政府

的禍利、稅捐政策其實只能解決非常有限的問題。因為問題還是發

生在窮人自己本身,因為有相當大比例的窮人不會有利用「資產增
值」來改善生活的思維,但卻有相當大比例的窮人想靠一夜致富的

賭博模式來改善生活。

-
397
為什麼? 富者越富、貧者越貧

前幾年有一本經濟學的書《二十一世紀資本論》 (Capital in the


Twenty First Century) 成為一本熱門書籍。這本書提到,若使用最簡
單的描述,就是以「一個公式」解釋為何世界上貧富差距的問題會

發生。這個公式就是:

"return on capital" ( r ) is greater than the economic growth ( g ) : r>g

中文的意思就是「資產報酬率」>「經濟成長率」。

簡單的分析就是有錢人拿錢買資產,而窮人拿錢買生活所需,

當時間一拉長,即使國家的經濟有成長,但是生活用品、各類貨品

的通膨也會隨之增加,窮人因為沒有資產的增長,所以,收入只能

用來養家。因此,即使經濟增長了,但通膨卻吃掉所有經濟增長的

利益,例如,調薪的薪資增長卻被經濟增長所帶來的通膨給吃掉。

然而,有錢人卻因為長期投入資產增長的投資,在經濟增長的同時,

其資產也同步增值。在此-消跟一長之間,再加上時間這個可怕的

催化劑,十年、 二 十年、三十年之後,窮人跟有錢人的資產差距就

變得天壤之別。

世界上的政府機構解決貧富差距的方法不出「富人加稅」、「窮

人減稅」、「擴大福利支出政策」等等;連此書作者 Thomas Piketty


也依樣提出類似的解決之道。然而,就筆者的看法,這是治標不治

本的方法。「貧富差距」不會因為簡單的稅制或福利政策就可以解

決;光靠「富人加稅」、「窮人減稅」、「擴大福利支出政策」等

等,還是無法解決問題。很有名的舉例就是曾有經濟學家提出,我

.. 們即使把全世界的錢都統 一 收集起來,然後再平均分配給所有的人,

不出幾年光景,世界依然會恢復貧富不均的原狀。
筆者的想法認為,解決之道在於「教育」。要教育窮人有投資

資產的觀念。因為富人之所以成為富人,以及窮人之所以成為窮人,

很大的差距是在思維模式的不同。

把收益變成資產

我們再回頭思維上面的統計數據。台灣投資者有將近 58% 在投

資基金之後,無法忍受 10% 以上的虧損。同時,台灣的海外基金 3.2

兆投資資金裡面,有 55% 是屬於「固定收益型」的基金投資。那其

實非常符合我們一直要達成的「套利」的投資思維。那就是:

1. 每月至少 1% 以上的帳戶增長。

2. 帳戶最大帳面的浮動虧損必須在 10% 以內。

結論
其實筆者也是非常希望讓外匯投資的模式可以達到類似「固定

收益型基金」的收益跟風險波動值,但又比「固定收益型基金」的

收入高。然後再讓客戶利用這每個月的「帳戶增長」,每個月定期

不定額去「投資資產」。

唯有這種模式的「系統架構」,或許才能有效解決「貧富不均」

` 的問題。

為客戶賺錢才是金融服務業之道

PIMCO 的 Co-Funder 葛洛施離開 PIMCO 時,某財經記者有對

他做一次專訪,文章內容太長,我就不一一描述,但最令我印象深

刻的是這句話:

「我最喜歡做的事就是,每天早上 5 : 30 起床,然後快樂的為
客戶賺錢。」

399
他的動機是「只要能為客戶賺錢」,他就戚到很快樂。跟我們

台灣之光 12A 彭總裁 一 樣 , 只要能為台灣央行賺錢 , 就戚到很快樂。

從事金融相關的行業應該以「為客戶賺錢為樂」,而不是不顧客戶

風險只以「撈取客戶佣金為樂」。尤其是外匯保證金這個行業,若

能以「為客戶賺錢為樂」作為動機,這才是長久的生意 , 我希望能

與所有從事這個行業的從業人員分享這樣的理念 。

-
附圖資料來源說明

圖 0-1--0-3 : 圖表來源 MetaQuotes MT4 Chart Window

圓 1-1 : 圖表來源 http : !/www.appledaily.corn.tw/realtimenews/article/new/2015


0916/693017/

圖 1-2 : 圖表來源 https: //www.megabank.corn.tw/other/bulletin02_04.asp

圖 1-3: 圖表來源 http: //www.appledaily.corn.tw/realtimenews/article/new/2015


0916/692731 /

圖 1-4: 圖表來源 MetaQuotes

圖 1-5: 圖表來源 MetaQuotes MT4 Chart Window

圖 1-6 : 圖表來源 MetaQuotes MT4 Chart Window

圖 1-7 : 圖表來源 BabyPips : http : //www.babypips.com/

圖 1-8: 圖表來源 Forexfactory : http : //www.forexfactory.com/forum.php

附岡資料來源說明
圖 1-9: 圖表來源 Forex-TSD : http : www.forex-tsd.com/forum.php?act =
showfree

圖 1-10 : 圖表來源 investopedia : http : //www.investoped 國 .com/

圖 1-11 : 圖表來 源 www.fsa . gov.uk

圖 1-12 : 圖表來源 www.nfa.futures . org

圖 1-13 : 圖表來源 http : 'superhotforex.com/forex-trading-structure-and-hierarchy-ebs/

圖 1-14 : 圖表來源 MetaQuotes

圖 1-15 : 圖表來源 MetaQuotes MT4

圓 1-16 : 圖表來源 http : ,/www.forexpeacearmy.com/public/forex _ broker_reviews

圖 1-17 : 圖表來源 MetaQuotes MT4 Market Watch

圖 2-1 : 圖表來源 MetaQuotes MT4

圖 2-2 : 圖表來源 MetaQuotes MT4 MQL4 Reference

_
401
圖 2-3 : 圖表來源 MetaQuotes MT4

圖 2-3: 圖表來源 MetaQuotes MT4 MetaEditor

圖 2-5: 圖表來源 MetaQuotes

圖 2-6 : 圖表來源 MetaQuotes MT4

圖 2-7 : 圖表來源 MetaQuotes MT4

圖 2-8: 圖表來源 MetaQuotes MT4 Market Watch

圖 2-9: 圖表來源 MetaQuotes MT4 Chart Window

圖 2-10: 圖表來源 MetaQuotes MT4 Chart Window

圖 2-11: 圖表來源 MetaQuotes MT4 Strategy Tester

圖 2-12 : 圖表來源 MetaQuotes MT4 Code Base

圖 2-13: 圖表來源 MetaQuotes MT4 Code Base

圖 2-14: 圖表來源 MetaQuotes MT4 Code Base

圖 3-1 : 圖表來源 MetaQuotes MT4 Chart Window

圖 3-2 : 圖表來源 MetaQuotes MT4 Chart Window

圖 3-3 : 圖表來源 MetaQuotes MT4 Chart Window

表 3-1 : 圖表來源 Alpari UK

表 3-2 : 圖表來源 FXDD

圖 3-4 : 圖表來源 MetaQuotes MT4 Chart Window

圖 3-5 : 圖表來源 MetaQuotes MT4 Chart Window

圖 3-6: 圖表來源 MetaQuotes MT4 Chart Window

圖 3-7: 圖表來源 MetaQuotes MT4 Chart Window

圖 4-1: 圖表來源 MetaQuotes MT4 Chart Window

.. 圖 4-2 : 圖表來源 MetaQuotes MT4 Chart Window

圖 4-3: 圖表來源 MetaQuotes MT4 Chart Window


圖 4-4: 圖表來源 MetaQuotes MT4 Chart Window

圖 4-5 : 圖表來源 MetaQuotes MT4 Chart Window

圖 4-6 : 圖表來源 EXCEL 表

圖 4-7 : 圖表來源 MetaQuotes MT4 Chart Window

圖 4-8 : 圖表來源 MetaQuotes MT4 Chart Window

圖 5-1 : 圖表來源 Blessing User Manual

圖 5-2: 圖表來源 EXCEL 表

圖 5-3: 圖表來源 EXCEL 表

圖 5-4: 圓表來源 EXCEL 表

圖 5-5: 圖表來源 MetaQuotes MT4 Tool Option

圖 6-1: 圓表來源 MetaQuotes MT4 Chart Window

附 圖資 料 來源說 明
圖 6-2: 圖表來源 MetaQuotes MT4 Terminal Window

圖 7-1: 圖表來源 MetaQuotes MT4 Chart Window

圓 7-2 : 圖表來源 MetaQuotes MT4 Chart Window

圖 7-3: 圖表來源 MetaQuotes MT4 Chart Window

圖 7-4: 圖表來源 MetaQuotes MT4 Chart Window

圖 7-5: 圖表來源 MetaQuotes MT4 Chart Window

圖 7-6: 圖表來源 Meta Quotes MT 4 Chart Window

圖 7-7: 圓表來源 http : //www.mataf.net/en/tools/O1-0 l -correlat1on

圖 7-8: 圖表來源 MetaQuotes MT4 Chart Window

圖 7-9: 圖表來源 MetaQuotes MT4 Chart Window

圖 7-10: 圖表來滙 Correlation

圖 7-11 : 圖表來源 MetaQuotes MT4 Chart Window

圖 7-12: 圖表來源 MetaQuotes MT 4 Chart Window

-
403
圖 7-13: 圖表來源 MetaQuotes MT 4 Chart Window

圖 7-14 : 圖表來源 MetaQuotes MT 4 Chart Window

圖 7-15: 圖表來源 MetaQuotes MT4 Chart Window

圖 7-16: 圖表來源 MetaQuotes MT4 Chart Window

圖 7-17: 圖表來源 MetaQuotes MT4 Chart Window

圖 7-18 : 圖表來源 Meta Quotes MT 4 Chart Window

圖 7-19: 圖表來源 MetaQuotes MT4 Chart Window

圖 7-20: 圖表來源 EXCEL 表

圖 7-21 : 圖表來源 EXCEL 表

圖 8-1 : 圖表來源 BGI Market Watch

圖 8-2: 圖表來源「錯誤定價」發生時間點

圖 8-3: 圖表來源「錯誤定價」機會次數

圖 8-4: 圖表來源 BGI Market Watch

圖 9-1 : 圖表來源 MT4 Terminal Demo

圖 9-2 : 圖表來源 MT4 Terminal Demo

圖 9-3: 圖表來源 MT4 Terminal Demo

圖 9-4: 圖表來源 MT4 Terminal Demo

圖 9-5: 圖表來源 MT4 Terminal Demo

-
/-~-L--,
圭氫

_
405
406
407
408
>>> .罈讚驪璽·

, 丨nve_st 丫our profession 」 dJ


歡迎大家加入 /PC
即可享有會員專屬優惠~


i~卫柱餠戇!鼴
/
\['`」厙U
.....
... --:---:-;:.城至祈改版
•• ••• 丨 図 esf y·G>t.r' profession. Trade your advantage.

• • •••• f泗閼帶關,~嶧庫, ,: :
強幟上線
專屬達人專區、財金主題企劃
多種全新服務將陸續強檔上線

1>0 @
外匯 股票 投資 式

、~ 「
図:cm囯 {"•
J-ia,111
m 商城 I( 丶k 「 .Hr;P

......
... ,. 對'"'"'
...··-·· ··-··
"""'"'...
"""'"'

i~ -罈
寰宇PJ.t 金網回&回
r~ —一 里曰
技術允析 I

至曰


分網檐 書璧 定價 分纇號 書號 定償
l234567897 414243444546474849505152535455565758596061
波浪理論與動量分析 F003 320 統計套利 F263 480
股票 K 線戰法 FOSS 600 探金實戰 · 波浪理論(系列 1 ) F266 400
市場互動技術分析 F060 500 主控技術分析使用手冊 F271 500
陰線陽線 F061 600 費波納奇法則 F273 400
股票成交當量分析 F070 300 點睛技術分析一心法篇 F283 500
動能指標 F091 450 」線正字圖 · 線圖大革命 F291 450
技術分析&選擇權策略 F097 380 強力陰陽線(完整版) F300 650
史瓦格期貨技術分析(上) F105 580 買進訊號 F305 380
史瓦格期貨技術分析(下) Fl06 400 賣出訊號 F306 380
0l
1l2 3
lllll4 56l2
lll
市場韻律與時效分析 F11 9 480 囹退理論 F310 480
完全技術分析手冊 F137 460 機械化交易新解:技術指標進化論 F3 1 3 480
金融市場技術分析(上) F155 420 技術分析精論(上) F314 450
金融市場技術分析(下) Fl56 420 技術分析精論(下) F315 450
網路當沖交易 F160 300 趨勢交易 F323 420
股價型態總覽(上) Fl62 500 艾略特波浪理論新創見 F332 420
股價型態總覽(下) F163 500 量價關係操作要訣 F333 550
包寧傑帶狀操作法 Fl79 330 精準獲利囹泉戰技(第二版) F334 550
89O
陰腸線詳解 Fl87 280 短線投機養成教育 F337 550
技術分析選股絕活 Fl88 240 XQ洩天機 F342 450
2
主控戰略K線 Fl90 350 當沖交易大全(第二版) F343 400
22
主控戰略開盤法 F194 380 擊敗控盤者 F348 420
狙擊手操作法 F199 380 圖解 B-Band指標 F351 480
23
反向操作致富 F204 260 多空操作秘笈 F353 460
22
4
掌握台股大趨勢 F206 300 主控戰略型態學 F361 480
56
` 主控戰略移動平均線 F207 350 買在起漲點 F362 450
2
主控戰略成交量 F213 450 賣在起跌點 F363 450
7
22
盤勢判讀技巧 F215 450 酒田戰法—圖解80招台股實證 F366 380
89O
巨波投資法 F216 480 跨市交易思維-l\miJ!Jfil/J5HMirifill F367 550
2333
20招成功交易策略 F218 360 襁不停的力量—黃綠紅海撈操作法 F368 480
主控戰略即時盤態 F221 420 股市放空獲利術—歐尼爾教賺全圖解 F369 380
l34567
技術分析 · 靈活一點 F224 280 賣出的藝術—賣出時機與放空技巧 F373 600
2
多空對沖交易策略 F225 450 新操作生涯不是夢 F375 600
3333
線形玄機 F227 360 新操作生涯不是夢-皋習指向 F376 280
墨菲論市場互動分析 F229 460 亞當理論 F377 250
主控戰略波浪理論 F233 360 趨向指標操作要訣 F379 360
股價趨勢技銜分析一一典藏版(上) F243 600 甘氏理論(第二版)型態-價格-時間 F383 500
333
股價趨勢技術分析一典藏版(下) F244 600 雙動能投資—高報酬低風險策略 F387 360
89O
量價進化論 F254 350
技術分析首部曲 F257 420
4
股票短線ox戰術(第 3 版) F261 480
I 智慧投資 I

垂直

里曰


分纇號 書聾 定償 ; 分頲璧 書號 躒

股市大亨
'
l2345678910H12131415161718192021222324252627282930
F013 280' 31 華爾街怪傑巴魯克傳 F292 500
新股市大亨 F014 280 32 交易者的 101 堂心理訓練課 F294 500
新金融怪傑(上) F022 280 33 兩岸股市大探索(上) F301 450
新金融怪傑(下) F023 280 34 兩岸股市大探索(下) F302 350
金融煉金術 F032 600 35 專業投機原理 I F303 480
智慧型股票投資人 F046 500 36 專業投機原理 11 F304 400
瘋狂、恐慌與崩盤 F056 450 37 探金實戰 · 李佛摩手稿解密(系列 3) F308 480
股票作手回憶錄(經典版) F062 380 38 證券分析第六增訂版(上冊) F316 700
超級強勢股 F076 420'' 39 證券分析第六增訂版(下冊) F317 700
非常潛力股 F099 360 40 探金實戰 · 李佛摩資金情緒管理(系列4) F3J9. 350
約翰 · 奈夫談設資 Fl44 400 41 探金實戰 · 李佛摩 18堂課 ( 系列5) F325 250
與操盤嬴家共舞 Fl74 300 42 交易贏家的21 週全紀錄 F330 460
掌握股票群眾心理 Fl84 350 43 量子盤感 F339 480
掌握巴菲特選股絕技 F189 390 44 探金實戰·作手談股市內幕 ( 系列6 ) F345 380
高勝算操盤(上) Fl96 320 45 柏格頭投資指南 F346 500
高勝算操盤(下) F197 270 46 股票作手回憶錄-註解版(上冊) F349 600
透視避險基金 F209 440 47 股票作手回憶錄 -註解版(下冊) F350 600
倪德厚夫的投機術(上) F239 300 48 探金實戰·作手從錯中學習 F354 380
倪德厚夫的投機術(下) F240 300 49 趨勢誡律 F355 420
圖風勢一股票交易心法 F242 300 50 投資悍客 F356 400
從躺椅上操作:交易心理學 F247 550 51 王力群談股市心理學 F358 420
華爾街傳奇·我的生存之道 F248 280 52 新世紀金融怪傑(上冊) F359 450
金融投資理論史 F252 600 53 新世紀金融怪傑(下冊) F360 450
華爾街一九 o- F264 300 54 金融怪傑(全新修訂版)(上冊) F371 350
費雪 · 布萊克回憶錄 F265 480 55 金融怪傑(全新修訂版)(下冊) F372 350
歐尼爾投資的24堂課 F268 300 56 股票作手回憶錄(完整版) F374 650
探金實戰 · 李佛摩投機技巧(系列2) F274 320 57 超越大盤的獲利公式 F380 300
金融風暴求勝術 F278 400
交易 · 創造自己的聖盃(第二版) F282 600
索羅斯傳奇 F290 450

1 共同基金 I

IIII1IIIIIII
聿囯

聿n

分頹號 書號 定價 分纇號 書展 定價
l2 420300350
456
柏格談共同基金 Fl78 理財贏家 16 問 F318 280
基金趨勢戰略 F272 共同基金必勝法則-十年典藏版(上) F326 420
3
定期定值投資策略 共同基金必勝法則-十年典藏版(下)
I
F279 I F327 380
1 投貪策略
里曰

里n



分網鹽 謩壟 定價 分纇展 書號 定償
l23456789
經濟指標圖解 F025 300 25 智慧型資產配置 F250 350
史瓦格期貨基本分析(上) F103 480 26 SRI 社會責任投資 F251 450
史瓦格期貨基本分析(下) F104 480 27 混沌操作法新解 F270 400
操作心經 全球匯尖交易員提供的操作建議 F139 360 28 在家投資致富術 F289 420
攻守四大戰技 Fl40 360 29 看經濟大環境決定投資 F293 380
股票期貨操盤技巧指南 F167 250 30 高勝算交易策略 F296 450
金融特殊投資策略 Fl77 500 31 散戶升級的必修課 F297 400
回歸基本面 F180 450 32 他們如何超越歐尼爾 F329 500
華爾街財神 F181 370 33 交易,趨勢雲 F335 380
lOl2345
llllllll122
股票成交量操作戰術 F182 420 34 沒人教你的基本面投資術 F338 420
股票長短線致富術 Fl83 350 35 隨波逐流~台灣 so平衡比例投資法 F341 380
交易,簡單最好! Fl92 320 36 李佛摩操盤術詳解 F344 400
股價走勢圖精論 Fl98 250 37 用賭場思維交易就對了 F347 460
價值投資五大關鍵 F200 360 38 企業評價與選股秘訣 F352 520
計量技術操盤策略(上) F201 300 39 超級績效一金鼉怪傑交易之道 F370 450
6789O
計量技術操盤策略(下) F202 270 40 你世可以成為股市天才 F378 350
震盪盤操作策略 F205 490 41 順勢操作-多元化管理的期貨交易策略 F382 550
透視避險基金 F209 440 42 陷阱分析法 F384 480
看準市場脈動投機術 F2ll 420 43 全画交易一掌握當沖與波段獲利 F386 650
巨波投資法 F216 480
l234
股海奇兵 F219 350
2
混沌操作法 II F220 450
22
傑西.李佛摩股市操盤術(完整版) F235 380
股市獲利倍增術(增訂版) F236 430

| —桿式交易 I
韋曰

聿戸

分纇號 畫號 定償 分翡號 書號 定價
l2345678 9Ol2345
高勝算操盤(上) Fl96 320 交易策略評估與最佳化(第二版) F299 500
Illlll
全民貨幣戰爭首部曲
高勝算操盤(下) Fl97 270 F307 450
狙擊手操作法 Fl99 380 HSP計量操盤策略 F309 400
計昷技術操盤策略(上) F201 300 Multi Charts快易通 F312 280
計昷技術操盤策略(下) F202 270 計量交易 F322 380
(交易大師)操盤密碼 F208 380 策略大師談程式密碼 F336 450
TS 程式交易全攻略 F275 430 分析師閼鍵報告2張林忠教你程式交易 F364 580
PowerLanguage 程式交易語法大全 F298 480
1 期賃 I

聿戸
聿戸


分纇號 書號 定匱 分纇礱 書號 賾
l234 5678
高績效期貨操作 Fl41 580 雷達導航期股技術(期貨篇) F267 420
征服日經225 期貨及選擇權 F230 450 期指格鬥法 F295 350
期貨賽局(上) F231 460 分析師關鍵報告(期貨交易篇) F328 450
期貨賽局(下) F232 520 期貨交易策略 F381 360

1 選擇櫺 丨
聿曰


里囯


分暴礱 書號
,' 分纇鹽 書聾 定匱
_ 3434

,','I,
8080305000

l2345 6789
技術分析&選擇權策略 F097 選擇權交易總覽(第二版) F320 480
交易,選擇權 F210 ',',',' 選擇權安心賺 F340 420
選擇權策略王 F217 選擇權 36計 F357 360
征服日經225 期貨及選擇權 F230 ,',' 技術指標帶你進入選擇權交易 F385 500
活用數學 · 交易選擇權 F246

I 債券賃幣 I
里戶

垂n

分纇號 書號 定償 分頲號 書號 定償
12 34
賺遍全球:貨幣投資全攻略 F260 300 外匯套利 CD F311 450
外匯交易精論 F281 300 外匯套利 II F388 580
I 財葬教育 I
分網堊 名 昌匱 定員 分纇璧 書 名 書褫 定償

l
2
點時成金
蘇黎士投機定律
` F237
F280
260
250
6
7
就是要好運

黒風暗潮
F288
F324
350
450
3 投資心理學(漫畫版) F284 200 8 財報編製與財報分析 F331 320
4 歐尼爾成長型股票投資課(漫盃版) F285 200 9 交易駭客任務 F365 600
5 貨族騙子華爾街 F287 250

財筠工程
I

• l



分纇號 號 定匱 : 分纇號 書號 定償

l 固定收益商品 F226 850 : 3 可轉換套利交易策略 F238 520


2 信用性衍生性&結構性商品 F234 520 , 4 我如何成為華爾街計酞金融家 F259 500
國家圖書館出版品預行編目 (GIP) 資 料

外匯套利. II: 套利實戰策略與風險掌控/楊宗桓著.--


初版.--臺北市:寰宇, 2016.04
面; 17 X 23 公分.--(寰宇債券貨幣; 388)

ISBN 978-986-6320-96-5 (平裝)

1. 外匯套利

563.23 105005899

-
外匯套利 11: 套利實戰策暱與風險掌控


者楊宗桓
編戴惠莉
美術設計 富春全球股份有限公司
封面設計 鼎豐整合行銷
印 刷普贤王印刷有限公司

發行人江聰亮
出版者 寰宇出版股份有限公司
臺北市 106 大安區仁愛路四段 109 號 13 樓
TEL: (02) 2721-8138 FAX: (02) 2711-3270
E-mail : service@ipci.com.tw
http : //www.ipci.com.tw
登記證測撥帳號 1146743-9
出版日期 局版台省字第 3917 號
印 刷 2016 年 4 月初版一刷
定 價新台幣 580 元

ISBN 978-986-6320-96-5 (平裝)


崁 本書如有缺頁 、 破損 、 裝訂錯誤 ,請寄回 本公 司更換 。
'·,' ','|
N 9
s B,97
8 C`8
6 2
96 6
3
0 50
5
_ ·,
11

-
|

0冊

8

5

·-I8
- ·

89 66 9

. ` ••

You might also like