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

TradingViewWebHook الارم براہ راست FMZ روبوٹ سے منسلک

مصنف:نیکی, تخلیق: 2020-08-07 10:44:17, تازہ کاری: 2023-10-10 21:09:42

img

حال ہی میں زیادہ سے زیادہ ٹریڈنگ ویو صارفین نے ٹریڈنگ ویو چارٹ سگنل کو ایف ایم زیڈ پلیٹ فارم سے منسلک کیا ہے (FMZ.COMایف ایم زیڈ پر روبوٹ کی حکمت عملی کو چارٹ سگنل کے مطابق ٹرانزیکشن کو انجام دینے دیں ، جس سے بہت سارے کوڈ لکھنے اور ڈیزائن کے کام کی بچت ہوتی ہے۔ براہ راست ، اشارے کو پروگراماتی اور خودکار تجارت کے لئے استعمال کیا جاسکتا ہے ، جو بہت سارے پروگراماتی اور مقداری تجارتی ترقی کی راہ میں حائل رکاوٹوں کو کم کرتا ہے۔TradingViewWebHook.

پچھلا حل:https://www.fmz.com/digest-topic/5533.

پچھلے منصوبے کا مقصد روبوٹ کو ہدایات بھیجنے کے لئے ایف ایم زیڈ پلیٹ فارم کے اے پی آئی انٹرفیس کو بڑھانا تھا۔ آج ، آئیے ایک اور حل پر ایک نظر ڈالیں۔ ٹریڈنگ ویو کی الارم ویب ہک کی درخواست براہ راست ایف ایم زیڈ پلیٹ فارم روبوٹ کو بھیجی جائے ، تاکہ وہ براہ راست ہدایات بھیج سکے اور روبوٹ کے لین دین کا آرڈر دے سکے۔

روبوٹ حکمت عملی کا ماخذ کوڈ

یہ حکمت عملی پائیتھون میں لکھی گئی ہے۔ روبوٹ کو تخلیق کرنے اور اس حکمت عملی کا استعمال شروع کرنے کے بعد ، روبوٹ ایک تھریڈ بنائے گا ، جو سیٹ پورٹ کی نگرانی کے لئے ایک سروس شروع کرے گا۔ بیرونی درخواستوں اور پروسیسنگ کا انتظار کر رہا ہے۔ جب میں نے اس کی جانچ کی ، تو اس کا تجربہ سرور پر میزبان نے کیا ، اور جس ڈیوائس میں میزبان واقع ہے اسے باہر سے قابل رسائی ہونا چاہئے۔ جب روبوٹ ٹرانزیکشن کو انجام دیتا ہے تو ، وہ مارکیٹ آرڈر انٹرفیس کا استعمال کرتا ہے۔ اس کے علاوہ ، اس حکمت عملی کو بھی تبدیل کیا جاسکتا ہے تاکہ مارکیٹ آرڈر انٹرفیس کو نافذ کیا جاسکے۔limit orderآرڈر کی منطق۔ آسانی سے سمجھنے اور آسان بنانے کے لئے ، یہاں مارکیٹ آرڈر کا استعمال کیا جاتا ہے ، لہذا تبادلہ کو مارکیٹ آرڈر کی حمایت کرنا ہوگی۔

'''
Request format: http://x.x.x.x:xxxx/data?access_key=xxx&secret_key=yyy&type=buy&amount=0.001
Strategy robot parameters:
- Type: Encrypted string, AccessKey, SecretKey, you can use the low-privileged API KEY of the FMZ platform, or you can generate the KEY yourself.
- Type: string, contract ID, ContractType
- Type: numeric value, port number, Port
'''

import _thread
import json
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import parse_qs, urlparse

def url2Dict(url):
    query = urlparse(url).query  
    params = parse_qs(query)  
    result = {key: params[key][0] for key in params}  
    return result

class Executor(BaseHTTPRequestHandler):
    def do_POST(self):
        try:
            self.send_response(200)
            self.send_header("Content-type", "application/json")
            self.end_headers()
            dictParam = url2Dict(self.path)
            
            # check
            if len(dictParam) == 4 and dictParam["access_key"] == AccessKey and dictParam["secret_key"] == SecretKey:
                del dictParam["access_key"]
                del dictParam["secret_key"]
                Log("Request received", "parameter:", dictParam, "#FF0000")
                '''
                map[access_key:xxx amount:0.001 secret_key:yyy type:buy]
                '''
                isSpot = True
                if exchange.GetName().find("Futures") != -1:
                    if ContractType != "":
                        exchange.SetContractType(ContractType)
                        isSpot = False 
                    else :
                        raise "No futures contract set"
                
                if isSpot and dictParam["type"] == "buy":
                    exchange.Buy(-1, float(dictParam["amount"]))
                    Log(exchange.GetAccount())
                elif isSpot and dictParam["type"] == "sell":
                    exchange.Sell(-1, float(dictParam["amount"]))
                    Log(exchange.GetAccount())
                elif not isSpot and dictParam["type"] == "long":
                    exchange.SetDirection("buy")
                    exchange.Buy(-1, float(dictParam["amount"]))
                    Log("Holding Position:", exchange.GetPosition())
                elif not isSpot and dictParam["type"] == "short":
                    exchange.SetDirection("sell")
                    exchange.Sell(-1, float(dictParam["amount"]))
                    Log("Holding Position:", exchange.GetPosition())
                elif not isSpot and dictParam["type"] == "cover_long":
                    exchange.SetDirection("closebuy")
                    exchange.Sell(-1, float(dictParam["amount"]))
                    Log("Holding Position:", exchange.GetPosition())
                elif not isSpot and dictParam["type"] == "cover_short":
                    exchange.SetDirection("closesell")
                    exchange.Buy(-1, float(dictParam["amount"]))
                    Log("Holding Position:", exchange.GetPosition())
            
            # Write data response
            self.wfile.write(json.dumps({"state": "ok"}).encode())
        except Exception as e:
            Log("Provider do_POST error, e:", e)


def createServer(host):
    try:
        server = HTTPServer(host, Executor)
        Log("Starting server, listen at: %s:%s" % host)
        server.serve_forever()
    except Exception as e:
        Log("createServer error, e:", e)
        raise Exception("stop")

def main():
    # Start a thread
    try:
        _thread.start_new_thread(createServer, (("0.0.0.0", Port), ))         # Test on VPS server        
    except Exception as e:        
        Log("Error message:", e)
        raise Exception("stop")    
    Log("Account asset information:", _C(exchange.GetAccount))
    while True:
        LogStatus(_D())
        Sleep(2000)

حکمت عملی کے پیرامیٹرز:

img

ٹریڈنگ ویو کی ویب ہک الارم کی درخواست

الارم کی درخواست کی ترتیب یہ ہے:

http://xxx.xxx.xxx.xxx:80/data?access_key=e3809e173e23004821a9bfb6a468e308&secret_key=45a811e0009d91ad21154e79d4074bc6&type=sell&amount=0.1

چونکہ ٹریڈنگ ویو بھیجتا ہےPOSTدرخواستوں، نگرانی کی خدمت کی نگرانی کرنا ضروری ہےPOSTدرخواستوں، اور TradingView صرف بندرگاہ 80 کے لئے اجازت دیتا ہےhttp protocol.

  • xxx.xxx.xxx.xxxہے جہاں روبوٹ واقع ہے میزبان کے آلہ کا آئی پی ایڈریس۔ اپنے آلہ کا مخصوص آئی پی ایڈریس پُر کریں ، آپ کو معلوم ہونا چاہئے کہ اسے بیرونی نیٹ ورک سے قابل رسائی ہونا ضروری ہے۔

  • کےaccess_keyاورsecret_keyخود سے پیدا کیا جا سکتا ہے، جب تکaccess_keyاورsecret_keyمیںWebHookالارم کی درخواست روبوٹ پیرامیٹرز پر ترتیب دیا ان لوگوں کے طور پر ایک ہی ہیں.

  • Type، تجارتی سمت ، خرید یا فروخت ، افتتاحی یا بندش ، نوٹ کریں کہ اسپاٹ اور فیوچر میں فرق ہے۔ اگر یہ فیوچر ہے تو ، نوٹ کریں کہ فیوچر کنٹریکٹ کوڈ کو روبوٹ پیرامیٹرز پر مرتب کرنا ہوگا ، اور تشکیل شدہ ایکسچینج آبجیکٹ کو فیوچر ایکسچینج کی ضرورت ہے۔

  • amount، لین دین کی تعداد.

چلانے کا ٹیسٹ

استعمالwexAppحقیقی مارکیٹ ٹیسٹ کی نقالی کرنے کے لئے.

img img

اختتام

مکمل حکمت عملی کا پتہ:https://www.fmz.com/strategy/221850

کےaccess_keyاورsecret_keyاسکیم میں صرف شناخت کے لئے ہیں، اور استعمال کے لئے کوئی ضمانت نہیں ہےhttpیہ حل صرف ایک خیال اور تعارف ہے۔ عملی ایپلی کیشنز میں ، سیکیورٹی کے تحفظات کو شامل کیا جانا چاہئے اورhttpsمواصلات کا استعمال کیا جانا چاہئے.


مزید