ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

以下のように、OrderSendで新規注文を行うプログラムを作成してみましたが、GetLastError()でエラー(4055)になってしまいます。
4055は、「カスタムインジケータエラー」とのことですが、どのように修正すればよいのか分かりません。
どうか、ご教示頂きたくよろしくお願い致します。
ちなみに、FXDD(デモ口座)のEURJPY(5分足)でテストしています。

bool EFlg=true;
int start()
{
if(EFlg)
{
EAticket = OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order #2",16384,0,Green);
if(EAticket < 0 )
Alert("Order Failed #",GetLastError());
else
Alert("OK!!");

EFlg = false;
}

return(0);
}

このQ&Aに関連する最新のQ&A

A 回答 (3件)

ANo.2 okw201114です



カスタムインジケータから使われたのでしょうか? お気づきになられて良かったです。

私も、ウェブ上にマニュアルの様なものを見つけ..
エラーコードには「トレード サーバーから返されるエラーコード」と「ランタイムエラー」があると知り..
関数ごとのエラーコード表で OrderSend は 4055 ~ 4111と「トレード サーバーから返されるエラーコード」があると知り..
エラーコードが 4055 のみの比較的仕様の小さいSleep()関数をみると..
「Sleep() 関数は、カスタム インディケータから呼び出すことはできません~」とありましたので^^;;
やっぱり英語は苦手です;;

http://www.metasys-seeker.net/MQL4_Reference_ver … <-- エラーコード【Error codes】
http://www.metasys-seeker.net/MQL4_Reference_ver … <-- ランタイムエラー【Runtime errors】
http://www.metasys-seeker.net/MQL4_Reference_ver … <-- 実行待機【Sleep】


PC関係だと長年のナントカがありますからw
そんな私でもネットなど下調べしてたり、参考もなしで実装はしません。
ぜひそうしてください。

業者によっては デモは 1 ロット指定とか、Modify でしか T/P, S/L 設定できない所もあるらしいのですが..



自作インジケータを持っているなんてすごいです。私は自作EAのトレードに呆然としてますまだまだですw


あとわからないとのことで参考になるかですが

ネット検索すると MT4 紹介や、EA/カスタムインジケータの作り方を紹介されているブロブなどがヒットします。

国内の http://jp.forex.com/jp/learn/mt4_expertadvisor.s … やあたりのリンクを読み倒す。というか国内業者はその辺強いかと。

カスタムインジケータ作成経験がおありならば、その場所の親フォルダの "experts" に MA や MACD を使ったサンプルEAがあるので、
テンプレートに使ったり、Tester したりデモで確認したりする。

MT4エディターで公開されているカスタムインジケータや EA を見つけられる。

カスタムインジケータを EA から使用する場合は iCustom 関数を使います。Tester で遅いらしい.. 


などなど、ただ鵜呑みようなことは危険だと思います。ハイリスクですよね

楽しかったですw
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

マニュアルのSleep関数には、カスタムインジケータから呼び出すことができないことが書いてあるんですね。
OrderSend関数にも書いてあれば、ここまではまらずに済んだかもしれないですね、はぁ…。

なるほど、iCustom関数でカスタムインジケータを使用できるんですね。
この関数は、カスタムインジケータから別のカスタムインジケータを使用する時に、利用したことがあります。
EAからカスタムインジケータを使用するイメージが出来てきました!
いろいろとご教示頂きありがとうございました。
回答内容を何度も読み返して、とても勉強になりました。

FXって、なんだか孤独だなぁと感じることもあり、そういう意味でも回答を頂けてとても嬉しかったです。
ブログで毎日デモ口座の負けトレードをアップしてますが、勝ちトレードをアップできるようにEAの勉強を頑張ろうと思います(笑)

ありがとうございました!

お礼日時:2011/07/16 21:27

ANo.1 okw201114です



EURJPY(5分足)ですね、80 でエラー(Order Failed #130 invalid stop) 90で OK!! となりました

S/L は数十Pips 離すと思うので 80Point(8Pips) でもなんとか、 でも Stop Level は 40 なのですが。


さて

OrderSend で エラー ”Order Failed #4055 custom indicator error” となる? <--実はこの辺から意味不明です..

4055 custom indicator error とは?

custom indicator とは 追加または自作インジケータのことですよね?

GetLastError() は最後に発生したエラー番号を返す仕様ですが、最後の発生したエラーが 4055 と言う事ですよね?


あなたに思い当たる事がないのであれば「システム障害」レベルと思うので、

まったくないのであればシステム障害とお考えになられた方が良いかと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
どうやら、基本的なところから間違えているのではないかと思い始めました。
今まで自分でインジケータを作成し表示させて、それを見て別のデモ口座でトレードしてました。
その自作のインジケータの中で自動発注はできないのか?というところから始まりまして、その自作のインジケータの中でOrderSendを実行してみたのです。
上手く発注されないので、余計な部分をすべて省いて、質問時のサンプルコードになりました。

が…、どうやら、自作のインジケータの中でOrderSendを実行すること自体が間違えなのでは?と。
いろいろ調べたところ、自作のインジケータではなく「Expert Advisors」を作成しなければいけないことが分かってきました。

ただ、自作のインジケータを表示し「Expert Advisors」で自動発注(OrderSend)するにはどうすればよいのかわかりません。
今後、まだまだ勉強しなければいけませんが、とりあえず、道は開けたような気がします。

okw201114さん、ありがとうございました!

お礼日時:2011/07/16 14:34

自分も勉強中なのでトライしてみました..


要は MarketInfo(Symbol(), MODE_STOPLEVEL) で離さなければいけない Point が見れます
結果は 40 でよいはずですが 60 までエラーが出て 70 で Ok でした
環境にも依存すると思うのですが? 念のため Point は 0.001 になります。
以下コピベで確認出来ると思います

#include <stdlib.mqh>
bool EFlg=true;
int start()
{
Comment("MODE_STOPLEVEL=",MarketInfo(Symbol(), MODE_STOPLEVEL), " Point=", Point);
if(EFlg)
{
int EAticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-70*Point,Ask+25*Point,"My order #2",16384,0,Green);
if(EAticket < 0 ){
int check=GetLastError();
Alert("Order Failed #",check, " ",ErrorDescription(check));
}else
Alert("OK!!");

EFlg = false;
}

return(0);
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
もう、誰も回答してもらえないのではないかと悲しく思っていたところでした!

早速、コピペしてやってみたのですが、結果は改善しませんでした…。
MODE_STOPLEVEL=40 Point=0.001
は、同じでした。
エラーは、以下のように。
Order Failed #4055 custom indicator error

70をさらに100に増やしたり、ロット数を1にしたり、スリッページを30にしたりもしましたが、ダメでした…。
環境の問題なのでしょうか…。
okw201114も、FXDD(デモ口座)のEURJPY(5分足)の環境でテストをされたのでしょうか?
現在も試行錯誤中ですので、また、アドバイスなどがありましたら、よろしくお願い致します。

お礼日時:2011/07/15 13:44

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q自分で作成したMT4のEAがバックテストでは動くのにデモで動きません

プログラムとか素人なのですが、独学で勉強してMT4のEAを作成しました。

Strategy Testerではちゃんと動くのですが、いざフォワードテストをと思いデモ口座で試してみたところ、売買のタイミングになってもEAが動いて売買してくれません。

ちなみにバックテストでは、こちらが売買して欲しいタイミングでちゃんと売買してくれるものが出来ました。(結果はダメダメの右肩下がりEAですが・・・)

ブローカーはFXDDとFXCM powered by BTのデモでやってみましたが、どちらでもダメでした。

ちなみにPan Rolling社から出ている「FXメタトレーダー入門」という本に載っているEAをプログラムをそのまま作ってみて試してみましたが、そのEAもデモでは動きませんでした。

ネットで無料で配布してあるような別の人が作ったEAではちゃんとデモ口座で売買してくれるので、私のプログラムの何かが悪いのだと思うのですが、バックテストは出来るけれど、フォワードテストが出来ないというのは何がおかしいと考えられますでしょうか?

Aベストアンサー

証券会社にもよるかもしれませんが、ひょっとしたら、デモ口座の有効期限が切れているとか。

QMT4で時間を指定するにはどのようにすれば良いでしょうか。

MT4で時間を指定するにはどのようにすれば良いでしょうか。

例えば、取引を日本時間で午前9時から午後3時の間に指定して、午後3時の時点で建て玉があった場合は手仕舞いできるようにしたいのです。

MT4付属EAの、MACD Sampleで時間指定する場合は、どのようなプログラムをどの位置に書けば良いのでしょうか。

時間指定をいろいろ変えてバックテストを行ってみたいと思っています。

プログラムは、トレードスタジアムで少しやった程度ですので、MT4のプログラムは初心者のレベルです。よろしくお願いします。

Aベストアンサー

回答が大変遅くなってごめんなさい。

実は、私も悩んでいました。

MACDのサンプルプログラムを下の方までよく読んでみると、マジックナンバーが16384となっているので、これに統一しなければ決済されません。

よって、私が書いた最初の部分で、

# define MAGIC 0001

という部分を、

# define MAGIC 16384

としていただければ、うまくいくかと思います。

一時やってみてください。

QFX:指定した時間の高値・安値を返すプログラムを教えてください。(MT4)

指定した時間の高値・安値を返すプログラムを教えてください。

具体的に言うと、、21時から23時の間の高値・安値です。

少し調べたところ、iHighest,iLowestやiBarSHiftの関数で値を出せると思ったのですが、
この関数では、指定の期間が、”現在から何本前の足から何本分の期間”といったように時刻で指定できないみたいで困っております。

※MT4を使用しております。

Aベストアンサー

ちょっと自信ありませんが、とりあえず作ってみました。
今、手元に、MT4がないので、コンパイルその他の実験をしておりません。エラー等ありましたら、どうかご容赦を。

double H=0; // 最高値を変数として宣言
double L=0; // 最安値を変数として宣言
int T = TimeHour(CurTime()); // 現在の時刻を変数として宣言

if(T!=23) // もしも現在が23時台でなければ、
{
H= High[iHighest(NULL,PERIOD_H1,MODE_HIGH,2,T+2)];
L= Low[iLowest(NULL,PERIOD_H1,MODE_LOW,2,T+2)];
}
else // もしも現在が23時台であれば、
{
H=High[iHighest(NULL,PERIOD_H1,MODE_HIGH,2,1)];
L=Low[iLowest(NULL,PERIOD_H1,MODE_LOW,2,1)];
}

ちなみに、TimeHour()関数については、以下のサイトで詳しく解説されておりました。

http://jidoubaibai.com/index.html

また、私は、ごく最近MT4の勉強をはじめたばかりで、質問者の方と同様、いろいろ苦労しております。

ちょっと自信ありませんが、とりあえず作ってみました。
今、手元に、MT4がないので、コンパイルその他の実験をしておりません。エラー等ありましたら、どうかご容赦を。

double H=0; // 最高値を変数として宣言
double L=0; // 最安値を変数として宣言
int T = TimeHour(CurTime()); // 現在の時刻を変数として宣言

if(T!=23) // もしも現在が23時台でなければ、
{
H= High[iHighest(NULL,PERIOD_H1,MODE_HIGH,2,T+2)];
L= Low[iLowest(NULL,PERIOD_H1,MODE_LOW,2,T+2)];
}
else // もしも現在...続きを読む

QMT4のEX4ファイルをMQ4ファイルに変換する無料ソフトを教えて下さ

MT4のEX4ファイルをMQ4ファイルに変換する無料ソフトを教えて下さい。

先日まではhttp://www.ex4tomq4.net/を使っていたのですが、変換しようとページを訪れるとUnder Constructionで、暫くこの状態が続いています。

で、他のソフトを探してみてhttp://www.greattradingsystems.com/2009/08/free-mt4-decompiler-ex4-to-mq4/でDecompiler EX4-TO-MQ4 4.0.215.6やMetaTrader 4 Ex4 Decompilerを試してみたのですが、どちらも使えませんでした。(前者はダウンロード後インストールしようとするとエラーになりインストール出来ない。後者はダウンロード後EX4ファイルをダブルクリックするとMQ4ファイルに変換するものですが、ダブルクリックしても何の変化もなく、読み取れないEX4ファイルが開くだけです。)

という訳で、ディコンパイラーならこれがお勧め、という無料ソフトがあったら教えて下さい。

宜しくお願いします。

MT4のEX4ファイルをMQ4ファイルに変換する無料ソフトを教えて下さい。

先日まではhttp://www.ex4tomq4.net/を使っていたのですが、変換しようとページを訪れるとUnder Constructionで、暫くこの状態が続いています。

で、他のソフトを探してみてhttp://www.greattradingsystems.com/2009/08/free-mt4-decompiler-ex4-to-mq4/でDecompiler EX4-TO-MQ4 4.0.215.6やMetaTrader 4 Ex4 Decompilerを試してみたのですが、どちらも使えませんでした。(前者はダウンロード後インストールしようとするとエラーになりイン...続きを読む

Aベストアンサー

基本的にはコンパイルされたex4ファイルのみで配布されているものは
mq4を見せたくないという公開者の意志がそこにありますので
それをデコンパイルするという行為は倫理的にグレーゾーンになりますし
公開者自身がそれを禁ずる旨の声明を出している場合は権利の侵害行為となります。
お探しのデコンパイラですが、上記のような理由でアンダーグラウンド的なツールであり
こういった公の場では質問する性質のものではないかもしれません。
感覚的には「デジタル映像のコピーガードをキャンセルする」というような行為と同様ということですね。

QMT4のStrategy Testerの取引種別の意味

メタトレーダーのStrategy TesterでEAを検証した結果タブ

取引種別に、『modify』と『close』という項目がありますが

イマイチ意味が分かりません。

ご存知の方、是非詳しい意味を教えて頂けないでしょうか?

よろしくお願い致します。

Aベストアンサー

回答がないようなので私が返答します。

modifyは注文を変更したとき。
metatraderでよく使うのは、追いかけ指値or逆指値をするときに使います。
closeは条件が成立してポジションが閉じられたとき。
ストップロス、トレイリングストップにかかったときではないです

Q【MQL4】ZigZagの天底の値の取得

最近MT4の入門書を買ってMQL4の勉強を始めた者です。よろしくお願いします。

EAでZigZagの天底を現在レートがブレイクアウトしたところでエントリーするシステムを作りたいのですが、ZigZagの頂点(底点)の値の取得の仕方がわかりません。

iCustomで標準搭載のZigZagを呼び出して条件式を書いてみましたが売買できませんでした。
(以下のような文です)

double zig = iCustom(NULL, 0,"ZigZag",12,5,3,0,0);

if(zig <Ask)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",0,0,Blue);
}

おそらく見当違いのことをしているのだとは思います。
私が知りたいことは以下の2点です。

1.一つ前のZigZagの頂点(底点)の値。
2.二つ前のZigZagの頂点(底点)の値。

どうかよろしくお願い致します。

Aベストアンサー

ZigZagの場合、頂点と頂点の間は空値が入っています。
ZigZagは頂点よりもその間を繋いでいる線の部分の方が圧倒的に多いです。ですからそのEAのiCustom関数はほとんどの場合、空値を返します。

さらにZigZagのmql文の中を見てみると34行目に
SetIndexEmptyValue(0,0.0);
http://www.metasys-seeker.net/MQL4_Reference_ver1/11-08_SetIndexEmptyValue.html
の一文が入っていることが分かりますよね。

これは空値を0.0に設定するという意味です。つまりそのiCustom関数ではほとんどの場合0が返されています。

SC11さんのEAではif文中で zig<Ask と書かれているので(以下略)。


低点の見つけ方ですが、私なら頂点を一つづつ探していき、一つ見つかったらその前後の頂点を探して、最初に見つけた頂点が次に見つけた2つの頂点の値より下回っていたら低点であるとします。
普通は見つかった順番に配列に入れておきます。こうするといくつ前の低点なのか分かりますしね。

ZigZagの場合、頂点と頂点の間は空値が入っています。
ZigZagは頂点よりもその間を繋いでいる線の部分の方が圧倒的に多いです。ですからそのEAのiCustom関数はほとんどの場合、空値を返します。

さらにZigZagのmql文の中を見てみると34行目に
SetIndexEmptyValue(0,0.0);
http://www.metasys-seeker.net/MQL4_Reference_ver1/11-08_SetIndexEmptyValue.html
の一文が入っていることが分かりますよね。

これは空値を0.0に設定するという意味です。つまりそのiCustom関数ではほとんどの場合0が返されています...続きを読む

QDMI、ADXの期間パラメータについて

FX投資を勉強中の者です。
テクニカルとして「DMI、ADX」を活用してみたいのですが、期間パラメータの設定で悩んでいます。
日足での活用を考えているのですが、「9日、14日」のいずれかが一般的なようです。

そこで同じく「DMI、ADX」を活用されている投資家の方に教えていただきたいのですが、
(1)DMIとADXの期間パラメータは同じにしたほうがよいでしょう?(例.両方14日)
(2)異なるパラメータ設定が推奨される場合どちらを長めにするのがよいでしょうか?

期間パラメータを短くするほど相場への感応度が上がることは理解していますが実際に活用されている方のご意見を伺いたいです。
どうかよろしくお願いします。

Aベストアンサー

色々な意見があるとは思いますが、マエストロFX、ビクトリーメソッドアドバンスの佐野氏の推奨は
ADXは9日間、DIは14日間になっていました。これはビクトリーメソッドアドバンスでの設定です。
参考にどうぞ。


人気Q&Aランキング