0
관심
72
관심자

"Tradingview" 표시기를 사용하여 FMZ 로봇과의 인터페이스

이 글은 2020-06-19 11:08:22에 작성되었습니다. 이 부분의 본문은 2025-01-14 20:34:25
comments   0
hits   1090

Interfacing with FMZ robot using “Tradingview” indicator

배경 소개

트레이딩뷰는 좋은 시장 코팅 도출 도구입니다.

pine스크립트는 또한 강력한 존재입니다!

백테스팅, 경보, 그리고 다양한 도킹은 매우 완벽한 금융 도구입니다.

하지만 우리를 괴롭히는 두 가지 문제가 있습니다.

  • 하나는 비싼 회원금 시스템입니다
  • 두번째는 신호가 직접 거래될 수 있는 거래소가 거의 없다는 것입니다. 두 개 또는 세 개인 것 같습니다.

오늘 우리 기사는 교환 도킹 문제를 해결하는 데 당신을 데려다줍니다.

시행

전체적인 아이디어는 다음과 같습니다.

TV ((TradingView)pine스크립트 -> 신호 경보webhook-> 지역webhook server전송 요청 -> FMZ bot는 동작 요청을 수신합니다

한 걸음 한 걸음 해보자

트레이딩뷰 웹사이트로 가세요:

https://www.tradingview.com/

다음으로, 우리는 먼저Alert자세한 내용은 아래 그림 참조

Interfacing with FMZ robot using “Tradingview” indicator

이 그림의 일부 측면에 관심을 기울여야합니다.Alert.

유효기간webhook주소, 그리고message콘텐츠는 잘 만들어져야 합니다.

유효기간은 한눈에 알 수 있고 유효기간이 끝나면 무효가 됩니다.


```Message``` here, it is best we have a clear explanation, in order to let the ```bot``` distinguish from ```Alert``` messages.

I generally set it like this: XXX strategy, order quantity and trading direction

So far, the TradingView part is basically done!

Next, let's get the local ```webhook``` service job done!

This kind of work, Google it will show you lots of results. this article will skip this part, you can do it by yourself.

here is a simple framework for python:

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


Safe, worry-free and convenient, but there are also issues.

This little frame, it will!! Suicide!! Please pay attention to this issue!

So, I wrote another script on the server, When "die" or "offline" appears in the log, I will restart it. later on, i still feel not safe, so i set it restart regularly. Find an unimportant time every hour... Give it a restart, it has been safely running for two months now and there is no more signal losses.

In addition, TradingView only recognizes the port 80, so don't mess up the service port.

So far, We have done the ```Message``` from ```Alert``` part. Next, how do we get Bot?

I don't know if you have paid attention to the interface API document of FMZ at the bottom:

 ![Interfacing with FMZ robot using "Tradingview" indicator](/upload/asset/6e82463afe0dfbc15d96.png) 

We can pass some commands to our little Bot through API!
The specific request example is here, the red box is the request we need.

 ![Interfacing with FMZ robot using "Tradingview" indicator](/upload/asset/6e8cc24e284428b14724.png) 

Here also needs some preparation work.
FMZ API (avatar->account settings->API interface),
A Bot that has been started (we want to get its ID, so we create a new ID first), the number in the URL of a general robot is the ID.

 ![Interfacing with FMZ robot using "Tradingview" indicator](/upload/asset/6e6055878d778eea6265.png) 

Next, we transform the webhook service so that after receiving the message, it will be automatically forwarded to the FMZ Bot.

Finally, don’t forget to fill in the completed ```webhook``` address in the TradingView Alert(format: http://xx.xx.xx.xx:80)

The following is the ```service``` code I changed, you can use it as a reference:

#!/usr/bin/python -tt

-- 코딩: UTF-8-

BaseHTTPServer에서 BaseHTTPRequestHandler, HTTPServer를 가져오기 json를 가져오기 수입 기록 수입 로깅 수입 수입 을 수입 수입 하위 공정 수입 시간 ssl를 가져오기 ssl._create_default_https_context = ssl._create_unverified_context 확인되지 않은 컨텍스트

시도해보세요: 수입 md5 urllib2를 가져오세요 urllib에서 가져오기 urlencode 다음을 제외하고 md5로 hashlib를 가져오기 urllib.request를 urllib2로 가져오 urllib.parse에서 urlencode를 가져오기

############################################################

다음 과 같은 것 들 중 일부 를 변경 해야 할 것 이다

이 스크립트의 로그 파일

log_file = /root/webhook/VMA/webhook.log

보트 라이선스

accessKey = secretKey =

HTTP 구성

log_max_size = 25165824 # 24 MB log_level = 로깅.INFO #log_level = logging.DEBUG # DEBUG는 꽤 많은 단어들을 가지고 있습니다.

listen_port = 80

당신이 무엇을 하고 있는지 모르는 한, 당신은 일을 바꾸는 것을 중단해야 합니다.

##############################################################################

log = logging.getLogger ((log) log.setLevel (log_level) log_handler = logging.handlers.RotatingFileHandler (로그_파일, maxBytes=log_max_size, 백업Count=4) f = 로깅.Formatter (포맷) % (시간) s % (파일 이름) s % ( 레벨 이름) s % (메시지) s, %B %d %H:%M:%S) log_handler.setFormatter (f) log.addHandler ((log_handler) 로그 관리자)

클래스 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 ((): 주요 이벤트. 시도해보세요: 서버 = HTTPSserver (https) log.info (WEB 서버 시작...) server.serve_forever (서버.서버_forever) 키보드 인터럽트 제외: 로그.인포 (Ctrl-c 누르면 종료) server.socket.close (서버.소켓.결결)

만약이름 == ‘주요: 주요 (()


# Implementation within FMZ platform trading strategy

All the above described the communication implementation, our Bot trading strategy also needs to be processed accordingly, in order for us to fix our receiving signal process.

For example, the Alert Message designed at the beginning, You can play it according to your preferences and specific needs. 

The code is as follows, get the information, filter them, do the operation, and end.

함수 get_Command (() { // 상호 작용에 대한 책임 함수, 시간적으로 상호 작용적으로 관련 값을 업데이트, 사용자는 스스로 확장 할 수 있습니다 var way = null; //route var cmd = GetCommand(); // 인터랙티브 명령어 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;
     }
 }

} “`

이 기사는 끝났습니다. 도움이 되길 바랍니다.

관련 추천
더 많은 내용