Antara muka dengan robot FMZ menggunakan penunjuk "Tradingview"

Penulis:Kebaikan, Dicipta: 2020-06-19 11:08:22, Dikemas kini: 2023-10-31 21:03:33

img

Pengenalan latar belakang

TradingView adalah alat menarik harga pasaran yang baik.

Peraturanpineskrip juga wujud yang kuat!

Pengujian balik, penggera, dan pelbagai penghubung adalah alat kewangan yang sangat lengkap.

Tetapi ada dua isu yang telah menyeksa kita...

  • Satu adalah sistem keahlian yang mahal
  • Yang kedua adalah bahawa terdapat sangat sedikit pertukaran di mana isyarat boleh diperdagangkan secara langsung, ia kelihatan dua atau tiga.

Hari ini artikel kami adalah untuk membawa anda untuk menyelesaikan masalah pertukaran masalah docking.

Pelaksanaan

Idea keseluruhan adalah seperti ini:

TV ((TradingView)pineskrip -> isyarat penggerawebhook-> tempatanwebhook serverpermintaan penyampaian -> FMZ bot menerima permintaan untuk beroperasi

Mari kita pergi langkah demi langkah.

Pergi ke laman web TradingView:

https://www.tradingview.com/

Seterusnya, kita mula-mula menciptaAlert, lihat gambar di bawah untuk butiran

img

Beberapa aspek dalam gambar perlu memberi perhatian kepada, apabila menjanaAlert.

Tempoh kelayakan,webhookalamat, danmessageKandungan mesti dibuat dengan baik.

Tarikh tamat tempoh, yang ini akan tahu dengan sekilas, dan ia akan menjadi tidak sah apabila ia tamat tempoh...

WebhookURL, mari kita simpan kosong pertama, kita akan mengisi apabila tempatanwebhookPerkhidmatan selesai.

MessageDi sini, ia adalah yang terbaik kita mempunyai penjelasan yang jelas, untuk membiarkanbotmembezakanAlert messages.

Saya secara amnya menetapkannya seperti ini: strategi XXX, kuantiti pesanan dan arah perdagangan

Setakat ini, bahagian TradingView pada dasarnya selesai!

Seterusnya, mari kita mendapatkan tempatanwebhookKerja servis selesai!

Jenis kerja ini, Google ia akan menunjukkan banyak hasil. artikel ini akan melangkau bahagian ini, anda boleh melakukannya sendiri.

Berikut adalah kerangka kerja yang mudah untuk Python:

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

Aman, bebas kebimbangan dan mudah, tetapi ada juga masalah.

Rangka kecil ini, ia akan!! Bunuh diri!! Sila perhatikan isu ini!

Jadi, saya menulis skrip lain pada pelayan, apabila die atau offline muncul dalam log, saya akan mulakan semula. kemudian, saya masih tidak merasa selamat, jadi saya menetapkan semula secara berkala. mencari masa yang tidak penting setiap jam... beri ia permulaan semula, ia telah berjalan dengan selamat selama dua bulan sekarang dan tidak ada lagi kehilangan isyarat.

Di samping itu, TradingView hanya mengenali port 80, jadi jangan kacau port perkhidmatan.

Setakat ini, Kami telah melakukanMessagedaripadaAlertSeterusnya, bagaimana kita dapat Bot?

Saya tidak tahu jika anda telah memberi perhatian kepada dokumen antara muka API FMZ di bahagian bawah:

img

Kita boleh hantar beberapa arahan kepada bot kecil kita melalui API! Contoh permintaan tertentu adalah di sini, kotak merah adalah permintaan yang kita perlukan.

img

Di sini juga memerlukan beberapa kerja persediaan. FMZ API (avatar-> tetapan akaun-> antara muka API), Bot yang telah dimulakan (kita mahu mendapatkan IDnya, jadi kita membuat ID baru terlebih dahulu), nombor dalam URL robot umum adalah ID.

img

Seterusnya, kita mengubah perkhidmatan webhook supaya selepas menerima mesej, ia akan dihantar secara automatik ke FMZ Bot.

Akhirnya, jangan lupa untuk mengisi borang yang telah diisiwebhookalamat dalam TradingView Alert ((format: http://xx.xx.xx.xx:80)

Berikut adalahserviceKod yang saya ubah, anda boleh menggunakannya sebagai rujukan:

#!/usr/bin/python -tt
# -*- coding: UTF-8 -*-

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import json
import logging
import logging.handlers
import os
import re
import shutil
import subprocess
import time
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

try:
    import md5
    import urllib2
    from urllib import urlencode
except:
    import hashlib as md5
    import urllib.request as urllib2
    from urllib.parse import urlencode


############################################################
##### You will likely need to change some of the below #####

# log file for this script
log_file = '/root/webhook/VMA/webhook.log'

# Bot api licence
accessKey = ''
secretKey = ''

# HTTP config
log_max_size = 25165824         # 24 MB
log_level = logging.INFO
#log_level = logging.DEBUG      # DEBUG is quite verbose

listen_port = 80

##### You should stop changing things unless you know what you are doing #####
##############################################################################

log = logging.getLogger('log')
log.setLevel(log_level)
log_handler = logging.handlers.RotatingFileHandler(log_file,
                                                   maxBytes=log_max_size,
                                                   backupCount=4)
f = logging.Formatter("%(asctime)s %(filename)s %(levelname)s %(message)s",
                      "%B %d %H:%M:%S")
log_handler.setFormatter(f)
log.addHandler(log_handler)


class 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


def main():
    """
        the main event.
    """
    try:
        server = HTTPServer(('', listen_port), webhookReceiver)
        log.info('started web server...')
        server.serve_forever()
    except KeyboardInterrupt:
        log.info('ctrl-c pressed, shutting down.')
        server.socket.close()

if __name__ == '__main__':
    main()

Pelaksanaan dalam strategi perdagangan platform FMZ

Semua di atas menerangkan pelaksanaan komunikasi, strategi perdagangan Bot kami juga perlu diproses dengan sewajarnya, supaya kita dapat memperbaiki proses isyarat penerima kami.

Sebagai contoh, mesej amaran yang direka pada awal, anda boleh memainkannya mengikut pilihan dan keperluan khusus anda.

Kodnya seperti berikut, dapatkan maklumat, saring, lakukan operasi, dan selesai.

function get_Command() { //Responsible function for interaction, interactively update relevant values in time, users can expand by themselves
     var way = null; //route
     var cmd = GetCommand(); // Get interactive command API
     var cmd_arr = cmd.split(",");

     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;
         }
     }
}

Artikel ini berakhir, semoga ia dapat membantu anda!


Berkaitan

Lebih lanjut