區塊鏈研究實驗室 | 如何用Python創建交易策略

火幣網(huobi.com)最新可用網址(點擊下圖直達註冊!)


火必交易所,曾经的火币交易所!

欧易OKX三大交易所,稳定好用!

币安全球第一大交易所!安全!


交易策略是在市場上買賣的本質。許多交易者都有參加的理由。策略始於一個想法,然後將其轉變為可行性研究,然後進行回測,最後進行實時實施和實時評估。在本文中,我們將從基本概念開始,即僅使用基本財務數據來得出交易信號,然後再進行回測和判斷其性能之前,看看它是否可行。

集思廣益

開盤價,最高價,最低價和收盤價形式的財務信息對於瞭解交易的證券的歷史屬性極為重要。在考慮到與收盤價之間的差異的同時測量高點和低點之間的范圍,可以為我們提供具有弱預測能力的歷史模式,這對於我們希望類似隨機的環境是最好的。

EURUSD每小時數據收盤價為黑色,紅色為高點,藍色為低點。

如此說來,在下一部分中,我們將討論考慮到這三項信息的指標的概念。因此,接下來的步驟是可行性研究和回測。

實現指標

想要合並至少三個OHLC信息時想到的一個指標是資金流量乘數。話雖如此,隨機震蕩指標也考慮瞭高,低和收盤數據,但是由於我們已經在之前的文章中進行瞭討論,因此該是時候看看一些新內容瞭。

資金流量乘數是稱為Chaikin振蕩器的更為復雜的技術指標的組成部分之一。我們將堅持使用資金流量乘數,看看它本身能否給我們帶來有趣的信號。資金流量乘數的公式為:

看起來很容易,並且僅使用每個代理提供的HLC數據。將其應用於圖表會在EURUSD上產生類似以下的內容。

第一個面板中的EURUSD每小時數據,第二個面板中的資金流量乘數。

註意它的平穩性,這可能會給我們帶來均值回復信號。我們可以在Python中以這種方式編寫指標:

def money_flow_multiplier(Data, what, high, low, where): # Numerator  Data[:, where] = Data[:, what] - Data[:, low] Data[:, where + 1] = Data[:, high] - Data[:, what] # Denominator  Data[:, where + 2] = Data[:, where] - Data[:, where + 1] Data[:, where + 3] = Data[:, high] - Data[:, low]  # Avoiding NaN values (Division by zero in case the High equals the Low) for i in range(len(Data)): if Data[i, where + 3] == 0: Data[i, where + 3] = 0.0001 # Money Flow Multiplier Formula Data[:, where + 4] = (Data[:, where + 2] / Data[:, where + 3]) * 100  return Data

我更喜歡使用這種遞歸方法,因為我發現它更易於解釋和調試。實際上,我們可以僅用幾行代碼來編寫該指標。

第一個面板中的USDCHF每小時數據,第二個面板中的資金流量乘數。

創建和回測策略

現在,我們可以在每小時的時間范圍內對某些貨幣對的資金流量乘數策略進行回測。因此,交易條件為:

每當資金流量乘數在-90.00處且下兩個值均在-90.00之上時觸及下障礙,則做多(買入)。

每當資金流量乘數在90.00處的前兩個值均低於90.00時觸及上限價位時,做空(賣出)。

遵循資金流量乘數策略的GBPUSD每小時數據的信號圖。

我們可以使用以下函數編寫上述條件的代碼:

def signal(Data, what, buy, sell):  for i in range(len(Data)):  if Data[i, what] < lower_barrier and Data[i - 1, what] > lower_barrier and Data[i - 2, what] > lower_barrier : Data[i, buy] = 1  if Data[i, what] > upper_barrier and Data[i - 1, what] < upper_barrier and Data[i - 2, what] < upper_barrier : Data[i, sell] = -1

信號功能考慮瞭4個變量:

數據變量是在陣列中,優選numpy的陣列的形式的OHLC的時間序列。

該什麼變量指標。在我們的例子中,這是資金流量乘數的列。

在買入和賣出變量是在購買和出售訂單被放在列。值為1表示購買觸發,而值為-1表示銷售觸發。

註意:我們可以將資金流量乘數縮寫為MFM,以促進溝通。

我們告訴該函數遍歷時間序列的長度,如果它以自己的方式找到的MFM值低於較低的MFM障礙,而先前的值高於相同的先前的MFM值,則先前的值高於相同的先前的MFM障礙在這種情況下,它必須啟動多頭(買入)訂單。同時,如果在相同情況下以自己的方式找到的MFM值高於上限MFM障礙,而先前值低於具有先前值的先前MFM上限,則必須啟動賣空訂單。

讓我們來看看以下自2010年1月以來的數據性能指標:

效果摘要表。

遵循資金流量乘數策略的權益曲線。

澄清風險管理制度

當我說我使用基於ATR的風險管理系統(平均真實范圍)時,這意味著該算法將針對其所處的位置執行以下步驟。

多頭(買入)頭寸:

在遵循某種策略生成信號之後,該算法會啟動一個買單。

然後,該算法將監視價格變動,並且在交易開始時每當高價等於某個常數乘以ATR值時,就會啟動一個退出(獲利)定單。同時,如果在交易開始時看到低價等於某個常數乘以ATR值,則會啟動退出(虧損)。首先遇到的出口自然是采取的事件。

空頭(賣出)頭寸:

在遵循某種策略生成信號之後,該算法會啟動賣空訂單。

然後,該算法將監視價格變動,並且在交易開始時每當低點等於某個常數乘以ATR值時,就會啟動一個退出(獲利)訂單。同時,如果在交易開始時看到高價等於某個常數乘以ATR值,則會啟動退出(虧損)。首先遇到的出口自然是采取的事件。

EURUSD每小時數據,具有50個周期的指數平均真實范圍。

上圖顯示瞭我通常使用的平均真實范圍。它基於指數移動平均線,而不是原始的平滑移動平均線。

看一下ATR的最新值。大約是0.0014(14點)。如果我們按照簡單的2.00風險回報率(是預期收益的一半)啟動買單,則可以通過以下方式下訂單:

以當前市場價格購買。

以當前市場價格+(2 x 14點)獲利。

以當前市場價格平倉-(1 x 14點)。

簡化全權委托交易指標

因為我們並非全部都是算法交易者,所以這部分內容適合那些偏愛使用更自由(手動)交易方法的人。原始形式的MFM雜亂無章。在處理手動平倉交易時,不太容易解釋。因此,我建議使用10周期指數移動平均線來增加平滑效果。

在平滑的MFM之後,檢查USDCHF對上的以下信號。買賣條件如下:

每當平滑貨幣流量乘數在-35.00處觸及較低的障礙時,做多(買入)。

每當“平滑貨幣流量乘數”觸及35.00的上限時,做空(賣出)。

USDCHF信號圖顯示10周期EMA資金流量乘數上的交易觸發條件。

我們可以使用平滑的MFM的另一種方法是查看如下圖所示的差異。

我們知道:

當價格創出更高的高點而指標創出更低的高點時,這被稱為看跌背離,市場可能會停滯。

當價格處於較低的低點而指標處於較高的低點時,這被稱為看漲背離,市場可能顯示出一定的上漲潛力。

定期測試

記住要經常做測試。即使我提供瞭指標的功能(而不是僅僅誇張地說它是聖杯,並且它的功能是秘密),你也應該始終相信其他人是錯誤的。我的指標和交易風格對我有用,但可能並非對每個人都適用。我依靠以下規則:

市場價格在超過50%的時間內無法預測或很難預測。但是市場反應可以完全預測。

以上報價的意思是,我們可以在一個區域周圍形成一個小區域,並可以有把握地說市場價格將對該區域周圍的區域產生反應。但是我們不能真正說它會從那裡下降4%,然後再次測試,並在第三次嘗試時突破。由於我們預測過度,因此誤差項呈指數級增長。

在討論此主題時,我應該指出一些有關回測和文章的內容:

我使用的點差基於小點子的機構報價。通常,零售貿易商每筆交易的點差高達1-2個點。這是巨大的。我使用0.2點差。但是,大多數使用小時時間框架的策略仍然可以以1個點差傳播。對於使用M15或M5時間范圍的貨幣,它們無法以1點的點差獲利。

盡管我不建議僅根據一項指標進行交易,但數字並不真實。我要介紹的是考慮到低點差時可能發生的情況,這應該使你對機構交易者的優勢有所瞭解。

我提供的一些回測失敗瞭,它們被發佈以揭開交易神話的神秘面紗或提出有趣的功能以供讀者編碼。

最後,我堅決不給學習者喂湯。我是通過實踐而不是通過復制來學習的。你應該瞭解策略的概念,功能,直覺,條件,然後自己詳細闡述(甚至更好)一個策略,以便你回測它並加以改進,然後再決定付諸實踐或消除它。

以下是相同的MFM策略,但每筆交易的零售價差為2.5點,作為我們在上述回溯測試中使用0.2價差時的比較基準。

綜上所述,這策略是否切合實際?需要能通過優化環境(算法、風險管理等)來實現。這是為瞭激發頭腦風暴,並獲得更多的交易思路,有任何想法可以在下方評論區告訴我們。

作者:鏈三豐,來源:區塊鏈研究實驗室



返回列表页>>> 比特幣最新新聞