ٹریڈنگ ویو ویب ہک سیدھے راستے کی حکمت عملی

مصنف:چھوٹا سا خواب، تاریخ: 2020-08-03 09:58:19
ٹیگز:

متعلقہ مضامین:https://www.fmz.com/bbs-topic/5969

چونکہ HTTPServer خود میں کچھ نقائص ہیں، اس کے بجائے ThreadingHTTPServer استعمال کرنے پر غور کریں۔ حوالہ جات:https://docs.python.org/3.7/library/http.server.htmlاس کے لئے پیٹن ورژن 3.7 کی ضرورت ہے۔

ایچ ٹی ٹی پی سرور کے مسئلے کی معلومات:https://www.zybuluo.com/JunQiu/note/1350528


'''
请求格式:http://x.x.x.x:xxxx/data?access_key=xxx&secret_key=yyy&type=buy&amount=0.001
策略机器人参数:
- 类型:加密字符串,AccessKey , SecretKey ,可以用FMZ平台的低权限的API KEY,或者自己生成KEY也可以。
- 类型:字符串,合约ID,ContractType
- 类型:数值,端口号,Port
'''

import re
import _thread
import json
from http.server import ThreadingHTTPServer, 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_GET(self):
        try:
            dictParam = url2Dict(self.path)
            Log("测试", dictParam)
        except Exception as e:
            Log("Provider do_GET error, e:", e)
    def do_POST(self):
        try:
            self.send_response(200)
            self.send_header("Content-type", "application/json")
            self.end_headers()
            dictParam = url2Dict(self.path)
            
            # 测试POST请求Body信息            
            data = self.rfile.read(200)   # 指定了读取长度
            Log("data:", data)            # 打印POST请求的数据,可以根据请求中的数据具体再让机器人执行对应的操作
            
            # 校验
            if len(dictParam) == 4 and dictParam["access_key"] == AccessKey and dictParam["secret_key"] == SecretKey:
                del dictParam["access_key"]
                del dictParam["secret_key"]
                Log("接收到请求", "参数:", 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 "未设置期货合约"
                                
                q = None
                if exchange.GetName() == "Futures_CTP" and UseMarketOrderForCTP == False:
                    q = ext.NewTaskQueue()
                
                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")
                    if not q:
                        exchange.Buy(-1, float(dictParam["amount"]))
                    else :
                        q.pushTask(exchange, ContractType, "buy", float(dictParam["amount"]), lambda task, ret: Log(task["desc"], ret, "#FF0000"))
                    Log("持仓:", exchange.GetPosition())
                elif not isSpot and dictParam["type"] == "short":
                    exchange.SetDirection("sell")
                    if not q:
                        exchange.Sell(-1, float(dictParam["amount"]))
                    else :
                        q.pushTask(exchange, ContractType, "sell", float(dictParam["amount"]), lambda task, ret: Log(task["desc"], ret, "#FF0000"))
                    Log("持仓:", exchange.GetPosition())
                elif not isSpot and dictParam["type"] == "cover_long":
                    exchange.SetDirection("closebuy")
                    if not q:
                        exchange.Sell(-1, float(dictParam["amount"]))
                    else :
                        q.pushTask(exchange, ContractType, "closebuy", float(dictParam["amount"]), lambda task, ret: Log(task["desc"], ret, "#FF0000"))
                    Log("持仓:", exchange.GetPosition())
                elif not isSpot and dictParam["type"] == "cover_short":
                    exchange.SetDirection("closesell")
                    if not q:
                        exchange.Buy(-1, float(dictParam["amount"]))
                    else :
                        q.pushTask(exchange, ContractType, "closesell", float(dictParam["amount"]), lambda task, ret: Log(task["desc"], ret, "#FF0000"))
                    Log("持仓:", exchange.GetPosition())
                
                if q is not None:
                    while q.size() > 0:
                        q.poll()
                        Sleep(500)
            
            # 处理body数据
            if isDealBodyMsg:
                if exchange.GetName().find("Futures") != -1:
                    Log("data:", data.decode('utf-8'))  # 测试
                    if re.search(r'buy', data.decode('utf-8')):
                        Log("触发buy")
                        exchange.SetContractType(ct)
                        exchange.SetDirection("buy")
                        exchange.Buy(-1, amount)
                    elif re.search(r'sell', data.decode('utf-8')):
                        Log("触发sell")
                        exchange.SetContractType(ct)
                        exchange.SetDirection("sell")
                        exchange.Sell(-1, amount)
            
            # 写入数据应答
            self.wfile.write(json.dumps({"state": "ok"}).encode())
        except Exception as e:
            Log("Provider do_POST error, e:", e)


def createServer(host):
    try:
        server = ThreadingHTTPServer(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():
    # 开启一个线程
    try:
        _thread.start_new_thread(createServer, (("0.0.0.0", Port), ))         # VPS服务器上测试           
    except Exception as e:        
        Log("错误信息:", e)
        raise Exception("stop")    
    if exchange.GetName().find("Futures") != -1:
        exchange.SetContractType(ContractType)
    Log("账户资产信息:", _C(exchange.GetAccount))
    while True:
        if exchange.GetName() == "Futures_CTP":
            if exchange.IO("status"):
                LogStatus(_D(), "CTP连接")
            else:
                LogStatus(_D(), "CTP未连接")
        else:
            LogStatus(_D())
        Sleep(2000)

مزید

eth8888/upload/asset/2457669d9c32568732cb7.jpg کھولیں اصلی ڈسک اس غلطی کو اشارہ کرتا ہے، جہاں غلط ہے

eth8888/upload/asset/2457669d9c32568732cb7.jpg کھولیں اصلی ڈسک اس غلطی کو اشارہ کرتا ہے، جہاں غلط ہے

ہوانگ کی تلوارٹیچر: کیا میں ویکی میسج کر سکتا ہوں؟

ہوانگ کی تلوار2021/11/21 11:53:33 CMD 199866 buy=0.1, منتظم نے یہ پیغام موصول کیا اور روبوٹ میں کوئی حرکت نہیں ہوئی

سپرونمیں نے ایک رات میں اسے دیکھا اور سمجھ نہیں آیا، کیا آپ اسے تبدیل کر سکتے ہیں؟ رابطہ کریں V: شاید ہاں

ڈینج 1کیا آپ ایک مکمل ٹی وی سگنل کی فہرست لکھ سکتے ہیں؟ مثال کے طور پر، کس طرح جسم میں معلومات حاصل کرنے کے لئے؟

DietQuantٹیچر، کس طرح تبدیل کرنے کے لئے ایک ڈسک میں دو کرنسیوں کو شامل کرنے کے لئے؟

خواب آٹھ ہندسوں میں ہیںاوکے ، کیا آپ OKv5 کی مشابہت والی ڈسک نکال سکتے ہیں؟ ایک چھوٹا سا سفید ، نہیں جانتا کہ اسے کیسے بنایا جائے ، اور اصل ڈسک کے بارے میں بات کرنے کی ہمت نہیں کرتا؟

ایس ایس ایکس ایکس ڈیایک سوال ہے، استاد، ورژن 3.7 کیا ہے؟ کیا یہ ڈپلوئم ایڈمنسٹریٹر کا ورژن ہے؟ میں اسے کیسے اپ ڈیٹ کر سکتا ہوں؟ 2021-08-11 11:08:55 خرابی Traceback (most recent call last): فائل "", line 999, in __init_ctx__ فائل "", line 4, in ImportError: cannot import name 'ThreadingHTTPServer' 2021-08-11 11:08:55 معلومات اجناس فیوچر ٹریڈنگ لائبریری کامیابی سے لوڈ ہوئی 2021-08-11 11:08:55 معلومات آپ جو میزبان استعمال کر رہے ہیں اس کا python ورژن 3.5 ہے۔

qq3390214355میں نے اسے ایک رات میں دیکھا ہے اور میں سمجھ نہیں پا رہا ہوں ، کیا آپ اسے دوبارہ لکھ سکتے ہیں ، کیسے رابطہ کریں؟

چن نیشنسناستاد ہیلو، ٹی وی پر براہ راست انتباہ کرنے کی حکمت عملی کی تجارت کی سمت کی ویب ہک ایڈریس کیا ہے؟

لنبناچھا، شکریہ استاد، میں اسے آزماؤں گا!!!

لنبناستاد صاحب، ہیلو، کیا آپ مجھے کچھ تفصیلات دے سکتے ہیں کہ معاہدے کا کوڈ کس طرح لکھا گیا ہے؟

چھوٹا سا خوابایف ایم زیڈ اے پی آئی دستاویزات میں آخر میں اوکیکس سوئچ ڈسک کی تقریب ہے۔

wbe3- چھوٹی ٹماٹر کی ٹماٹرٹی وی سگنل وصول کرنے کی حکمت عملی ، اینالاگ ڈسک کو کیسے تبدیل کیا جائے؟ یہ ہمیشہ مجھے اشارہ کرتا ہے کہ ماحول مطابقت نہیں رکھتا ہے۔

چھوٹا سا خوابغلطی کی وجہ یہ ہے کہ python کے پاس کوئی متعلقہ ماڈیول نہیں ہے ThreadingHTTPServer

چابی986کیا آپ نے اس مسئلے کو حل کیا ہے؟

eth8888ٹھیک ہے

چھوٹا سا خوابیہ سفارش نہیں کی جاتی ہے کہ ٹی وی کی نگرانی کے لیے ایسی درخواستیں کی جائیں۔ ایف ایم زیڈ کی توسیع شدہ اے پی آئی کا استعمال کریں۔

چھوٹا سا خوابیہ حکمت عملی تجارتی مستقبل کی مثال کے طور پر استعمال کی جاتی ہے ، اگر ڈیجیٹل کرنسی کو چلانے کے لئے معاہدہ کوڈ کی ضرورت ہو تو اس کی حکمت عملی کو تبدیل کریں۔

چھوٹا سا خواباس حکمت عملی کا ایک سادہ مثال یہ ہے کہ حکمت عملی کے روبوٹ نے ایک سروس بنائی ہے جو ٹی وی سے آنے والے سگنل کی درخواستوں کو سننے کے لئے استعمال ہوتی ہے۔ `` # پی او ایس ٹی ٹیسٹ جسم کی معلومات کی درخواست کرتا ہے data = self.rfile.read ((200) # پڑھنے کی لمبائی کی وضاحت کرتا ہے لاگ (("data:", data) # POST درخواست کے اعداد و شمار کو پرنٹ کرتا ہے ، جو درخواست میں موجود اعداد و شمار کے مطابق روبوٹ کو متعلقہ کارروائی کرنے کے لئے مخصوص ہوسکتا ہے۔ `` اس کوڈ میں ایک تبصرہ لکھا ہوا ہے، اور یہ ٹی وی کی درخواستوں کو سنبھالنے کے لئے جسم کی معلومات ہے۔ کیا آپ کو کوڈ کو دیکھنے میں دشواری ہوگی؟

چھوٹا سا خواباس کے علاوہ ، آپ کو اپنی حکمت عملی کو اپنی ضروریات کے مطابق تبدیل کرنا چاہئے۔

چھوٹا سا خوابایف ایم زیڈ پر اوکیکس ڈسک کو ترتیب دینے کے لئے API KEY ، پھر کوڈ میں ایک جملہ کا اضافہ کریں۔

چھوٹا سا خوابمیں سمجھا نہیں، اندازہ لگا رہا ہوں کہ جب میں نے اسے استعمال کیا تو میں نے کیا غلط کیا، چیک کریں۔

چن نیشنسنشکریہ، اگر میرا ویب ہک ایڈریس خریدنے کی طرف اشارہ کرتا ہے، لیکن ٹی وی حکمت عملی الارم اشارہ فروخت کرنے کے بارے میں ہے؟

چھوٹا سا خوابhttps://www.fmz.com/bbs-topic/5969 میں مضامین اور حکمت عملیوں میں مثالیں ہیں۔

چھوٹا سا خوابhttps://www.fmz.com/api#exchange.setcontracttype... فنکشن کی تفصیل میں ہے، آپ دیکھ سکتے ہیں۔

PY008معاہدے کا کوڈ کیا ہے؟

چھوٹا سا خوابہم نے اس کے بارے میں کیا سوچا ہے؟

چھوٹا سا خواباگر آپ کسی ایکسچینج کے لئے معاہدہ کر رہے ہیں تو ، ٹی وی پر ویب ہک ایڈریس لکھیں: ایک اور معاہدہ: `` http://x.x.x.x:xxxx/data?access_key=xxx&secret_key=yyy&type=long&amount=1 `` ایک اور معاہدہ: `` http://x.x.x.x:xxxx/data?access_key=xxx&secret_key=yyy&type=cover_long&amount=1 `` یاد رکھیں کہ پالیسی کے پیرامیٹرز میں، معاہدہ کوڈ مقرر کریں۔