ট্রেডিংভিউ একটি ভাল মার্কেট কোটেশন অঙ্কন সরঞ্জাম।
দ্যpine
স্ক্রিপ্টও একটি শক্তিশালী অস্তিত্ব!
ব্যাক টেস্টিং, উদ্বেগজনক, এবং বিভিন্ন ডকিং একটি সম্পূর্ণ আর্থিক সরঞ্জাম।
কিন্তু দুটি বিষয় আমাদের কষ্ট দিচ্ছে...
আজ আমাদের নিবন্ধটি আপনাকে এক্সচেঞ্জ ডকিং সমস্যার সমাধান করতে নিয়ে যাবে।
সাধারণ ধারণাটি এইরকমঃ
টিভি ((ট্রেডিংভিউ)pine
স্ক্রিপ্ট -> সিগন্যাল অ্যালার্মwebhook
-> স্থানীয়webhook server
পুনঃনির্দেশ অনুরোধ -> FMZ বট অপারেট করার অনুরোধ গ্রহণ করে
আসুন ধাপে ধাপে যাই।
ট্রেডিংভিউ ওয়েবসাইটে যানঃ
পরবর্তী, আমরা প্রথম একটি তৈরিAlert
বিস্তারিত জানার জন্য নিচের চিত্রটি দেখুন
ছবির কিছু দিক মনোযোগ দিতে হবে, যখন উত্পাদনAlert
.
বৈধতার সময়কাল,webhook
ঠিকানা, এবংmessage
বিষয়বস্তু অবশ্যই ভালোভাবে তৈরি করতে হবে।
মেয়াদ শেষ হওয়ার তারিখ, এই এক এক নজরে জানতে হবে, এবং এটি অবৈধ হবে যখন এটি মেয়াদ শেষ...
Webhook
ইউআরএল, প্রথমে খালি রাখুন, আমরা এটি পূরণ করব যখন স্থানীয়webhook
সার্ভিস শেষ।
Message
এখানে, এটা ভাল আমরা একটি পরিষ্কার ব্যাখ্যা আছে, যাতেbot
থেকে আলাদা করাAlert
messages.
আমি সাধারণত এটা এই মত সেটঃ XXX কৌশল, অর্ডার পরিমাণ এবং ট্রেডিং দিক
এখন পর্যন্ত, ট্রেডিং ভিউ অংশটি মূলত সম্পন্ন হয়েছে!
পরবর্তী, আসুন স্থানীয় পেতেwebhook
সেবা কাজ সম্পন্ন!
এই ধরনের কাজ, গুগল এটা আপনাকে অনেক ফলাফল দেখাবে. এই নিবন্ধটি এই অংশটি এড়িয়ে যাবে, আপনি এটি নিজেরাই করতে পারেন.
এখানে পাইথনের জন্য একটি সহজ ফ্রেমওয়ার্ক রয়েছেঃ
GitHub: https://github.com/shawn-sterling/gitlab-webhook-receiver
নিরাপদ, উদ্বেগ মুক্ত এবং সুবিধাজনক, কিন্তু সমস্যাও আছে।
এই ছোট ফ্রেম, এটা হবে! আত্মহত্যা! দয়া করে এই ইস্যুতে মনোযোগ দিন!
তাই, আমি সার্ভারে আরেকটি স্ক্রিপ্ট লিখেছি, যখন
উপরন্তু, ট্রেডিংভিউ শুধুমাত্র পোর্ট 80 চিনতে পারে, তাই সার্ভিস পোর্ট নষ্ট করবেন না.
এখন পর্যন্ত, আমরাMessage
থেকেAlert
পরবর্তী, কিভাবে আমরা বট পেতে হবে?
আমি জানি না আপনি FMZ এর ইন্টারফেস এপিআই নথির নীচে মনোযোগ দিয়েছেন কিনাঃ
আমরা এপিআই এর মাধ্যমে আমাদের ছোট বোটকে কিছু কমান্ড দিতে পারি! নির্দিষ্ট অনুরোধের উদাহরণ এখানে, লাল বাক্সটি আমাদের প্রয়োজনীয় অনুরোধ।
এখানেও কিছু প্রস্তুতির কাজ দরকার। FMZ API (অ্যাভাটার->অ্যাকাউন্ট সেটিংস->API ইন্টারফেস), একটি বট যে শুরু করা হয়েছে (আমরা তার আইডি পেতে চান, তাই আমরা একটি নতুন আইডি তৈরি প্রথম), একটি সাধারণ রোবট URL এর সংখ্যা আইডি হয়.
এরপর, আমরা ওয়েবহুক সার্ভিসকে রূপান্তরিত করি যাতে বার্তাটি পাওয়ার পর তা স্বয়ংক্রিয়ভাবে এফএমজেড বটে পাঠানো হয়।
অবশেষে, পূরণ করতে ভুলবেন নাwebhook
ট্রেডিং ভিউ সতর্কতা (Format: 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;
}
}
}
এই নিবন্ধটি শেষ, আশা করি এটি আপনাকে সাহায্য করতে পারে!