0
Besorgnis
72
Betrachter

Schnittstelle mit dem FMZ-Roboter mit dem Indikator "Tradingview"

Erstellt am: 19.06.2020 11:08:22 Uhr Er wurde auf: Sie ist nicht mehr in der Lage, sich zu bewegen.
comments   0
hits   1090

Interfacing with FMZ robot using “Tradingview” indicator

Einführung

TradingView ist ein gutes Market Quotations-Zeichnungswerkzeug.

DiepineDas Skript ist auch ein mächtiges Dasein!

Backtesting, Alarmierung und verschiedene Anschlüsse sind ein sehr vollständiges Finanzinstrument.

Aber es gibt zwei Probleme, die uns plagen...

  • Einer ist das teure Mitgliedschaftssystem.
  • Die zweite ist, dass es nur sehr wenige Börsen gibt, an denen Signale direkt gehandelt werden können, es scheinen zwei oder drei zu sein.

Heute ist unser Artikel, um Sie zu nehmen, um das Problem der Austausch Docking Probleme zu lösen.

Durchsetzung

Die allgemeine Idee lautet:

Fernsehen (TradingView)pineSkript -> Alarmsignalwebhook-> lokalwebhook serverWeiterleitung -> FMZ-Bot erhält die Anfrage zum Betrieb

Lasst uns Schritt für Schritt gehen.

Gehen Sie auf die Website von TradingView:

https://www.tradingview.com/

Als nächstes erstellen wir zunächst eineAlert, siehe nachstehende Abbildung

Interfacing with FMZ robot using “Tradingview” indicator

Einige Aspekte des Bildes müssen bei der Erzeugung vonAlert.

Gültigkeitsdauer,webhookAnschrift undmessageInhalte müssen gut geschrieben sein.

Das Verfallsdatum, dieses hier, wird auf einen Blick erkannt, und es wird ungültig sein, wenn es abläuft...


```Message``` here, it is best we have a clear explanation, in order to let the ```bot``` distinguish from ```Alert``` messages.

I generally set it like this: XXX strategy, order quantity and trading direction

So far, the TradingView part is basically done!

Next, let's get the local ```webhook``` service job done!

This kind of work, Google it will show you lots of results. this article will skip this part, you can do it by yourself.

here is a simple framework for python:

GitHub:https://github.com/shawn-sterling/gitlab-webhook-receiver


Safe, worry-free and convenient, but there are also issues.

This little frame, it will!! Suicide!! Please pay attention to this issue!

So, I wrote another script on the server, When "die" or "offline" appears in the log, I will restart it. later on, i still feel not safe, so i set it restart regularly. Find an unimportant time every hour... Give it a restart, it has been safely running for two months now and there is no more signal losses.

In addition, TradingView only recognizes the port 80, so don't mess up the service port.

So far, We have done the ```Message``` from ```Alert``` part. Next, how do we get Bot?

I don't know if you have paid attention to the interface API document of FMZ at the bottom:

 ![Interfacing with FMZ robot using "Tradingview" indicator](/upload/asset/6e82463afe0dfbc15d96.png) 

We can pass some commands to our little Bot through API!
The specific request example is here, the red box is the request we need.

 ![Interfacing with FMZ robot using "Tradingview" indicator](/upload/asset/6e8cc24e284428b14724.png) 

Here also needs some preparation work.
FMZ API (avatar->account settings->API interface),
A Bot that has been started (we want to get its ID, so we create a new ID first), the number in the URL of a general robot is the ID.

 ![Interfacing with FMZ robot using "Tradingview" indicator](/upload/asset/6e6055878d778eea6265.png) 

Next, we transform the webhook service so that after receiving the message, it will be automatically forwarded to the FMZ Bot.

Finally, don’t forget to fill in the completed ```webhook``` address in the TradingView Alert(format: http://xx.xx.xx.xx:80)

The following is the ```service``` code I changed, you can use it as a reference:

#!/usr/bin/python -tt

-- Codierung: UTF-8-

von BaseHTTPServer Import BaseHTTPRequestHandler, HTTPServer Import von json Einfuhrprotokolle Import-Logging.Behandler Einfuhr Einfuhr Einfuhr Importuntergang Zeit der Einfuhr Import-SSL ssl._create_default_https_context = ssl._create_unverified_context

Versuchen Sie: Import von MD5 Import von Urllib2 von urllib import urlencode mit Ausnahme: Import von hashlib als md5 Import von urllib.request als urllib2 von urllib.parse import urlencode

############################################################

Sie müssen wahrscheinlich einige der folgenden Änderungen vornehmen:

Protokolldatei für dieses Skript

log_file = /root/webhook/VMA/webhook.log

Lizenz für den Einsatz von Bot-api

AccessKey = Geheimschlüssel =

HTTP-Konfigurierung

Log_max_size = 25165824 # 24 MB Log_level = Logging.INFO #log_level = logging.DEBUG # DEBUG ist ziemlich wortreich

listen_port = 80

Du solltest aufhören, Dinge zu ändern, wenn du nicht weißt, was du tust.

##############################################################################

Log = Logging.getLogger (Log) Log.setLevel (log_level) log_handler = logging.handlers.RotatingFileHandler(log_file, maxBytes=log_max_size, BackupZahl=4) f = Logging.Formator (% (asctime) s % (filename) s % (levelname) s % (message) s), %B %d %H:%M:%S) Log_handler.setFormatter (f) Log.addHandler ((log_handler))

Klasse webhookReceiver ((BaseHTTPRequestHandler):

def run_it(self, cmd):
    """
        runs a command
    """
    p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE,
                         stderr=subprocess.STDOUT)
    log.debug('running:%s' % cmd)
    p.wait()
    if p.returncode != 0:
        log.critical("Non zero exit code:%s executing: %s" % (p.returncode,
                                                              cmd))
    return p.stdout

def bot_conmand(self, method, *args):
    """
        send conmand request to bot api
    """
    d = {
        'version': '1.0',
        'access_key': accessKey,
        'method': method,
        'args': json.dumps(list(args)),
        'nonce': int(time.time() * 1000),
        }
    d['sign'] = md5.md5(('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).encode('utf-8')).hexdigest()
    return json.loads(urllib2.urlopen('https://www.fmz.com/api/v1', urlencode(d).encode('utf-8')).read().decode('utf-8'))

def do_POST(self):
    """
        receives post, handles it
    """
    log.debug('got post')
    message = 'OK'
    self.rfile._sock.settimeout(5)
    data_string = self.rfile.read(int(self.headers['Content-Length']))
    log.info(data_string)
    self.send_response(200)
    self.send_header("Content-type", "text")
    self.send_header("Content-length", str(len(message)))
    self.end_headers()
    self.wfile.write(message)
    log.debug('TV connection should be closed now.')
    #log.info(self.bot_conmand('GetRobotList', -1, -1, -1)) # GetRobotList(offset, length, robotStatus int)Pass -1 to get all
    log.info(self.bot_conmand('CommandRobot', 169788, data_string))  # CommandRobot(robotId int64, cmd string)Send commands to the robot

def log_message(self, formate, *args):
    """
        disable printing to stdout/stderr for every post
    """
    return

Definition der Haupt*: Das Hauptereignis. Versuchen Sie: Server = HTTPServer (((, listen_port), webhookEmpfänger) Log.info (WEB gestartet. Server.serve_forever (siehe unten) Außer KeyboardInterrupt: Log.info (Ctrl-C gedrückt, abgeschaltet) Server.Socket.close (siehe unten)

wennName == ‘Haupt: Haupt-)


# Implementation within FMZ platform trading strategy

All the above described the communication implementation, our Bot trading strategy also needs to be processed accordingly, in order for us to fix our receiving signal process.

For example, the Alert Message designed at the beginning, You can play it according to your preferences and specific needs. 

The code is as follows, get the information, filter them, do the operation, and end.

Funktion get_Command() { //Verantwortliche Funktion für die Interaktion, interaktiv relevante Werte zeitlich aktualisieren, Benutzer können sich selbst erweitern VAR way = null; //route Var cmd = GetCommand(); // Erhalten Sie eine interaktive Kommando-API Die in Absatz 1 genannten Daten werden von den zuständigen Behörden der Mitgliedstaaten übermittelt.

 if (cmd) {
     // Define the route
     if (cmd.indexOf("BUY,1") != -1) {
         way = 1;
     }
     if (cmd.indexOf("SELL,1") != -1) {
         way = 2;
     }
     if (cmd.indexOf("BUY,2") != -1) {
         way = 3;
     }
     if (cmd.indexOf("SELL,2") != -1) {
        way = 4;
     }
     // Branch selection operation
     switch (way) {
         case 1:
             xxx
             break;
         case 2:
             xxx
             break;
         case 3:
             xxx
             break;
         case 4:
             xxx
             break;
         default:
             break;
     }
 }

} “`

Dieser Artikel ist zu Ende, hoffentlich hilft er Ihnen!

Empfehlungen
Weitere Informationen