[TOC]
Wie das Sprichwort sagt, wird sich diese Welt nach langer Zeit trennen. Auch wird das Gegenteil nach langer Zeit geschehen. Und dieses Phänomen existiert auch auf dem Futures-Markt. Es gibt keine Vielfalt, die nur steigt, aber nicht fällt. Aber wann sie steigt und wann sie fällt, hängt von der Abweichungsrate ab. In diesem Artikel werden wir die Abweichungsrate verwenden, um eine einfache Handelsstrategie zu konstruieren.
Die Abweichungsrate BIAS ist ein technischer Indikator, der aus dem gleitenden Durchschnitt abgeleitet wird. Er ist hauptsächlich in Form eines Prozentsatzes, um den Grad der Abweichung des Preises vom gleitenden Durchschnitt bei Schwankungen zu messen. Wenn der gleitende Durchschnitt die durchschnittlichen Kosten eines Händlers ist, ist die Abweichungsrate die durchschnittliche Rendite des Händlers.
Die theoretische Grundlage der Abweichungsrate ist eine Analyse des Herzens des Traders. Wenn der Preis größer ist als die durchschnittlichen Kosten des Marktes, bedeutet dies, dass die Long-Position-Händler die Idee haben, die Gewinne auszuzahlen, was dazu führt, dass der Preis fällt. Wenn der Preis niedriger ist als die durchschnittlichen Kosten des Marktes, bedeutet dies, dass Short-Seller profitabel sind, und die Idee, den Gewinn auszuzahlen, wird dazu führen, dass der Preis steigt.
Wenn der Preis vom gleitenden Durchschnitt nach oben abweicht, ist die Abweichungsrate zu groß und es besteht eine hohe Wahrscheinlichkeit, dass der Preis in Zukunft sinkt.
Wenn der Preis vom gleitenden Durchschnitt nach unten abweicht, ist die Abweichungsrate zu gering und es besteht eine hohe Wahrscheinlichkeit, dass der Preis in Zukunft steigt.
Obwohl der gleitende Durchschnitt aus dem Preis berechnet wird, wird sich der Preis in Bezug auf die externe Form definitiv näher an den gleitenden Durchschnitt bewegen, oder der Preis wird immer um den gleitenden Durchschnitt herum schwanken.
Abweichungsquote = [(Schlusskurs des Tages - N-Tage-Durchschnittspreis) / N-Tage-Durchschnittspreis] * 100%
Unter ihnen ist N der gleitende Durchschnittsparameter, da der Zeitraum von N unterschiedlich ist, ist auch das Berechnungsresultat der Abweichungsrate unterschiedlich. Im Allgemeinen sind die Werte von N: 6, 12, 24, 36 usw. Im tatsächlichen Gebrauch kann es auch dynamisch nach verschiedenen Sorten angepasst werden. Die Auswahl der Parameter ist jedoch sehr wichtig. Wenn der Parameter zu klein ist, wird die Abweichungsrate zu empfindlich sein, wenn der Parameter zu groß ist, wird die Abweichungsrate zu langsam sein. Die Berechnungsresultate der Abweichungsrate sind positiv und negativ. Je größer die positive Abweichungsrate, desto größer der Gewinn der Bullen und desto größer die Wahrscheinlichkeit einer Preiskorrektur. Je größer die kurze Abweichung, desto größer der Gewinn und desto größer die Wahrscheinlichkeit eines Reboundpreises.
Da die Abweichungsrate eine andere Form des gleitenden Durchschnitts ist, können wir auch eine doppelte Abweichungsrate-Strategie anpassen, die auf der Strategie des doppelten gleitenden Durchschnitts basiert. Nach der positionalen Beziehung zwischen der kurzfristigen Abweichungsrate und der langfristigen Abweichungsrate wird der aktuelle Marktzustand beurteilt. Wenn die langfristige Abweichungsrate größer ist als die kurzfristige Abweichungsrate, stellt sie tatsächlich den kurzfristigen gleitenden Durchschnitt auf dem langfristigen gleitenden Durchschnitt dar und umgekehrt.
Schritt 1: Erstellen eines Strategierahmens
# Strategy main function
def onTick():
pass
# Program entry
def main():
while True: # Enter infinite loop mode
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
Die FMZ-Plattform setzt den Rotations-Training-Modus ein.main
Funktion undonTick
Die Hauptfunktion ist die Eingabefunktion der Strategie, und das Programm wird den Code Zeile für Zeile ausführen, beginnend mit der Hauptfunktion.while
Schleife und wiederholt ausführenonTick
Der gesamte Kerncode der Strategie ist in deronTick
function.
Schritt 2: Definition virtueller Positionen
mp = 0
Der Vorteil virtueller Positionen besteht darin, dass sie einfach zu schreiben sind und die iterative Bedienung schnell ist. Sie wird im Allgemeinen in der Backtestumgebung verwendet. Es wird davon ausgegangen, dass jeder Auftrag vollständig ausgefüllt ist, aber die tatsächliche Position wird normalerweise im tatsächlichen Handel verwendet. Da die virtuelle Position den Zustand nach Eröffnung und Schließung aufzeichnen soll, muss sie als globale Variable definiert werden.
Schritt 3: Holen Sie sich die K-Linie
exchange.SetContractType('rb000') # Subscribe to futures varieties
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <long + 1: # If the number of K lines is too small
return
Verwendung der Funktion FMZSetContractType
, können Sie den Stahlstahlindexvertrag abonnieren, indem Sie GetRecords
Da die Berechnung der Abweichungsrate eine gewisse Zeit in Anspruch nimmt, können, um Programmfehler zu vermeiden, wenn nicht genug K-Linien vorhanden sind,if
Anweisungen zu filtern.
Schritt 4: Berechnung der Abweichungsrate
close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average value of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value
Nach der Formel zur Berechnung der Abweichungsrate erhalten wir zunächst den Schlusskurs. In dieser Strategie verwenden wir den vorherigen K-Linien-Schlusskurs, was bedeutet, dass das aktuelle K-Liniensignal festgelegt wird und die nächste K-Line zum Platzieren von Aufträgen dient.talib
Das schwebende Durchschnitt ist beispielsweise:TA.MA
Diese Funktion erhält 2 Parameter, nämlich: K-Linien-Array und gleitender Durchschnittszeitraum.
Schritt 5: Auftragserteilung
global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # Closing long positions
mp = 0 # reset virtual holding positions
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding positions
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # open long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position
# Backtest configuration
'''backtest
start: 2018-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''
# External parameters
short = 10
long = 50
# Global variables
mp = 0
# Strategy main function
def onTick():
# retrieve data
exchange.SetContractType('rb000') # Subscribe to futures varieties
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <long + 1: # If the number of K lines is too small
return
# Calculate BIAS
close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value
# Placing Orders
global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # closing long positions
mp = 0 # reset virtual holding position
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding position
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # opening long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position
# Program entry function
def main():
while True: # loop
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
Die vollständige Strategie ist auf der Website des FMZ veröffentlicht worden:https://www.fmz.com/strategy/215129
Backtestkonfiguration
Leistungsbericht
Fondskurve
Die Abweichungsrate ist ein einfaches und wirksames Handelswerkzeug, das den Händlern eine effektive Referenz bieten kann.