ট্রেডিং ভিউ ওয়েবহুক স্ট্রাইক লিঙ্ক নীতি

লেখক:ছোট্ট স্বপ্ন, তারিখ: ২০২০-০৮-০৩ ০৯ঃ৫৮ঃ১৯
ট্যাগঃ

সম্পর্কিত নিবন্ধঃhttps://www.fmz.com/bbs-topic/5969

এইচটিটিপিএস সার্ভারগুলির মধ্যে কিছু ত্রুটি রয়েছে, তাই থ্রেডিং এইচটিটিপিএস সার্ভার ব্যবহার করা বিবেচনা করুন। তথ্যসূত্রঃ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:maybeyeah.V:maybeyeah.V:maybeyeah.V:maybeyeah.

ফাঙ্গা 1একটি সম্পূর্ণ টিভি সংকেতের একটি উদাহরণ লিখতে পারেন, কিভাবে শরীরের মধ্যে তথ্য পেতে; মানুষ মেঘের মধ্যে কুয়াশা দেখতে।

DietQuantস্যার, কিভাবে পরিবর্তন করা যায় যাতে একক ডিস্কে দ্বিগুণ মুদ্রা যোগ করা যায়?

স্বপ্নের মূল্য আটটি সংখ্যা।ওগো ঈশ্বর, তুমি কি ওকেভি৫ সিমুলেটর বের করতে পারবে? ছোট্ট সাদা একটা, কিভাবে বানাবো জানি না, কিন্তু আসল ডিস্ক বলতে সাহস পাচ্ছি না।

এসএসএক্সএক্সডিপ্রশ্নঃ আপনি কি জানেন যে 3.7 সংস্করণটি কি ডিপ্লোমেন্ট অ্যাডমিনিস্ট্রেটরের সংস্করণ? কিভাবে এটি আপডেট করবেন? আমি অনেকবার চেষ্টা করেছি। 2021-08-11 11:08:55 ত্রুটি Traceback (most recent call last): File "", line 999, in __init_ctx__ File "", line 4, in ImportError: cannot import name 'ThreadingHTTPServer' ফাইলটি "", line 999, in __init_ctx__ ফাইলটি "", line 4, in ImportError: cannot import name 'ThreadingHTTPServer' ফাইলটি "", line 999, in __init_ctx__ ফাইলটি "", line 4, in ImportError: ' ImportError: ' ImportError: ' ImportError: ' ImportError: ' ImportError: ' ImportError: ' ImportError: ' ImportError: ' ImportError: ' Import 2021-08-11 11:08:55 তথ্য কমোডিটি ফিউচার ট্রেডিং শ্রেণীভুক্তিকরণ সফলভাবে লোড হয়েছে 2021-08-11 11:08:55 তথ্য আপনার ব্যবহৃত হোস্ট python কম্পাইলিং পরিবেশের python সংস্করণ 3.5।

qq3390214355আপনি কি আমার সাথে যোগাযোগ করতে পারবেন, আমি কি আপনাকে সাহায্য করতে পারি?

চেন নানসনশিক্ষক, হ্যালো, টিভিতে সরাসরি সতর্কতা দেওয়ার কৌশল ওয়েবহুক ঠিকানা কি?

ল্যান্বনভাল, ধন্যবাদ শিক্ষক, আমি এটা পরীক্ষা করব!

ল্যান্বনশিক্ষক, হ্যালো, আপনি কি এই চুক্তির কিছু কোড লিখতে পারেন বিস্তারিতভাবে, প্রোগ্রামিং কিউবায়েট সত্যিই অবিশ্বাস্য, আপনাকে ধন্যবাদ!

ছোট্ট স্বপ্নFMZ API ডকুমেন্টেশনের শেষে OKEX স্যুইচিং অ্যানালগ ডিস্কের ফাংশন রয়েছে।

wbe3- ছোট টমেটোটিভি সিগন্যাল গ্রহণের কৌশল, কীভাবে অ্যানালগ ডিস্কটি স্যুইচ করবেন?

ছোট্ট স্বপ্নএই ত্রুটিটি ঘটেছে কারণ পাইথনের সাথে সম্পর্কিত থ্রেডিং এইচটিটিপিএস সার্ভার মডিউল নেই

key986আপনি কি এই সমস্যার সমাধান করেননি?

eth8888ঠিক আছে।

ছোট্ট স্বপ্নএফএমজেডের এক্সটেনশন এপিআই ব্যবহার করে টিভি শোনার অনুরোধ তৈরি করার পরামর্শ দেওয়া হচ্ছে না।

ছোট্ট স্বপ্নএই কৌশলটি পণ্যের ভবিষ্যতের উদাহরণ হিসাবে ব্যবহৃত হয়, যদি ডিজিটাল মুদ্রা চালানোর জন্য চুক্তি কোডটি সেট করা প্রয়োজন হয়; নীতি পরিবর্তন করুন।

ছোট্ট স্বপ্নএই কৌশলগত উদাহরণটি সহজলভ্য, যেখানে কৌশলগত রোবট একটি পরিষেবা তৈরি করে যা টিভি থেকে সংকেতের অনুরোধগুলি শোনার জন্য ব্যবহৃত হয়। `` # POST পরীক্ষার জন্য বডি তথ্যের অনুরোধ data = self.rfile.read ((200) # পাঠের দৈর্ঘ্য নির্দিষ্ট করে Log (("data:", data) # POST অনুরোধের ডেটা প্রিন্ট করে, যা অনুরোধে থাকা ডেটার উপর ভিত্তি করে রোবটকে সংশ্লিষ্ট ক্রিয়াকলাপগুলি সম্পাদন করতে দেয় `` কোডটিতে একটি নোট লেখা আছে, এখানে টিভির অনুরোধগুলি পরিচালনা করার জন্য body information রয়েছে।

ছোট্ট স্বপ্নতিনি বলেন, 'আমি মনে করি, আমরা নিজেদের প্রয়োজন অনুসারে আমাদের কৌশল পরিবর্তন করতে পারি।

ছোট্ট স্বপ্নFMZ-এ OKEX অ্যানালগ ডিস্কের API KEY কনফিগার করুন, তারপর কোডে একটি `` এক্সচেঞ্জ যুক্ত করুন। IO (("simulate", true) `` এক্সচেঞ্জ হয়ে গেছে।

ছোট্ট স্বপ্নআমি বুঝতে পারছি না, আমি অনুমান করি যে আমি যখন এটি ব্যবহার করেছি তখন ভুল করেছি, চেক করুন।

চেন নানসনধন্যবাদ, যদি আমার ওয়েবহুকের ঠিকানাটি ক্রয়ের দিকে নির্দেশ করে তবে টিভি কৌশল সতর্কতা টিপসটি বিক্রয়ের দিকে নির্দেশ করে?

ছোট্ট স্বপ্ন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 `` মনে রাখবেন, নীতিগত পরামিতিতে, চুক্তি কোড সেট করুন।