Interface dengan robot FMZ menggunakan indikator "Tradingview"

Penulis:Kebaikan, Dibuat: 2020-06-19 11:08:22, Diperbarui: 2023-10-31 21:03:33

img

Pengantar latar belakang

TradingView adalah alat yang baik untuk menggambar kutipan pasar.

PeraturanpineNaskah juga adalah keberadaan yang kuat!

Backtesting, alarm, dan berbagai docking adalah alat keuangan yang sangat lengkap.

Tapi ada dua masalah yang telah menghantui kita...

  • Salah satunya adalah sistem keanggotaan yang mahal
  • Yang kedua adalah bahwa ada sangat sedikit pertukaran di mana sinyal yang langsung diperdagangkan, tampaknya dua atau tiga.

Hari ini artikel kami adalah untuk membawa Anda untuk memecahkan masalah pertukaran masalah docking.

Pelaksanaan

Ide keseluruhan adalah seperti ini:

TV ((TradingView)pinescript -> sinyal alarmwebhook-> lokalwebhook serverpermintaan penyampaian -> FMZ bot menerima permintaan untuk beroperasi

Mari kita pergi langkah demi langkah.

Pergi ke situs TradingView:

https://www.tradingview.com/

Selanjutnya, kita pertama membuatAlert, lihat gambar di bawah untuk rincian

img

Beberapa aspek dalam gambar perlu diperhatikan, ketika menghasilkanAlert.

Periode validitas,webhookalamat, danmessagekonten harus dilakukan dengan baik.

Tanggal kedaluwarsa, yang satu ini akan tahu sekilas, dan itu akan tidak sah ketika kedaluwarsa...

WebhookURL, mari kita biarkan kosong pertama, kita akan mengisinya ketika lokalwebhookLayanan selesai.

Messagedi sini, yang terbaik kita memiliki penjelasan yang jelas, untuk membiarkanbotmembedakan dariAlert messages.

Saya umumnya mengaturnya seperti ini: strategi XXX, jumlah pesanan dan arah perdagangan

Sejauh ini, bagian TradingView pada dasarnya selesai!

Selanjutnya, mari kita mendapatkan lokalwebhookPekerjaan pelayanan selesai!

Pekerjaan semacam ini, Google itu akan menunjukkan banyak hasil. artikel ini akan melewatkan bagian ini, Anda bisa melakukannya sendiri.

Berikut adalah kerangka kerja sederhana untuk Python:

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

Aman, bebas kekhawatiran dan nyaman, tapi ada juga masalah.

Kerangka kecil ini, itu akan!! Bunuh diri!! Tolong perhatikan masalah ini!

Jadi, saya menulis skrip lain di server, ketika die atau offline muncul di log, saya akan memulai kembali. kemudian, saya masih merasa tidak aman, jadi saya mengaturnya untuk memulai kembali secara teratur.

Selain itu, TradingView hanya mengenali port 80, jadi jangan mengacaukan port layanan.

Sejauh ini, Kami telah melakukanMessagedariAlertSelanjutnya, bagaimana kita mendapatkan Bot?

Saya tidak tahu apakah Anda telah memperhatikan dokumen antarmuka API FMZ di bagian bawah:

img

Kita bisa mengirim beberapa perintah ke robot kecil kita melalui API! Contoh permintaan spesifik ada di sini, kotak merah adalah permintaan yang kita butuhkan.

img

Di sini juga perlu beberapa pekerjaan persiapan. FMZ API (avatar-> pengaturan akun-> antarmuka API), Sebuah bot yang telah dimulai (kita ingin mendapatkan ID nya, jadi kita membuat ID baru pertama), nomor di URL dari robot umum adalah ID.

img

Selanjutnya, kami mengubah layanan webhook sehingga setelah menerima pesan, itu akan secara otomatis diteruskan ke FMZ Bot.

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

Berikut ini adalahservicekode yang saya ubah, Anda dapat menggunakannya sebagai referensi:

#!/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 dijelaskan penerapan komunikasi, strategi perdagangan Bot kami juga perlu diproses sesuai, agar kita memperbaiki proses sinyal penerima kami.

Misalnya, Pesan Peringatan yang dirancang di awal, Anda dapat memainkannya sesuai dengan preferensi dan kebutuhan spesifik Anda.

Kode adalah sebagai berikut, mendapatkan informasi, menyaring mereka, melakukan operasi, dan akhir.

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 selesai, semoga bisa membantu Anda!


Berkaitan

Lebih banyak