外_匯_邦 WaiHuiBang.com
簡介金融市場的運作首先是交易業務。www.emoneybtc.com正如我們兒時熟知的,按照自己的直覺進行買賣。但是外匯交易卻有些不同。本文將解析外匯交易的一些想法和外匯交易程序MQL 4。
回顧歷史從課本上我們得知在古老人類時代是不使用金錢的 – 他們享受自然的產物。金錢的發明和創造本身就是人類一部偉大的進程。使用錢幣的人們可以通過金錢進行相互交換產物。無論是國家和國家之間的相互交換,還是時代的變遷,錢幣總是能夠很容易的儲存或是運輸,例如,黃金或白銀。當然,每個國家都有自己的歷史,風俗和貨幣。但是遠古時期的貿易活動都是通過商人帶著貨物從一個國家到另一個國家進行貨物交換。貨物的交換可以是地方性的或是世界性的,例如,黃金。
我們的時代如今,貴重金屬不能夠作為實用的支付工具。所以國家開始制定付款支付貨物的交換。在國家與國家的貿易中付款支付貨物的交換繼而產生了貨幣與貨幣之間的匯率。例如, EUR/USD 之間的匯率為 1.25。這就意味著一歐元可以兌換1.25 美元。 因此,在兩個自由貨幣之間必須計算貨幣匯率。大型的外匯交換通常是通過銀行來執行輸入/輸出業務,所以產生了標准貨幣對和標准交換總量。貨幣對的名稱在MetaTrader 4客戶終端中以貨幣的簡寫形式顯現。例如, EURUSD表示在美元中歐元的匯率, GBPJPY -在日元中英鎊的匯率。既第一個貨幣總是指定在第二個貨幣范圍內的匯率。
貨幣存款雖然在交易過程中可以存在多種貨幣,但結果卻總是寫入一種貨幣 - 貨幣存款。如果貨幣存款為美元( US ),盈利和虧損都會以美元顯示。如果是歐元,盈利和虧損自然會以歐元顯示。對於貨幣存款的相關信息你可以查看使用 AccountCurrency() 函數。可以用來轉換交易結果。
標准份額大小 - 標准手數在一種貨幣與另外一種貨幣交換時,使用的單位為"標准手數"。以標准手數來進行買賣。對於不同的貨幣對標准手數存在不同值。 目前,最大的貨幣對標准手數值等於100 000 。但什麼是 100 000呢?當我們買進時,需要支付金錢。當我們賣出時,可以獲取金錢。但是對於貨幣對,我們買賣的同時也可以獲得一定盈利。這就是為什麼通常我們獲取第一個貨幣價格關系到第二弟貨幣的原因。對於 EURUSD標准手數為100 000歐元。如果我們買進一個 EURUSD標准手,意味著我們用 100 000 歐元並換取一定數量的美元。由於收入和支出必須保持平衡 100 000 歐元 = X 美元。那麼我們怎樣去計算呢? 讓我們在表達式中用美元還原歐元:
EURO= k*USD
k 表示 EURUSD的交換匯率;
100 000 (k*USD) = X USD => X= k*100 000;
如果當前 EURUSD匯率為 1.25, 就是X=125 000。
由上面的計算可以得出 EURUSD標准手數, 我們的 100 000 歐元可以換取得到125 000 美元。有時有人說 - 買進歐元和賣出美元就是表示買進 EURUSD 。對於貨幣對的標准手數的信息您可以使用 MarketInfo() 函數獲取。例如:
- MarketInfo(Symbol(), MODE_LOTSIZE);
復制代碼您同樣可以獲得貨幣對名稱文本和函數
- MarketInfo("EURUSD", MODE_LOTSIZE);
復制代碼將返回100 000。會被寫入幫助文件: MODE_LOTSIZE 是在貨幣對基礎的份額大小。對於EURUSD 貨幣對的基礎貨幣為 EUR (*)。對於 CHFJPY貨幣對的基礎貨幣對為瑞士法郎,相關的價格將會以瑞士法郎表示。
交易結果讓我們來看一看其他的示例。我們以1.2500價格買進 1標准手。當前價格為1.2600,所以我們決定收盤,就是賣出1標准手的 EURUSD。
寫下的水平:
以1.2500買進1 標准手的 EURUSD : + 100 000 歐元 - 125 000美元。
以1.2600賣出1個標准手的EURUSD : - 100 000 歐元 + 126 000 US美元。
交易業務的盈利結果: 0 EURO + $ 1000。
結論: 從 EURUSD 交易業務的盈利結果用美元來表示,即貨幣對的第二種貨幣。嘗試計算其他交易的結果: 以2。30價格買進一個標准手的 GBPCHF並且以 2.40價格收盤。得到的將是什麼結果呢?
槓桿和保證金在金融市場的交易中允許從保證金獲取盈利。就我們的范例而言,買進1個標准手的 EURUSD,我們需要超過100 000 美元 (125 000匯率為 1。25)。大多數經紀允許交易者調用‘槓桿’。槓桿的值會指出對於開倉可用的次數。金錢總數需要以保證金命名開倉。在沒有槓桿情況下,1個標准手的 EURUSD 需花費 100 000歐元或125 000 美元(匯率為 1。2500)如果經紀提供給您100的槓桿, 這樣金錢的總數在開倉位置將被減少100次並且為1250 美元。 這樣我們已經計算出的盈利值仍然相同。對於槓桿值您可以在交易賬戶中使用 AccountLeverage()函數查看。 由此,開倉標准手的保證金被指定為:
保證金(基礎貨幣對) = 標准手價格 (基礎回避對) / 保證金_大小。
基礎貨幣對的價格在貨幣存款中是基礎貨幣對和貨幣存款之間的比率。
保證金計算范例:
MarketInfo("GBPJPY", MODE_LOTSIZE) 給出的值 70 000 (LS)。
AccountCurrency() 函數返回 "EUR" (AC)。
AccountLeverage() 函數返回50 (AL)。
我們怎樣計算當前時刻 GBPJPY的價格(M)?
基礎貨幣為 GBP,這樣
M = 70000 GBP / AL = 70 000*GBPEUR / AL = 70000 / EURGBP / AL。
如果此時 EURGBP的匯率為0.6786,那麼
M = 70000 / 0.6786 / 50 = 2063.07 EURO。
如果槓桿等於100,保證金將少於兩倍 - 1031.54 歐元。對於10的槓桿,保證金將是:
M = 70000 / 0.6786 / 10 = 10315.36。
由此可以看出,槓桿的大小只影響開倉位的保證金大小,但是不會影響獲取盈利的多少。同樣需要注意的是在歐元(貨幣存款)當中保證金的大小將會和 EURGBP匯率一起波動,應為基礎貨幣為英鎊。在我們的范例中,我們可以用 1/EURGBP還原GBPEUR。因為貨幣對只能夠獲取 EURGBP。
點數 - 最小價格改變在外匯交易中的貨幣對每種貨幣的差異不僅在自己的特性上,同樣在他們匯率的小數點數量上。例如, GBPJPY的匯率,2006年12月29日為 233。18,同一天 GBPUSD 的匯率為1.9587。小數點的總數可以使用函數設置
- MarketInfo(Symbol(), MODE_DIGITS);
-
復制代碼例如,函數
- MarketInfo("GBPJPY", MODE_DIGITS);
-
復制代碼將返回2。
相應地,對於當前不同的貨幣對最小價格的改變也將不同。這個值通常等於 0。01,對於貨幣對 EURUSD 為 0。0001。在當前開價中這個最小價格改變被稱為 點,可以使用函數獲取:
- MarketInfo(Symbol(), MODE_POINT);
-
復制代碼對於當前貨幣對,函數的值
- MarketInfo(Symbol(), MODE_POINT); and MarketInfo(Symbol(), MODE_TICKSIZE);
復制代碼相同。
在貨幣存款中的價格點估測風險,當價格移動至一定點數交易者必須知道開倉的虧損數量。或者相反,在虧損點上計算可以接受的虧損量。這樣,需要使用函數
- MarketInfo(Symbol(), MODE_TICKVALUE);
復制代碼在貨幣存款中返回點值。
必須要注意的是對於貨幣對點值將會改變,第二個值不是貨幣存款。
每個標准手的保證金最後的函數考慮到
- MarketInfo(Symbol(), MODE_MARGINREQUIRED);
復制代碼以賣出價 返回一個標准手的價格。
以上范例的函數使用
下面您可以看到腳本顯示的上面12組貨幣對的函數數據。必須注意腳本的自定義函數 MarginCalculate()以買入價返回的標准手數。腳本允許學習申請 MQL4 函數使用到智能交易的金錢管理和風險管理的計算中。
- //+------------------------------------------------------------------+
- //| SimplySpecification.mq4 |
- //| Copyright © 2007, MetaQuotes Software Corp. |
- //| http://www.metaquotes.net/ |
- //+------------------------------------------------------------------+
- string SymbolsArray[13] = {"","USDCHF","GBPUSD","EURUSD","USDJPY",
- "AUDUSD","USDCAD","EURGBP","EURAUD","EURCHF","EURJPY","GBPJPY","GBPCHF"};
- //+------------------------------------------------------------------+
- //| string SymbolByNumber |
- //+------------------------------------------------------------------+
- string GetSymbolString(int Number)
- {
- //----
- string res = "";
- res = SymbolsArray[Number];
- //----
- return(res);
- }
- //+------------------------------------------------------------------+
- //| A very simple function to calculate margin for Forex symbols。 |
- //| It automatically calculates in the account's base currency and |
- //| does not work for complicated rates that do not have direct |
- //| recalculation into the trade account's base currency。 |
- //+------------------------------------------------------------------+
- double MarginCalculate(string symbol, double volume)
- {
- string first = StringSubstr(symbol,0,3); // the first symbol, for example, EUR
- string second = StringSubstr(symbol,3,3); // the second symbol, for example, USD
- string currency = AccountCurrency(); // deposit currency, for example, USD
- double leverage = AccountLeverage(); // leverage, for example, 100
- // contract size, for example, 100000
- double contract = MarketInfo(symbol, MODE_LOTSIZE);
- double bid = MarketInfo(symbol, MODE_BID); // Bid price
- //---- allow only standard forex symbols like XXXYYY
- if(StringLen(symbol) != 6)
- {
- Print("MarginCalculate: '",symbol,"' must be standard forex symbol XXXYYY");
- return(0.0);
- }
- //---- check for data availability
- if(bid <= 0 || contract <= 0)
- {
- Print("MarginCalculate: no market information for '",symbol,"'");
- return(0.0);
- }
- //---- check the simplest variations - without cross currencies
- if(first == currency)
- return(contract*volume / leverage); // USDxxx
- if(second == currency)
- return(contract*bid*volume / leverage); // xxxUSD
- //---- check normal cross currencies, search for direct conversion through deposit currency
- string base = currency + first; // USDxxx
- if(MarketInfo(base, MODE_BID) > 0)
- return(contract / MarketInfo(base, MODE_BID)*volume / leverage);
- //---- try vice versa
- base = first + currency; // xxxUSD
- if(MarketInfo(base, MODE_BID) > 0)
- return(contract*MarketInfo(base, MODE_BID)*volume / leverage);
- //---- direct conversion is impossible
- Print("MarginCalculate: can not convert '",symbol,"'");
- return(0.0);
- }
- //+------------------------------------------------------------------+
- //| script program start function |
- //+------------------------------------------------------------------+
- int start()
- {
- //----
- for(int i = 1; i < 13; i++)
- {
- Print("Symbol=",GetSymbolString(i)," spread=",MarketInfo(GetSymbolString(i),
- MODE_SPREAD)," margin at 1 lot=",MarginCalculate(GetSymbolString(i),1),
- " MODE_TICKVALUE=",MarketInfo(GetSymbolString(i),MODE_TICKVALUE),
- ", MODE_TICKSIZE=",MarketInfo(GetSymbolString(i),MODE_TICKSIZE),
- " MODE_MARGINREQUIRED=",MarketInfo(GetSymbolString(i),MODE_MARGINREQUIRED));
- }
- //----
- return(0);
- }
- //+------------------------------------------------------------------+
復制代碼*大多數情況下,貨幣對的基礎貨幣是在貨幣對的第一位,當然,也存在不同的服務器設定。
外_匯_邦 WaiHuiBang.com