0
懸念
72
フォローする

"Tradingview"インジケーターを使用してFMZロボットとインタフェース

投稿日:2020年6月19日 11:08:22 に投稿された 更新日: 2025-01-14 20時34分25秒
comments   0
hits   1090

Interfacing with FMZ robot using “Tradingview” indicator

背景紹介

TradingViewは良い市場コートを描くツールです.

についてpine脚本も強力な存在です!

バックテスト,アラーム,様々なドッキングは 非常に完全な金融ツールです

しかし 2つの問題が私たちを悩ませています

  • 一つは高価な会員制です
  • 2つ目は信号が直接取引できる取引所が ほとんどないことです 2つか3つあるようです

交換ドッキングの問題を解決します.

実施

概要はこうです

TV (TradingView)pineスクリプト -> 信号アラームwebhook-> 地元webhook server転送要求 -> FMZボットが操作の要求を受け取る

ステップ・バイ・ステップを

TradingViewのウェブサイトへ

https://www.tradingview.com/

まず,この2つの要素を組み合わせます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 確認されていないコンテキスト

試してください 輸入する 輸入 urllib2 urllibから輸入 urlencode 以下のものを除く. MD5 として hashlib をインポートする urllib.request を urllib2 としてインポートする urllib.parse から urlencode をインポート

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

下 の 点 の 中 の 何 か を 変える 必要 が あり ます

このスクリプトのログファイル

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

ボット・アピ・ライセンスは

accessKey = 秘密Key =

HTTP の設定

log_max_size = 25165824 # 24 MB ログ_レベル = ログ.INFO #log_level=logging.DEBUG #DEBUGはかなり語彙に満ちています

listen_port = 80 について

何をしているかわからない限り 変化を止めなさい

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

log = logging.getLogger ((log) について ログ.セットレベル (log_level) log_handler = logging.handlers.RotatingFileHandler (ログ_ファイル) maxBytes=log_max_size サイズを表示する バックアップ数=4) f = ログ付け.フォーマット (% asctime) s % ファイル名 (% levelname) s % メッセージ (% asctime) s %B %d %H:%M:%S) log_handler.setFormatter ((f) について log.addHandler (ログ_ハンドラー)

クラス 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

定義 メイン (: 主なイベントです 試してください サーバー = HTTPServer (((, listen_port), webhook 受信機) ログ.info (WEB サーバを起動しました) サーバー.serve_forever (永久に) キーボード中断を除く ログ.インフォ (Ctrl-c 押す,停止) サーバー.ソケット.閉じる (()

もし名前 == ‘主要: メイン (((


# 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; //ルート 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;
     }
 }

} “`

この記事は終わりです,役にたつことを願っています!

関連推薦
もっと見る