Abweichungsrate BIAS-Handelsstrategie

Schriftsteller:Gutes, Erstellt: 2020-06-30 09:58:26, Aktualisiert: 2023-10-28 15:29:08

[TOC]

img

Zusammenfassung

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.

Kurze Einführung

img

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.

Das Prinzip der Abweichungsrate

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.

Formel zur Berechnung der Abweichungsrate

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.

Strategie Logik

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.

  • Eröffnung einer Long-Position: wenn keine aktuelle Holding-Position besteht und die langfristige Abweichungsrate größer ist als die kurzfristige Abweichungsrate
  • Eröffnung einer Kurzposition: wenn keine aktuelle Halteposition besteht und die langfristige Abweichungsrate geringer ist als die kurzfristige Abweichungsrate
  • Schließung einer Long-Position: wenn eine Long-Position gehalten wird und die langfristige Abweichungsrate kleiner ist als die kurzfristige Abweichungsrate
  • Schließung einer Kurzposition: wenn eine Halte-Kurzposition besteht und die langfristige Abweichungsrate größer ist als die kurzfristige Abweichungsrate

Strategie schreiben

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.mainFunktion undonTickDie Hauptfunktion ist die Eingabefunktion der Strategie, und das Programm wird den Code Zeile für Zeile ausführen, beginnend mit der Hauptfunktion.whileSchleife und wiederholt ausführenonTickDer 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 rb000 einreichen, aber im Backtest und in der realen Marktsituation wird der Stahlstahlindex als Daten verwendet und der spezifische Hauptvertrag zum Auftragen verwendet.GetRecordsDa die Berechnung der Abweichungsrate eine gewisse Zeit in Anspruch nimmt, können, um Programmfehler zu vermeiden, wenn nicht genug K-Linien vorhanden sind,ifAnweisungen 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.talibDas schwebende Durchschnitt ist beispielsweise:TA.MADiese 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

Vollständige Strategie

# 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

Strategie-Backtest

Backtestkonfiguration

img

Leistungsbericht

img img

Fondskurve

img

Zusammenfassend

Die Abweichungsrate ist ein einfaches und wirksames Handelswerkzeug, das den Händlern eine effektive Referenz bieten kann.


Verwandt

Mehr