EAやサインツール製作には制約があります
EAやサインツールは、ロジック通りに24時間動き続けて自動売買してくれる便利な仕組みです。
その魅力に取り憑かれて多くのシステムトレーダーさんが日々活用されているのですが、ある程度市場に出回っているツールを試した方だと、「自分で作成したい」っていう欲がでてくるんですよね。
そしてツールのロジックですが、これは言語化できるものなら全て自動売買化が可能です。本当になんでも可能なんですが・・・
ボリンジャーバンドを自動売買化(言語化)すると・・
こんなところでロングするロジックです
まずローソク足の終値とボリンジャーバンドの-3σの値を比較します。
ローソク足の終値 < ボリンジャーバンドの-3σの値
という式が成り立てば、-3σにタッチした(抜けた)と判断できます。
-3σにタッチした(抜けた)状態でローソク足が確定したら、Highエントリーします。
次に水平線を自動売買化してみましょう
こちらの赤い水平線を数値化します
まず水平線をひいて、それをブレイクしたらエントリーというロジックであれば、先ほどのボリンジャーバンドの例と同じようにできますね。
簡単な例ですと、Highエントリーだったら・・・
ローソク足の終値 < 水平線が引いてある価格 とかでできちゃいます。あら簡単。
それでは次に、その水平線をひく作業を自動化する場合、どこに引くかの判断はどうしますか?
人間が見たらひと目で分かる「明らかに反発したところ」とか「明らかに抵抗線があるところ」・・・これって数値化できますか?
「明らかに反発」するというのは、上ヒゲはローソクの実体の何%だとそのように判断できるのでしょうか?
大陽線の後に大陰線がでて一気に押し返したら明らかに反発だけど、大陽線の後にローソク足10本かけてじわじわ下げた場合は反発ではない?
「明らかに反発」って言葉一つとっても、それは人間にとっては明らかだと判断できますが、全て数値で判断するプログラムにとっては「明らか」と判断するのが難しいんですね。
人が目で見ているものを数値に落とし込んで機械に理解させるのって実は凄く難しいんです。
トレンドラインも自動売買化は難しい
トレンドラインは始点と経過点が必要です。
始点はどこにしますか?という問題であれば、XXXX年XX月XX日以後の最安値、なんて言えるかもしれませんが、そこが最安値かどうかは、そのXX日からかなりの数のローソク足が経過しないとわかりません。
百歩譲って最安値を決めたとしましょう。じゃあ経過点はどこにしますか?
次の安値?安値の定義ってなんですか?その前の足と次の足より安値が低いローソク足?でもそんなのすぐ出てきますよ。そんな定義でトレンドラインひいたら即ブレイクですよ。
じゃあなかなかブレイクしない安値でひいたら?それは一生ブレイクしないなんの意味もないトレンドラインが引けますね。
えっ?トレンドラインはそのライン上でなんどもビタビターするから効いてるってわかるので何度もビタビタする線を引けばいいですって?
ビタビタってどれくらいの誤差を許すんですか?0pips?0.1pips?0.2pips?通貨によってボラが違うのにきっちり定数で決めちゃうんですか?
トレンドライン自体が、開始時間と(現時点での)終了時間を決めたうえで引き、その後ブレイクしたかを見るものなので、開始時間と終了時間を決めないことには自動的に引くことは不可能です。
では、開始時間と終了時間を自動的に決めるのはどうしたらいいですか?
皆さんはどうやってトレンドラインを引く開始時間と終了時間を決めていますか?
実は「適当」ではないでしょうか?
チャートの形で良いところで反発が何度か見られたからそこに線を引いてみました。
つまりそれって「適当」なんです。
ローソク足の実態は情報を持っていません
よくあるエントリー条件の1つに、「ローソク足のヒゲを除く実体が移動平均線から乖離したらエントリー」という条件があります。
この条件ですが、始値&終値と移動平均線の比較でしたらできるのですが、ローソク足の実体と移動平均線との比較だと実は実装することが出来ません。
例えば上の画像ですと、ローソク足の始値・終値は移動平均線から離れていますが、ローソク足の実体は移動平均線に触れています。
しかしこの実体はデータとして何も情報を持っておらず、MT4が四本値に沿って表示しているだけのものです。そのため、
上記の画像のようにチャートの縮尺を変えるとローソクの実体と移動平均線の角度や触れている面積は変化しますので、例え実装できたとしても不安定なロジックになってしまいます。
未来予測を入れちゃダメ
お客さんからのご要望の中には、たまに未来を予測する要求がはいってきます。まさに神の領域ですね。
例えば「トレンドの終わりかけで利確するように制作して下さい!」なんてご要望ですが、トレンドが終わるかどうかというものは「トレンドが終わってから」でないと判別ができません。
しかしそこを諦めきれず、なんとしてもトレンドの終わりを掴みたい!という人は、例えば上昇トレンド中に陰線が連続ででたり、レンジになったり、ローソク足パターンがでたり、長い上ヒゲがでたりしたら・・というとロジックを採用しようとします。
しかしですね、もしこのロジックでトレンドの終わりに対応しますと、上記画像の黄色い◯の箇所は全てトレンドの終わりとしてロジックは判断しますので、一番最初の◯で利確終了で、「全然上昇トレンドに乗れてない!思ってたのと違う!」ってなること間違いなしです。
なので制作ご依頼前に、ご自身のロジックに未来予測が含まれていないかの確認をお願いします。
販売するならコピー防止機能などが必要
自作のEAやインジケーターですが、完成して良い成績がでると、「あれ?これって売れるんじゃないの?」と考えることはよくあります。
販売に関してはFX-EAラボは賛成の立場ですし、実際に弊社に開発依頼をされて世に出ている有料インジケーターは100以上存在します。
しかしその時に気をつけたいのが「コピーをどうやって防ぐか」という部分です。
良い成績のEAやサインツールというのはそれ専門の商材屋がおり、コピー防止の機能が無いツールはあっという間にコピーされ、ヤフオクや自社サイトなどで配布されてあっという間に寿命を迎えてしまうのがオチです。
対策方法はいくつか存在しますが、詳しくはこちらで解説してあります。
MT4のUIから逸脱する機能もだめ
UIっていうのは、こういった見た目のことですね
上の画像はトラリピで有名なM2Jさんの注文画面ですが、プログラマーさんがどれだけ頑張ってもMT4では上記のようなグラフィカルな画面は作れません。そもそもMT4はとっても古いプログラムなのでビジュアル面の装飾機能が少なすぎるんです。
サインツールで使えるのはボタンに色付けるたりテキストボックス置いたりとかくらいでしょうかね。見た目がよくて使いやすいUI(ユーザーインターフェイス)っていうのはMT4ですとなかなか難しいです。
サインツール製作はそんな制約の中でおこなっているのですが、販売目的でサインツールを依頼してくるお客さんは見た目を派手にしてほしいとの注文が多いのですが、残念ながら無理なんです。
DLLやURLの許可はなんのため?
MT4の設定でこのような画面がありますね
MT4は他のサイトや外部のデータベースからデータをひっぱってくることがデフォルトではできません(禁止されています)。これはもし悪意のある人がMT4を外部からいじれるようにしたらいくらでも悪さできてしまうからです。
外部との通信を可能にするのが、DLLという「外部プログラム」との連携です。
DLLの中には通常の取引プログラムだけでなく、外部との通信を行うプログラムも書けます。
そして、「DLLの使用を許可する」にチェックをいれたら、外部との通信が行えるようになるのです。
それを使えば、MT4に保存されている口座情報や個人情報を外部データベースにアップロードすることもできます。
「WebRequestを許可するURLリスト」のチェック項目も似たようなものです。外部サイトにアクセスし、そこにある情報を拾ってきます。
悪意ある情報が書かれたサイトにアクセスするとDLLと同じように情報を抜き取られたり、無限に損をする売買シグナルを受信させられたりします。
なので個人営業のプログラマーや実績がない会社にツールの制作依頼は少々リスクが発生するのです。
実際のMQLコードはこんな感じです
MT4のプログラミング言語であるMQLはC言語がベースになっていますよ。