وسائل لوڈ ہو رہے ہیں... لوڈنگ...

"ٹریڈنگ ویو" اشارے کا استعمال کرتے ہوئے FMZ روبوٹ کے ساتھ انٹرفیس

مصنف:نیکی, تخلیق: 2020-06-19 11:08:22, تازہ کاری: 2023-10-31 21:03:33

img

پس منظر کا تعارف

ٹریڈنگ ویو ایک اچھا مارکیٹ کی قیمتوں کا تعین کرنے کا آلہ ہے.

کےpineاسکرپٹ بھی ایک طاقتور وجود ہے!

بیک ٹیسٹنگ، الارمنگ، اور مختلف ڈاکنگ ایک بہت ہی مکمل مالیاتی آلہ ہے.

لیکن دو مسائل ہیں جو ہمیں پریشان کر رہے ہیں...

  • ایک مہنگا رکنیت کا نظام ہے
  • دوسرا یہ کہ بہت کم تبادلے ہوتے ہیں جہاں سگنل براہ راست تجارت کے قابل ہوتے ہیں، ایسا لگتا ہے کہ دو یا تین ہوتے ہیں۔

آج ہمارا مضمون آپ کو ایکسچینج ڈاکنگ کے مسائل کو حل کرنے کے لئے لے جائے گا.

نفاذ

مجموعی طور پر خیال کچھ اس طرح ہے:

ٹی وی ((ٹریڈنگ ویو)pineاسکرپٹ -> سگنل الارمwebhook-> مقامیwebhook serverمنتقلی کی درخواست -> FMZ بوٹ کام کرنے کی درخواست وصول کرتا ہے

چلو قدم بہ قدم چلتے ہیں۔

ٹریڈنگ ویو ویب سائٹ پر جائیں:

https://www.tradingview.com/

اگلا، ہم سب سے پہلے ایک تخلیقAlert، تفصیلات کے لیے نیچے دی گئی شکل دیکھیں۔

img

تصویر میں کچھ پہلوؤں پر توجہ دینے کی ضرورت ہے، جب پیداAlert.

درستگی کی مدت،webhookپتہ، اورmessageمواد کو اچھی طرح سے بنایا جانا چاہیے۔

ختم ہونے کی تاریخ، یہ ایک نظر میں پتہ چل جائے گا، اور یہ ختم ہو جائے گا جب یہ غیر قانونی ہو جائے گا...

Webhookیو آر ایل، چلو پہلے اسے خالی رکھیں، ہم اسے بھرنے گا جب مقامیwebhookسروس ختم ہو گئی ہے.

Messageیہاں، یہ سب سے بہتر ہے کہ ہم ایک واضح وضاحت ہے، تاکہbotفرق کرناAlert messages.

میں عام طور پر اس طرح مقرر: XXX حکمت عملی، حکم کی مقدار اور ٹریڈنگ سمت

اب تک، ٹریڈنگ ویو حصہ بنیادی طور پر کیا گیا ہے!

اگلا، چلو مقامی حاصلwebhookسروس کام کیا!

اس قسم کا کام، گوگل یہ آپ کو بہت سے نتائج دکھائے گا. اس مضمون اس حصے کو چھوڑ دیں گے، آپ اسے اپنے آپ کو کر سکتے ہیں.

یہاں Python کے لئے ایک سادہ فریم ورک ہے:

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

محفوظ، پریشانی سے پاک اور آسان، لیکن مسائل بھی ہیں.

یہ چھوٹا سا فریم، یہ کرے گا!! خودکشی!! براہ مہربانی اس مسئلے پر توجہ!

تو، میں نے سرور پر ایک اور اسکرپٹ لکھا، جب die یا offline لاگ میں ظاہر ہوتا ہے، میں اسے دوبارہ شروع کروں گا. بعد میں، میں اب بھی محفوظ محسوس نہیں کرتا، تو میں اسے باقاعدگی سے دوبارہ شروع کرنے کے لئے مقرر. ہر گھنٹے میں ایک غیر اہم وقت تلاش کریں... اسے دوبارہ شروع کریں، یہ اب دو ماہ کے لئے محفوظ طریقے سے چل رہا ہے اور کوئی سگنل نقصان نہیں ہے.

اس کے علاوہ، TradingView صرف بندرگاہ 80 تسلیم کرتا ہے، تو سروس بندرگاہ کو گڑبڑ نہیں کرتے.

اب تک، ہم نے کیا ہےMessageسےAlertحصہ. اگلا، ہم بوٹ حاصل کرنے کے لئے کس طرح؟

مجھے نہیں معلوم کہ آپ نے نیچے ایف ایم زیڈ کے انٹرفیس API دستاویز پر توجہ دی ہے:

img

ہم API کے ذریعے ہمارے چھوٹے روبوٹ کو کچھ احکامات منتقل کر سکتے ہیں! مخصوص درخواست مثال یہاں ہے، سرخ باکس کی ضرورت ہے کہ درخواست ہے.

img

یہاں بھی کچھ تیاری کا کام درکار ہے۔ FMZ API (avatar-> اکاؤنٹ کی ترتیبات-> API انٹرفیس) ایک بوٹ جو شروع کیا گیا ہے (ہم اس کی شناخت حاصل کرنا چاہتے ہیں، لہذا ہم سب سے پہلے ایک نئی شناخت بناتے ہیں) ، ایک عام روبوٹ کے یو آر ایل میں نمبر آئی ڈی ہے.

img

اگلا، ہم ویب ہک سروس کو تبدیل کرتے ہیں تاکہ پیغام موصول ہونے کے بعد، یہ خود بخود ایف ایم زیڈ بوٹ کو بھیج دیا جائے.

آخر میں، بھرا ہوا فارم بھریںwebhookٹریڈنگ ویو الرٹ میں ایڈریس ((فارمیٹ: http://xx.xx.xx.xx:80)

مندرجہ ذیل ہے:serviceکوڈ میں تبدیل کر دیا، آپ کو ایک حوالہ کے طور پر استعمال کر سکتے ہیں:

#!/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()

ایف ایم زیڈ پلیٹ فارم ٹریڈنگ حکمت عملی کے اندر نفاذ

تمام مندرجہ بالا مواصلات کے نفاذ بیان کیا، ہمارے بوٹ ٹریڈنگ کی حکمت عملی بھی اس کے مطابق عملدرآمد کرنے کی ضرورت ہے، تاکہ ہم اپنے وصول سگنل کے عمل کو درست کرنے کے لئے.

مثال کے طور پر، انتباہ پیغام کے آغاز میں ڈیزائن، آپ کو آپ کی ترجیحات اور مخصوص ضروریات کے مطابق اسے ادا کر سکتے ہیں.

کوڈ مندرجہ ذیل ہے، معلومات حاصل کریں، ان کو فلٹر کریں، آپریشن کریں، اور ختم کریں.

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

یہ مضمون ختم ہوا، امید ہے کہ یہ آپ کی مدد کر سکتا ہے!


متعلقہ

مزید