最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

股票量化交易軟件:掉期利率1---鎖定與合成倉位

2023-07-06 11:22 作者:大牛啊呢  | 我要投稿

這篇文章的題目我已思考了很久,但一直沒時間深入詳細(xì)研究。 掉期利率的話題在網(wǎng)絡(luò)上十分廣泛,主要在那些計(jì)算每個點(diǎn)的交易專業(yè)人士當(dāng)中,這實(shí)際上是最好的交易方法。 從本文中,您將發(fā)現(xiàn)如何針對商品使用掉期利率,并將看到必須始終考慮到掉期利率。 此外,本文還提供了一個非常復(fù)雜但有趣的思路,如何令掉期利率交易方法與時俱進(jìn)。 這種方法(如若準(zhǔn)備得當(dāng))可以在一個賬戶中使用,也可用兩個賬戶達(dá)成經(jīng)典的利潤鎖定強(qiáng)化工具。赫茲股票期貨量化軟件

編輯搜圖

請點(diǎn)擊輸入圖片描述(最多18字)

關(guān)于掉期利率

我不會解釋掉期利率的思路及其原理。 我僅對掉期利率的實(shí)際應(yīng)用感興趣。 最重要的問題在于是否有可能通過掉期利率賺取利潤。 以交易者的觀點(diǎn)來說,掉期利率要么盈利、亦或虧損。 甚或,許多堅(jiān)持日內(nèi)交易的交易者都忽略了它。 其他人也盡量不去關(guān)注它,認(rèn)為它微不足道,很難對交易產(chǎn)生影響。 而事實(shí)上,幾乎一半的點(diǎn)差隱藏在掉期利率之中。 這個點(diǎn)差不是在買賣時收取的,而是在服務(wù)器上日期變更時計(jì)算的。赫茲股票期貨量化軟件

掉期利率是相對于持倉量來收取的。 它會發(fā)生在以下時刻:

  1. 周一到周二

  2. 周二到周三

  3. 從周三到周四(幾乎所有經(jīng)紀(jì)商都會在這晚收取三倍掉期利率)

  4. 周四到周五

通常,掉期利率的數(shù)值在交易工具規(guī)范中以點(diǎn)數(shù)或百分比表示。 可以有其他的計(jì)算方法,但我只設(shè)法理解了其中的兩種,這已經(jīng)足夠了。 關(guān)于掉期利率的結(jié)構(gòu)化信息很少。 然而,如果您研究這個問題,您甚至可能會發(fā)現(xiàn)一些基于掉期利率的有效策略。 它們產(chǎn)生的利潤百分比很小,但它們有一個極大的優(yōu)勢 — 利潤絕對有保障。 這種方式的主要困難在于,事實(shí)上大多數(shù)受歡迎的經(jīng)紀(jì)商僅提供少數(shù)的具有正掉期利率的金融產(chǎn)品,因此很難按照這種思路賺錢。 甚至可能的潛在利潤也極低。 盡管如此,這總比徹底爆倉要好。 如果您正采用任何其他交易系統(tǒng),您很可能會把本金虧光。赫茲股票期貨量化軟件?

關(guān)于外匯交易的結(jié)論,我的底線是,除了正掉期利率之外,沒啥能保證盈利。 當(dāng)然,有一些系統(tǒng)能夠產(chǎn)生利潤。 然而,在使用它們時,我們同意向經(jīng)紀(jì)商支付任何交易操作的費(fèi)用,并且我們希望價格朝著正確的方向發(fā)展。 正掉期利率是逆過程。 以下陳述是我理解的按照正掉期利率進(jìn)行交易的標(biāo)志:



  • 正掉期利率等價于部分價格朝我們的持倉方向移動(每天都有盈利)

  • 一段時間后,掉期利率可以彌補(bǔ)點(diǎn)差和傭金的損失;而此后,掉期利率會令資金增加

  • 為了令掉期利率見效,持倉時間應(yīng)盡可能長,那么這筆持倉的盈利因子將是最大化

  • 如果開發(fā)得徹底,利潤絕對可預(yù)測和有保障

當(dāng)然,這種方式的最大缺點(diǎn)是依賴存款規(guī)模,但沒有其他有如此自信的概念能夠保證在外匯市場盈利。赫茲股票期貨量化軟件?這種依賴性可通過減少持倉量或風(fēng)險來降低(這其實(shí)是相同的)。 風(fēng)險是持倉量與資金的比率:持倉量增加會令我們的風(fēng)險同步增加,即價格也許會向虧損方向發(fā)展,而資金可能不足以令我們等到掉期利率的利潤彌補(bǔ)點(diǎn)差/傭金的虧損。 為了盡量減少所有可能的負(fù)面影響,發(fā)明了一種鎖定機(jī)制。



利用兩個交易賬戶互鎖

這種掉期利率交易方法在交易者中極受追捧。 為了實(shí)現(xiàn)此策略,您將需要兩個賬戶,且對于相同的貨幣對或其他資產(chǎn)擁有不同的掉期利率。 在同一個賬戶內(nèi)開立兩筆互逆的持倉是沒有意義的 — 這等價于輕易地令資金虧損。赫茲股票期貨量化軟件?即使其中一個品種的掉期利率為正,當(dāng)按相反的方向交易時,這個掉期利率最終會為負(fù)值。 下圖反映了這個方法的概念:

編輯搜圖

如您從圖中所見,若我們想要進(jìn)行掉期利率交易,那么針對所選的特定金融產(chǎn)品,只有 10 種交易場景,其中 6 個已被激活采用。 如果不能找到與條件 “1-6” 匹配的貨幣對,由于這里的掉期利率之一是負(fù)數(shù),則可選擇最后四個選項(xiàng)作為最終手段。 從正值大于負(fù)值的掉期利率中獲利是可能的。 如果您分析不同的經(jīng)紀(jì)商及其掉期利率表,您可以找到上述所有案例。 但此策略的最佳選擇是 “2” 和 “5”。 這些選項(xiàng)在兩端都擁有正掉期利率。 因此,利潤是從兩個經(jīng)紀(jì)商那里賺來的。 甚至,您都不必經(jīng)常在賬戶之間轉(zhuǎn)移資金。赫茲股票期貨量化軟件

這種策略的主要缺點(diǎn)就是您仍然需要在賬戶之間轉(zhuǎn)移資金,因?yàn)樵陂_立互逆持倉時,您在一個經(jīng)紀(jì)商處虧損,而在另一家經(jīng)紀(jì)商處盈利。 然而,如果您正確計(jì)算依賴于現(xiàn)有資金的交易量,您就不必過于頻繁地轉(zhuǎn)移資金。?赫茲股票期貨量化軟件但它有個無可爭辯的優(yōu)勢:無論如何都會有盈利,而這種盈利的確切規(guī)模是可預(yù)測的。 我認(rèn)為許多用戶更愿意避免這種例行任務(wù),并以某種方式在一個帳戶中執(zhí)行這些操作(這是不可能的)。 但有一種方法可以提升經(jīng)典掉期利率交易方法的利潤,即使它不允許在一個賬戶內(nèi)進(jìn)行交易。 我們來討論一下這種方法的主要特點(diǎn)。


關(guān)于匯率

我們從構(gòu)建所有邏輯的基礎(chǔ)開始。 在此基礎(chǔ)上可以建立數(shù)學(xué)方程。 例如,參考 EURUSD、USDJPY、EURJPY。 所有這 3 個貨幣對都是相關(guān)聯(lián)的。 為了能理解這種關(guān)系,我們以稍微不同的形式來表示這些品種:


  • 1/P = EUR/USD

  • 1/P?= USD/JPY

  • 1/P?= EUR/JPY

  • P 是所選貨幣的匯率


任何交易的金融產(chǎn)品都含有我們所需的一種貨幣(或某種等價資產(chǎn)),和作為我們回報提供的另一種貨幣。 例如,如果您采用第一個匯率(EURUSD 貨幣對),那么在開倉買入 1 手時,您將得到 100,000 單位的基準(zhǔn)貨幣。 這是外匯交易規(guī)則:一手總是等于 100,000 單位的基準(zhǔn)貨幣。赫茲股票期貨量化軟件?該貨幣對的基準(zhǔn)貨幣是 EUR,因此我們以 USD 購買 EUR。 在這種情況下,貨幣匯率 “P” 表示 1 EUR 中包含多少 USD 單位。 這同樣適用于所有其他品種:基準(zhǔn)貨幣包含在分子中,而分母是“"主要貨幣”(如果您不同意此命名,請?jiān)谙旅嫣砑釉u論)。 主要貨幣的金額簡單地通過將價格乘以 EUR 數(shù)值來計(jì)算:

  • 1/P = EUR/USD --->??USD/P = EUR ---> USD = P*EUR

  • EUR = Lots*100000

開立空頭倉位時,貨幣會改變位置。 基準(zhǔn)貨幣開始充當(dāng)主要貨幣,而原來的主要貨幣則變?yōu)榛鶞?zhǔn)貨幣。 換言之,我們以 EUR 買入 USD,但兩種貨幣的金額以相同的方式計(jì)算 — 相對于 EUR。 這是正確的,否則會產(chǎn)生很多混亂。 其他貨幣的計(jì)算方法相同。 故此,我們在進(jìn)一步計(jì)算中使用符號 “+” 代表基準(zhǔn)貨幣,符號 “-” 代表主要貨幣。 結(jié)果就是,任何交易都有兩個對應(yīng)的一組數(shù)字,它們象征著我們以什么購買了什么。 對此的另一種解釋是,總有一種貨幣作為產(chǎn)品,另一種貨幣作為貨幣,我們支付貨幣來購買產(chǎn)品。?

如果我們?yōu)槿舾蓚€金融產(chǎn)品開立多必倉位,那么將會有更多的主要和附加貨幣,因此我們得到一組合成倉位。 從掉期利率的角度來看,這樣的合成倉位是絕對無用的。 但我們可以創(chuàng)建這樣一個合成倉位,令其有利于我們。 稍后我會展示它。 我已經(jīng)測算了由兩個貨幣表達(dá)的交易量計(jì)算。 有基于此,我們可得出結(jié)論,即我們可以創(chuàng)建一個復(fù)雜的合成倉位,等價于一筆簡單的倉位:


  • EUR/JPY = EUR/USD * USD/JPY — 匯率由兩種衍生品組成


在現(xiàn)實(shí)中,這樣的匯率有無數(shù)種,它們由若干種貨幣組成,例如:


  • EUR - 歐盟歐元

  • USD - 美元

  • JPY - 日元

  • GBP - 英鎊

  • CHF - 瑞郎

  • CAD - 加元

  • NZD - 新西蘭元

  • AUD - 澳元

  • CNY - 人民幣

  • SGD - 新加坡元

  • NOK - 挪威克朗

  • SEK - 瑞典克朗


這并非完整的貨幣列表。 我們需要知道的是,任意交易的金融產(chǎn)品均可由該列表中的任意貨幣組成。 其中一些交易的金融產(chǎn)品由經(jīng)紀(jì)商提供,而另一些交易的金融產(chǎn)品可由其他金融產(chǎn)品倉位組合而來。 一個典型的例子是 EURJPY 貨幣對。 這只是構(gòu)成衍生品匯率的最簡單示例,但依據(jù)這些思路,我們可以得出結(jié)論,任何倉位都可以表示為一組其他金融產(chǎn)品的倉位。赫茲股票期貨量化軟件?綜上所述,得出結(jié)果:



  • Value1 是用絕對值表示的基準(zhǔn)符號貨幣

  • Value2 是用絕對值表示的附加品種貨幣

  • A 是基準(zhǔn)貨幣的持倉手?jǐn)?shù)

  • B 是是主要貨幣的持倉手?jǐn)?shù)

  • Contract(合約)是購買或賣出貨幣的絕對值(對應(yīng) 1 手)

  • A = 1/P = Value1/Value2 - 它是任何交易的金融產(chǎn)品的方程(包括那些沒有出現(xiàn)在市場觀察窗口中的)

  • Value1 = Contract*A

  • Value2 = Contract*B

我們稍后將需要這些比率來計(jì)算手?jǐn)?shù)。 至于現(xiàn)在,記住它們即可。 這些比率描述了買賣貨幣的數(shù)量之比。 在此基礎(chǔ)上可以構(gòu)建更嚴(yán)謹(jǐn)?shù)拇a邏輯。



利用合成倉位鎖定

在本文中,合成倉位是可以由幾個其他倉位組成的倉位,而這些其他倉位必須要由其他金融產(chǎn)品組成。 該倉位必須等價于一筆所有產(chǎn)品的持倉。 看起來很復(fù)雜? 其實(shí),這一切都非常簡單。 這種倉位也許是為了某種需求:



  1. 鎖定模擬交易金融產(chǎn)品的原始持倉

  2. 嘗試創(chuàng)建等價于擁有完全不同掉期l利率的持倉

  3. 其他目的

最初,我是針對第 2 點(diǎn)提出了這個思路。 經(jīng)紀(jì)商出于不同目的而設(shè)置了掉期利率值,其主要目的是期望產(chǎn)生額外利潤。赫茲股票期貨量化軟件?我認(rèn)為經(jīng)紀(jì)商也會考慮競爭對手的掉期利率,以防止交易者交易掉期利率泛濫。 下圖解釋了這一概念。 也許您可以強(qiáng)化此示意圖。


這是該方法的通常策劃:

編輯搜圖

即使這個策劃也并未涵蓋有關(guān)如何開立合成倉位的全部數(shù)據(jù)。 該示意圖僅展示如何判定一筆合成倉位的特定組件的交易方向,其必須由所選經(jīng)紀(jì)商的可用金融產(chǎn)品之一來表示。?

現(xiàn)在,我們需要判定如何計(jì)算這些倉位的交易量。 邏輯上,交易量的計(jì)算應(yīng)基于這樣的考慮,即倉位應(yīng)等同于所得金融產(chǎn)品的 1 手倉位,所選定的等式變體就會減少。 交易量計(jì)算需要以下值:



  • ContractB - 需減少等式的貨幣對合約大小(在大多數(shù)情況下,它等于 100,000 單位的基準(zhǔn)貨幣)

  • Contract[1] - 您想要判定手?jǐn)?shù)的貨幣對的合約大小

  • A[1] - 基準(zhǔn)貨幣的數(shù)量,它由前一個平衡(或鏈中的第一個)貨幣對的手?jǐn)?shù)表達(dá)

  • B[1] -??由前一個平衡(或鏈中的第一個)貨幣對的手?jǐn)?shù)表達(dá)的主要貨幣數(shù)量

  • A[2] -??由當(dāng)前正在平衡的貨幣對的手?jǐn)?shù)表達(dá)的基準(zhǔn)貨幣數(shù)量

  • B[2] -?由當(dāng)前正在平衡的貨幣對的手?jǐn)?shù)表達(dá)的主要貨幣數(shù)量

  • C[1] - 前一個已平衡貨幣對(或鏈中的第一個)的合約大小

  • C[2] - 當(dāng)前正在平衡的貨幣對的合約大小

請注意,并非總是可以確定 “ContractB”,因?yàn)榻?jīng)紀(jì)商可能不提供組合產(chǎn)生的金融產(chǎn)品。 在這種情況下,合約可以任意設(shè)置,例如,等于基準(zhǔn)常數(shù) “100000”。

首先,判斷鏈中的第一對,其會包含期望倉位的最終金融產(chǎn)品的基準(zhǔn)貨幣。 然后,搜索其他貨幣對,來補(bǔ)償未包含在最終等價物中的額外貨幣。 當(dāng)主要貨幣在當(dāng)前貨幣對中處于正確位置時,平衡結(jié)束。 我已創(chuàng)建了一個圖表來展示這是如何做到的:

編輯搜圖


現(xiàn)在,我們在代碼中實(shí)現(xiàn)這些技術(shù),并分析結(jié)果。 第一個原型將非常簡單,因?yàn)樗奈ㄒ荒康氖窃u估思路的正確性。 我希望上面的示意圖能幫助您理解這個思路的所有細(xì)節(jié)。


編寫一個實(shí)用工具來檢驗(yàn)多邊掉期利率

市場觀察排序和數(shù)據(jù)準(zhǔn)備:

為了運(yùn)用該技術(shù),選擇的貨幣名稱必須正好為 6 個字符長,且僅由大寫字母組成。 我認(rèn)為所有經(jīng)紀(jì)商都會遵守這個命名規(guī)則。 一些經(jīng)紀(jì)商加了前綴或后綴,在編寫操控字符串?dāng)?shù)據(jù)的算法時,也應(yīng)考慮到這些。 為了按照便捷的格式存儲品種信息,我創(chuàng)建了兩個結(jié)構(gòu)(后面會用到第二個):

struct Pair// required symbol information?? {
?? string Name;// currency pair?? double SwapBuy;// buy swap?? double SwapSell;// sell swap?? double TickValue;// profit from 1 movement tick of a 1-lot position?? double TickSize;// tick size in the price?? double PointX;// point size in the price?? double ContractSize;// contract size in the base deposit currency?? double Margin;// margin for opening 1 lot?? };struct PairAdvanced : Pair// extended container?? {
?? string Side;// in numerator or denominator?? double LotK;// lot coefficient?? double Lot;// lot?? };

貨幣對排序時不會用到某些字段。 為避免產(chǎn)生非必要的容器,我已把它進(jìn)行了一些擴(kuò)展,從而也可拿該結(jié)構(gòu)用于其他目的。 我有一個類似算法的原型,但功能非常有限:只能考慮將其用于主終端窗口中的那些貨幣對。 現(xiàn)在,一切都很簡單了。 更重要的是,在算法中所有操作都是自動的。 為了設(shè)置金融產(chǎn)品數(shù)組的大小,需要以下函數(shù):

Pair Pairs[];// data of currency pairsvoid SetSizePairsArray()// set size of the array of pairs?? {
?? ArrayResize(Pairs,MaxSymbols);
?? ArrayResize(BasicPairsLeft,MaxPairs*2); // since each pair has 2 currencies, there can be a maximum of 2 times more base currencies?? ArrayResize(BasicPairsRight,MaxPairs*2);// since each pair has 2 currencies, there can be a maximum of 2 times more base currencies?? }

第一行設(shè)置從市場觀察窗口中我們能取用的最大貨幣對數(shù)量。 另外兩行設(shè)置操作用的數(shù)組大小。 剩余的 2 個數(shù)組扮演輔助作用 — 它們能夠把貨幣對切分成 2 部分(2 個復(fù)合貨幣)。 以黃色高亮顯示的變量是 EA 的輸入?yún)?shù)。


  • MaxSymbols - 最大貨幣對存儲大?。ㄎ乙褜?shí)現(xiàn)了手動規(guī)范)

  • MaxPairs - 按我們的公式生成的兩個部分中的最大貨幣對數(shù)量(智能交易系統(tǒng)不會搜索長于該數(shù)字的公式)赫茲股票期貨量化軟件

為了檢查交易的金融產(chǎn)品是否符合標(biāo)準(zhǔn)(兩種不同貨幣的符號也可能存在于其他金融產(chǎn)品當(dāng)中),我創(chuàng)建了以下斷言函數(shù):

bool IsValid(string s)// checking the instrument validity (its name must consist of upper-case letters)?? {
?? string Mask="abcdefghijklmnopqrstuvwxyz1234567890";// mask of unsupported characters (lowercase letters and numbers)?? for ( int i=0; i<StringLen(s); i++ )// reset symbols??????{
??????for ( int j=0; j<StringLen(Mask); j++ )
???????? {
???????? if ( s[i] == Mask[j] ) return false;
???????? }
??????}??
?? return true;
?? }


此函數(shù)并非以后檢查金融產(chǎn)品的唯一條件。 但這個條件不能寫在邏輯表達(dá)式內(nèi)部,所以它實(shí)現(xiàn)為斷言更容易。 現(xiàn)在,我們進(jìn)入為數(shù)組填充必要數(shù)據(jù)的主函數(shù):

void FillPairsArray()// fill the array with required information about the instruments?? {
?? int iterator=0;
?? double correction;
?? int TempSwapMode;
??
?? for ( int i=0; i<ArraySize(Pairs); i++ )// reset symbols??????{
??????Pairs[iterator].Name="";
??????}??
??
?? for ( int i=0; i<SymbolsTotal(false); i++ )// check symbols from the MarketWatch window??????{
??????TempSwapMode=int(SymbolInfoInteger(Pairs[iterator].Name,SYMBOL_SWAP_MODE));
??????if ( StringLen(SymbolName(i,false)) == 6+PrefixE+PostfixE && IsValid(SymbolName(i,false)) && SymbolInfoInteger(SymbolName(i,false),SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_FULL??
??????&& ( ( TempSwapMode??== 1 )??||??( ( TempSwapMode == 5 || TempSwapMode == 6 ) && CorrectedValue(Pairs[iterator].Name,correction) )) )
???????? {
???????? if ( iterator >= ArraySize(Pairs) ) break;
???????? Pairs[iterator].Name=SymbolName(i,false);
???????? Pairs[iterator].TickSize=SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_TRADE_TICK_SIZE);
???????? Pairs[iterator].PointX=SymbolInfoDouble(Pairs[iterator].Name, SYMBOL_POINT);
???????? Pairs[iterator].ContractSize=SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_TRADE_CONTRACT_SIZE);
???????? switch(TempSwapMode)
?????????? {
????????????case??1:// in points??????????????Pairs[iterator].SwapBuy=SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_SWAP_LONG)*Pairs[iterator].TickValue*(Pairs[iterator].PointX/Pairs[iterator].TickSize);
??????????????Pairs[iterator].SwapSell=SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_SWAP_SHORT)*Pairs[iterator].TickValue*(Pairs[iterator].PointX/Pairs[iterator].TickSize);??????????????
??????????????break;
????????????case??5:// in percent??????????????Pairs[iterator].SwapBuy=correction*SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_SWAP_LONG)*SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_BID)*Pairs[iterator].ContractSize/(360.0*100.0);
??????????????Pairs[iterator].SwapSell=correction*SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_SWAP_SHORT)*SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_BID)*Pairs[iterator].ContractSize/(360.0*100.0);??????????????
??????????????break;
????????????case??6:// in percent??????????????Pairs[iterator].SwapBuy=correction*SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_SWAP_LONG)*SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_BID)*Pairs[iterator].ContractSize/(360.0*100.0);
??????????????Pairs[iterator].SwapSell=correction*SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_SWAP_SHORT)*SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_BID)*Pairs[iterator].ContractSize/(360.0*100.0);??????????????
??????????????break;??????????????
?????????? }????
???????? Pairs[iterator].Margin=SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_MARGIN_INITIAL);
???????? Pairs[iterator].TickValue=SymbolInfoDouble(Pairs[iterator].Name,SYMBOL_TRADE_TICK_VALUE);????????
???????? iterator++;
???????? }
??????}
?? }

此函數(shù)提供了所有品種的簡單迭代,并按照復(fù)雜的復(fù)合條件進(jìn)行過濾,它檢查是否符合字符串名稱長度要求,和該品種能否交易的可能性,以及其他參數(shù),譬如與品種相關(guān)的,計(jì)算掉期利率方法里不同于最常用的“點(diǎn)數(shù)”。 在 “switch” 模塊中選擇一種掉期利率計(jì)算方法。 目前,有兩種實(shí)現(xiàn)方法:點(diǎn)數(shù)和百分比。 正確的排序?qū)τ诒苊獠槐匾挠?jì)算很重要。赫茲股票期貨量化軟件?另外,請注意紅色高亮顯示的函數(shù)。 當(dāng)主要貨幣(非基準(zhǔn)貨幣)由區(qū)別于存款貨幣的某個貨幣表示時,應(yīng)加入一定的調(diào)整因子,從而將掉期利率轉(zhuǎn)換到存款貨幣。 該函數(shù)計(jì)算相關(guān)值。 此處是它的代碼:

bool CorrectedValue(string Pair0,double &rez)// adjustment factor to convert to deposit currency for the percentage swap calculation method?? {
?? string OurValue=AccountInfoString(ACCOUNT_CURRENCY);// deposit currency?? string Half2Source=StringSubstr(Pair0,PrefixE+3,3);// lower currency of the pair to be adjusted?? if ( Half2Source == OurValue )
??????{
??????rez=1.0;
??????return true;
??????}
??
?? for ( int i=0; i<SymbolsTotal(false); i++ )// check symbols from the MarketWatch window??????{
??????if ( StringLen(SymbolName(i,false)) == 6+PrefixE+PostfixE && IsValid(SymbolName(i,false)) )//find the currency rate to convert to the account currency???????? {
???????? string Half1=StringSubstr(SymbolName(i,false),PrefixE,3);
???????? string Half2=StringSubstr(SymbolName(i,false),PrefixE+3,3);
????
???????? if ( Half2 == OurValue && Half1 == Half2Source )
????????????{
????????????rez=SymbolInfoDouble(SymbolName(i,false),SYMBOL_BID);
????????????return true;
????????????}
???????? if ( Half1 == OurValue && Half2 == Half2Source )
????????????{
????????????rez=1.0/SymbolInfoDouble(SymbolName(i,false),SYMBOL_BID);
????????????return true;
????????????}????????????
???????? }
??????}
?? return false;
?? }

該函數(shù)作為斷言,也會把調(diào)整因子值返回到由外部引用傳遞來的變量。 調(diào)整因子是依據(jù)所需貨幣的匯率計(jì)算得到的,其中包括我們的存款貨幣。

隨機(jī)生成的公式

假設(shè)數(shù)組均已填充了必要的數(shù)據(jù)。 現(xiàn)在,我們需要以某種方式迭代這些品種,并嘗試依據(jù)這些貨幣對動態(tài)創(chuàng)建所有可能的公式組合。 首先,必須決定以何種形式存儲公式。 存儲該公式所有元素的結(jié)構(gòu)應(yīng)該是非常簡單和清晰的,可應(yīng)對用戶查看日志的需要(肯定會有這樣的需求,否則無法識別錯誤)。

我們的公式是 “=” 符號左右兩側(cè)的一組因子。 該因子可以是貨幣匯率的 1 或 -1 次冪(相當(dāng)于倒數(shù),或指當(dāng)前金融產(chǎn)品匯率的單位)。 我決定使用以下結(jié)構(gòu):

struct EquationBasic // structure containing the basic formula?? {
?? string LeftSide;// currency pairs participating in the formula on the left side of the "=" sign?? string LeftSideStructure;// structure of the left side of the formula?? string RightSide;// currency pairs participating in the right side of the formula?? string RightSideStructure;// structure of the right side of the formula?? };

所有數(shù)據(jù)均以字符串格式存儲。 為了研究公式,將解析這些字符串,并提取我們所需的所有必要信息。赫茲股票期貨量化軟件?此外,它們可以在需要時打印。 生成的公式將按照以下格式打?。?/p>

編輯搜圖

就我個人而言,這樣的記錄絕對清晰易讀。 字符?"^"?用作貨幣對之間的分隔符。 公式結(jié)構(gòu)中不需要分隔符,因?yàn)樗蓡蝹€字符?"u"?和?"d", 組成,表示多重?cái)?shù)的程度:


  1. "u" 是貨幣匯率

  2. "d" 是1 / 貨幣匯率(即倒數(shù))

如您所見,得到的公式在等式兩邊都有一個浮動長度和一個浮動大小,但這個大小有其極限。 這種方式為生成的公式提供了最大可變性。 如此,反之,在所選經(jīng)紀(jì)商的交易條件內(nèi),能發(fā)現(xiàn)變體可能的最高品質(zhì)。 經(jīng)紀(jì)商提供的條件完全不同。 為了確保這些公式能成功生成,我們需要額外的隨機(jī)函數(shù)來生成所需范圍內(nèi)的數(shù)字。 為此目的,我們利用內(nèi)置 MathRand 函數(shù)的能力創(chuàng)建相關(guān)功能:

int GenerateRandomQuantityLeftSide()// generate a random number of pairs on the left side of the formula?? {
?? int RandomQuantityLeftSide=1+int(MathFloor((double(MathRand())/32767.0)*(MaxPairs-1)));
?? if ( RandomQuantityLeftSide >= MaxPairs ) return MaxPairs-1;
?? return RandomQuantityLeftSide;
?? }int GenerateRandomQuantityRightSide(int LeftLenght)// generate a random number of pairs on the right side of the formula (taking into account the number of pairs on the left side)?? {
?? int RandomQuantityRightSide=1+int(MathFloor((double(MathRand())/32767.0)*(MaxPairs-LeftLenght)));
?? if ( RandomQuantityRightSide < 2 && LeftLenght == 1 ) return 2;// there must be at least 2 pairs in one of the sides, otherwise it will be equivalent to opening two opposite positions?? if ( RandomQuantityRightSide > (MaxPairs-LeftLenght) ) return (MaxPairs-LeftLenght);
?? return RandomQuantityRightSide;
?? }
??
int GenerateRandomIndex()// generate a random index of a symbol from the MarketWatch window?? {
?? int RandomIndex=0;
????
?? while(true)
??????{
??????RandomIndex=int(MathFloor((double(MathRand())/32767.0) * double(MaxSymbols)) );
??????if ( RandomIndex >= MaxSymbols ) RandomIndex=MaxSymbols-1;
??????if ( StringLen(Pairs[RandomIndex].Name) > 0 ) return RandomIndex;
??????}

?? return RandomIndex;
?? }

在某個階段將需要所有這三個函數(shù)。 現(xiàn)在,我們能夠編寫生成這些公式的函數(shù)。 代碼會變得越來越復(fù)雜,但我不會采用面向?qū)ο蟮姆椒?,因?yàn)槿蝿?wù)并非標(biāo)準(zhǔn)的。 我決定采用過程化方法。 由此產(chǎn)生的程序相當(dāng)龐大和繁瑣,但沒有額外的功能,每個函數(shù)都執(zhí)行特定的任務(wù),無需任何中間函數(shù),從而避免代碼重復(fù)。 否則,由于任務(wù)規(guī)范,代碼將更加難以理解。 該函數(shù)將如下所示:

EquationBasic GenerateBasicEquation()// generate both parts of the random equation?? {
?? int RandomQuantityLeft=GenerateRandomQuantityLeftSide();
?? int RandomQuantityRight=GenerateRandomQuantityRightSide(RandomQuantityLeft);
?? string TempLeft="";
?? string TempRight="";
?? string TempLeftStructure="";
?? string TempRightStructure="";??
??
?? for ( int i=0; i<RandomQuantityLeft; i++ )
??????{
??????int RandomIndex=GenerateRandomIndex();
??????if ( i == 0 && RandomQuantityLeft > 1 ) TempLeft+=Pairs[RandomIndex].Name+"^";
??????if ( i != 0 && (RandomQuantityLeft-i) > 1 ) TempLeft+=Pairs[RandomIndex].Name+"^";
??????if ( i == RandomQuantityLeft-1 ) TempLeft+=Pairs[RandomIndex].Name;
??????
??????if ( double(MathRand())/32767.0 > 0.5 ) TempLeftStructure+="u";
??????else TempLeftStructure+="d";
??????}
??????
?? for ( int i=RandomQuantityLeft; i<RandomQuantityLeft+RandomQuantityRight; i++ )
??????{
??????int RandomIndex=GenerateRandomIndex();
??????
??????if ( i == RandomQuantityLeft && RandomQuantityRight > 1 ) TempRight+=Pairs[RandomIndex].Name+"^";
??????if ( i != RandomQuantityLeft && (RandomQuantityLeft+RandomQuantityRight-i) > 1 ) TempRight+=Pairs[RandomIndex].Name+"^";
??????if ( i == RandomQuantityLeft+RandomQuantityRight-1 ) TempRight+=Pairs[RandomIndex].Name;
??????
??????if ( double(MathRand())/32767.0 > 0.5 ) TempRightStructure+="u";
??????else TempRightStructure+="d";
??????}
??????
?? EquationBasic result;
?? result.LeftSide=TempLeft;
?? result.LeftSideStructure=TempLeftStructure;
?? result.RightSide=TempRight;
?? result.RightSideStructure=TempRightStructure;
??
?? return result;
?? }

如您所見,為了生成隨機(jī)公式,此處用到了先前研究的所有三個函數(shù)。 這些函數(shù)并未在代碼中的其他任何地方用到。 一旦公式準(zhǔn)備就緒,我們就可以逐步分析這個公式。 所有不正確的公式都將由下一個極其重要的復(fù)雜過濾器舍棄。 首先,檢查是否等價。 如果某部分不等價,則此公式不正確。 所有符合的公式進(jìn)入下一個分析步驟。

公式平衡


此步驟一次性涵蓋多個分析準(zhǔn)則:



  1. 計(jì)算分子和分母中的所有額外因子并刪除它們

  2. 檢查分子和分母中某種貨幣的可用性

  3. 檢查左右兩邊所得分子的對應(yīng)關(guān)系

  4. 如果右側(cè)是左側(cè)的倒數(shù),我們只需將公式的右側(cè)結(jié)構(gòu)顛倒(類似于 “-1” 次冪)

  5. 如果所有階段都順利完成,把結(jié)果寫入一個新變量。

這些步驟在代碼中如此出現(xiàn):

BasicValue BasicPairsLeft[];// array of base pairs to the leftBasicValue BasicPairsRight[];// array of base pairs to the rightbool bBalanced(EquationBasic &CheckedPair,EquationCorrected &r)// if the current formula is balanced (if yes, return the corrected version to the "r" variable)?? {
?? bool bEnd=false;
?? string SubPair;// the full name of the currency pair?? string Half1;// the first currency of the pair?? string Half2;// the second currency of the pair?? string SubSide;// the currency pair in the numerator or denominator?? string Divider;// separator?? int ReadStartIterator=0;// reading start index?? int quantityiterator=0;// quantity?? bool bNew;
?? BasicValue b0;
??
?? for ( int i=0; i<ArraySize(BasicPairsLeft); i++ )//reset the array of base pairs ??????{
??????BasicPairsLeft[i].Value = "";

股票量化交易軟件:掉期利率1---鎖定與合成倉位的評論 (共 條)

分享到微博請遵守國家法律
东丽区| 海伦市| 融水| 青川县| 鄂托克旗| 百色市| 自贡市| 读书| 宁晋县| 新闻| 临江市| 泗洪县| 唐山市| 芜湖县| 山东| 商洛市| 静宁县| 长宁县| 班戈县| 镇巴县| 铜川市| 阆中市| 南丹县| 资中县| 治县。| 招远市| 克拉玛依市| 泌阳县| 晋江市| 富民县| 新邵县| 郸城县| 揭东县| 武平县| 汶川县| 临夏县| 郎溪县| 县级市| 平顶山市| 嘉兴市| 焦作市|