Table of Contents
外部から自分のローカルPCにアクセスできるようにngrokを設定する
ngrokにログイン
ダウンロード
解凍する
ダブルクリックで起動
この画面がでる
このコマンドを参考にする
2番のアカウントを接続するコマンドをコマンドプロンプトに入力してエンターを押す
アカウント情報がパソコンに保存される
このコマンドを入力してエンターを押す
ngrok.exe http 80
このURLが外部公開されているURL
このURLはインスタントなので起動させる度に毎回変わります。
これでngrokの設定が完了です。
Pythonでwebアプリケーションを作る
今はパソコンにアクセスしてもアプリケーションが起動していないので何も表示されません。
PythonでWebアプリを作ってローカルで起動します。
Pythonのインストール
version10
ファイルクリック
起動
add to pass のチェックボックスをONにする 忘れずに!!
インストールする
あとはコードを書いていきます。
ファイル構成
app.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import json from pydantic import BaseModel from fastapi import FastAPI from typing import Optional app = FastAPI() # リクエストbodyを定義 class Item(BaseModel): order:Optional[str] = None symbol:Optional[str] = None @app.get("/") def read_root(): return {"Hello": "World"} @app.post("/") def entryorder(item: Item): order = item.order symbol = item.symbol print(symbol) if order == None: state = load_order(symbol) if state != None: update_order(symbol,order) return state else: update_order(symbol,order) return{"res":"ok"} def load_order(symbol): """ positionの関連付けJSONファイルorderの読み込み """ if symbol: try: order_json=open(symbol+'order.json',"r") order=json.load(order_json) order_json.close except Exception as e: print("JSONの読み込みに失敗したのでJSONファイルを新規作成しました。") order_json=open(symbol+'order.json',"w") json.dump({"order":None},order_json) order_json.close order_json=open(symbol+'order.json',"r") order=json.load(order_json) order_json.close return order["order"] def update_order(symbol,order): """ JSONファイルorderの上書き保存 """ if symbol: order_json=open(symbol+'order.json',"w") json.dump({"order":order},order_json) order_json.close |
requirements.txt
1 2 3 |
fastapi uvicorn pyyaml |
install.bat
1 |
pip install -r requirements.txt |
kidou.bat
1 |
uvicorn app:app --port 80 |
インストールする
installをダブルクリック
起動する
kidou.batをダブルクリック
この状態で起動している
黒い画面は閉じないでそのままにしておく
これでWebアプリケーションが完了です。
Trading Viewの設定
コードの注文のコードにcommentを入れる
1 2 3 4 5 6 7 |
//@version=5 strategy("test", overlay=true) if barstate.islast if strategy.position_size != 0 strategy.close_all(comment = "buy_close") else strategy.order("My Long Entry Id", strategy.long,comment = "buy") |
comment = “buy”
comment = “buy_close”
comment = “sell”
comment = “sell_close”
注文コマンドのcommentはこれです。
1 2 3 4 |
comment = "buy" comment = "buy_close" comment = "sell" comment = "sell_close" |
メッセージ欄はこれです。
1 |
{"symbol":"{{ticker}}","order":"{{strategy.order.comment}}"} |
コメントをwebアプリケーションへ送信します。
webhookを設定する
メニューから・・・を押す
アラートを追加
メッセージを削除
貼り付ける
{“symbol”: “{{ticker}}” ,”order”:”{{strategy.order.comment}}”}
通知はngrokのURL
これで保存すれば完了。
これでTrading Viewの設定が完了です。
MT4の設定
WebRequestを許可にしておく
URLはローカルホストのURLです。
1 |
http://127.0.0.1/ |
MQLでWebRequestを使う
EA「Trading View」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
#property strict input string web_hook_url = "http://127.0.0.1/"; input string input_symbol = "";//通貨ペア(空白の場合は自動) input int magic_number =124455; input double input_lots = 0.01;//ロットサイズ input int input_spread = 30;//スプレッド制限 input int input_slippage = 20;//スリッページ制限 void OnTick() { string order = ""; if(Ask - Bid <= input_spread * _Point) { order = web_request(); } if(position_count(OP_BUY)>0) { if(order=="buy_close") {position_close(OP_BUY);} } if(position_count(OP_SELL)>0) { if(order=="sell_close") {position_close(OP_SELL);} } if(order=="buy") {position_entry(OP_BUY);} if(order=="sell") {position_entry(OP_SELL);} } string web_request() { string url=web_hook_url; string headers; string data; char post[],result[]; string symbol=Symbol(); if(input_symbol!="") { symbol=input_symbol; } headers = "Content-Type: application/json\r\n"; data = "{\"symbol\":\""+ symbol+"\"}"; ArrayResize(post,StringToCharArray(data,post,0,WHOLE_ARRAY,CP_UTF8)-1); int rest=WebRequest("POST",url,headers,5000,post,result,headers); string order = CharArrayToString(result); StringReplace(order,"\"",""); if(rest!=200) { Print(Symbol()," error ",CharArrayToString(result)); } else { if(order=="buy" || order=="buy_close"|| order=="sell"|| order=="sell_close" ) { Print(Symbol()," web_request order: ",order); } return order; } return ""; } int position_count(int side) { int count = 0; for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType() == side) { if(OrderSymbol()==Symbol()) { if(OrderMagicNumber()==magic_number) { count++; } } } } } return count; } void position_entry(int side) { if(side==0) { bool res= OrderSend(NULL,side,input_lots,Ask,input_slippage,0,0,NULL,magic_number,0,clrGreen); } if(side==1) { bool res= OrderSend(NULL,side,input_lots,Bid,input_slippage,0,0,NULL,magic_number,0,clrRed); } } void position_close(int side) { for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType() == side) { if(OrderSymbol()==Symbol()) { if(OrderMagicNumber()==magic_number) { bool res= OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0, clrBlue); } } } } } } |
これでMT4が完了です。
起動手順
ngrokをダブルクリックで起動
コピペで入力してエンターを押す
ngrok.exe http 80
URLをメモる(ctrl+c)
TradingViewのメッセージにURLを貼り付ける
Webアプリを起動する
kidou.batをダブルクリック
黒い画面がでたら成功
MT4を起動させてEAをチャートに表示
設定を確認する
自動売買を許可する
ツールオプション
設定ができてるか確認する
自動売買をON
EA名の右にニコちゃんマークがでてるかを確認する
完了です。
お疲れ様でした。
BybitがGoogleのIPアドレス規制をしているためです。国内のVPSなら使…
自分のbotで使ってるAPIキーを使用しているんですが、 You have br…
pybit 最新版にコードを変更しました。コードとrequirements.tx…
お返事ありがとうございます。はい。pybit==2.3.0になっております。
コードはあっていると思います。rewuirements.txtは「pybit==…