(2021/10/11 注意点を追記)
LINEで通知を受け取りたい!
メッセージングアプリなに使ってますか?有名どころのWhatsApp、仕事ならSlack、cTrader情報用にTelegramとかいろいろ使い分けてる方も多いかもしれませんが、日本で生活してる方であれば「なんだかんだ結局LINEを一番使ってる」という人も多いことでしょう。
cTrader(cAlgo)でもe-Mailでの通知機能はあるので、cBotやインジケーターからメール通知を出すことはできます。でも、今時メールって・・・最近ではメールなんて仕事以外ではめったに使わないという方も増えてきていると思います。
そんな方のためにも、今回はポジション決済をLINEに通知するインジケーターとLINE通知のサンプルコード紹介したいと思います。
参考までにこんな感じ。
前準備
自分でプログラムを作るにしても、インジケーターを使ってみるだけにしても、前準備が必要です。
LineNotifyのアクセストークンを取得する
LINE公式のLINE Notifyという機能を利用します。このページからまずLINEのアカウントでログインしてください。
ログインしたら「ログイン」と書かれていた場所が自分の名前に変わるので、そこをクリックして「マイページ」を選択します。
切り替わったページの「アクセストークンの発行」「トークンを発行する」を選択します。
トークン名は好きに名前つけてください。cBotから送られるメッセージの冒頭に表示されます。私はブローカー名にしてます。
「1:1でLINE Notify から通知を受け取る」を選びます。
表示されたアクセストークンを控えておく
この画面が出たら表示されたアクセストークンをどこかにコピペしておいてください。
記載ありますが、この画面を消してしまうと二度と表示されないため、必ずここで記録しておくようにしてください。
このアクセストークンをそのままインジケーターのパラメータとして使用します。
PositionNotifyAtLine
機能概要
こんな風にポジションのエントリーと決済をLINEで通知します。
どこか一つのチャートで動かしておけば、その口座の全ての通貨ペアでエントリーと決済をLINEに送ってくれます。
逆に言うと2つ以上のチャートでインジケーターが動いてると2通同じ通知が来てしまいますのでご注意ください。
口座通貨は円口座とドル口座のみ対応です。他通貨口座への対応希望あればコメントください。
パラメータ
AccessToken
上記で取得したアクセストークンを指定します。これが間違ってると何も起きません。
NotifyEntry
ポジションのエントリーを通知するかどうか設定します。指値逆指値注文使う人用。デフォルトはNo。常に成り行き注文しかしないならNoでいいかと。
WithSticker
上記画像のようにスタンプ付きで知らせるかどうか。デフォルトはYesですが、うっとうしければNoにしてください。
OnlyThisSymbol
適用してるチャートの通貨ペアの通知のみを受け取りたいときにYesに。デフォルトはNoでその口座全てのシンボルの通知を送ります
ダウンロード
こちらからどうぞ。ダウンロードしたらダブルクリックしてcTraderにインストールしてください。
(2022/11/09 追記)
cTrader4.2以上はこちらをご利用ください。編集したい方もターゲットフレームワークの変更は不要です。
(追記ここまで)
なお、LINE Notifyの利用にアクセス権限が必要なため、起動時にこんな感じの警告メッセージが出ます。「許可」してあげてください。
自分で作ってみたい人へ
ソースコード付きなので自由に改造していただいて構いません。
通知の条件を変えたい
ポジションのエントリークローズではなくて、特定の価格に達したらとか、ラインタッチしたらとか、人によって通知を出したい条件は違うと思います。
ソースコード自体は少なく、さほど難しくもないため、上記ソースコードをそのまま改造していただくのが一番簡単だと思います。
LINEにメッセージを送りたい部分で、SendLineAsyncメソッドかSendLineWithStickerAsyncメソッドを呼び出すだけです。
送るスタンプを変えたい
ムーンの顔が気に食わないという人もいるでしょう。
LineDevelopersのこのページを確認して、SendLineWithStickerAsyncの引数(StickerPackIdとStickerId)を好きなスタンプのIdを渡してあげてください。
StickerPackIdがパッケージID、StickerIDが個々のスタンプのIDです。
(2023/04/23 追記)
下記のターゲットフレームワーク変更はcTrader4.1以前の頃のやり方です。現在のcTraderで新規作成をした場合は最初からターゲットフレームワークが.NET 6というものが選択されているはずです。
もし古いインジケーターを編集したいなどで".NetFramework 4.x(Legacy)"となってるようであれば、現在はcTraderからターゲットフレームワークを変更できるようになっているので、ここで.NET 6に変更するだけで使用できます。
(追記ここまで これ以下の情報はcTrader4.1以前を使ってる場合の話です)
最初から自分で作ってみたい
最初から自分で作るかもしくはすでに作ってあるcBotやインジケーターに組み込みたい場合、上記のメソッドをコピペしただけでは動きません。
初期状態ではSystem.Net.Http名前空間が使えないのです。仕組みの説明は抜きにして、とりあえずサンプルコードコピペで動くようにするまでのやり方だけ記しておきます。
やり方
VisualStudioを使用してる前提で話を進めます。
プロジェクトメニューの一番下、「~~~のプロパティ」を開いてください。
こんな画面になりますので、対象のフレームワークを.NetFrameWork4.5以上に変更します。自分で使うだけなら一番新しいの選んでおけば大丈夫です。
続いて参照の追加をします。ソリューションエクスプローラ(多分画面右)のプロジェクトツリーの「参照」を右クリックして「参照の追加」。
検索して、System.Net.Httpを探して、チェック入れてOKを押します。(ここにSystem.Net.Httpがない場合、ターゲットフレームワークを再度確認して下さい。)
これで上記ファイルのソースコードコピペでコンパイルできるはずです。
コピペする場合は、メソッドだけではなく冒頭のusing文もお忘れなく。
(2021年10月11日追記 )
cTraderでコンパイルする際の注意点
このインジケーターをcTraderでコンパイルしなおすとエラーになります!
当インジケータのソースコードをcTraderは受け付けてくれません(泣)
VisualStudioではなくcTraderで編集する場合は設定画面からAuto Format Code in Code Editorのチェックを外してください。
なにが起きてるか
コメントいただいて判明したのですが、ビルドと同時にAutoFormatされることでasyncというキーワードが削除されるようです。(パン太さん情報ありがとうございました!)
そしてこんなエラーメッセージが出るのです。
「このメソッドに'async'修飾子を指定し・・・」って、いやいや!アナタが勝手に消したんですよ!cTraderさん!!
cTraderで使われてる.net framework4.0内では本来対応してない修飾子なので消えちゃうのかもしれませんが・・・いや、使えるんだったら消さないでくださいな。
まぁバグなんでしょうね。この他にもcTraderのAuto Format機能は不思議な挙動を示すことが多いため、あまりあてにしない方がいいです。
基本的にはVisualStudioでの編集及びビルドをお勧めします。(cTrader側でビルドボタンさえ押さなきゃ大丈夫です)